isl_rs/bindings/
qpolynomial.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use crate::bindings::{
5    Aff, Constraint, Context, DimType, Fold, Point, QPolynomialFold, Set, Space, Term, Val,
6};
7use libc::uintptr_t;
8use std::ffi::{CStr, CString};
9use std::os::raw::c_char;
10
11/// Wraps `isl_qpolynomial`.
12pub struct QPolynomial {
13    pub ptr: uintptr_t,
14    pub should_free_on_drop: bool,
15}
16
17extern "C" {
18
19    fn isl_qpolynomial_get_ctx(qp: uintptr_t) -> uintptr_t;
20
21    fn isl_qpolynomial_get_domain_space(qp: uintptr_t) -> uintptr_t;
22
23    fn isl_qpolynomial_get_space(qp: uintptr_t) -> uintptr_t;
24
25    fn isl_qpolynomial_dim(qp: uintptr_t, type_: DimType) -> i32;
26
27    fn isl_qpolynomial_involves_dims(qp: uintptr_t, type_: DimType, first: u32, n: u32) -> i32;
28
29    fn isl_qpolynomial_get_constant_val(qp: uintptr_t) -> uintptr_t;
30
31    fn isl_qpolynomial_set_dim_name(qp: uintptr_t, type_: DimType, pos: u32, s: *const c_char)
32                                    -> uintptr_t;
33
34    fn isl_qpolynomial_zero_on_domain(domain: uintptr_t) -> uintptr_t;
35
36    fn isl_qpolynomial_one_on_domain(domain: uintptr_t) -> uintptr_t;
37
38    fn isl_qpolynomial_infty_on_domain(domain: uintptr_t) -> uintptr_t;
39
40    fn isl_qpolynomial_neginfty_on_domain(domain: uintptr_t) -> uintptr_t;
41
42    fn isl_qpolynomial_nan_on_domain(domain: uintptr_t) -> uintptr_t;
43
44    fn isl_qpolynomial_val_on_domain(space: uintptr_t, val: uintptr_t) -> uintptr_t;
45
46    fn isl_qpolynomial_var_on_domain(domain: uintptr_t, type_: DimType, pos: u32) -> uintptr_t;
47
48    fn isl_qpolynomial_copy(qp: uintptr_t) -> uintptr_t;
49
50    fn isl_qpolynomial_free(qp: uintptr_t) -> uintptr_t;
51
52    fn isl_qpolynomial_plain_is_equal(qp1: uintptr_t, qp2: uintptr_t) -> i32;
53
54    fn isl_qpolynomial_is_zero(qp: uintptr_t) -> i32;
55
56    fn isl_qpolynomial_is_nan(qp: uintptr_t) -> i32;
57
58    fn isl_qpolynomial_is_infty(qp: uintptr_t) -> i32;
59
60    fn isl_qpolynomial_is_neginfty(qp: uintptr_t) -> i32;
61
62    fn isl_qpolynomial_sgn(qp: uintptr_t) -> i32;
63
64    fn isl_qpolynomial_neg(qp: uintptr_t) -> uintptr_t;
65
66    fn isl_qpolynomial_add(qp1: uintptr_t, qp2: uintptr_t) -> uintptr_t;
67
68    fn isl_qpolynomial_sub(qp1: uintptr_t, qp2: uintptr_t) -> uintptr_t;
69
70    fn isl_qpolynomial_mul(qp1: uintptr_t, qp2: uintptr_t) -> uintptr_t;
71
72    fn isl_qpolynomial_pow(qp: uintptr_t, power: u32) -> uintptr_t;
73
74    fn isl_qpolynomial_scale_val(qp: uintptr_t, v: uintptr_t) -> uintptr_t;
75
76    fn isl_qpolynomial_scale_down_val(qp: uintptr_t, v: uintptr_t) -> uintptr_t;
77
78    fn isl_qpolynomial_domain_reverse(qp: uintptr_t) -> uintptr_t;
79
80    fn isl_qpolynomial_insert_dims(qp: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
81
82    fn isl_qpolynomial_add_dims(qp: uintptr_t, type_: DimType, n: u32) -> uintptr_t;
83
84    fn isl_qpolynomial_move_dims(qp: uintptr_t, dst_type: DimType, dst_pos: u32,
85                                 src_type: DimType, src_pos: u32, n: u32)
86                                 -> uintptr_t;
87
88    fn isl_qpolynomial_project_domain_on_params(qp: uintptr_t) -> uintptr_t;
89
90    fn isl_qpolynomial_drop_dims(qp: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
91
92    fn isl_qpolynomial_homogenize(poly: uintptr_t) -> uintptr_t;
93
94    fn isl_qpolynomial_align_params(qp: uintptr_t, model: uintptr_t) -> uintptr_t;
95
96    fn isl_qpolynomial_eval(qp: uintptr_t, pnt: uintptr_t) -> uintptr_t;
97
98    fn isl_qpolynomial_gist_params(qp: uintptr_t, context: uintptr_t) -> uintptr_t;
99
100    fn isl_qpolynomial_gist(qp: uintptr_t, context: uintptr_t) -> uintptr_t;
101
102    fn isl_qpolynomial_from_constraint(c: uintptr_t, type_: DimType, pos: u32) -> uintptr_t;
103
104    fn isl_qpolynomial_from_term(term: uintptr_t) -> uintptr_t;
105
106    fn isl_qpolynomial_from_aff(aff: uintptr_t) -> uintptr_t;
107
108    fn isl_qpolynomial_isa_aff(qp: uintptr_t) -> i32;
109
110    fn isl_qpolynomial_as_aff(qp: uintptr_t) -> uintptr_t;
111
112    fn isl_qpolynomial_dump(qp: uintptr_t);
113
114    fn isl_qpolynomial_fold_get_ctx(fold: uintptr_t) -> uintptr_t;
115
116    fn isl_qpolynomial_fold_get_type(fold: uintptr_t) -> Fold;
117
118    fn isl_qpolynomial_fold_empty(type_: Fold, space: uintptr_t) -> uintptr_t;
119
120    fn isl_qpolynomial_fold_alloc(type_: Fold, qp: uintptr_t) -> uintptr_t;
121
122    fn isl_qpolynomial_fold_copy(fold: uintptr_t) -> uintptr_t;
123
124    fn isl_qpolynomial_fold_free(fold: uintptr_t) -> uintptr_t;
125
126    fn isl_qpolynomial_fold_is_empty(fold: uintptr_t) -> i32;
127
128    fn isl_qpolynomial_fold_is_nan(fold: uintptr_t) -> i32;
129
130    fn isl_qpolynomial_fold_plain_is_equal(fold1: uintptr_t, fold2: uintptr_t) -> i32;
131
132    fn isl_qpolynomial_fold_get_domain_space(fold: uintptr_t) -> uintptr_t;
133
134    fn isl_qpolynomial_fold_get_space(fold: uintptr_t) -> uintptr_t;
135
136    fn isl_qpolynomial_fold_fold(fold1: uintptr_t, fold2: uintptr_t) -> uintptr_t;
137
138    fn isl_qpolynomial_fold_scale_val(fold: uintptr_t, v: uintptr_t) -> uintptr_t;
139
140    fn isl_qpolynomial_fold_scale_down_val(fold: uintptr_t, v: uintptr_t) -> uintptr_t;
141
142    fn isl_qpolynomial_fold_move_dims(fold: uintptr_t, dst_type: DimType, dst_pos: u32,
143                                      src_type: DimType, src_pos: u32, n: u32)
144                                      -> uintptr_t;
145
146    fn isl_qpolynomial_fold_eval(fold: uintptr_t, pnt: uintptr_t) -> uintptr_t;
147
148    fn isl_qpolynomial_fold_gist_params(fold: uintptr_t, context: uintptr_t) -> uintptr_t;
149
150    fn isl_qpolynomial_fold_gist(fold: uintptr_t, context: uintptr_t) -> uintptr_t;
151
152    fn isl_qpolynomial_fold_dump(fold: uintptr_t);
153
154}
155
156impl QPolynomial {
157    /// Wraps `isl_qpolynomial_get_ctx`.
158    pub fn get_ctx(&self) -> Context {
159        let qp = self;
160        let qp = qp.ptr;
161        let isl_rs_result = unsafe { isl_qpolynomial_get_ctx(qp) };
162        let isl_rs_result = Context { ptr: isl_rs_result,
163                                      should_free_on_drop: true };
164        let mut isl_rs_result = isl_rs_result;
165        isl_rs_result.do_not_free_on_drop();
166        isl_rs_result
167    }
168
169    /// Wraps `isl_qpolynomial_get_domain_space`.
170    pub fn get_domain_space(&self) -> Space {
171        let qp = self;
172        let qp = qp.ptr;
173        let isl_rs_result = unsafe { isl_qpolynomial_get_domain_space(qp) };
174        let isl_rs_result = Space { ptr: isl_rs_result,
175                                    should_free_on_drop: true };
176        isl_rs_result
177    }
178
179    /// Wraps `isl_qpolynomial_get_space`.
180    pub fn get_space(&self) -> Space {
181        let qp = self;
182        let qp = qp.ptr;
183        let isl_rs_result = unsafe { isl_qpolynomial_get_space(qp) };
184        let isl_rs_result = Space { ptr: isl_rs_result,
185                                    should_free_on_drop: true };
186        isl_rs_result
187    }
188
189    /// Wraps `isl_qpolynomial_dim`.
190    pub fn dim(&self, type_: DimType) -> i32 {
191        let qp = self;
192        let qp = qp.ptr;
193        let isl_rs_result = unsafe { isl_qpolynomial_dim(qp, type_) };
194        isl_rs_result
195    }
196
197    /// Wraps `isl_qpolynomial_involves_dims`.
198    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> bool {
199        let qp = self;
200        let qp = qp.ptr;
201        let isl_rs_result = unsafe { isl_qpolynomial_involves_dims(qp, type_, first, n) };
202        let isl_rs_result = match isl_rs_result {
203            0 => false,
204            1 => true,
205            _ => panic!("Got isl_bool = -1"),
206        };
207        isl_rs_result
208    }
209
210    /// Wraps `isl_qpolynomial_get_constant_val`.
211    pub fn get_constant_val(&self) -> Val {
212        let qp = self;
213        let qp = qp.ptr;
214        let isl_rs_result = unsafe { isl_qpolynomial_get_constant_val(qp) };
215        let isl_rs_result = Val { ptr: isl_rs_result,
216                                  should_free_on_drop: true };
217        isl_rs_result
218    }
219
220    /// Wraps `isl_qpolynomial_set_dim_name`.
221    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> QPolynomial {
222        let qp = self;
223        let mut qp = qp;
224        qp.do_not_free_on_drop();
225        let qp = qp.ptr;
226        let s = CString::new(s).unwrap();
227        let s = s.as_ptr();
228        let isl_rs_result = unsafe { isl_qpolynomial_set_dim_name(qp, type_, pos, s) };
229        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
230                                          should_free_on_drop: true };
231        isl_rs_result
232    }
233
234    /// Wraps `isl_qpolynomial_zero_on_domain`.
235    pub fn zero_on_domain(domain: Space) -> QPolynomial {
236        let mut domain = domain;
237        domain.do_not_free_on_drop();
238        let domain = domain.ptr;
239        let isl_rs_result = unsafe { isl_qpolynomial_zero_on_domain(domain) };
240        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
241                                          should_free_on_drop: true };
242        isl_rs_result
243    }
244
245    /// Wraps `isl_qpolynomial_one_on_domain`.
246    pub fn one_on_domain(domain: Space) -> QPolynomial {
247        let mut domain = domain;
248        domain.do_not_free_on_drop();
249        let domain = domain.ptr;
250        let isl_rs_result = unsafe { isl_qpolynomial_one_on_domain(domain) };
251        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
252                                          should_free_on_drop: true };
253        isl_rs_result
254    }
255
256    /// Wraps `isl_qpolynomial_infty_on_domain`.
257    pub fn infty_on_domain(domain: Space) -> QPolynomial {
258        let mut domain = domain;
259        domain.do_not_free_on_drop();
260        let domain = domain.ptr;
261        let isl_rs_result = unsafe { isl_qpolynomial_infty_on_domain(domain) };
262        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
263                                          should_free_on_drop: true };
264        isl_rs_result
265    }
266
267    /// Wraps `isl_qpolynomial_neginfty_on_domain`.
268    pub fn neginfty_on_domain(domain: Space) -> QPolynomial {
269        let mut domain = domain;
270        domain.do_not_free_on_drop();
271        let domain = domain.ptr;
272        let isl_rs_result = unsafe { isl_qpolynomial_neginfty_on_domain(domain) };
273        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
274                                          should_free_on_drop: true };
275        isl_rs_result
276    }
277
278    /// Wraps `isl_qpolynomial_nan_on_domain`.
279    pub fn nan_on_domain(domain: Space) -> QPolynomial {
280        let mut domain = domain;
281        domain.do_not_free_on_drop();
282        let domain = domain.ptr;
283        let isl_rs_result = unsafe { isl_qpolynomial_nan_on_domain(domain) };
284        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
285                                          should_free_on_drop: true };
286        isl_rs_result
287    }
288
289    /// Wraps `isl_qpolynomial_val_on_domain`.
290    pub fn val_on_domain(space: Space, val: Val) -> QPolynomial {
291        let mut space = space;
292        space.do_not_free_on_drop();
293        let space = space.ptr;
294        let mut val = val;
295        val.do_not_free_on_drop();
296        let val = val.ptr;
297        let isl_rs_result = unsafe { isl_qpolynomial_val_on_domain(space, val) };
298        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
299                                          should_free_on_drop: true };
300        isl_rs_result
301    }
302
303    /// Wraps `isl_qpolynomial_var_on_domain`.
304    pub fn var_on_domain(domain: Space, type_: DimType, pos: u32) -> QPolynomial {
305        let mut domain = domain;
306        domain.do_not_free_on_drop();
307        let domain = domain.ptr;
308        let isl_rs_result = unsafe { isl_qpolynomial_var_on_domain(domain, type_, pos) };
309        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
310                                          should_free_on_drop: true };
311        isl_rs_result
312    }
313
314    /// Wraps `isl_qpolynomial_copy`.
315    pub fn copy(&self) -> QPolynomial {
316        let qp = self;
317        let qp = qp.ptr;
318        let isl_rs_result = unsafe { isl_qpolynomial_copy(qp) };
319        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
320                                          should_free_on_drop: true };
321        isl_rs_result
322    }
323
324    /// Wraps `isl_qpolynomial_free`.
325    pub fn free(self) -> QPolynomial {
326        let qp = self;
327        let mut qp = qp;
328        qp.do_not_free_on_drop();
329        let qp = qp.ptr;
330        let isl_rs_result = unsafe { isl_qpolynomial_free(qp) };
331        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
332                                          should_free_on_drop: true };
333        isl_rs_result
334    }
335
336    /// Wraps `isl_qpolynomial_plain_is_equal`.
337    pub fn plain_is_equal(&self, qp2: &QPolynomial) -> bool {
338        let qp1 = self;
339        let qp1 = qp1.ptr;
340        let qp2 = qp2.ptr;
341        let isl_rs_result = unsafe { isl_qpolynomial_plain_is_equal(qp1, qp2) };
342        let isl_rs_result = match isl_rs_result {
343            0 => false,
344            1 => true,
345            _ => panic!("Got isl_bool = -1"),
346        };
347        isl_rs_result
348    }
349
350    /// Wraps `isl_qpolynomial_is_zero`.
351    pub fn is_zero(&self) -> bool {
352        let qp = self;
353        let qp = qp.ptr;
354        let isl_rs_result = unsafe { isl_qpolynomial_is_zero(qp) };
355        let isl_rs_result = match isl_rs_result {
356            0 => false,
357            1 => true,
358            _ => panic!("Got isl_bool = -1"),
359        };
360        isl_rs_result
361    }
362
363    /// Wraps `isl_qpolynomial_is_nan`.
364    pub fn is_nan(&self) -> bool {
365        let qp = self;
366        let qp = qp.ptr;
367        let isl_rs_result = unsafe { isl_qpolynomial_is_nan(qp) };
368        let isl_rs_result = match isl_rs_result {
369            0 => false,
370            1 => true,
371            _ => panic!("Got isl_bool = -1"),
372        };
373        isl_rs_result
374    }
375
376    /// Wraps `isl_qpolynomial_is_infty`.
377    pub fn is_infty(&self) -> bool {
378        let qp = self;
379        let qp = qp.ptr;
380        let isl_rs_result = unsafe { isl_qpolynomial_is_infty(qp) };
381        let isl_rs_result = match isl_rs_result {
382            0 => false,
383            1 => true,
384            _ => panic!("Got isl_bool = -1"),
385        };
386        isl_rs_result
387    }
388
389    /// Wraps `isl_qpolynomial_is_neginfty`.
390    pub fn is_neginfty(&self) -> bool {
391        let qp = self;
392        let qp = qp.ptr;
393        let isl_rs_result = unsafe { isl_qpolynomial_is_neginfty(qp) };
394        let isl_rs_result = match isl_rs_result {
395            0 => false,
396            1 => true,
397            _ => panic!("Got isl_bool = -1"),
398        };
399        isl_rs_result
400    }
401
402    /// Wraps `isl_qpolynomial_sgn`.
403    pub fn sgn(&self) -> i32 {
404        let qp = self;
405        let qp = qp.ptr;
406        let isl_rs_result = unsafe { isl_qpolynomial_sgn(qp) };
407        isl_rs_result
408    }
409
410    /// Wraps `isl_qpolynomial_neg`.
411    pub fn neg(self) -> QPolynomial {
412        let qp = self;
413        let mut qp = qp;
414        qp.do_not_free_on_drop();
415        let qp = qp.ptr;
416        let isl_rs_result = unsafe { isl_qpolynomial_neg(qp) };
417        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
418                                          should_free_on_drop: true };
419        isl_rs_result
420    }
421
422    /// Wraps `isl_qpolynomial_add`.
423    pub fn add(self, qp2: QPolynomial) -> QPolynomial {
424        let qp1 = self;
425        let mut qp1 = qp1;
426        qp1.do_not_free_on_drop();
427        let qp1 = qp1.ptr;
428        let mut qp2 = qp2;
429        qp2.do_not_free_on_drop();
430        let qp2 = qp2.ptr;
431        let isl_rs_result = unsafe { isl_qpolynomial_add(qp1, qp2) };
432        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
433                                          should_free_on_drop: true };
434        isl_rs_result
435    }
436
437    /// Wraps `isl_qpolynomial_sub`.
438    pub fn sub(self, qp2: QPolynomial) -> QPolynomial {
439        let qp1 = self;
440        let mut qp1 = qp1;
441        qp1.do_not_free_on_drop();
442        let qp1 = qp1.ptr;
443        let mut qp2 = qp2;
444        qp2.do_not_free_on_drop();
445        let qp2 = qp2.ptr;
446        let isl_rs_result = unsafe { isl_qpolynomial_sub(qp1, qp2) };
447        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
448                                          should_free_on_drop: true };
449        isl_rs_result
450    }
451
452    /// Wraps `isl_qpolynomial_mul`.
453    pub fn mul(self, qp2: QPolynomial) -> QPolynomial {
454        let qp1 = self;
455        let mut qp1 = qp1;
456        qp1.do_not_free_on_drop();
457        let qp1 = qp1.ptr;
458        let mut qp2 = qp2;
459        qp2.do_not_free_on_drop();
460        let qp2 = qp2.ptr;
461        let isl_rs_result = unsafe { isl_qpolynomial_mul(qp1, qp2) };
462        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
463                                          should_free_on_drop: true };
464        isl_rs_result
465    }
466
467    /// Wraps `isl_qpolynomial_pow`.
468    pub fn pow(self, power: u32) -> QPolynomial {
469        let qp = self;
470        let mut qp = qp;
471        qp.do_not_free_on_drop();
472        let qp = qp.ptr;
473        let isl_rs_result = unsafe { isl_qpolynomial_pow(qp, power) };
474        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
475                                          should_free_on_drop: true };
476        isl_rs_result
477    }
478
479    /// Wraps `isl_qpolynomial_scale_val`.
480    pub fn scale_val(self, v: Val) -> QPolynomial {
481        let qp = self;
482        let mut qp = qp;
483        qp.do_not_free_on_drop();
484        let qp = qp.ptr;
485        let mut v = v;
486        v.do_not_free_on_drop();
487        let v = v.ptr;
488        let isl_rs_result = unsafe { isl_qpolynomial_scale_val(qp, v) };
489        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
490                                          should_free_on_drop: true };
491        isl_rs_result
492    }
493
494    /// Wraps `isl_qpolynomial_scale_down_val`.
495    pub fn scale_down_val(self, v: Val) -> QPolynomial {
496        let qp = self;
497        let mut qp = qp;
498        qp.do_not_free_on_drop();
499        let qp = qp.ptr;
500        let mut v = v;
501        v.do_not_free_on_drop();
502        let v = v.ptr;
503        let isl_rs_result = unsafe { isl_qpolynomial_scale_down_val(qp, v) };
504        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
505                                          should_free_on_drop: true };
506        isl_rs_result
507    }
508
509    /// Wraps `isl_qpolynomial_domain_reverse`.
510    pub fn domain_reverse(self) -> QPolynomial {
511        let qp = self;
512        let mut qp = qp;
513        qp.do_not_free_on_drop();
514        let qp = qp.ptr;
515        let isl_rs_result = unsafe { isl_qpolynomial_domain_reverse(qp) };
516        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
517                                          should_free_on_drop: true };
518        isl_rs_result
519    }
520
521    /// Wraps `isl_qpolynomial_insert_dims`.
522    pub fn insert_dims(self, type_: DimType, first: u32, n: u32) -> QPolynomial {
523        let qp = self;
524        let mut qp = qp;
525        qp.do_not_free_on_drop();
526        let qp = qp.ptr;
527        let isl_rs_result = unsafe { isl_qpolynomial_insert_dims(qp, type_, first, n) };
528        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
529                                          should_free_on_drop: true };
530        isl_rs_result
531    }
532
533    /// Wraps `isl_qpolynomial_add_dims`.
534    pub fn add_dims(self, type_: DimType, n: u32) -> QPolynomial {
535        let qp = self;
536        let mut qp = qp;
537        qp.do_not_free_on_drop();
538        let qp = qp.ptr;
539        let isl_rs_result = unsafe { isl_qpolynomial_add_dims(qp, type_, n) };
540        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
541                                          should_free_on_drop: true };
542        isl_rs_result
543    }
544
545    /// Wraps `isl_qpolynomial_move_dims`.
546    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
547                     n: u32)
548                     -> QPolynomial {
549        let qp = self;
550        let mut qp = qp;
551        qp.do_not_free_on_drop();
552        let qp = qp.ptr;
553        let isl_rs_result =
554            unsafe { isl_qpolynomial_move_dims(qp, dst_type, dst_pos, src_type, src_pos, n) };
555        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
556                                          should_free_on_drop: true };
557        isl_rs_result
558    }
559
560    /// Wraps `isl_qpolynomial_project_domain_on_params`.
561    pub fn project_domain_on_params(self) -> QPolynomial {
562        let qp = self;
563        let mut qp = qp;
564        qp.do_not_free_on_drop();
565        let qp = qp.ptr;
566        let isl_rs_result = unsafe { isl_qpolynomial_project_domain_on_params(qp) };
567        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
568                                          should_free_on_drop: true };
569        isl_rs_result
570    }
571
572    /// Wraps `isl_qpolynomial_drop_dims`.
573    pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> QPolynomial {
574        let qp = self;
575        let mut qp = qp;
576        qp.do_not_free_on_drop();
577        let qp = qp.ptr;
578        let isl_rs_result = unsafe { isl_qpolynomial_drop_dims(qp, type_, first, n) };
579        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
580                                          should_free_on_drop: true };
581        isl_rs_result
582    }
583
584    /// Wraps `isl_qpolynomial_homogenize`.
585    pub fn homogenize(self) -> QPolynomial {
586        let poly = self;
587        let mut poly = poly;
588        poly.do_not_free_on_drop();
589        let poly = poly.ptr;
590        let isl_rs_result = unsafe { isl_qpolynomial_homogenize(poly) };
591        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
592                                          should_free_on_drop: true };
593        isl_rs_result
594    }
595
596    /// Wraps `isl_qpolynomial_align_params`.
597    pub fn align_params(self, model: Space) -> QPolynomial {
598        let qp = self;
599        let mut qp = qp;
600        qp.do_not_free_on_drop();
601        let qp = qp.ptr;
602        let mut model = model;
603        model.do_not_free_on_drop();
604        let model = model.ptr;
605        let isl_rs_result = unsafe { isl_qpolynomial_align_params(qp, model) };
606        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
607                                          should_free_on_drop: true };
608        isl_rs_result
609    }
610
611    /// Wraps `isl_qpolynomial_eval`.
612    pub fn eval(self, pnt: Point) -> Val {
613        let qp = self;
614        let mut qp = qp;
615        qp.do_not_free_on_drop();
616        let qp = qp.ptr;
617        let mut pnt = pnt;
618        pnt.do_not_free_on_drop();
619        let pnt = pnt.ptr;
620        let isl_rs_result = unsafe { isl_qpolynomial_eval(qp, pnt) };
621        let isl_rs_result = Val { ptr: isl_rs_result,
622                                  should_free_on_drop: true };
623        isl_rs_result
624    }
625
626    /// Wraps `isl_qpolynomial_gist_params`.
627    pub fn gist_params(self, context: Set) -> QPolynomial {
628        let qp = self;
629        let mut qp = qp;
630        qp.do_not_free_on_drop();
631        let qp = qp.ptr;
632        let mut context = context;
633        context.do_not_free_on_drop();
634        let context = context.ptr;
635        let isl_rs_result = unsafe { isl_qpolynomial_gist_params(qp, context) };
636        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
637                                          should_free_on_drop: true };
638        isl_rs_result
639    }
640
641    /// Wraps `isl_qpolynomial_gist`.
642    pub fn gist(self, context: Set) -> QPolynomial {
643        let qp = self;
644        let mut qp = qp;
645        qp.do_not_free_on_drop();
646        let qp = qp.ptr;
647        let mut context = context;
648        context.do_not_free_on_drop();
649        let context = context.ptr;
650        let isl_rs_result = unsafe { isl_qpolynomial_gist(qp, context) };
651        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
652                                          should_free_on_drop: true };
653        isl_rs_result
654    }
655
656    /// Wraps `isl_qpolynomial_from_constraint`.
657    pub fn from_constraint(c: Constraint, type_: DimType, pos: u32) -> QPolynomial {
658        let mut c = c;
659        c.do_not_free_on_drop();
660        let c = c.ptr;
661        let isl_rs_result = unsafe { isl_qpolynomial_from_constraint(c, type_, pos) };
662        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
663                                          should_free_on_drop: true };
664        isl_rs_result
665    }
666
667    /// Wraps `isl_qpolynomial_from_term`.
668    pub fn from_term(term: Term) -> QPolynomial {
669        let mut term = term;
670        term.do_not_free_on_drop();
671        let term = term.ptr;
672        let isl_rs_result = unsafe { isl_qpolynomial_from_term(term) };
673        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
674                                          should_free_on_drop: true };
675        isl_rs_result
676    }
677
678    /// Wraps `isl_qpolynomial_from_aff`.
679    pub fn from_aff(aff: Aff) -> QPolynomial {
680        let mut aff = aff;
681        aff.do_not_free_on_drop();
682        let aff = aff.ptr;
683        let isl_rs_result = unsafe { isl_qpolynomial_from_aff(aff) };
684        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
685                                          should_free_on_drop: true };
686        isl_rs_result
687    }
688
689    /// Wraps `isl_qpolynomial_isa_aff`.
690    pub fn isa_aff(&self) -> bool {
691        let qp = self;
692        let qp = qp.ptr;
693        let isl_rs_result = unsafe { isl_qpolynomial_isa_aff(qp) };
694        let isl_rs_result = match isl_rs_result {
695            0 => false,
696            1 => true,
697            _ => panic!("Got isl_bool = -1"),
698        };
699        isl_rs_result
700    }
701
702    /// Wraps `isl_qpolynomial_as_aff`.
703    pub fn as_aff(self) -> Aff {
704        let qp = self;
705        let mut qp = qp;
706        qp.do_not_free_on_drop();
707        let qp = qp.ptr;
708        let isl_rs_result = unsafe { isl_qpolynomial_as_aff(qp) };
709        let isl_rs_result = Aff { ptr: isl_rs_result,
710                                  should_free_on_drop: true };
711        isl_rs_result
712    }
713
714    /// Wraps `isl_qpolynomial_dump`.
715    pub fn dump(&self) {
716        let qp = self;
717        let qp = qp.ptr;
718        let isl_rs_result = unsafe { isl_qpolynomial_dump(qp) };
719        isl_rs_result
720    }
721
722    /// Wraps `isl_qpolynomial_fold_get_ctx`.
723    pub fn fold_get_ctx(fold: &QPolynomialFold) -> Context {
724        let fold = fold.ptr;
725        let isl_rs_result = unsafe { isl_qpolynomial_fold_get_ctx(fold) };
726        let isl_rs_result = Context { ptr: isl_rs_result,
727                                      should_free_on_drop: true };
728        let mut isl_rs_result = isl_rs_result;
729        isl_rs_result.do_not_free_on_drop();
730        isl_rs_result
731    }
732
733    /// Wraps `isl_qpolynomial_fold_get_type`.
734    pub fn fold_get_type(fold: &QPolynomialFold) -> Fold {
735        let fold = fold.ptr;
736        let isl_rs_result = unsafe { isl_qpolynomial_fold_get_type(fold) };
737        isl_rs_result
738    }
739
740    /// Wraps `isl_qpolynomial_fold_empty`.
741    pub fn fold_empty(type_: Fold, space: Space) -> QPolynomialFold {
742        let mut space = space;
743        space.do_not_free_on_drop();
744        let space = space.ptr;
745        let isl_rs_result = unsafe { isl_qpolynomial_fold_empty(type_, space) };
746        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
747                                              should_free_on_drop: true };
748        isl_rs_result
749    }
750
751    /// Wraps `isl_qpolynomial_fold_alloc`.
752    pub fn fold_alloc(type_: Fold, qp: QPolynomial) -> QPolynomialFold {
753        let mut qp = qp;
754        qp.do_not_free_on_drop();
755        let qp = qp.ptr;
756        let isl_rs_result = unsafe { isl_qpolynomial_fold_alloc(type_, qp) };
757        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
758                                              should_free_on_drop: true };
759        isl_rs_result
760    }
761
762    /// Wraps `isl_qpolynomial_fold_copy`.
763    pub fn fold_copy(fold: &QPolynomialFold) -> QPolynomialFold {
764        let fold = fold.ptr;
765        let isl_rs_result = unsafe { isl_qpolynomial_fold_copy(fold) };
766        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
767                                              should_free_on_drop: true };
768        isl_rs_result
769    }
770
771    /// Wraps `isl_qpolynomial_fold_free`.
772    pub fn fold_free(fold: QPolynomialFold) -> QPolynomialFold {
773        let mut fold = fold;
774        fold.do_not_free_on_drop();
775        let fold = fold.ptr;
776        let isl_rs_result = unsafe { isl_qpolynomial_fold_free(fold) };
777        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
778                                              should_free_on_drop: true };
779        isl_rs_result
780    }
781
782    /// Wraps `isl_qpolynomial_fold_is_empty`.
783    pub fn fold_is_empty(fold: &QPolynomialFold) -> bool {
784        let fold = fold.ptr;
785        let isl_rs_result = unsafe { isl_qpolynomial_fold_is_empty(fold) };
786        let isl_rs_result = match isl_rs_result {
787            0 => false,
788            1 => true,
789            _ => panic!("Got isl_bool = -1"),
790        };
791        isl_rs_result
792    }
793
794    /// Wraps `isl_qpolynomial_fold_is_nan`.
795    pub fn fold_is_nan(fold: &QPolynomialFold) -> bool {
796        let fold = fold.ptr;
797        let isl_rs_result = unsafe { isl_qpolynomial_fold_is_nan(fold) };
798        let isl_rs_result = match isl_rs_result {
799            0 => false,
800            1 => true,
801            _ => panic!("Got isl_bool = -1"),
802        };
803        isl_rs_result
804    }
805
806    /// Wraps `isl_qpolynomial_fold_plain_is_equal`.
807    pub fn fold_plain_is_equal(fold1: &QPolynomialFold, fold2: &QPolynomialFold) -> bool {
808        let fold1 = fold1.ptr;
809        let fold2 = fold2.ptr;
810        let isl_rs_result = unsafe { isl_qpolynomial_fold_plain_is_equal(fold1, fold2) };
811        let isl_rs_result = match isl_rs_result {
812            0 => false,
813            1 => true,
814            _ => panic!("Got isl_bool = -1"),
815        };
816        isl_rs_result
817    }
818
819    /// Wraps `isl_qpolynomial_fold_get_domain_space`.
820    pub fn fold_get_domain_space(fold: &QPolynomialFold) -> Space {
821        let fold = fold.ptr;
822        let isl_rs_result = unsafe { isl_qpolynomial_fold_get_domain_space(fold) };
823        let isl_rs_result = Space { ptr: isl_rs_result,
824                                    should_free_on_drop: true };
825        isl_rs_result
826    }
827
828    /// Wraps `isl_qpolynomial_fold_get_space`.
829    pub fn fold_get_space(fold: &QPolynomialFold) -> Space {
830        let fold = fold.ptr;
831        let isl_rs_result = unsafe { isl_qpolynomial_fold_get_space(fold) };
832        let isl_rs_result = Space { ptr: isl_rs_result,
833                                    should_free_on_drop: true };
834        isl_rs_result
835    }
836
837    /// Wraps `isl_qpolynomial_fold_fold`.
838    pub fn fold_fold(fold1: QPolynomialFold, fold2: QPolynomialFold) -> QPolynomialFold {
839        let mut fold1 = fold1;
840        fold1.do_not_free_on_drop();
841        let fold1 = fold1.ptr;
842        let mut fold2 = fold2;
843        fold2.do_not_free_on_drop();
844        let fold2 = fold2.ptr;
845        let isl_rs_result = unsafe { isl_qpolynomial_fold_fold(fold1, fold2) };
846        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
847                                              should_free_on_drop: true };
848        isl_rs_result
849    }
850
851    /// Wraps `isl_qpolynomial_fold_scale_val`.
852    pub fn fold_scale_val(fold: QPolynomialFold, v: Val) -> QPolynomialFold {
853        let mut fold = fold;
854        fold.do_not_free_on_drop();
855        let fold = fold.ptr;
856        let mut v = v;
857        v.do_not_free_on_drop();
858        let v = v.ptr;
859        let isl_rs_result = unsafe { isl_qpolynomial_fold_scale_val(fold, v) };
860        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
861                                              should_free_on_drop: true };
862        isl_rs_result
863    }
864
865    /// Wraps `isl_qpolynomial_fold_scale_down_val`.
866    pub fn fold_scale_down_val(fold: QPolynomialFold, v: Val) -> QPolynomialFold {
867        let mut fold = fold;
868        fold.do_not_free_on_drop();
869        let fold = fold.ptr;
870        let mut v = v;
871        v.do_not_free_on_drop();
872        let v = v.ptr;
873        let isl_rs_result = unsafe { isl_qpolynomial_fold_scale_down_val(fold, v) };
874        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
875                                              should_free_on_drop: true };
876        isl_rs_result
877    }
878
879    /// Wraps `isl_qpolynomial_fold_move_dims`.
880    pub fn fold_move_dims(fold: QPolynomialFold, dst_type: DimType, dst_pos: u32,
881                          src_type: DimType, src_pos: u32, n: u32)
882                          -> QPolynomialFold {
883        let mut fold = fold;
884        fold.do_not_free_on_drop();
885        let fold = fold.ptr;
886        let isl_rs_result = unsafe {
887            isl_qpolynomial_fold_move_dims(fold, dst_type, dst_pos, src_type, src_pos, n)
888        };
889        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
890                                              should_free_on_drop: true };
891        isl_rs_result
892    }
893
894    /// Wraps `isl_qpolynomial_fold_eval`.
895    pub fn fold_eval(fold: QPolynomialFold, pnt: Point) -> Val {
896        let mut fold = fold;
897        fold.do_not_free_on_drop();
898        let fold = fold.ptr;
899        let mut pnt = pnt;
900        pnt.do_not_free_on_drop();
901        let pnt = pnt.ptr;
902        let isl_rs_result = unsafe { isl_qpolynomial_fold_eval(fold, pnt) };
903        let isl_rs_result = Val { ptr: isl_rs_result,
904                                  should_free_on_drop: true };
905        isl_rs_result
906    }
907
908    /// Wraps `isl_qpolynomial_fold_gist_params`.
909    pub fn fold_gist_params(fold: QPolynomialFold, context: Set) -> QPolynomialFold {
910        let mut fold = fold;
911        fold.do_not_free_on_drop();
912        let fold = fold.ptr;
913        let mut context = context;
914        context.do_not_free_on_drop();
915        let context = context.ptr;
916        let isl_rs_result = unsafe { isl_qpolynomial_fold_gist_params(fold, context) };
917        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
918                                              should_free_on_drop: true };
919        isl_rs_result
920    }
921
922    /// Wraps `isl_qpolynomial_fold_gist`.
923    pub fn fold_gist(fold: QPolynomialFold, context: Set) -> QPolynomialFold {
924        let mut fold = fold;
925        fold.do_not_free_on_drop();
926        let fold = fold.ptr;
927        let mut context = context;
928        context.do_not_free_on_drop();
929        let context = context.ptr;
930        let isl_rs_result = unsafe { isl_qpolynomial_fold_gist(fold, context) };
931        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
932                                              should_free_on_drop: true };
933        isl_rs_result
934    }
935
936    /// Wraps `isl_qpolynomial_fold_dump`.
937    pub fn fold_dump(fold: &QPolynomialFold) {
938        let fold = fold.ptr;
939        let isl_rs_result = unsafe { isl_qpolynomial_fold_dump(fold) };
940        isl_rs_result
941    }
942
943    /// Does not call isl_xxx_free() on being dropped. (For internal use only.)
944    pub fn do_not_free_on_drop(&mut self) {
945        self.should_free_on_drop = false;
946    }
947}
948
949impl Drop for QPolynomial {
950    fn drop(&mut self) {
951        if self.should_free_on_drop {
952            unsafe {
953                isl_qpolynomial_free(self.ptr);
954            }
955        }
956    }
957}