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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
166        }
167        Ok(isl_rs_result)
168    }
169
170    /// Wraps `isl_pw_qpolynomial_add_dims`.
171    pub fn add_dims(self, type_: DimType, n: u32) -> Result<PwQPolynomial, LibISLError> {
172        let pwqp = self;
173        let isl_rs_ctx = pwqp.get_ctx();
174        let mut pwqp = pwqp;
175        pwqp.do_not_free_on_drop();
176        let pwqp = pwqp.ptr;
177        let type_ = type_.to_i32();
178        let isl_rs_result = unsafe { isl_pw_qpolynomial_add_dims(pwqp, type_, n) };
179        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
180                                            should_free_on_drop: true };
181        let err = isl_rs_ctx.last_error();
182        if err != Error::None_ {
183            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
184        }
185        Ok(isl_rs_result)
186    }
187
188    /// Wraps `isl_pw_qpolynomial_add_disjoint`.
189    pub fn add_disjoint(self, pwqp2: PwQPolynomial) -> Result<PwQPolynomial, LibISLError> {
190        let pwqp1 = self;
191        let isl_rs_ctx = pwqp1.get_ctx();
192        let mut pwqp1 = pwqp1;
193        pwqp1.do_not_free_on_drop();
194        let pwqp1 = pwqp1.ptr;
195        let mut pwqp2 = pwqp2;
196        pwqp2.do_not_free_on_drop();
197        let pwqp2 = pwqp2.ptr;
198        let isl_rs_result = unsafe { isl_pw_qpolynomial_add_disjoint(pwqp1, pwqp2) };
199        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
200                                            should_free_on_drop: true };
201        let err = isl_rs_ctx.last_error();
202        if err != Error::None_ {
203            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
204        }
205        Ok(isl_rs_result)
206    }
207
208    /// Wraps `isl_pw_qpolynomial_alloc`.
209    pub fn alloc(set: Set, qp: QPolynomial) -> Result<PwQPolynomial, LibISLError> {
210        let isl_rs_ctx = set.get_ctx();
211        let mut set = set;
212        set.do_not_free_on_drop();
213        let set = set.ptr;
214        let mut qp = qp;
215        qp.do_not_free_on_drop();
216        let qp = qp.ptr;
217        let isl_rs_result = unsafe { isl_pw_qpolynomial_alloc(set, qp) };
218        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
219                                            should_free_on_drop: true };
220        let err = isl_rs_ctx.last_error();
221        if err != Error::None_ {
222            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
223        }
224        Ok(isl_rs_result)
225    }
226
227    /// Wraps `isl_pw_qpolynomial_as_qpolynomial`.
228    pub fn as_qpolynomial(self) -> Result<QPolynomial, LibISLError> {
229        let pwqp = self;
230        let isl_rs_ctx = pwqp.get_ctx();
231        let mut pwqp = pwqp;
232        pwqp.do_not_free_on_drop();
233        let pwqp = pwqp.ptr;
234        let isl_rs_result = unsafe { isl_pw_qpolynomial_as_qpolynomial(pwqp) };
235        let isl_rs_result = QPolynomial { ptr: isl_rs_result,
236                                          should_free_on_drop: true };
237        let err = isl_rs_ctx.last_error();
238        if err != Error::None_ {
239            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
240        }
241        Ok(isl_rs_result)
242    }
243
244    /// Wraps `isl_pw_qpolynomial_coalesce`.
245    pub fn coalesce(self) -> Result<PwQPolynomial, LibISLError> {
246        let pwqp = self;
247        let isl_rs_ctx = pwqp.get_ctx();
248        let mut pwqp = pwqp;
249        pwqp.do_not_free_on_drop();
250        let pwqp = pwqp.ptr;
251        let isl_rs_result = unsafe { isl_pw_qpolynomial_coalesce(pwqp) };
252        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
253                                            should_free_on_drop: true };
254        let err = isl_rs_ctx.last_error();
255        if err != Error::None_ {
256            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
257        }
258        Ok(isl_rs_result)
259    }
260
261    /// Wraps `isl_pw_qpolynomial_copy`.
262    pub fn copy(&self) -> Result<PwQPolynomial, LibISLError> {
263        let pwqp = self;
264        let isl_rs_ctx = pwqp.get_ctx();
265        let pwqp = pwqp.ptr;
266        let isl_rs_result = unsafe { isl_pw_qpolynomial_copy(pwqp) };
267        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
268                                            should_free_on_drop: true };
269        let err = isl_rs_ctx.last_error();
270        if err != Error::None_ {
271            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
272        }
273        Ok(isl_rs_result)
274    }
275
276    /// Wraps `isl_pw_qpolynomial_dim`.
277    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
278        let pwqp = self;
279        let isl_rs_ctx = pwqp.get_ctx();
280        let pwqp = pwqp.ptr;
281        let type_ = type_.to_i32();
282        let isl_rs_result = unsafe { isl_pw_qpolynomial_dim(pwqp, type_) };
283        let err = isl_rs_ctx.last_error();
284        if err != Error::None_ {
285            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
286        }
287        Ok(isl_rs_result)
288    }
289
290    /// Wraps `isl_pw_qpolynomial_domain`.
291    pub fn domain(self) -> Result<Set, LibISLError> {
292        let pwqp = self;
293        let isl_rs_ctx = pwqp.get_ctx();
294        let mut pwqp = pwqp;
295        pwqp.do_not_free_on_drop();
296        let pwqp = pwqp.ptr;
297        let isl_rs_result = unsafe { isl_pw_qpolynomial_domain(pwqp) };
298        let isl_rs_result = Set { ptr: isl_rs_result,
299                                  should_free_on_drop: true };
300        let err = isl_rs_ctx.last_error();
301        if err != Error::None_ {
302            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
303        }
304        Ok(isl_rs_result)
305    }
306
307    /// Wraps `isl_pw_qpolynomial_domain_reverse`.
308    pub fn domain_reverse(self) -> Result<PwQPolynomial, LibISLError> {
309        let pwqp = self;
310        let isl_rs_ctx = pwqp.get_ctx();
311        let mut pwqp = pwqp;
312        pwqp.do_not_free_on_drop();
313        let pwqp = pwqp.ptr;
314        let isl_rs_result = unsafe { isl_pw_qpolynomial_domain_reverse(pwqp) };
315        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
316                                            should_free_on_drop: true };
317        let err = isl_rs_ctx.last_error();
318        if err != Error::None_ {
319            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
320        }
321        Ok(isl_rs_result)
322    }
323
324    /// Wraps `isl_pw_qpolynomial_drop_dims`.
325    pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
326                     -> 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 type_ = type_.to_i32();
333        let isl_rs_result = unsafe { isl_pw_qpolynomial_drop_dims(pwqp, type_, first, n) };
334        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
335                                            should_free_on_drop: true };
336        let err = isl_rs_ctx.last_error();
337        if err != Error::None_ {
338            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
339        }
340        Ok(isl_rs_result)
341    }
342
343    /// Wraps `isl_pw_qpolynomial_drop_unused_params`.
344    pub fn drop_unused_params(self) -> Result<PwQPolynomial, LibISLError> {
345        let pwqp = self;
346        let isl_rs_ctx = pwqp.get_ctx();
347        let mut pwqp = pwqp;
348        pwqp.do_not_free_on_drop();
349        let pwqp = pwqp.ptr;
350        let isl_rs_result = unsafe { isl_pw_qpolynomial_drop_unused_params(pwqp) };
351        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
352                                            should_free_on_drop: true };
353        let err = isl_rs_ctx.last_error();
354        if err != Error::None_ {
355            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
356        }
357        Ok(isl_rs_result)
358    }
359
360    /// Wraps `isl_pw_qpolynomial_dump`.
361    pub fn dump(&self) -> Result<(), LibISLError> {
362        let pwqp = self;
363        let isl_rs_ctx = pwqp.get_ctx();
364        let pwqp = pwqp.ptr;
365        let isl_rs_result = unsafe { isl_pw_qpolynomial_dump(pwqp) };
366        let err = isl_rs_ctx.last_error();
367        if err != Error::None_ {
368            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
369        }
370        Ok(isl_rs_result)
371    }
372
373    /// Wraps `isl_pw_qpolynomial_eval`.
374    pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
375        let pwqp = self;
376        let isl_rs_ctx = pwqp.get_ctx();
377        let mut pwqp = pwqp;
378        pwqp.do_not_free_on_drop();
379        let pwqp = pwqp.ptr;
380        let mut pnt = pnt;
381        pnt.do_not_free_on_drop();
382        let pnt = pnt.ptr;
383        let isl_rs_result = unsafe { isl_pw_qpolynomial_eval(pwqp, pnt) };
384        let isl_rs_result = Val { ptr: isl_rs_result,
385                                  should_free_on_drop: true };
386        let err = isl_rs_ctx.last_error();
387        if err != Error::None_ {
388            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
389        }
390        Ok(isl_rs_result)
391    }
392
393    /// Wraps `isl_pw_qpolynomial_find_dim_by_name`.
394    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
395        let pwqp = self;
396        let isl_rs_ctx = pwqp.get_ctx();
397        let pwqp = pwqp.ptr;
398        let type_ = type_.to_i32();
399        let name = CString::new(name).unwrap();
400        let name = name.as_ptr();
401        let isl_rs_result = unsafe { isl_pw_qpolynomial_find_dim_by_name(pwqp, type_, name) };
402        let err = isl_rs_ctx.last_error();
403        if err != Error::None_ {
404            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
405        }
406        Ok(isl_rs_result)
407    }
408
409    /// Wraps `isl_pw_qpolynomial_fix_val`.
410    pub fn fix_val(self, type_: DimType, n: u32, v: Val) -> Result<PwQPolynomial, LibISLError> {
411        let pwqp = self;
412        let isl_rs_ctx = pwqp.get_ctx();
413        let mut pwqp = pwqp;
414        pwqp.do_not_free_on_drop();
415        let pwqp = pwqp.ptr;
416        let type_ = type_.to_i32();
417        let mut v = v;
418        v.do_not_free_on_drop();
419        let v = v.ptr;
420        let isl_rs_result = unsafe { isl_pw_qpolynomial_fix_val(pwqp, type_, n, v) };
421        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
422                                            should_free_on_drop: true };
423        let err = isl_rs_ctx.last_error();
424        if err != Error::None_ {
425            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
426        }
427        Ok(isl_rs_result)
428    }
429
430    /// Wraps `isl_pw_qpolynomial_free`.
431    pub fn free(self) -> Result<PwQPolynomial, LibISLError> {
432        let pwqp = self;
433        let isl_rs_ctx = pwqp.get_ctx();
434        let mut pwqp = pwqp;
435        pwqp.do_not_free_on_drop();
436        let pwqp = pwqp.ptr;
437        let isl_rs_result = unsafe { isl_pw_qpolynomial_free(pwqp) };
438        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
439                                            should_free_on_drop: true };
440        let err = isl_rs_ctx.last_error();
441        if err != Error::None_ {
442            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
443        }
444        Ok(isl_rs_result)
445    }
446
447    /// Wraps `isl_pw_qpolynomial_from_pw_aff`.
448    pub fn from_pw_aff(pwaff: PwAff) -> Result<PwQPolynomial, LibISLError> {
449        let isl_rs_ctx = pwaff.get_ctx();
450        let mut pwaff = pwaff;
451        pwaff.do_not_free_on_drop();
452        let pwaff = pwaff.ptr;
453        let isl_rs_result = unsafe { isl_pw_qpolynomial_from_pw_aff(pwaff) };
454        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
455                                            should_free_on_drop: true };
456        let err = isl_rs_ctx.last_error();
457        if err != Error::None_ {
458            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
459        }
460        Ok(isl_rs_result)
461    }
462
463    /// Wraps `isl_pw_qpolynomial_from_qpolynomial`.
464    pub fn from_qpolynomial(qp: QPolynomial) -> Result<PwQPolynomial, LibISLError> {
465        let isl_rs_ctx = qp.get_ctx();
466        let mut qp = qp;
467        qp.do_not_free_on_drop();
468        let qp = qp.ptr;
469        let isl_rs_result = unsafe { isl_pw_qpolynomial_from_qpolynomial(qp) };
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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
475        }
476        Ok(isl_rs_result)
477    }
478
479    /// Wraps `isl_pw_qpolynomial_from_range`.
480    pub fn from_range(self) -> Result<PwQPolynomial, LibISLError> {
481        let pwqp = self;
482        let isl_rs_ctx = pwqp.get_ctx();
483        let mut pwqp = pwqp;
484        pwqp.do_not_free_on_drop();
485        let pwqp = pwqp.ptr;
486        let isl_rs_result = unsafe { isl_pw_qpolynomial_from_range(pwqp) };
487        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
488                                            should_free_on_drop: true };
489        let err = isl_rs_ctx.last_error();
490        if err != Error::None_ {
491            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
492        }
493        Ok(isl_rs_result)
494    }
495
496    /// Wraps `isl_pw_qpolynomial_get_ctx`.
497    pub fn get_ctx(&self) -> Context {
498        let pwqp = self;
499        let pwqp = pwqp.ptr;
500        let isl_rs_result = unsafe { isl_pw_qpolynomial_get_ctx(pwqp) };
501        let isl_rs_result = Context { ptr: isl_rs_result,
502                                      should_free_on_drop: false };
503        isl_rs_result
504    }
505
506    /// Wraps `isl_pw_qpolynomial_get_domain_space`.
507    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
508        let pwqp = self;
509        let isl_rs_ctx = pwqp.get_ctx();
510        let pwqp = pwqp.ptr;
511        let isl_rs_result = unsafe { isl_pw_qpolynomial_get_domain_space(pwqp) };
512        let isl_rs_result = Space { ptr: isl_rs_result,
513                                    should_free_on_drop: true };
514        let err = isl_rs_ctx.last_error();
515        if err != Error::None_ {
516            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
517        }
518        Ok(isl_rs_result)
519    }
520
521    /// Wraps `isl_pw_qpolynomial_get_space`.
522    pub fn get_space(&self) -> Result<Space, LibISLError> {
523        let pwqp = self;
524        let isl_rs_ctx = pwqp.get_ctx();
525        let pwqp = pwqp.ptr;
526        let isl_rs_result = unsafe { isl_pw_qpolynomial_get_space(pwqp) };
527        let isl_rs_result = Space { ptr: isl_rs_result,
528                                    should_free_on_drop: true };
529        let err = isl_rs_ctx.last_error();
530        if err != Error::None_ {
531            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
532        }
533        Ok(isl_rs_result)
534    }
535
536    /// Wraps `isl_pw_qpolynomial_gist`.
537    pub fn gist(self, context: Set) -> Result<PwQPolynomial, LibISLError> {
538        let pwqp = self;
539        let isl_rs_ctx = pwqp.get_ctx();
540        let mut pwqp = pwqp;
541        pwqp.do_not_free_on_drop();
542        let pwqp = pwqp.ptr;
543        let mut context = context;
544        context.do_not_free_on_drop();
545        let context = context.ptr;
546        let isl_rs_result = unsafe { isl_pw_qpolynomial_gist(pwqp, context) };
547        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
548                                            should_free_on_drop: true };
549        let err = isl_rs_ctx.last_error();
550        if err != Error::None_ {
551            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
552        }
553        Ok(isl_rs_result)
554    }
555
556    /// Wraps `isl_pw_qpolynomial_gist_params`.
557    pub fn gist_params(self, context: Set) -> Result<PwQPolynomial, LibISLError> {
558        let pwqp = self;
559        let isl_rs_ctx = pwqp.get_ctx();
560        let mut pwqp = pwqp;
561        pwqp.do_not_free_on_drop();
562        let pwqp = pwqp.ptr;
563        let mut context = context;
564        context.do_not_free_on_drop();
565        let context = context.ptr;
566        let isl_rs_result = unsafe { isl_pw_qpolynomial_gist_params(pwqp, context) };
567        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
568                                            should_free_on_drop: true };
569        let err = isl_rs_ctx.last_error();
570        if err != Error::None_ {
571            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
572        }
573        Ok(isl_rs_result)
574    }
575
576    /// Wraps `isl_pw_qpolynomial_has_equal_space`.
577    pub fn has_equal_space(&self, pwqp2: &PwQPolynomial) -> Result<bool, LibISLError> {
578        let pwqp1 = self;
579        let isl_rs_ctx = pwqp1.get_ctx();
580        let pwqp1 = pwqp1.ptr;
581        let pwqp2 = pwqp2.ptr;
582        let isl_rs_result = unsafe { isl_pw_qpolynomial_has_equal_space(pwqp1, pwqp2) };
583        let isl_rs_result = match isl_rs_result {
584            0 => false,
585            1 => true,
586            _ => panic!("Got isl_bool = -1"),
587        };
588        let err = isl_rs_ctx.last_error();
589        if err != Error::None_ {
590            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
591        }
592        Ok(isl_rs_result)
593    }
594
595    /// Wraps `isl_pw_qpolynomial_insert_dims`.
596    pub fn insert_dims(self, type_: DimType, first: u32, n: u32)
597                       -> Result<PwQPolynomial, LibISLError> {
598        let pwqp = self;
599        let isl_rs_ctx = pwqp.get_ctx();
600        let mut pwqp = pwqp;
601        pwqp.do_not_free_on_drop();
602        let pwqp = pwqp.ptr;
603        let type_ = type_.to_i32();
604        let isl_rs_result = unsafe { isl_pw_qpolynomial_insert_dims(pwqp, type_, first, n) };
605        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
606                                            should_free_on_drop: true };
607        let err = isl_rs_ctx.last_error();
608        if err != Error::None_ {
609            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
610        }
611        Ok(isl_rs_result)
612    }
613
614    /// Wraps `isl_pw_qpolynomial_intersect_domain`.
615    pub fn intersect_domain(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
616        let pwpq = self;
617        let isl_rs_ctx = pwpq.get_ctx();
618        let mut pwpq = pwpq;
619        pwpq.do_not_free_on_drop();
620        let pwpq = pwpq.ptr;
621        let mut set = set;
622        set.do_not_free_on_drop();
623        let set = set.ptr;
624        let isl_rs_result = unsafe { isl_pw_qpolynomial_intersect_domain(pwpq, set) };
625        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
626                                            should_free_on_drop: true };
627        let err = isl_rs_ctx.last_error();
628        if err != Error::None_ {
629            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
630        }
631        Ok(isl_rs_result)
632    }
633
634    /// Wraps `isl_pw_qpolynomial_intersect_domain_wrapped_domain`.
635    pub fn intersect_domain_wrapped_domain(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
636        let pwpq = self;
637        let isl_rs_ctx = pwpq.get_ctx();
638        let mut pwpq = pwpq;
639        pwpq.do_not_free_on_drop();
640        let pwpq = pwpq.ptr;
641        let mut set = set;
642        set.do_not_free_on_drop();
643        let set = set.ptr;
644        let isl_rs_result =
645            unsafe { isl_pw_qpolynomial_intersect_domain_wrapped_domain(pwpq, set) };
646        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
647                                            should_free_on_drop: true };
648        let err = isl_rs_ctx.last_error();
649        if err != Error::None_ {
650            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
651        }
652        Ok(isl_rs_result)
653    }
654
655    /// Wraps `isl_pw_qpolynomial_intersect_domain_wrapped_range`.
656    pub fn intersect_domain_wrapped_range(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
657        let pwpq = self;
658        let isl_rs_ctx = pwpq.get_ctx();
659        let mut pwpq = pwpq;
660        pwpq.do_not_free_on_drop();
661        let pwpq = pwpq.ptr;
662        let mut set = set;
663        set.do_not_free_on_drop();
664        let set = set.ptr;
665        let isl_rs_result = unsafe { isl_pw_qpolynomial_intersect_domain_wrapped_range(pwpq, set) };
666        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
667                                            should_free_on_drop: true };
668        let err = isl_rs_ctx.last_error();
669        if err != Error::None_ {
670            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
671        }
672        Ok(isl_rs_result)
673    }
674
675    /// Wraps `isl_pw_qpolynomial_intersect_params`.
676    pub fn intersect_params(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
677        let pwpq = self;
678        let isl_rs_ctx = pwpq.get_ctx();
679        let mut pwpq = pwpq;
680        pwpq.do_not_free_on_drop();
681        let pwpq = pwpq.ptr;
682        let mut set = set;
683        set.do_not_free_on_drop();
684        let set = set.ptr;
685        let isl_rs_result = unsafe { isl_pw_qpolynomial_intersect_params(pwpq, set) };
686        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
687                                            should_free_on_drop: true };
688        let err = isl_rs_ctx.last_error();
689        if err != Error::None_ {
690            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
691        }
692        Ok(isl_rs_result)
693    }
694
695    /// Wraps `isl_pw_qpolynomial_involves_dims`.
696    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
697        let pwqp = self;
698        let isl_rs_ctx = pwqp.get_ctx();
699        let pwqp = pwqp.ptr;
700        let type_ = type_.to_i32();
701        let isl_rs_result = unsafe { isl_pw_qpolynomial_involves_dims(pwqp, type_, first, n) };
702        let isl_rs_result = match isl_rs_result {
703            0 => false,
704            1 => true,
705            _ => panic!("Got isl_bool = -1"),
706        };
707        let err = isl_rs_ctx.last_error();
708        if err != Error::None_ {
709            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
710        }
711        Ok(isl_rs_result)
712    }
713
714    /// Wraps `isl_pw_qpolynomial_involves_nan`.
715    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
716        let pwqp = self;
717        let isl_rs_ctx = pwqp.get_ctx();
718        let pwqp = pwqp.ptr;
719        let isl_rs_result = unsafe { isl_pw_qpolynomial_involves_nan(pwqp) };
720        let isl_rs_result = match isl_rs_result {
721            0 => false,
722            1 => true,
723            _ => panic!("Got isl_bool = -1"),
724        };
725        let err = isl_rs_ctx.last_error();
726        if err != Error::None_ {
727            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
728        }
729        Ok(isl_rs_result)
730    }
731
732    /// Wraps `isl_pw_qpolynomial_involves_param_id`.
733    pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
734        let pwqp = self;
735        let isl_rs_ctx = pwqp.get_ctx();
736        let pwqp = pwqp.ptr;
737        let id = id.ptr;
738        let isl_rs_result = unsafe { isl_pw_qpolynomial_involves_param_id(pwqp, id) };
739        let isl_rs_result = match isl_rs_result {
740            0 => false,
741            1 => true,
742            _ => panic!("Got isl_bool = -1"),
743        };
744        let err = isl_rs_ctx.last_error();
745        if err != Error::None_ {
746            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
747        }
748        Ok(isl_rs_result)
749    }
750
751    /// Wraps `isl_pw_qpolynomial_is_zero`.
752    pub fn is_zero(&self) -> Result<bool, LibISLError> {
753        let pwqp = self;
754        let isl_rs_ctx = pwqp.get_ctx();
755        let pwqp = pwqp.ptr;
756        let isl_rs_result = unsafe { isl_pw_qpolynomial_is_zero(pwqp) };
757        let isl_rs_result = match isl_rs_result {
758            0 => false,
759            1 => true,
760            _ => panic!("Got isl_bool = -1"),
761        };
762        let err = isl_rs_ctx.last_error();
763        if err != Error::None_ {
764            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
765        }
766        Ok(isl_rs_result)
767    }
768
769    /// Wraps `isl_pw_qpolynomial_isa_qpolynomial`.
770    pub fn isa_qpolynomial(&self) -> Result<bool, LibISLError> {
771        let pwqp = self;
772        let isl_rs_ctx = pwqp.get_ctx();
773        let pwqp = pwqp.ptr;
774        let isl_rs_result = unsafe { isl_pw_qpolynomial_isa_qpolynomial(pwqp) };
775        let isl_rs_result = match isl_rs_result {
776            0 => false,
777            1 => true,
778            _ => panic!("Got isl_bool = -1"),
779        };
780        let err = isl_rs_ctx.last_error();
781        if err != Error::None_ {
782            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
783        }
784        Ok(isl_rs_result)
785    }
786
787    /// Wraps `isl_pw_qpolynomial_max`.
788    pub fn max(self) -> Result<Val, LibISLError> {
789        let pwqp = self;
790        let isl_rs_ctx = pwqp.get_ctx();
791        let mut pwqp = pwqp;
792        pwqp.do_not_free_on_drop();
793        let pwqp = pwqp.ptr;
794        let isl_rs_result = unsafe { isl_pw_qpolynomial_max(pwqp) };
795        let isl_rs_result = Val { ptr: isl_rs_result,
796                                  should_free_on_drop: true };
797        let err = isl_rs_ctx.last_error();
798        if err != Error::None_ {
799            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
800        }
801        Ok(isl_rs_result)
802    }
803
804    /// Wraps `isl_pw_qpolynomial_min`.
805    pub fn min(self) -> Result<Val, LibISLError> {
806        let pwqp = self;
807        let isl_rs_ctx = pwqp.get_ctx();
808        let mut pwqp = pwqp;
809        pwqp.do_not_free_on_drop();
810        let pwqp = pwqp.ptr;
811        let isl_rs_result = unsafe { isl_pw_qpolynomial_min(pwqp) };
812        let isl_rs_result = Val { ptr: isl_rs_result,
813                                  should_free_on_drop: true };
814        let err = isl_rs_ctx.last_error();
815        if err != Error::None_ {
816            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
817        }
818        Ok(isl_rs_result)
819    }
820
821    /// Wraps `isl_pw_qpolynomial_move_dims`.
822    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
823                     n: u32)
824                     -> Result<PwQPolynomial, LibISLError> {
825        let pwqp = self;
826        let isl_rs_ctx = pwqp.get_ctx();
827        let mut pwqp = pwqp;
828        pwqp.do_not_free_on_drop();
829        let pwqp = pwqp.ptr;
830        let dst_type = dst_type.to_i32();
831        let src_type = src_type.to_i32();
832        let isl_rs_result =
833            unsafe { isl_pw_qpolynomial_move_dims(pwqp, dst_type, dst_pos, src_type, src_pos, n) };
834        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
835                                            should_free_on_drop: true };
836        let err = isl_rs_ctx.last_error();
837        if err != Error::None_ {
838            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
839        }
840        Ok(isl_rs_result)
841    }
842
843    /// Wraps `isl_pw_qpolynomial_mul`.
844    pub fn mul(self, pwqp2: PwQPolynomial) -> Result<PwQPolynomial, LibISLError> {
845        let pwqp1 = self;
846        let isl_rs_ctx = pwqp1.get_ctx();
847        let mut pwqp1 = pwqp1;
848        pwqp1.do_not_free_on_drop();
849        let pwqp1 = pwqp1.ptr;
850        let mut pwqp2 = pwqp2;
851        pwqp2.do_not_free_on_drop();
852        let pwqp2 = pwqp2.ptr;
853        let isl_rs_result = unsafe { isl_pw_qpolynomial_mul(pwqp1, pwqp2) };
854        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
855                                            should_free_on_drop: true };
856        let err = isl_rs_ctx.last_error();
857        if err != Error::None_ {
858            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
859        }
860        Ok(isl_rs_result)
861    }
862
863    /// Wraps `isl_pw_qpolynomial_n_piece`.
864    pub fn n_piece(&self) -> Result<i32, LibISLError> {
865        let pwqp = self;
866        let isl_rs_ctx = pwqp.get_ctx();
867        let pwqp = pwqp.ptr;
868        let isl_rs_result = unsafe { isl_pw_qpolynomial_n_piece(pwqp) };
869        let err = isl_rs_ctx.last_error();
870        if err != Error::None_ {
871            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
872        }
873        Ok(isl_rs_result)
874    }
875
876    /// Wraps `isl_pw_qpolynomial_neg`.
877    pub fn neg(self) -> Result<PwQPolynomial, LibISLError> {
878        let pwqp = self;
879        let isl_rs_ctx = pwqp.get_ctx();
880        let mut pwqp = pwqp;
881        pwqp.do_not_free_on_drop();
882        let pwqp = pwqp.ptr;
883        let isl_rs_result = unsafe { isl_pw_qpolynomial_neg(pwqp) };
884        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
885                                            should_free_on_drop: true };
886        let err = isl_rs_ctx.last_error();
887        if err != Error::None_ {
888            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
889        }
890        Ok(isl_rs_result)
891    }
892
893    /// Wraps `isl_pw_qpolynomial_plain_is_equal`.
894    pub fn plain_is_equal(&self, pwqp2: &PwQPolynomial) -> Result<bool, LibISLError> {
895        let pwqp1 = self;
896        let isl_rs_ctx = pwqp1.get_ctx();
897        let pwqp1 = pwqp1.ptr;
898        let pwqp2 = pwqp2.ptr;
899        let isl_rs_result = unsafe { isl_pw_qpolynomial_plain_is_equal(pwqp1, pwqp2) };
900        let isl_rs_result = match isl_rs_result {
901            0 => false,
902            1 => true,
903            _ => panic!("Got isl_bool = -1"),
904        };
905        let err = isl_rs_ctx.last_error();
906        if err != Error::None_ {
907            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
908        }
909        Ok(isl_rs_result)
910    }
911
912    /// Wraps `isl_pw_qpolynomial_pow`.
913    pub fn pow(self, exponent: u32) -> Result<PwQPolynomial, LibISLError> {
914        let pwqp = self;
915        let isl_rs_ctx = pwqp.get_ctx();
916        let mut pwqp = pwqp;
917        pwqp.do_not_free_on_drop();
918        let pwqp = pwqp.ptr;
919        let isl_rs_result = unsafe { isl_pw_qpolynomial_pow(pwqp, exponent) };
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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
925        }
926        Ok(isl_rs_result)
927    }
928
929    /// Wraps `isl_pw_qpolynomial_project_domain_on_params`.
930    pub fn project_domain_on_params(self) -> Result<PwQPolynomial, LibISLError> {
931        let pwqp = self;
932        let isl_rs_ctx = pwqp.get_ctx();
933        let mut pwqp = pwqp;
934        pwqp.do_not_free_on_drop();
935        let pwqp = pwqp.ptr;
936        let isl_rs_result = unsafe { isl_pw_qpolynomial_project_domain_on_params(pwqp) };
937        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
938                                            should_free_on_drop: true };
939        let err = isl_rs_ctx.last_error();
940        if err != Error::None_ {
941            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
942        }
943        Ok(isl_rs_result)
944    }
945
946    /// Wraps `isl_pw_qpolynomial_read_from_str`.
947    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwQPolynomial, LibISLError> {
948        let isl_rs_ctx = Context { ptr: ctx.ptr,
949                                   should_free_on_drop: false };
950        let ctx = ctx.ptr;
951        let str_ = CString::new(str_).unwrap();
952        let str_ = str_.as_ptr();
953        let isl_rs_result = unsafe { isl_pw_qpolynomial_read_from_str(ctx, str_) };
954        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
955                                            should_free_on_drop: true };
956        let err = isl_rs_ctx.last_error();
957        if err != Error::None_ {
958            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
959        }
960        Ok(isl_rs_result)
961    }
962
963    /// Wraps `isl_pw_qpolynomial_reset_domain_space`.
964    pub fn reset_domain_space(self, space: Space) -> Result<PwQPolynomial, LibISLError> {
965        let pwqp = self;
966        let isl_rs_ctx = pwqp.get_ctx();
967        let mut pwqp = pwqp;
968        pwqp.do_not_free_on_drop();
969        let pwqp = pwqp.ptr;
970        let mut space = space;
971        space.do_not_free_on_drop();
972        let space = space.ptr;
973        let isl_rs_result = unsafe { isl_pw_qpolynomial_reset_domain_space(pwqp, space) };
974        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
975                                            should_free_on_drop: true };
976        let err = isl_rs_ctx.last_error();
977        if err != Error::None_ {
978            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
979        }
980        Ok(isl_rs_result)
981    }
982
983    /// Wraps `isl_pw_qpolynomial_reset_user`.
984    pub fn reset_user(self) -> Result<PwQPolynomial, LibISLError> {
985        let pwqp = self;
986        let isl_rs_ctx = pwqp.get_ctx();
987        let mut pwqp = pwqp;
988        pwqp.do_not_free_on_drop();
989        let pwqp = pwqp.ptr;
990        let isl_rs_result = unsafe { isl_pw_qpolynomial_reset_user(pwqp) };
991        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
992                                            should_free_on_drop: true };
993        let err = isl_rs_ctx.last_error();
994        if err != Error::None_ {
995            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
996        }
997        Ok(isl_rs_result)
998    }
999
1000    /// Wraps `isl_pw_qpolynomial_scale_down_val`.
1001    pub fn scale_down_val(self, v: Val) -> Result<PwQPolynomial, LibISLError> {
1002        let pwqp = self;
1003        let isl_rs_ctx = pwqp.get_ctx();
1004        let mut pwqp = pwqp;
1005        pwqp.do_not_free_on_drop();
1006        let pwqp = pwqp.ptr;
1007        let mut v = v;
1008        v.do_not_free_on_drop();
1009        let v = v.ptr;
1010        let isl_rs_result = unsafe { isl_pw_qpolynomial_scale_down_val(pwqp, v) };
1011        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1012                                            should_free_on_drop: true };
1013        let err = isl_rs_ctx.last_error();
1014        if err != Error::None_ {
1015            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1016        }
1017        Ok(isl_rs_result)
1018    }
1019
1020    /// Wraps `isl_pw_qpolynomial_scale_val`.
1021    pub fn scale_val(self, v: Val) -> Result<PwQPolynomial, LibISLError> {
1022        let pwqp = self;
1023        let isl_rs_ctx = pwqp.get_ctx();
1024        let mut pwqp = pwqp;
1025        pwqp.do_not_free_on_drop();
1026        let pwqp = pwqp.ptr;
1027        let mut v = v;
1028        v.do_not_free_on_drop();
1029        let v = v.ptr;
1030        let isl_rs_result = unsafe { isl_pw_qpolynomial_scale_val(pwqp, v) };
1031        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1032                                            should_free_on_drop: true };
1033        let err = isl_rs_ctx.last_error();
1034        if err != Error::None_ {
1035            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1036        }
1037        Ok(isl_rs_result)
1038    }
1039
1040    /// Wraps `isl_pw_qpolynomial_set_dim_name`.
1041    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1042                        -> Result<PwQPolynomial, LibISLError> {
1043        let pwqp = self;
1044        let isl_rs_ctx = pwqp.get_ctx();
1045        let mut pwqp = pwqp;
1046        pwqp.do_not_free_on_drop();
1047        let pwqp = pwqp.ptr;
1048        let type_ = type_.to_i32();
1049        let s = CString::new(s).unwrap();
1050        let s = s.as_ptr();
1051        let isl_rs_result = unsafe { isl_pw_qpolynomial_set_dim_name(pwqp, type_, pos, s) };
1052        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1053                                            should_free_on_drop: true };
1054        let err = isl_rs_ctx.last_error();
1055        if err != Error::None_ {
1056            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1057        }
1058        Ok(isl_rs_result)
1059    }
1060
1061    /// Wraps `isl_pw_qpolynomial_split_dims`.
1062    pub fn split_dims(self, type_: DimType, first: u32, n: u32)
1063                      -> Result<PwQPolynomial, LibISLError> {
1064        let pwqp = self;
1065        let isl_rs_ctx = pwqp.get_ctx();
1066        let mut pwqp = pwqp;
1067        pwqp.do_not_free_on_drop();
1068        let pwqp = pwqp.ptr;
1069        let type_ = type_.to_i32();
1070        let isl_rs_result = unsafe { isl_pw_qpolynomial_split_dims(pwqp, type_, first, n) };
1071        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1072                                            should_free_on_drop: true };
1073        let err = isl_rs_ctx.last_error();
1074        if err != Error::None_ {
1075            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1076        }
1077        Ok(isl_rs_result)
1078    }
1079
1080    /// Wraps `isl_pw_qpolynomial_split_periods`.
1081    pub fn split_periods(self, max_periods: i32) -> Result<PwQPolynomial, LibISLError> {
1082        let pwqp = self;
1083        let isl_rs_ctx = pwqp.get_ctx();
1084        let mut pwqp = pwqp;
1085        pwqp.do_not_free_on_drop();
1086        let pwqp = pwqp.ptr;
1087        let isl_rs_result = unsafe { isl_pw_qpolynomial_split_periods(pwqp, max_periods) };
1088        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1089                                            should_free_on_drop: true };
1090        let err = isl_rs_ctx.last_error();
1091        if err != Error::None_ {
1092            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1093        }
1094        Ok(isl_rs_result)
1095    }
1096
1097    /// Wraps `isl_pw_qpolynomial_sub`.
1098    pub fn sub(self, pwqp2: PwQPolynomial) -> Result<PwQPolynomial, LibISLError> {
1099        let pwqp1 = self;
1100        let isl_rs_ctx = pwqp1.get_ctx();
1101        let mut pwqp1 = pwqp1;
1102        pwqp1.do_not_free_on_drop();
1103        let pwqp1 = pwqp1.ptr;
1104        let mut pwqp2 = pwqp2;
1105        pwqp2.do_not_free_on_drop();
1106        let pwqp2 = pwqp2.ptr;
1107        let isl_rs_result = unsafe { isl_pw_qpolynomial_sub(pwqp1, pwqp2) };
1108        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1109                                            should_free_on_drop: true };
1110        let err = isl_rs_ctx.last_error();
1111        if err != Error::None_ {
1112            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1113        }
1114        Ok(isl_rs_result)
1115    }
1116
1117    /// Wraps `isl_pw_qpolynomial_subtract_domain`.
1118    pub fn subtract_domain(self, set: Set) -> Result<PwQPolynomial, LibISLError> {
1119        let pwpq = self;
1120        let isl_rs_ctx = pwpq.get_ctx();
1121        let mut pwpq = pwpq;
1122        pwpq.do_not_free_on_drop();
1123        let pwpq = pwpq.ptr;
1124        let mut set = set;
1125        set.do_not_free_on_drop();
1126        let set = set.ptr;
1127        let isl_rs_result = unsafe { isl_pw_qpolynomial_subtract_domain(pwpq, set) };
1128        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1129                                            should_free_on_drop: true };
1130        let err = isl_rs_ctx.last_error();
1131        if err != Error::None_ {
1132            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1133        }
1134        Ok(isl_rs_result)
1135    }
1136
1137    /// Wraps `isl_pw_qpolynomial_to_list`.
1138    pub fn to_list(self) -> Result<PwQPolynomialList, LibISLError> {
1139        let el = self;
1140        let isl_rs_ctx = el.get_ctx();
1141        let mut el = el;
1142        el.do_not_free_on_drop();
1143        let el = el.ptr;
1144        let isl_rs_result = unsafe { isl_pw_qpolynomial_to_list(el) };
1145        let isl_rs_result = PwQPolynomialList { ptr: isl_rs_result,
1146                                                should_free_on_drop: true };
1147        let err = isl_rs_ctx.last_error();
1148        if err != Error::None_ {
1149            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1150        }
1151        Ok(isl_rs_result)
1152    }
1153
1154    /// Wraps `isl_pw_qpolynomial_to_polynomial`.
1155    pub fn to_polynomial(self, sign: i32) -> Result<PwQPolynomial, LibISLError> {
1156        let pwqp = self;
1157        let isl_rs_ctx = pwqp.get_ctx();
1158        let mut pwqp = pwqp;
1159        pwqp.do_not_free_on_drop();
1160        let pwqp = pwqp.ptr;
1161        let isl_rs_result = unsafe { isl_pw_qpolynomial_to_polynomial(pwqp, sign) };
1162        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1163                                            should_free_on_drop: true };
1164        let err = isl_rs_ctx.last_error();
1165        if err != Error::None_ {
1166            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1167        }
1168        Ok(isl_rs_result)
1169    }
1170
1171    /// Wraps `isl_pw_qpolynomial_to_str`.
1172    pub fn to_str(&self) -> Result<&str, LibISLError> {
1173        let pwqp = self;
1174        let isl_rs_ctx = pwqp.get_ctx();
1175        let pwqp = pwqp.ptr;
1176        let isl_rs_result = unsafe { isl_pw_qpolynomial_to_str(pwqp) };
1177        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1178        let isl_rs_result = isl_rs_result.to_str().unwrap();
1179        let err = isl_rs_ctx.last_error();
1180        if err != Error::None_ {
1181            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1182        }
1183        Ok(isl_rs_result)
1184    }
1185
1186    /// Wraps `isl_pw_qpolynomial_to_union_pw_qpolynomial`.
1187    pub fn to_union_pw_qpolynomial(self) -> Result<UnionPwQPolynomial, LibISLError> {
1188        let pwqp = self;
1189        let isl_rs_ctx = pwqp.get_ctx();
1190        let mut pwqp = pwqp;
1191        pwqp.do_not_free_on_drop();
1192        let pwqp = pwqp.ptr;
1193        let isl_rs_result = unsafe { isl_pw_qpolynomial_to_union_pw_qpolynomial(pwqp) };
1194        let isl_rs_result = UnionPwQPolynomial { ptr: isl_rs_result,
1195                                                 should_free_on_drop: true };
1196        let err = isl_rs_ctx.last_error();
1197        if err != Error::None_ {
1198            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1199        }
1200        Ok(isl_rs_result)
1201    }
1202
1203    /// Wraps `isl_pw_qpolynomial_zero`.
1204    pub fn zero(space: Space) -> Result<PwQPolynomial, LibISLError> {
1205        let isl_rs_ctx = space.get_ctx();
1206        let mut space = space;
1207        space.do_not_free_on_drop();
1208        let space = space.ptr;
1209        let isl_rs_result = unsafe { isl_pw_qpolynomial_zero(space) };
1210        let isl_rs_result = PwQPolynomial { ptr: isl_rs_result,
1211                                            should_free_on_drop: true };
1212        let err = isl_rs_ctx.last_error();
1213        if err != Error::None_ {
1214            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1215        }
1216        Ok(isl_rs_result)
1217    }
1218
1219    /// Does not call isl_pw_qpolynomial_free() on being dropped. (For internal
1220    /// use only.)
1221    pub fn do_not_free_on_drop(&mut self) {
1222        self.should_free_on_drop = false;
1223    }
1224}
1225
1226impl Drop for PwQPolynomial {
1227    fn drop(&mut self) {
1228        if self.should_free_on_drop {
1229            unsafe {
1230                isl_pw_qpolynomial_free(self.ptr);
1231            }
1232        }
1233    }
1234}