isl_rs/bindings/
pw_qpolynomial.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Context, DimType, Error, Id, LibISLError, Point, PwAff, PwQPolynomialList, QPolynomial, Set,
6    Space, UnionPwQPolynomial, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12/// Wraps `isl_pw_qpolynomial`.
13pub struct PwQPolynomial {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_pw_qpolynomial_add(pwqp1: uintptr_t, pwqp2: uintptr_t) -> uintptr_t;
21
22    fn isl_pw_qpolynomial_add_dims(pwqp: uintptr_t, type_: i32, n: u32) -> uintptr_t;
23
24    fn isl_pw_qpolynomial_add_disjoint(pwqp1: uintptr_t, pwqp2: uintptr_t) -> uintptr_t;
25
26    fn isl_pw_qpolynomial_alloc(set: uintptr_t, qp: uintptr_t) -> uintptr_t;
27
28    fn isl_pw_qpolynomial_as_qpolynomial(pwqp: uintptr_t) -> uintptr_t;
29
30    fn isl_pw_qpolynomial_coalesce(pwqp: uintptr_t) -> uintptr_t;
31
32    fn isl_pw_qpolynomial_copy(pwqp: uintptr_t) -> uintptr_t;
33
34    fn isl_pw_qpolynomial_dim(pwqp: uintptr_t, type_: i32) -> i32;
35
36    fn isl_pw_qpolynomial_domain(pwqp: uintptr_t) -> uintptr_t;
37
38    fn isl_pw_qpolynomial_domain_reverse(pwqp: uintptr_t) -> uintptr_t;
39
40    fn isl_pw_qpolynomial_drop_dims(pwqp: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
41
42    fn isl_pw_qpolynomial_drop_unused_params(pwqp: uintptr_t) -> uintptr_t;
43
44    fn isl_pw_qpolynomial_dump(pwqp: uintptr_t) -> ();
45
46    fn isl_pw_qpolynomial_eval(pwqp: uintptr_t, pnt: uintptr_t) -> uintptr_t;
47
48    fn isl_pw_qpolynomial_find_dim_by_name(pwqp: uintptr_t, type_: i32, name: *const c_char)
49                                           -> i32;
50
51    fn isl_pw_qpolynomial_fix_val(pwqp: uintptr_t, type_: i32, n: u32, v: uintptr_t) -> uintptr_t;
52
53    fn isl_pw_qpolynomial_free(pwqp: uintptr_t) -> uintptr_t;
54
55    fn isl_pw_qpolynomial_from_pw_aff(pwaff: uintptr_t) -> uintptr_t;
56
57    fn isl_pw_qpolynomial_from_qpolynomial(qp: uintptr_t) -> uintptr_t;
58
59    fn isl_pw_qpolynomial_from_range(pwqp: uintptr_t) -> uintptr_t;
60
61    fn isl_pw_qpolynomial_get_ctx(pwqp: uintptr_t) -> uintptr_t;
62
63    fn isl_pw_qpolynomial_get_domain_space(pwqp: uintptr_t) -> uintptr_t;
64
65    fn isl_pw_qpolynomial_get_space(pwqp: uintptr_t) -> uintptr_t;
66
67    fn isl_pw_qpolynomial_gist(pwqp: uintptr_t, context: uintptr_t) -> uintptr_t;
68
69    fn isl_pw_qpolynomial_gist_params(pwqp: uintptr_t, context: uintptr_t) -> uintptr_t;
70
71    fn isl_pw_qpolynomial_has_equal_space(pwqp1: uintptr_t, pwqp2: uintptr_t) -> i32;
72
73    fn isl_pw_qpolynomial_insert_dims(pwqp: uintptr_t, type_: i32, first: u32, n: u32)
74                                      -> uintptr_t;
75
76    fn isl_pw_qpolynomial_intersect_domain(pwpq: uintptr_t, set: uintptr_t) -> uintptr_t;
77
78    fn isl_pw_qpolynomial_intersect_domain_wrapped_domain(pwpq: uintptr_t, set: uintptr_t)
79                                                          -> uintptr_t;
80
81    fn isl_pw_qpolynomial_intersect_domain_wrapped_range(pwpq: uintptr_t, set: uintptr_t)
82                                                         -> uintptr_t;
83
84    fn isl_pw_qpolynomial_intersect_params(pwpq: uintptr_t, set: uintptr_t) -> uintptr_t;
85
86    fn isl_pw_qpolynomial_involves_dims(pwqp: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
87
88    fn isl_pw_qpolynomial_involves_nan(pwqp: uintptr_t) -> i32;
89
90    fn isl_pw_qpolynomial_involves_param_id(pwqp: uintptr_t, id: uintptr_t) -> i32;
91
92    fn isl_pw_qpolynomial_is_zero(pwqp: uintptr_t) -> i32;
93
94    fn isl_pw_qpolynomial_isa_qpolynomial(pwqp: uintptr_t) -> i32;
95
96    fn isl_pw_qpolynomial_max(pwqp: uintptr_t) -> uintptr_t;
97
98    fn isl_pw_qpolynomial_min(pwqp: uintptr_t) -> uintptr_t;
99
100    fn isl_pw_qpolynomial_move_dims(pwqp: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32,
101                                    src_pos: u32, n: u32)
102                                    -> uintptr_t;
103
104    fn isl_pw_qpolynomial_mul(pwqp1: uintptr_t, pwqp2: uintptr_t) -> uintptr_t;
105
106    fn isl_pw_qpolynomial_n_piece(pwqp: uintptr_t) -> i32;
107
108    fn isl_pw_qpolynomial_neg(pwqp: uintptr_t) -> uintptr_t;
109
110    fn isl_pw_qpolynomial_plain_is_equal(pwqp1: uintptr_t, pwqp2: uintptr_t) -> i32;
111
112    fn isl_pw_qpolynomial_pow(pwqp: uintptr_t, exponent: u32) -> uintptr_t;
113
114    fn isl_pw_qpolynomial_project_domain_on_params(pwqp: uintptr_t) -> uintptr_t;
115
116    fn isl_pw_qpolynomial_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
117
118    fn isl_pw_qpolynomial_reset_domain_space(pwqp: uintptr_t, space: uintptr_t) -> uintptr_t;
119
120    fn isl_pw_qpolynomial_reset_user(pwqp: uintptr_t) -> uintptr_t;
121
122    fn isl_pw_qpolynomial_scale_down_val(pwqp: uintptr_t, v: uintptr_t) -> uintptr_t;
123
124    fn isl_pw_qpolynomial_scale_val(pwqp: uintptr_t, v: uintptr_t) -> uintptr_t;
125
126    fn isl_pw_qpolynomial_set_dim_name(pwqp: uintptr_t, type_: i32, pos: u32, s: *const c_char)
127                                       -> uintptr_t;
128
129    fn isl_pw_qpolynomial_split_dims(pwqp: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
130
131    fn isl_pw_qpolynomial_split_periods(pwqp: uintptr_t, max_periods: i32) -> uintptr_t;
132
133    fn isl_pw_qpolynomial_sub(pwqp1: uintptr_t, pwqp2: uintptr_t) -> uintptr_t;
134
135    fn isl_pw_qpolynomial_subtract_domain(pwpq: uintptr_t, set: uintptr_t) -> uintptr_t;
136
137    fn isl_pw_qpolynomial_to_list(el: uintptr_t) -> uintptr_t;
138
139    fn isl_pw_qpolynomial_to_polynomial(pwqp: uintptr_t, sign: i32) -> uintptr_t;
140
141    fn isl_pw_qpolynomial_to_str(pwqp: uintptr_t) -> *const c_char;
142
143    fn isl_pw_qpolynomial_to_union_pw_qpolynomial(pwqp: uintptr_t) -> uintptr_t;
144
145    fn isl_pw_qpolynomial_zero(space: uintptr_t) -> uintptr_t;
146
147}
148
149impl PwQPolynomial {
150    /// Wraps `isl_pw_qpolynomial_add`.
151    pub fn add(self, pwqp2: PwQPolynomial) -> Result<PwQPolynomial, LibISLError> {
152        let pwqp1 = self;
153        let isl_rs_ctx = pwqp1.get_ctx();
154        let mut pwqp1 = pwqp1;
155        pwqp1.do_not_free_on_drop();
156        let pwqp1 = pwqp1.ptr;
157        let mut pwqp2 = pwqp2;
158        pwqp2.do_not_free_on_drop();
159        let pwqp2 = pwqp2.ptr;
160        let isl_rs_result = unsafe { isl_pw_qpolynomial_add(pwqp1, pwqp2) };
161        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
162                                            should_free_on_drop: true };
163        let err = isl_rs_ctx.last_error();
164        if err != Error::None_ {
165            let err_msg = isl_rs_ctx.last_error_msg();
166            isl_rs_ctx.reset_error();
167            return Err(LibISLError::new(err, err_msg));
168        }
169        Ok(isl_rs_result)
170    }
171
172    /// Wraps `isl_pw_qpolynomial_add_dims`.
173    pub fn add_dims(self, type_: DimType, n: u32) -> Result<PwQPolynomial, LibISLError> {
174        let pwqp = self;
175        let isl_rs_ctx = pwqp.get_ctx();
176        let mut pwqp = pwqp;
177        pwqp.do_not_free_on_drop();
178        let pwqp = pwqp.ptr;
179        let type_ = type_.to_i32();
180        let isl_rs_result = unsafe { isl_pw_qpolynomial_add_dims(pwqp, type_, n) };
181        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
182                                            should_free_on_drop: true };
183        let err = isl_rs_ctx.last_error();
184        if err != Error::None_ {
185            let err_msg = isl_rs_ctx.last_error_msg();
186            isl_rs_ctx.reset_error();
187            return Err(LibISLError::new(err, err_msg));
188        }
189        Ok(isl_rs_result)
190    }
191
192    /// Wraps `isl_pw_qpolynomial_add_disjoint`.
193    pub fn add_disjoint(self, pwqp2: PwQPolynomial) -> Result<PwQPolynomial, LibISLError> {
194        let pwqp1 = self;
195        let isl_rs_ctx = pwqp1.get_ctx();
196        let mut pwqp1 = pwqp1;
197        pwqp1.do_not_free_on_drop();
198        let pwqp1 = pwqp1.ptr;
199        let mut pwqp2 = pwqp2;
200        pwqp2.do_not_free_on_drop();
201        let pwqp2 = pwqp2.ptr;
202        let isl_rs_result = unsafe { isl_pw_qpolynomial_add_disjoint(pwqp1, pwqp2) };
203        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
204                                            should_free_on_drop: true };
205        let err = isl_rs_ctx.last_error();
206        if err != Error::None_ {
207            let err_msg = isl_rs_ctx.last_error_msg();
208            isl_rs_ctx.reset_error();
209            return Err(LibISLError::new(err, err_msg));
210        }
211        Ok(isl_rs_result)
212    }
213
214    /// Wraps `isl_pw_qpolynomial_alloc`.
215    pub fn alloc(set: Set, qp: QPolynomial) -> Result<PwQPolynomial, LibISLError> {
216        let isl_rs_ctx = set.get_ctx();
217        let mut set = set;
218        set.do_not_free_on_drop();
219        let set = set.ptr;
220        let mut qp = qp;
221        qp.do_not_free_on_drop();
222        let qp = qp.ptr;
223        let isl_rs_result = unsafe { isl_pw_qpolynomial_alloc(set, qp) };
224        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
225                                            should_free_on_drop: true };
226        let err = isl_rs_ctx.last_error();
227        if err != Error::None_ {
228            let err_msg = isl_rs_ctx.last_error_msg();
229            isl_rs_ctx.reset_error();
230            return Err(LibISLError::new(err, err_msg));
231        }
232        Ok(isl_rs_result)
233    }
234
235    /// Wraps `isl_pw_qpolynomial_as_qpolynomial`.
236    pub fn as_qpolynomial(self) -> Result<QPolynomial, LibISLError> {
237        let pwqp = self;
238        let isl_rs_ctx = pwqp.get_ctx();
239        let mut pwqp = pwqp;
240        pwqp.do_not_free_on_drop();
241        let pwqp = pwqp.ptr;
242        let isl_rs_result = unsafe { isl_pw_qpolynomial_as_qpolynomial(pwqp) };
243        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
244                                          should_free_on_drop: true };
245        let err = isl_rs_ctx.last_error();
246        if err != Error::None_ {
247            let err_msg = isl_rs_ctx.last_error_msg();
248            isl_rs_ctx.reset_error();
249            return Err(LibISLError::new(err, err_msg));
250        }
251        Ok(isl_rs_result)
252    }
253
254    /// Wraps `isl_pw_qpolynomial_coalesce`.
255    pub fn coalesce(self) -> Result<PwQPolynomial, LibISLError> {
256        let pwqp = self;
257        let isl_rs_ctx = pwqp.get_ctx();
258        let mut pwqp = pwqp;
259        pwqp.do_not_free_on_drop();
260        let pwqp = pwqp.ptr;
261        let isl_rs_result = unsafe { isl_pw_qpolynomial_coalesce(pwqp) };
262        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
263                                            should_free_on_drop: true };
264        let err = isl_rs_ctx.last_error();
265        if err != Error::None_ {
266            let err_msg = isl_rs_ctx.last_error_msg();
267            isl_rs_ctx.reset_error();
268            return Err(LibISLError::new(err, err_msg));
269        }
270        Ok(isl_rs_result)
271    }
272
273    /// Wraps `isl_pw_qpolynomial_copy`.
274    pub fn copy(&self) -> Result<PwQPolynomial, LibISLError> {
275        let pwqp = self;
276        let isl_rs_ctx = pwqp.get_ctx();
277        let pwqp = pwqp.ptr;
278        let isl_rs_result = unsafe { isl_pw_qpolynomial_copy(pwqp) };
279        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
280                                            should_free_on_drop: true };
281        let err = isl_rs_ctx.last_error();
282        if err != Error::None_ {
283            let err_msg = isl_rs_ctx.last_error_msg();
284            isl_rs_ctx.reset_error();
285            return Err(LibISLError::new(err, err_msg));
286        }
287        Ok(isl_rs_result)
288    }
289
290    /// Wraps `isl_pw_qpolynomial_dim`.
291    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
292        let pwqp = self;
293        let isl_rs_ctx = pwqp.get_ctx();
294        let pwqp = pwqp.ptr;
295        let type_ = type_.to_i32();
296        let isl_rs_result = unsafe { isl_pw_qpolynomial_dim(pwqp, type_) };
297        let err = isl_rs_ctx.last_error();
298        if err != Error::None_ {
299            let err_msg = isl_rs_ctx.last_error_msg();
300            isl_rs_ctx.reset_error();
301            return Err(LibISLError::new(err, err_msg));
302        }
303        Ok(isl_rs_result)
304    }
305
306    /// Wraps `isl_pw_qpolynomial_domain`.
307    pub fn domain(self) -> Result<Set, LibISLError> {
308        let pwqp = self;
309        let isl_rs_ctx = pwqp.get_ctx();
310        let mut pwqp = pwqp;
311        pwqp.do_not_free_on_drop();
312        let pwqp = pwqp.ptr;
313        let isl_rs_result = unsafe { isl_pw_qpolynomial_domain(pwqp) };
314        let isl_rs_result = Set { ptr: isl_rs_result,
315                                  should_free_on_drop: true };
316        let err = isl_rs_ctx.last_error();
317        if err != Error::None_ {
318            let err_msg = isl_rs_ctx.last_error_msg();
319            isl_rs_ctx.reset_error();
320            return Err(LibISLError::new(err, err_msg));
321        }
322        Ok(isl_rs_result)
323    }
324
325    /// Wraps `isl_pw_qpolynomial_domain_reverse`.
326    pub fn domain_reverse(self) -> Result<PwQPolynomial, LibISLError> {
327        let pwqp = self;
328        let isl_rs_ctx = pwqp.get_ctx();
329        let mut pwqp = pwqp;
330        pwqp.do_not_free_on_drop();
331        let pwqp = pwqp.ptr;
332        let isl_rs_result = unsafe { isl_pw_qpolynomial_domain_reverse(pwqp) };
333        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
334                                            should_free_on_drop: true };
335        let err = isl_rs_ctx.last_error();
336        if err != Error::None_ {
337            let err_msg = isl_rs_ctx.last_error_msg();
338            isl_rs_ctx.reset_error();
339            return Err(LibISLError::new(err, err_msg));
340        }
341        Ok(isl_rs_result)
342    }
343
344    /// Wraps `isl_pw_qpolynomial_drop_dims`.
345    pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
346                     -> Result<PwQPolynomial, LibISLError> {
347        let pwqp = self;
348        let isl_rs_ctx = pwqp.get_ctx();
349        let mut pwqp = pwqp;
350        pwqp.do_not_free_on_drop();
351        let pwqp = pwqp.ptr;
352        let type_ = type_.to_i32();
353        let isl_rs_result = unsafe { isl_pw_qpolynomial_drop_dims(pwqp, type_, first, n) };
354        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
355                                            should_free_on_drop: true };
356        let err = isl_rs_ctx.last_error();
357        if err != Error::None_ {
358            let err_msg = isl_rs_ctx.last_error_msg();
359            isl_rs_ctx.reset_error();
360            return Err(LibISLError::new(err, err_msg));
361        }
362        Ok(isl_rs_result)
363    }
364
365    /// Wraps `isl_pw_qpolynomial_drop_unused_params`.
366    pub fn drop_unused_params(self) -> Result<PwQPolynomial, LibISLError> {
367        let pwqp = self;
368        let isl_rs_ctx = pwqp.get_ctx();
369        let mut pwqp = pwqp;
370        pwqp.do_not_free_on_drop();
371        let pwqp = pwqp.ptr;
372        let isl_rs_result = unsafe { isl_pw_qpolynomial_drop_unused_params(pwqp) };
373        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
374                                            should_free_on_drop: true };
375        let err = isl_rs_ctx.last_error();
376        if err != Error::None_ {
377            let err_msg = isl_rs_ctx.last_error_msg();
378            isl_rs_ctx.reset_error();
379            return Err(LibISLError::new(err, err_msg));
380        }
381        Ok(isl_rs_result)
382    }
383
384    /// Wraps `isl_pw_qpolynomial_dump`.
385    pub fn dump(&self) -> Result<(), LibISLError> {
386        let pwqp = self;
387        let isl_rs_ctx = pwqp.get_ctx();
388        let pwqp = pwqp.ptr;
389        let isl_rs_result = unsafe { isl_pw_qpolynomial_dump(pwqp) };
390        let err = isl_rs_ctx.last_error();
391        if err != Error::None_ {
392            let err_msg = isl_rs_ctx.last_error_msg();
393            isl_rs_ctx.reset_error();
394            return Err(LibISLError::new(err, err_msg));
395        }
396        Ok(isl_rs_result)
397    }
398
399    /// Wraps `isl_pw_qpolynomial_eval`.
400    pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
401        let pwqp = self;
402        let isl_rs_ctx = pwqp.get_ctx();
403        let mut pwqp = pwqp;
404        pwqp.do_not_free_on_drop();
405        let pwqp = pwqp.ptr;
406        let mut pnt = pnt;
407        pnt.do_not_free_on_drop();
408        let pnt = pnt.ptr;
409        let isl_rs_result = unsafe { isl_pw_qpolynomial_eval(pwqp, pnt) };
410        let isl_rs_result = Val { ptr: isl_rs_result,
411                                  should_free_on_drop: true };
412        let err = isl_rs_ctx.last_error();
413        if err != Error::None_ {
414            let err_msg = isl_rs_ctx.last_error_msg();
415            isl_rs_ctx.reset_error();
416            return Err(LibISLError::new(err, err_msg));
417        }
418        Ok(isl_rs_result)
419    }
420
421    /// Wraps `isl_pw_qpolynomial_find_dim_by_name`.
422    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
423        let pwqp = self;
424        let isl_rs_ctx = pwqp.get_ctx();
425        let pwqp = pwqp.ptr;
426        let type_ = type_.to_i32();
427        let name = CString::new(name).unwrap();
428        let name = name.as_ptr();
429        let isl_rs_result = unsafe { isl_pw_qpolynomial_find_dim_by_name(pwqp, type_, name) };
430        let err = isl_rs_ctx.last_error();
431        if err != Error::None_ {
432            let err_msg = isl_rs_ctx.last_error_msg();
433            isl_rs_ctx.reset_error();
434            return Err(LibISLError::new(err, err_msg));
435        }
436        Ok(isl_rs_result)
437    }
438
439    /// Wraps `isl_pw_qpolynomial_fix_val`.
440    pub fn fix_val(self, type_: DimType, n: u32, v: Val) -> Result<PwQPolynomial, LibISLError> {
441        let pwqp = self;
442        let isl_rs_ctx = pwqp.get_ctx();
443        let mut pwqp = pwqp;
444        pwqp.do_not_free_on_drop();
445        let pwqp = pwqp.ptr;
446        let type_ = type_.to_i32();
447        let mut v = v;
448        v.do_not_free_on_drop();
449        let v = v.ptr;
450        let isl_rs_result = unsafe { isl_pw_qpolynomial_fix_val(pwqp, type_, n, v) };
451        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
452                                            should_free_on_drop: true };
453        let err = isl_rs_ctx.last_error();
454        if err != Error::None_ {
455            let err_msg = isl_rs_ctx.last_error_msg();
456            isl_rs_ctx.reset_error();
457            return Err(LibISLError::new(err, err_msg));
458        }
459        Ok(isl_rs_result)
460    }
461
462    /// Wraps `isl_pw_qpolynomial_free`.
463    pub fn free(self) -> Result<PwQPolynomial, LibISLError> {
464        let pwqp = self;
465        let isl_rs_ctx = pwqp.get_ctx();
466        let mut pwqp = pwqp;
467        pwqp.do_not_free_on_drop();
468        let pwqp = pwqp.ptr;
469        let isl_rs_result = unsafe { isl_pw_qpolynomial_free(pwqp) };
470        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
471                                            should_free_on_drop: true };
472        let err = isl_rs_ctx.last_error();
473        if err != Error::None_ {
474            let err_msg = isl_rs_ctx.last_error_msg();
475            isl_rs_ctx.reset_error();
476            return Err(LibISLError::new(err, err_msg));
477        }
478        Ok(isl_rs_result)
479    }
480
481    /// Wraps `isl_pw_qpolynomial_from_pw_aff`.
482    pub fn from_pw_aff(pwaff: PwAff) -> Result<PwQPolynomial, LibISLError> {
483        let isl_rs_ctx = pwaff.get_ctx();
484        let mut pwaff = pwaff;
485        pwaff.do_not_free_on_drop();
486        let pwaff = pwaff.ptr;
487        let isl_rs_result = unsafe { isl_pw_qpolynomial_from_pw_aff(pwaff) };
488        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
489                                            should_free_on_drop: true };
490        let err = isl_rs_ctx.last_error();
491        if err != Error::None_ {
492            let err_msg = isl_rs_ctx.last_error_msg();
493            isl_rs_ctx.reset_error();
494            return Err(LibISLError::new(err, err_msg));
495        }
496        Ok(isl_rs_result)
497    }
498
499    /// Wraps `isl_pw_qpolynomial_from_qpolynomial`.
500    pub fn from_qpolynomial(qp: QPolynomial) -> Result<PwQPolynomial, LibISLError> {
501        let isl_rs_ctx = qp.get_ctx();
502        let mut qp = qp;
503        qp.do_not_free_on_drop();
504        let qp = qp.ptr;
505        let isl_rs_result = unsafe { isl_pw_qpolynomial_from_qpolynomial(qp) };
506        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
507                                            should_free_on_drop: true };
508        let err = isl_rs_ctx.last_error();
509        if err != Error::None_ {
510            let err_msg = isl_rs_ctx.last_error_msg();
511            isl_rs_ctx.reset_error();
512            return Err(LibISLError::new(err, err_msg));
513        }
514        Ok(isl_rs_result)
515    }
516
517    /// Wraps `isl_pw_qpolynomial_from_range`.
518    pub fn from_range(self) -> Result<PwQPolynomial, LibISLError> {
519        let pwqp = self;
520        let isl_rs_ctx = pwqp.get_ctx();
521        let mut pwqp = pwqp;
522        pwqp.do_not_free_on_drop();
523        let pwqp = pwqp.ptr;
524        let isl_rs_result = unsafe { isl_pw_qpolynomial_from_range(pwqp) };
525        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
526                                            should_free_on_drop: true };
527        let err = isl_rs_ctx.last_error();
528        if err != Error::None_ {
529            let err_msg = isl_rs_ctx.last_error_msg();
530            isl_rs_ctx.reset_error();
531            return Err(LibISLError::new(err, err_msg));
532        }
533        Ok(isl_rs_result)
534    }
535
536    /// Wraps `isl_pw_qpolynomial_get_ctx`.
537    pub fn get_ctx(&self) -> Context {
538        let pwqp = self;
539        let pwqp = pwqp.ptr;
540        let isl_rs_result = unsafe { isl_pw_qpolynomial_get_ctx(pwqp) };
541        let isl_rs_result = Context { ptr: isl_rs_result,
542                                      should_free_on_drop: false };
543        isl_rs_result
544    }
545
546    /// Wraps `isl_pw_qpolynomial_get_domain_space`.
547    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
548        let pwqp = self;
549        let isl_rs_ctx = pwqp.get_ctx();
550        let pwqp = pwqp.ptr;
551        let isl_rs_result = unsafe { isl_pw_qpolynomial_get_domain_space(pwqp) };
552        let isl_rs_result = Space { ptr: isl_rs_result,
553                                    should_free_on_drop: true };
554        let err = isl_rs_ctx.last_error();
555        if err != Error::None_ {
556            let err_msg = isl_rs_ctx.last_error_msg();
557            isl_rs_ctx.reset_error();
558            return Err(LibISLError::new(err, err_msg));
559        }
560        Ok(isl_rs_result)
561    }
562
563    /// Wraps `isl_pw_qpolynomial_get_space`.
564    pub fn get_space(&self) -> Result<Space, LibISLError> {
565        let pwqp = self;
566        let isl_rs_ctx = pwqp.get_ctx();
567        let pwqp = pwqp.ptr;
568        let isl_rs_result = unsafe { isl_pw_qpolynomial_get_space(pwqp) };
569        let isl_rs_result = Space { ptr: isl_rs_result,
570                                    should_free_on_drop: true };
571        let err = isl_rs_ctx.last_error();
572        if err != Error::None_ {
573            let err_msg = isl_rs_ctx.last_error_msg();
574            isl_rs_ctx.reset_error();
575            return Err(LibISLError::new(err, err_msg));
576        }
577        Ok(isl_rs_result)
578    }
579
580    /// Wraps `isl_pw_qpolynomial_gist`.
581    pub fn gist(self, context: Set) -> Result<PwQPolynomial, LibISLError> {
582        let pwqp = self;
583        let isl_rs_ctx = pwqp.get_ctx();
584        let mut pwqp = pwqp;
585        pwqp.do_not_free_on_drop();
586        let pwqp = pwqp.ptr;
587        let mut context = context;
588        context.do_not_free_on_drop();
589        let context = context.ptr;
590        let isl_rs_result = unsafe { isl_pw_qpolynomial_gist(pwqp, context) };
591        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
592                                            should_free_on_drop: true };
593        let err = isl_rs_ctx.last_error();
594        if err != Error::None_ {
595            let err_msg = isl_rs_ctx.last_error_msg();
596            isl_rs_ctx.reset_error();
597            return Err(LibISLError::new(err, err_msg));
598        }
599        Ok(isl_rs_result)
600    }
601
602    /// Wraps `isl_pw_qpolynomial_gist_params`.
603    pub fn gist_params(self, context: Set) -> Result<PwQPolynomial, LibISLError> {
604        let pwqp = self;
605        let isl_rs_ctx = pwqp.get_ctx();
606        let mut pwqp = pwqp;
607        pwqp.do_not_free_on_drop();
608        let pwqp = pwqp.ptr;
609        let mut context = context;
610        context.do_not_free_on_drop();
611        let context = context.ptr;
612        let isl_rs_result = unsafe { isl_pw_qpolynomial_gist_params(pwqp, context) };
613        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
614                                            should_free_on_drop: true };
615        let err = isl_rs_ctx.last_error();
616        if err != Error::None_ {
617            let err_msg = isl_rs_ctx.last_error_msg();
618            isl_rs_ctx.reset_error();
619            return Err(LibISLError::new(err, err_msg));
620        }
621        Ok(isl_rs_result)
622    }
623
624    /// Wraps `isl_pw_qpolynomial_has_equal_space`.
625    pub fn has_equal_space(&self, pwqp2: &PwQPolynomial) -> Result<bool, LibISLError> {
626        let pwqp1 = self;
627        let isl_rs_ctx = pwqp1.get_ctx();
628        let pwqp1 = pwqp1.ptr;
629        let pwqp2 = pwqp2.ptr;
630        let isl_rs_result = unsafe { isl_pw_qpolynomial_has_equal_space(pwqp1, pwqp2) };
631        let isl_rs_result = match isl_rs_result {
632            0 => false,
633            1 => true,
634            _ => {
635                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
636            }
637        };
638        let err = isl_rs_ctx.last_error();
639        if err != Error::None_ {
640            let err_msg = isl_rs_ctx.last_error_msg();
641            isl_rs_ctx.reset_error();
642            return Err(LibISLError::new(err, err_msg));
643        }
644        Ok(isl_rs_result)
645    }
646
647    /// Wraps `isl_pw_qpolynomial_insert_dims`.
648    pub fn insert_dims(self, type_: DimType, first: u32, n: u32)
649                       -> Result<PwQPolynomial, LibISLError> {
650        let pwqp = self;
651        let isl_rs_ctx = pwqp.get_ctx();
652        let mut pwqp = pwqp;
653        pwqp.do_not_free_on_drop();
654        let pwqp = pwqp.ptr;
655        let type_ = type_.to_i32();
656        let isl_rs_result = unsafe { isl_pw_qpolynomial_insert_dims(pwqp, type_, first, n) };
657        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
658                                            should_free_on_drop: true };
659        let err = isl_rs_ctx.last_error();
660        if err != Error::None_ {
661            let err_msg = isl_rs_ctx.last_error_msg();
662            isl_rs_ctx.reset_error();
663            return Err(LibISLError::new(err, err_msg));
664        }
665        Ok(isl_rs_result)
666    }
667
668    /// Wraps `isl_pw_qpolynomial_intersect_domain`.
669    pub fn intersect_domain(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
670        let pwpq = self;
671        let isl_rs_ctx = pwpq.get_ctx();
672        let mut pwpq = pwpq;
673        pwpq.do_not_free_on_drop();
674        let pwpq = pwpq.ptr;
675        let mut set = set;
676        set.do_not_free_on_drop();
677        let set = set.ptr;
678        let isl_rs_result = unsafe { isl_pw_qpolynomial_intersect_domain(pwpq, set) };
679        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
680                                            should_free_on_drop: true };
681        let err = isl_rs_ctx.last_error();
682        if err != Error::None_ {
683            let err_msg = isl_rs_ctx.last_error_msg();
684            isl_rs_ctx.reset_error();
685            return Err(LibISLError::new(err, err_msg));
686        }
687        Ok(isl_rs_result)
688    }
689
690    /// Wraps `isl_pw_qpolynomial_intersect_domain_wrapped_domain`.
691    pub fn intersect_domain_wrapped_domain(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
692        let pwpq = self;
693        let isl_rs_ctx = pwpq.get_ctx();
694        let mut pwpq = pwpq;
695        pwpq.do_not_free_on_drop();
696        let pwpq = pwpq.ptr;
697        let mut set = set;
698        set.do_not_free_on_drop();
699        let set = set.ptr;
700        let isl_rs_result =
701            unsafe { isl_pw_qpolynomial_intersect_domain_wrapped_domain(pwpq, set) };
702        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
703                                            should_free_on_drop: true };
704        let err = isl_rs_ctx.last_error();
705        if err != Error::None_ {
706            let err_msg = isl_rs_ctx.last_error_msg();
707            isl_rs_ctx.reset_error();
708            return Err(LibISLError::new(err, err_msg));
709        }
710        Ok(isl_rs_result)
711    }
712
713    /// Wraps `isl_pw_qpolynomial_intersect_domain_wrapped_range`.
714    pub fn intersect_domain_wrapped_range(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
715        let pwpq = self;
716        let isl_rs_ctx = pwpq.get_ctx();
717        let mut pwpq = pwpq;
718        pwpq.do_not_free_on_drop();
719        let pwpq = pwpq.ptr;
720        let mut set = set;
721        set.do_not_free_on_drop();
722        let set = set.ptr;
723        let isl_rs_result = unsafe { isl_pw_qpolynomial_intersect_domain_wrapped_range(pwpq, set) };
724        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
725                                            should_free_on_drop: true };
726        let err = isl_rs_ctx.last_error();
727        if err != Error::None_ {
728            let err_msg = isl_rs_ctx.last_error_msg();
729            isl_rs_ctx.reset_error();
730            return Err(LibISLError::new(err, err_msg));
731        }
732        Ok(isl_rs_result)
733    }
734
735    /// Wraps `isl_pw_qpolynomial_intersect_params`.
736    pub fn intersect_params(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
737        let pwpq = self;
738        let isl_rs_ctx = pwpq.get_ctx();
739        let mut pwpq = pwpq;
740        pwpq.do_not_free_on_drop();
741        let pwpq = pwpq.ptr;
742        let mut set = set;
743        set.do_not_free_on_drop();
744        let set = set.ptr;
745        let isl_rs_result = unsafe { isl_pw_qpolynomial_intersect_params(pwpq, set) };
746        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
747                                            should_free_on_drop: true };
748        let err = isl_rs_ctx.last_error();
749        if err != Error::None_ {
750            let err_msg = isl_rs_ctx.last_error_msg();
751            isl_rs_ctx.reset_error();
752            return Err(LibISLError::new(err, err_msg));
753        }
754        Ok(isl_rs_result)
755    }
756
757    /// Wraps `isl_pw_qpolynomial_involves_dims`.
758    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
759        let pwqp = self;
760        let isl_rs_ctx = pwqp.get_ctx();
761        let pwqp = pwqp.ptr;
762        let type_ = type_.to_i32();
763        let isl_rs_result = unsafe { isl_pw_qpolynomial_involves_dims(pwqp, type_, first, n) };
764        let isl_rs_result = match isl_rs_result {
765            0 => false,
766            1 => true,
767            _ => {
768                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
769            }
770        };
771        let err = isl_rs_ctx.last_error();
772        if err != Error::None_ {
773            let err_msg = isl_rs_ctx.last_error_msg();
774            isl_rs_ctx.reset_error();
775            return Err(LibISLError::new(err, err_msg));
776        }
777        Ok(isl_rs_result)
778    }
779
780    /// Wraps `isl_pw_qpolynomial_involves_nan`.
781    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
782        let pwqp = self;
783        let isl_rs_ctx = pwqp.get_ctx();
784        let pwqp = pwqp.ptr;
785        let isl_rs_result = unsafe { isl_pw_qpolynomial_involves_nan(pwqp) };
786        let isl_rs_result = match isl_rs_result {
787            0 => false,
788            1 => true,
789            _ => {
790                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
791            }
792        };
793        let err = isl_rs_ctx.last_error();
794        if err != Error::None_ {
795            let err_msg = isl_rs_ctx.last_error_msg();
796            isl_rs_ctx.reset_error();
797            return Err(LibISLError::new(err, err_msg));
798        }
799        Ok(isl_rs_result)
800    }
801
802    /// Wraps `isl_pw_qpolynomial_involves_param_id`.
803    pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
804        let pwqp = self;
805        let isl_rs_ctx = pwqp.get_ctx();
806        let pwqp = pwqp.ptr;
807        let id = id.ptr;
808        let isl_rs_result = unsafe { isl_pw_qpolynomial_involves_param_id(pwqp, id) };
809        let isl_rs_result = match isl_rs_result {
810            0 => false,
811            1 => true,
812            _ => {
813                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
814            }
815        };
816        let err = isl_rs_ctx.last_error();
817        if err != Error::None_ {
818            let err_msg = isl_rs_ctx.last_error_msg();
819            isl_rs_ctx.reset_error();
820            return Err(LibISLError::new(err, err_msg));
821        }
822        Ok(isl_rs_result)
823    }
824
825    /// Wraps `isl_pw_qpolynomial_is_zero`.
826    pub fn is_zero(&self) -> Result<bool, LibISLError> {
827        let pwqp = self;
828        let isl_rs_ctx = pwqp.get_ctx();
829        let pwqp = pwqp.ptr;
830        let isl_rs_result = unsafe { isl_pw_qpolynomial_is_zero(pwqp) };
831        let isl_rs_result = match isl_rs_result {
832            0 => false,
833            1 => true,
834            _ => {
835                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
836            }
837        };
838        let err = isl_rs_ctx.last_error();
839        if err != Error::None_ {
840            let err_msg = isl_rs_ctx.last_error_msg();
841            isl_rs_ctx.reset_error();
842            return Err(LibISLError::new(err, err_msg));
843        }
844        Ok(isl_rs_result)
845    }
846
847    /// Wraps `isl_pw_qpolynomial_isa_qpolynomial`.
848    pub fn isa_qpolynomial(&self) -> Result<bool, LibISLError> {
849        let pwqp = self;
850        let isl_rs_ctx = pwqp.get_ctx();
851        let pwqp = pwqp.ptr;
852        let isl_rs_result = unsafe { isl_pw_qpolynomial_isa_qpolynomial(pwqp) };
853        let isl_rs_result = match isl_rs_result {
854            0 => false,
855            1 => true,
856            _ => {
857                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
858            }
859        };
860        let err = isl_rs_ctx.last_error();
861        if err != Error::None_ {
862            let err_msg = isl_rs_ctx.last_error_msg();
863            isl_rs_ctx.reset_error();
864            return Err(LibISLError::new(err, err_msg));
865        }
866        Ok(isl_rs_result)
867    }
868
869    /// Wraps `isl_pw_qpolynomial_max`.
870    pub fn max(self) -> Result<Val, LibISLError> {
871        let pwqp = self;
872        let isl_rs_ctx = pwqp.get_ctx();
873        let mut pwqp = pwqp;
874        pwqp.do_not_free_on_drop();
875        let pwqp = pwqp.ptr;
876        let isl_rs_result = unsafe { isl_pw_qpolynomial_max(pwqp) };
877        let isl_rs_result = Val { ptr: isl_rs_result,
878                                  should_free_on_drop: true };
879        let err = isl_rs_ctx.last_error();
880        if err != Error::None_ {
881            let err_msg = isl_rs_ctx.last_error_msg();
882            isl_rs_ctx.reset_error();
883            return Err(LibISLError::new(err, err_msg));
884        }
885        Ok(isl_rs_result)
886    }
887
888    /// Wraps `isl_pw_qpolynomial_min`.
889    pub fn min(self) -> Result<Val, LibISLError> {
890        let pwqp = self;
891        let isl_rs_ctx = pwqp.get_ctx();
892        let mut pwqp = pwqp;
893        pwqp.do_not_free_on_drop();
894        let pwqp = pwqp.ptr;
895        let isl_rs_result = unsafe { isl_pw_qpolynomial_min(pwqp) };
896        let isl_rs_result = Val { ptr: isl_rs_result,
897                                  should_free_on_drop: true };
898        let err = isl_rs_ctx.last_error();
899        if err != Error::None_ {
900            let err_msg = isl_rs_ctx.last_error_msg();
901            isl_rs_ctx.reset_error();
902            return Err(LibISLError::new(err, err_msg));
903        }
904        Ok(isl_rs_result)
905    }
906
907    /// Wraps `isl_pw_qpolynomial_move_dims`.
908    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
909                     n: u32)
910                     -> Result<PwQPolynomial, LibISLError> {
911        let pwqp = self;
912        let isl_rs_ctx = pwqp.get_ctx();
913        let mut pwqp = pwqp;
914        pwqp.do_not_free_on_drop();
915        let pwqp = pwqp.ptr;
916        let dst_type = dst_type.to_i32();
917        let src_type = src_type.to_i32();
918        let isl_rs_result =
919            unsafe { isl_pw_qpolynomial_move_dims(pwqp, dst_type, dst_pos, src_type, src_pos, n) };
920        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
921                                            should_free_on_drop: true };
922        let err = isl_rs_ctx.last_error();
923        if err != Error::None_ {
924            let err_msg = isl_rs_ctx.last_error_msg();
925            isl_rs_ctx.reset_error();
926            return Err(LibISLError::new(err, err_msg));
927        }
928        Ok(isl_rs_result)
929    }
930
931    /// Wraps `isl_pw_qpolynomial_mul`.
932    pub fn mul(self, pwqp2: PwQPolynomial) -> Result<PwQPolynomial, LibISLError> {
933        let pwqp1 = self;
934        let isl_rs_ctx = pwqp1.get_ctx();
935        let mut pwqp1 = pwqp1;
936        pwqp1.do_not_free_on_drop();
937        let pwqp1 = pwqp1.ptr;
938        let mut pwqp2 = pwqp2;
939        pwqp2.do_not_free_on_drop();
940        let pwqp2 = pwqp2.ptr;
941        let isl_rs_result = unsafe { isl_pw_qpolynomial_mul(pwqp1, pwqp2) };
942        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
943                                            should_free_on_drop: true };
944        let err = isl_rs_ctx.last_error();
945        if err != Error::None_ {
946            let err_msg = isl_rs_ctx.last_error_msg();
947            isl_rs_ctx.reset_error();
948            return Err(LibISLError::new(err, err_msg));
949        }
950        Ok(isl_rs_result)
951    }
952
953    /// Wraps `isl_pw_qpolynomial_n_piece`.
954    pub fn n_piece(&self) -> Result<i32, LibISLError> {
955        let pwqp = self;
956        let isl_rs_ctx = pwqp.get_ctx();
957        let pwqp = pwqp.ptr;
958        let isl_rs_result = unsafe { isl_pw_qpolynomial_n_piece(pwqp) };
959        let err = isl_rs_ctx.last_error();
960        if err != Error::None_ {
961            let err_msg = isl_rs_ctx.last_error_msg();
962            isl_rs_ctx.reset_error();
963            return Err(LibISLError::new(err, err_msg));
964        }
965        Ok(isl_rs_result)
966    }
967
968    /// Wraps `isl_pw_qpolynomial_neg`.
969    pub fn neg(self) -> Result<PwQPolynomial, LibISLError> {
970        let pwqp = self;
971        let isl_rs_ctx = pwqp.get_ctx();
972        let mut pwqp = pwqp;
973        pwqp.do_not_free_on_drop();
974        let pwqp = pwqp.ptr;
975        let isl_rs_result = unsafe { isl_pw_qpolynomial_neg(pwqp) };
976        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
977                                            should_free_on_drop: true };
978        let err = isl_rs_ctx.last_error();
979        if err != Error::None_ {
980            let err_msg = isl_rs_ctx.last_error_msg();
981            isl_rs_ctx.reset_error();
982            return Err(LibISLError::new(err, err_msg));
983        }
984        Ok(isl_rs_result)
985    }
986
987    /// Wraps `isl_pw_qpolynomial_plain_is_equal`.
988    pub fn plain_is_equal(&self, pwqp2: &PwQPolynomial) -> Result<bool, LibISLError> {
989        let pwqp1 = self;
990        let isl_rs_ctx = pwqp1.get_ctx();
991        let pwqp1 = pwqp1.ptr;
992        let pwqp2 = pwqp2.ptr;
993        let isl_rs_result = unsafe { isl_pw_qpolynomial_plain_is_equal(pwqp1, pwqp2) };
994        let isl_rs_result = match isl_rs_result {
995            0 => false,
996            1 => true,
997            _ => {
998                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
999            }
1000        };
1001        let err = isl_rs_ctx.last_error();
1002        if err != Error::None_ {
1003            let err_msg = isl_rs_ctx.last_error_msg();
1004            isl_rs_ctx.reset_error();
1005            return Err(LibISLError::new(err, err_msg));
1006        }
1007        Ok(isl_rs_result)
1008    }
1009
1010    /// Wraps `isl_pw_qpolynomial_pow`.
1011    pub fn pow(self, exponent: u32) -> Result<PwQPolynomial, LibISLError> {
1012        let pwqp = self;
1013        let isl_rs_ctx = pwqp.get_ctx();
1014        let mut pwqp = pwqp;
1015        pwqp.do_not_free_on_drop();
1016        let pwqp = pwqp.ptr;
1017        let isl_rs_result = unsafe { isl_pw_qpolynomial_pow(pwqp, exponent) };
1018        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1019                                            should_free_on_drop: true };
1020        let err = isl_rs_ctx.last_error();
1021        if err != Error::None_ {
1022            let err_msg = isl_rs_ctx.last_error_msg();
1023            isl_rs_ctx.reset_error();
1024            return Err(LibISLError::new(err, err_msg));
1025        }
1026        Ok(isl_rs_result)
1027    }
1028
1029    /// Wraps `isl_pw_qpolynomial_project_domain_on_params`.
1030    pub fn project_domain_on_params(self) -> Result<PwQPolynomial, LibISLError> {
1031        let pwqp = self;
1032        let isl_rs_ctx = pwqp.get_ctx();
1033        let mut pwqp = pwqp;
1034        pwqp.do_not_free_on_drop();
1035        let pwqp = pwqp.ptr;
1036        let isl_rs_result = unsafe { isl_pw_qpolynomial_project_domain_on_params(pwqp) };
1037        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1038                                            should_free_on_drop: true };
1039        let err = isl_rs_ctx.last_error();
1040        if err != Error::None_ {
1041            let err_msg = isl_rs_ctx.last_error_msg();
1042            isl_rs_ctx.reset_error();
1043            return Err(LibISLError::new(err, err_msg));
1044        }
1045        Ok(isl_rs_result)
1046    }
1047
1048    /// Wraps `isl_pw_qpolynomial_read_from_str`.
1049    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwQPolynomial, LibISLError> {
1050        let isl_rs_ctx = Context { ptr: ctx.ptr,
1051                                   should_free_on_drop: false };
1052        let ctx = ctx.ptr;
1053        let str_ = CString::new(str_).unwrap();
1054        let str_ = str_.as_ptr();
1055        let isl_rs_result = unsafe { isl_pw_qpolynomial_read_from_str(ctx, str_) };
1056        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1057                                            should_free_on_drop: true };
1058        let err = isl_rs_ctx.last_error();
1059        if err != Error::None_ {
1060            let err_msg = isl_rs_ctx.last_error_msg();
1061            isl_rs_ctx.reset_error();
1062            return Err(LibISLError::new(err, err_msg));
1063        }
1064        Ok(isl_rs_result)
1065    }
1066
1067    /// Wraps `isl_pw_qpolynomial_reset_domain_space`.
1068    pub fn reset_domain_space(self, space: Space) -> Result<PwQPolynomial, LibISLError> {
1069        let pwqp = self;
1070        let isl_rs_ctx = pwqp.get_ctx();
1071        let mut pwqp = pwqp;
1072        pwqp.do_not_free_on_drop();
1073        let pwqp = pwqp.ptr;
1074        let mut space = space;
1075        space.do_not_free_on_drop();
1076        let space = space.ptr;
1077        let isl_rs_result = unsafe { isl_pw_qpolynomial_reset_domain_space(pwqp, space) };
1078        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1079                                            should_free_on_drop: true };
1080        let err = isl_rs_ctx.last_error();
1081        if err != Error::None_ {
1082            let err_msg = isl_rs_ctx.last_error_msg();
1083            isl_rs_ctx.reset_error();
1084            return Err(LibISLError::new(err, err_msg));
1085        }
1086        Ok(isl_rs_result)
1087    }
1088
1089    /// Wraps `isl_pw_qpolynomial_reset_user`.
1090    pub fn reset_user(self) -> Result<PwQPolynomial, LibISLError> {
1091        let pwqp = self;
1092        let isl_rs_ctx = pwqp.get_ctx();
1093        let mut pwqp = pwqp;
1094        pwqp.do_not_free_on_drop();
1095        let pwqp = pwqp.ptr;
1096        let isl_rs_result = unsafe { isl_pw_qpolynomial_reset_user(pwqp) };
1097        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1098                                            should_free_on_drop: true };
1099        let err = isl_rs_ctx.last_error();
1100        if err != Error::None_ {
1101            let err_msg = isl_rs_ctx.last_error_msg();
1102            isl_rs_ctx.reset_error();
1103            return Err(LibISLError::new(err, err_msg));
1104        }
1105        Ok(isl_rs_result)
1106    }
1107
1108    /// Wraps `isl_pw_qpolynomial_scale_down_val`.
1109    pub fn scale_down_val(self, v: Val) -> Result<PwQPolynomial, LibISLError> {
1110        let pwqp = self;
1111        let isl_rs_ctx = pwqp.get_ctx();
1112        let mut pwqp = pwqp;
1113        pwqp.do_not_free_on_drop();
1114        let pwqp = pwqp.ptr;
1115        let mut v = v;
1116        v.do_not_free_on_drop();
1117        let v = v.ptr;
1118        let isl_rs_result = unsafe { isl_pw_qpolynomial_scale_down_val(pwqp, v) };
1119        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1120                                            should_free_on_drop: true };
1121        let err = isl_rs_ctx.last_error();
1122        if err != Error::None_ {
1123            let err_msg = isl_rs_ctx.last_error_msg();
1124            isl_rs_ctx.reset_error();
1125            return Err(LibISLError::new(err, err_msg));
1126        }
1127        Ok(isl_rs_result)
1128    }
1129
1130    /// Wraps `isl_pw_qpolynomial_scale_val`.
1131    pub fn scale_val(self, v: Val) -> Result<PwQPolynomial, LibISLError> {
1132        let pwqp = self;
1133        let isl_rs_ctx = pwqp.get_ctx();
1134        let mut pwqp = pwqp;
1135        pwqp.do_not_free_on_drop();
1136        let pwqp = pwqp.ptr;
1137        let mut v = v;
1138        v.do_not_free_on_drop();
1139        let v = v.ptr;
1140        let isl_rs_result = unsafe { isl_pw_qpolynomial_scale_val(pwqp, v) };
1141        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1142                                            should_free_on_drop: true };
1143        let err = isl_rs_ctx.last_error();
1144        if err != Error::None_ {
1145            let err_msg = isl_rs_ctx.last_error_msg();
1146            isl_rs_ctx.reset_error();
1147            return Err(LibISLError::new(err, err_msg));
1148        }
1149        Ok(isl_rs_result)
1150    }
1151
1152    /// Wraps `isl_pw_qpolynomial_set_dim_name`.
1153    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1154                        -> Result<PwQPolynomial, LibISLError> {
1155        let pwqp = self;
1156        let isl_rs_ctx = pwqp.get_ctx();
1157        let mut pwqp = pwqp;
1158        pwqp.do_not_free_on_drop();
1159        let pwqp = pwqp.ptr;
1160        let type_ = type_.to_i32();
1161        let s = CString::new(s).unwrap();
1162        let s = s.as_ptr();
1163        let isl_rs_result = unsafe { isl_pw_qpolynomial_set_dim_name(pwqp, type_, pos, s) };
1164        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1165                                            should_free_on_drop: true };
1166        let err = isl_rs_ctx.last_error();
1167        if err != Error::None_ {
1168            let err_msg = isl_rs_ctx.last_error_msg();
1169            isl_rs_ctx.reset_error();
1170            return Err(LibISLError::new(err, err_msg));
1171        }
1172        Ok(isl_rs_result)
1173    }
1174
1175    /// Wraps `isl_pw_qpolynomial_split_dims`.
1176    pub fn split_dims(self, type_: DimType, first: u32, n: u32)
1177                      -> Result<PwQPolynomial, LibISLError> {
1178        let pwqp = self;
1179        let isl_rs_ctx = pwqp.get_ctx();
1180        let mut pwqp = pwqp;
1181        pwqp.do_not_free_on_drop();
1182        let pwqp = pwqp.ptr;
1183        let type_ = type_.to_i32();
1184        let isl_rs_result = unsafe { isl_pw_qpolynomial_split_dims(pwqp, type_, first, n) };
1185        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1186                                            should_free_on_drop: true };
1187        let err = isl_rs_ctx.last_error();
1188        if err != Error::None_ {
1189            let err_msg = isl_rs_ctx.last_error_msg();
1190            isl_rs_ctx.reset_error();
1191            return Err(LibISLError::new(err, err_msg));
1192        }
1193        Ok(isl_rs_result)
1194    }
1195
1196    /// Wraps `isl_pw_qpolynomial_split_periods`.
1197    pub fn split_periods(self, max_periods: i32) -> Result<PwQPolynomial, LibISLError> {
1198        let pwqp = self;
1199        let isl_rs_ctx = pwqp.get_ctx();
1200        let mut pwqp = pwqp;
1201        pwqp.do_not_free_on_drop();
1202        let pwqp = pwqp.ptr;
1203        let isl_rs_result = unsafe { isl_pw_qpolynomial_split_periods(pwqp, max_periods) };
1204        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1205                                            should_free_on_drop: true };
1206        let err = isl_rs_ctx.last_error();
1207        if err != Error::None_ {
1208            let err_msg = isl_rs_ctx.last_error_msg();
1209            isl_rs_ctx.reset_error();
1210            return Err(LibISLError::new(err, err_msg));
1211        }
1212        Ok(isl_rs_result)
1213    }
1214
1215    /// Wraps `isl_pw_qpolynomial_sub`.
1216    pub fn sub(self, pwqp2: PwQPolynomial) -> Result<PwQPolynomial, LibISLError> {
1217        let pwqp1 = self;
1218        let isl_rs_ctx = pwqp1.get_ctx();
1219        let mut pwqp1 = pwqp1;
1220        pwqp1.do_not_free_on_drop();
1221        let pwqp1 = pwqp1.ptr;
1222        let mut pwqp2 = pwqp2;
1223        pwqp2.do_not_free_on_drop();
1224        let pwqp2 = pwqp2.ptr;
1225        let isl_rs_result = unsafe { isl_pw_qpolynomial_sub(pwqp1, pwqp2) };
1226        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1227                                            should_free_on_drop: true };
1228        let err = isl_rs_ctx.last_error();
1229        if err != Error::None_ {
1230            let err_msg = isl_rs_ctx.last_error_msg();
1231            isl_rs_ctx.reset_error();
1232            return Err(LibISLError::new(err, err_msg));
1233        }
1234        Ok(isl_rs_result)
1235    }
1236
1237    /// Wraps `isl_pw_qpolynomial_subtract_domain`.
1238    pub fn subtract_domain(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
1239        let pwpq = self;
1240        let isl_rs_ctx = pwpq.get_ctx();
1241        let mut pwpq = pwpq;
1242        pwpq.do_not_free_on_drop();
1243        let pwpq = pwpq.ptr;
1244        let mut set = set;
1245        set.do_not_free_on_drop();
1246        let set = set.ptr;
1247        let isl_rs_result = unsafe { isl_pw_qpolynomial_subtract_domain(pwpq, set) };
1248        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1249                                            should_free_on_drop: true };
1250        let err = isl_rs_ctx.last_error();
1251        if err != Error::None_ {
1252            let err_msg = isl_rs_ctx.last_error_msg();
1253            isl_rs_ctx.reset_error();
1254            return Err(LibISLError::new(err, err_msg));
1255        }
1256        Ok(isl_rs_result)
1257    }
1258
1259    /// Wraps `isl_pw_qpolynomial_to_list`.
1260    pub fn to_list(self) -> Result<PwQPolynomialList, LibISLError> {
1261        let el = self;
1262        let isl_rs_ctx = el.get_ctx();
1263        let mut el = el;
1264        el.do_not_free_on_drop();
1265        let el = el.ptr;
1266        let isl_rs_result = unsafe { isl_pw_qpolynomial_to_list(el) };
1267        let isl_rs_result = PwQPolynomialList { ptr: isl_rs_result,
1268                                                should_free_on_drop: true };
1269        let err = isl_rs_ctx.last_error();
1270        if err != Error::None_ {
1271            let err_msg = isl_rs_ctx.last_error_msg();
1272            isl_rs_ctx.reset_error();
1273            return Err(LibISLError::new(err, err_msg));
1274        }
1275        Ok(isl_rs_result)
1276    }
1277
1278    /// Wraps `isl_pw_qpolynomial_to_polynomial`.
1279    pub fn to_polynomial(self, sign: i32) -> Result<PwQPolynomial, LibISLError> {
1280        let pwqp = self;
1281        let isl_rs_ctx = pwqp.get_ctx();
1282        let mut pwqp = pwqp;
1283        pwqp.do_not_free_on_drop();
1284        let pwqp = pwqp.ptr;
1285        let isl_rs_result = unsafe { isl_pw_qpolynomial_to_polynomial(pwqp, sign) };
1286        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1287                                            should_free_on_drop: true };
1288        let err = isl_rs_ctx.last_error();
1289        if err != Error::None_ {
1290            let err_msg = isl_rs_ctx.last_error_msg();
1291            isl_rs_ctx.reset_error();
1292            return Err(LibISLError::new(err, err_msg));
1293        }
1294        Ok(isl_rs_result)
1295    }
1296
1297    /// Wraps `isl_pw_qpolynomial_to_str`.
1298    pub fn to_str(&self) -> Result<&str, LibISLError> {
1299        let pwqp = self;
1300        let isl_rs_ctx = pwqp.get_ctx();
1301        let pwqp = pwqp.ptr;
1302        let isl_rs_result = unsafe { isl_pw_qpolynomial_to_str(pwqp) };
1303        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1304        let isl_rs_result = isl_rs_result.to_str().unwrap();
1305        let err = isl_rs_ctx.last_error();
1306        if err != Error::None_ {
1307            let err_msg = isl_rs_ctx.last_error_msg();
1308            isl_rs_ctx.reset_error();
1309            return Err(LibISLError::new(err, err_msg));
1310        }
1311        Ok(isl_rs_result)
1312    }
1313
1314    /// Wraps `isl_pw_qpolynomial_to_union_pw_qpolynomial`.
1315    pub fn to_union_pw_qpolynomial(self) -> Result<UnionPwQPolynomial, LibISLError> {
1316        let pwqp = self;
1317        let isl_rs_ctx = pwqp.get_ctx();
1318        let mut pwqp = pwqp;
1319        pwqp.do_not_free_on_drop();
1320        let pwqp = pwqp.ptr;
1321        let isl_rs_result = unsafe { isl_pw_qpolynomial_to_union_pw_qpolynomial(pwqp) };
1322        let isl_rs_result = UnionPwQPolynomial { ptr: isl_rs_result,
1323                                                 should_free_on_drop: true };
1324        let err = isl_rs_ctx.last_error();
1325        if err != Error::None_ {
1326            let err_msg = isl_rs_ctx.last_error_msg();
1327            isl_rs_ctx.reset_error();
1328            return Err(LibISLError::new(err, err_msg));
1329        }
1330        Ok(isl_rs_result)
1331    }
1332
1333    /// Wraps `isl_pw_qpolynomial_zero`.
1334    pub fn zero(space: Space) -> Result<PwQPolynomial, LibISLError> {
1335        let isl_rs_ctx = space.get_ctx();
1336        let mut space = space;
1337        space.do_not_free_on_drop();
1338        let space = space.ptr;
1339        let isl_rs_result = unsafe { isl_pw_qpolynomial_zero(space) };
1340        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1341                                            should_free_on_drop: true };
1342        let err = isl_rs_ctx.last_error();
1343        if err != Error::None_ {
1344            let err_msg = isl_rs_ctx.last_error_msg();
1345            isl_rs_ctx.reset_error();
1346            return Err(LibISLError::new(err, err_msg));
1347        }
1348        Ok(isl_rs_result)
1349    }
1350
1351    /// Does not call isl_pw_qpolynomial_free() on being dropped. (For internal
1352    /// use only.)
1353    pub fn do_not_free_on_drop(&mut self) {
1354        self.should_free_on_drop = false;
1355    }
1356}
1357
1358impl Drop for PwQPolynomial {
1359    fn drop(&mut self) {
1360        if self.should_free_on_drop {
1361            unsafe {
1362                isl_pw_qpolynomial_free(self.ptr);
1363            }
1364        }
1365    }
1366}