isl_rs/bindings/
pw_qpolynomial_fold.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Context, DimType, Error, Fold, Id, LibISLError, Point, PwQPolynomial, PwQPolynomialFoldList,
6    QPolynomialFold, Set, Space, UnionPwQPolynomialFold, Val,
7};
8use libc::uintptr_t;
9use std::ffi::CString;
10use std::os::raw::c_char;
11
12/// Wraps `isl_pw_qpolynomial_fold`.
13pub struct PwQPolynomialFold {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_pw_qpolynomial_fold_add(pwf1: uintptr_t, pwf2: uintptr_t) -> uintptr_t;
21
22    fn isl_pw_qpolynomial_fold_add_disjoint(pwf1: uintptr_t, pwf2: uintptr_t) -> uintptr_t;
23
24    fn isl_pw_qpolynomial_fold_alloc(type_: i32, set: uintptr_t, fold: uintptr_t) -> uintptr_t;
25
26    fn isl_pw_qpolynomial_fold_as_qpolynomial_fold(pwf: uintptr_t) -> uintptr_t;
27
28    fn isl_pw_qpolynomial_fold_coalesce(pwf: uintptr_t) -> uintptr_t;
29
30    fn isl_pw_qpolynomial_fold_copy(pwf: uintptr_t) -> uintptr_t;
31
32    fn isl_pw_qpolynomial_fold_dim(pwf: uintptr_t, type_: i32) -> i32;
33
34    fn isl_pw_qpolynomial_fold_domain(pwf: uintptr_t) -> uintptr_t;
35
36    fn isl_pw_qpolynomial_fold_drop_dims(pwf: uintptr_t, type_: i32, first: u32, n: u32)
37                                         -> uintptr_t;
38
39    fn isl_pw_qpolynomial_fold_drop_unused_params(pwf: uintptr_t) -> uintptr_t;
40
41    fn isl_pw_qpolynomial_fold_dump(pwf: uintptr_t) -> ();
42
43    fn isl_pw_qpolynomial_fold_eval(pwf: uintptr_t, pnt: uintptr_t) -> uintptr_t;
44
45    fn isl_pw_qpolynomial_fold_find_dim_by_name(pwf: uintptr_t, type_: i32, name: *const c_char)
46                                                -> i32;
47
48    fn isl_pw_qpolynomial_fold_fix_val(pwf: uintptr_t, type_: i32, n: u32, v: uintptr_t)
49                                       -> uintptr_t;
50
51    fn isl_pw_qpolynomial_fold_fold(pwf1: uintptr_t, pwf2: uintptr_t) -> uintptr_t;
52
53    fn isl_pw_qpolynomial_fold_free(pwf: uintptr_t) -> uintptr_t;
54
55    fn isl_pw_qpolynomial_fold_from_pw_qpolynomial(type_: i32, pwqp: uintptr_t) -> uintptr_t;
56
57    fn isl_pw_qpolynomial_fold_from_qpolynomial_fold(fold: uintptr_t) -> uintptr_t;
58
59    fn isl_pw_qpolynomial_fold_from_range(pwf: uintptr_t) -> uintptr_t;
60
61    fn isl_pw_qpolynomial_fold_get_ctx(pwf: uintptr_t) -> uintptr_t;
62
63    fn isl_pw_qpolynomial_fold_get_domain_space(pwf: uintptr_t) -> uintptr_t;
64
65    fn isl_pw_qpolynomial_fold_get_space(pwf: uintptr_t) -> uintptr_t;
66
67    fn isl_pw_qpolynomial_fold_get_type(pwf: uintptr_t) -> i32;
68
69    fn isl_pw_qpolynomial_fold_gist(pwf: uintptr_t, context: uintptr_t) -> uintptr_t;
70
71    fn isl_pw_qpolynomial_fold_gist_params(pwf: uintptr_t, context: uintptr_t) -> uintptr_t;
72
73    fn isl_pw_qpolynomial_fold_has_equal_space(pwf1: uintptr_t, pwf2: uintptr_t) -> i32;
74
75    fn isl_pw_qpolynomial_fold_intersect_domain(pwf: uintptr_t, set: uintptr_t) -> uintptr_t;
76
77    fn isl_pw_qpolynomial_fold_intersect_domain_wrapped_domain(pwf: uintptr_t, set: uintptr_t)
78                                                               -> uintptr_t;
79
80    fn isl_pw_qpolynomial_fold_intersect_domain_wrapped_range(pwf: uintptr_t, set: uintptr_t)
81                                                              -> uintptr_t;
82
83    fn isl_pw_qpolynomial_fold_intersect_params(pwf: uintptr_t, set: uintptr_t) -> uintptr_t;
84
85    fn isl_pw_qpolynomial_fold_involves_nan(pwf: uintptr_t) -> i32;
86
87    fn isl_pw_qpolynomial_fold_involves_param_id(pwf: uintptr_t, id: uintptr_t) -> i32;
88
89    fn isl_pw_qpolynomial_fold_is_zero(pwf: uintptr_t) -> i32;
90
91    fn isl_pw_qpolynomial_fold_isa_qpolynomial_fold(pwf: uintptr_t) -> i32;
92
93    fn isl_pw_qpolynomial_fold_max(pwf: uintptr_t) -> uintptr_t;
94
95    fn isl_pw_qpolynomial_fold_min(pwf: uintptr_t) -> uintptr_t;
96
97    fn isl_pw_qpolynomial_fold_move_dims(pwf: uintptr_t, dst_type: i32, dst_pos: u32,
98                                         src_type: i32, src_pos: u32, n: u32)
99                                         -> uintptr_t;
100
101    fn isl_pw_qpolynomial_fold_n_piece(pwf: uintptr_t) -> i32;
102
103    fn isl_pw_qpolynomial_fold_plain_is_equal(pwf1: uintptr_t, pwf2: uintptr_t) -> i32;
104
105    fn isl_pw_qpolynomial_fold_project_domain_on_params(pwf: uintptr_t) -> uintptr_t;
106
107    fn isl_pw_qpolynomial_fold_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
108
109    fn isl_pw_qpolynomial_fold_reset_space(pwf: uintptr_t, space: uintptr_t) -> uintptr_t;
110
111    fn isl_pw_qpolynomial_fold_reset_user(pwf: uintptr_t) -> uintptr_t;
112
113    fn isl_pw_qpolynomial_fold_scale_down_val(pwf: uintptr_t, v: uintptr_t) -> uintptr_t;
114
115    fn isl_pw_qpolynomial_fold_scale_val(pwf: uintptr_t, v: uintptr_t) -> uintptr_t;
116
117    fn isl_pw_qpolynomial_fold_set_dim_name(pwf: uintptr_t, type_: i32, pos: u32, s: *const c_char)
118                                            -> uintptr_t;
119
120    fn isl_pw_qpolynomial_fold_size(pwf: uintptr_t) -> usize;
121
122    fn isl_pw_qpolynomial_fold_subtract_domain(pwf: uintptr_t, set: uintptr_t) -> uintptr_t;
123
124    fn isl_pw_qpolynomial_fold_to_list(el: uintptr_t) -> uintptr_t;
125
126    fn isl_pw_qpolynomial_fold_to_union_pw_qpolynomial_fold(pwf: uintptr_t) -> uintptr_t;
127
128    fn isl_pw_qpolynomial_fold_zero(space: uintptr_t, type_: i32) -> uintptr_t;
129
130}
131
132impl PwQPolynomialFold {
133    /// Wraps `isl_pw_qpolynomial_fold_add`.
134    pub fn add(self, pwf2: PwQPolynomialFold) -> Result<PwQPolynomialFold, LibISLError> {
135        let pwf1 = self;
136        let isl_rs_ctx = pwf1.get_ctx();
137        let mut pwf1 = pwf1;
138        pwf1.do_not_free_on_drop();
139        let pwf1 = pwf1.ptr;
140        let mut pwf2 = pwf2;
141        pwf2.do_not_free_on_drop();
142        let pwf2 = pwf2.ptr;
143        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_add(pwf1, pwf2) };
144        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
145                                                should_free_on_drop: true };
146        let err = isl_rs_ctx.last_error();
147        if err != Error::None_ {
148            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
149        }
150        Ok(isl_rs_result)
151    }
152
153    /// Wraps `isl_pw_qpolynomial_fold_add_disjoint`.
154    pub fn add_disjoint(self, pwf2: PwQPolynomialFold) -> Result<PwQPolynomialFold, LibISLError> {
155        let pwf1 = self;
156        let isl_rs_ctx = pwf1.get_ctx();
157        let mut pwf1 = pwf1;
158        pwf1.do_not_free_on_drop();
159        let pwf1 = pwf1.ptr;
160        let mut pwf2 = pwf2;
161        pwf2.do_not_free_on_drop();
162        let pwf2 = pwf2.ptr;
163        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_add_disjoint(pwf1, pwf2) };
164        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
165                                                should_free_on_drop: true };
166        let err = isl_rs_ctx.last_error();
167        if err != Error::None_ {
168            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
169        }
170        Ok(isl_rs_result)
171    }
172
173    /// Wraps `isl_pw_qpolynomial_fold_alloc`.
174    pub fn alloc(type_: Fold, set: Set, fold: QPolynomialFold)
175                 -> Result<PwQPolynomialFold, LibISLError> {
176        let isl_rs_ctx = set.get_ctx();
177        let type_ = type_.to_i32();
178        let mut set = set;
179        set.do_not_free_on_drop();
180        let set = set.ptr;
181        let mut fold = fold;
182        fold.do_not_free_on_drop();
183        let fold = fold.ptr;
184        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_alloc(type_, set, fold) };
185        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
186                                                should_free_on_drop: true };
187        let err = isl_rs_ctx.last_error();
188        if err != Error::None_ {
189            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
190        }
191        Ok(isl_rs_result)
192    }
193
194    /// Wraps `isl_pw_qpolynomial_fold_as_qpolynomial_fold`.
195    pub fn as_qpolynomial_fold(self) -> Result<QPolynomialFold, LibISLError> {
196        let pwf = self;
197        let isl_rs_ctx = pwf.get_ctx();
198        let mut pwf = pwf;
199        pwf.do_not_free_on_drop();
200        let pwf = pwf.ptr;
201        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_as_qpolynomial_fold(pwf) };
202        let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
203                                              should_free_on_drop: true };
204        let err = isl_rs_ctx.last_error();
205        if err != Error::None_ {
206            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
207        }
208        Ok(isl_rs_result)
209    }
210
211    /// Wraps `isl_pw_qpolynomial_fold_coalesce`.
212    pub fn coalesce(self) -> Result<PwQPolynomialFold, LibISLError> {
213        let pwf = self;
214        let isl_rs_ctx = pwf.get_ctx();
215        let mut pwf = pwf;
216        pwf.do_not_free_on_drop();
217        let pwf = pwf.ptr;
218        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_coalesce(pwf) };
219        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
220                                                should_free_on_drop: true };
221        let err = isl_rs_ctx.last_error();
222        if err != Error::None_ {
223            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
224        }
225        Ok(isl_rs_result)
226    }
227
228    /// Wraps `isl_pw_qpolynomial_fold_copy`.
229    pub fn copy(&self) -> Result<PwQPolynomialFold, LibISLError> {
230        let pwf = self;
231        let isl_rs_ctx = pwf.get_ctx();
232        let pwf = pwf.ptr;
233        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_copy(pwf) };
234        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
235                                                should_free_on_drop: true };
236        let err = isl_rs_ctx.last_error();
237        if err != Error::None_ {
238            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
239        }
240        Ok(isl_rs_result)
241    }
242
243    /// Wraps `isl_pw_qpolynomial_fold_dim`.
244    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
245        let pwf = self;
246        let isl_rs_ctx = pwf.get_ctx();
247        let pwf = pwf.ptr;
248        let type_ = type_.to_i32();
249        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_dim(pwf, type_) };
250        let err = isl_rs_ctx.last_error();
251        if err != Error::None_ {
252            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
253        }
254        Ok(isl_rs_result)
255    }
256
257    /// Wraps `isl_pw_qpolynomial_fold_domain`.
258    pub fn domain(self) -> Result<Set, LibISLError> {
259        let pwf = self;
260        let isl_rs_ctx = pwf.get_ctx();
261        let mut pwf = pwf;
262        pwf.do_not_free_on_drop();
263        let pwf = pwf.ptr;
264        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_domain(pwf) };
265        let isl_rs_result = Set { ptr: isl_rs_result,
266                                  should_free_on_drop: true };
267        let err = isl_rs_ctx.last_error();
268        if err != Error::None_ {
269            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
270        }
271        Ok(isl_rs_result)
272    }
273
274    /// Wraps `isl_pw_qpolynomial_fold_drop_dims`.
275    pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
276                     -> Result<PwQPolynomialFold, LibISLError> {
277        let pwf = self;
278        let isl_rs_ctx = pwf.get_ctx();
279        let mut pwf = pwf;
280        pwf.do_not_free_on_drop();
281        let pwf = pwf.ptr;
282        let type_ = type_.to_i32();
283        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_drop_dims(pwf, type_, first, n) };
284        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
285                                                should_free_on_drop: true };
286        let err = isl_rs_ctx.last_error();
287        if err != Error::None_ {
288            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
289        }
290        Ok(isl_rs_result)
291    }
292
293    /// Wraps `isl_pw_qpolynomial_fold_drop_unused_params`.
294    pub fn drop_unused_params(self) -> Result<PwQPolynomialFold, LibISLError> {
295        let pwf = self;
296        let isl_rs_ctx = pwf.get_ctx();
297        let mut pwf = pwf;
298        pwf.do_not_free_on_drop();
299        let pwf = pwf.ptr;
300        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_drop_unused_params(pwf) };
301        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
302                                                should_free_on_drop: true };
303        let err = isl_rs_ctx.last_error();
304        if err != Error::None_ {
305            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
306        }
307        Ok(isl_rs_result)
308    }
309
310    /// Wraps `isl_pw_qpolynomial_fold_dump`.
311    pub fn dump(&self) -> Result<(), LibISLError> {
312        let pwf = self;
313        let isl_rs_ctx = pwf.get_ctx();
314        let pwf = pwf.ptr;
315        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_dump(pwf) };
316        let err = isl_rs_ctx.last_error();
317        if err != Error::None_ {
318            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
319        }
320        Ok(isl_rs_result)
321    }
322
323    /// Wraps `isl_pw_qpolynomial_fold_eval`.
324    pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
325        let pwf = self;
326        let isl_rs_ctx = pwf.get_ctx();
327        let mut pwf = pwf;
328        pwf.do_not_free_on_drop();
329        let pwf = pwf.ptr;
330        let mut pnt = pnt;
331        pnt.do_not_free_on_drop();
332        let pnt = pnt.ptr;
333        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_eval(pwf, pnt) };
334        let isl_rs_result = Val { 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_fold_find_dim_by_name`.
344    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
345        let pwf = self;
346        let isl_rs_ctx = pwf.get_ctx();
347        let pwf = pwf.ptr;
348        let type_ = type_.to_i32();
349        let name = CString::new(name).unwrap();
350        let name = name.as_ptr();
351        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_find_dim_by_name(pwf, type_, name) };
352        let err = isl_rs_ctx.last_error();
353        if err != Error::None_ {
354            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
355        }
356        Ok(isl_rs_result)
357    }
358
359    /// Wraps `isl_pw_qpolynomial_fold_fix_val`.
360    pub fn fix_val(self, type_: DimType, n: u32, v: Val) -> Result<PwQPolynomialFold, LibISLError> {
361        let pwf = self;
362        let isl_rs_ctx = pwf.get_ctx();
363        let mut pwf = pwf;
364        pwf.do_not_free_on_drop();
365        let pwf = pwf.ptr;
366        let type_ = type_.to_i32();
367        let mut v = v;
368        v.do_not_free_on_drop();
369        let v = v.ptr;
370        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_fix_val(pwf, type_, n, v) };
371        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
372                                                should_free_on_drop: true };
373        let err = isl_rs_ctx.last_error();
374        if err != Error::None_ {
375            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
376        }
377        Ok(isl_rs_result)
378    }
379
380    /// Wraps `isl_pw_qpolynomial_fold_fold`.
381    pub fn fold(self, pwf2: PwQPolynomialFold) -> Result<PwQPolynomialFold, LibISLError> {
382        let pwf1 = self;
383        let isl_rs_ctx = pwf1.get_ctx();
384        let mut pwf1 = pwf1;
385        pwf1.do_not_free_on_drop();
386        let pwf1 = pwf1.ptr;
387        let mut pwf2 = pwf2;
388        pwf2.do_not_free_on_drop();
389        let pwf2 = pwf2.ptr;
390        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_fold(pwf1, pwf2) };
391        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
392                                                should_free_on_drop: true };
393        let err = isl_rs_ctx.last_error();
394        if err != Error::None_ {
395            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
396        }
397        Ok(isl_rs_result)
398    }
399
400    /// Wraps `isl_pw_qpolynomial_fold_free`.
401    pub fn free(self) -> Result<PwQPolynomialFold, LibISLError> {
402        let pwf = self;
403        let isl_rs_ctx = pwf.get_ctx();
404        let mut pwf = pwf;
405        pwf.do_not_free_on_drop();
406        let pwf = pwf.ptr;
407        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_free(pwf) };
408        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
409                                                should_free_on_drop: true };
410        let err = isl_rs_ctx.last_error();
411        if err != Error::None_ {
412            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
413        }
414        Ok(isl_rs_result)
415    }
416
417    /// Wraps `isl_pw_qpolynomial_fold_from_pw_qpolynomial`.
418    pub fn from_pw_qpolynomial(type_: Fold, pwqp: PwQPolynomial)
419                               -> Result<PwQPolynomialFold, LibISLError> {
420        let isl_rs_ctx = pwqp.get_ctx();
421        let type_ = type_.to_i32();
422        let mut pwqp = pwqp;
423        pwqp.do_not_free_on_drop();
424        let pwqp = pwqp.ptr;
425        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_from_pw_qpolynomial(type_, pwqp) };
426        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
427                                                should_free_on_drop: true };
428        let err = isl_rs_ctx.last_error();
429        if err != Error::None_ {
430            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
431        }
432        Ok(isl_rs_result)
433    }
434
435    /// Wraps `isl_pw_qpolynomial_fold_from_qpolynomial_fold`.
436    pub fn from_qpolynomial_fold(fold: QPolynomialFold) -> Result<PwQPolynomialFold, LibISLError> {
437        let isl_rs_ctx = fold.get_ctx();
438        let mut fold = fold;
439        fold.do_not_free_on_drop();
440        let fold = fold.ptr;
441        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_from_qpolynomial_fold(fold) };
442        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
443                                                should_free_on_drop: true };
444        let err = isl_rs_ctx.last_error();
445        if err != Error::None_ {
446            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
447        }
448        Ok(isl_rs_result)
449    }
450
451    /// Wraps `isl_pw_qpolynomial_fold_from_range`.
452    pub fn from_range(self) -> Result<PwQPolynomialFold, LibISLError> {
453        let pwf = self;
454        let isl_rs_ctx = pwf.get_ctx();
455        let mut pwf = pwf;
456        pwf.do_not_free_on_drop();
457        let pwf = pwf.ptr;
458        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_from_range(pwf) };
459        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
460                                                should_free_on_drop: true };
461        let err = isl_rs_ctx.last_error();
462        if err != Error::None_ {
463            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
464        }
465        Ok(isl_rs_result)
466    }
467
468    /// Wraps `isl_pw_qpolynomial_fold_get_ctx`.
469    pub fn get_ctx(&self) -> Context {
470        let pwf = self;
471        let pwf = pwf.ptr;
472        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_get_ctx(pwf) };
473        let isl_rs_result = Context { ptr: isl_rs_result,
474                                      should_free_on_drop: false };
475        isl_rs_result
476    }
477
478    /// Wraps `isl_pw_qpolynomial_fold_get_domain_space`.
479    pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
480        let pwf = self;
481        let isl_rs_ctx = pwf.get_ctx();
482        let pwf = pwf.ptr;
483        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_get_domain_space(pwf) };
484        let isl_rs_result = Space { ptr: isl_rs_result,
485                                    should_free_on_drop: true };
486        let err = isl_rs_ctx.last_error();
487        if err != Error::None_ {
488            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
489        }
490        Ok(isl_rs_result)
491    }
492
493    /// Wraps `isl_pw_qpolynomial_fold_get_space`.
494    pub fn get_space(&self) -> Result<Space, LibISLError> {
495        let pwf = self;
496        let isl_rs_ctx = pwf.get_ctx();
497        let pwf = pwf.ptr;
498        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_get_space(pwf) };
499        let isl_rs_result = Space { ptr: isl_rs_result,
500                                    should_free_on_drop: true };
501        let err = isl_rs_ctx.last_error();
502        if err != Error::None_ {
503            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
504        }
505        Ok(isl_rs_result)
506    }
507
508    /// Wraps `isl_pw_qpolynomial_fold_get_type`.
509    pub fn get_type(&self) -> Result<Fold, LibISLError> {
510        let pwf = self;
511        let isl_rs_ctx = pwf.get_ctx();
512        let pwf = pwf.ptr;
513        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_get_type(pwf) };
514        let isl_rs_result = Fold::from_i32(isl_rs_result);
515        let err = isl_rs_ctx.last_error();
516        if err != Error::None_ {
517            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
518        }
519        Ok(isl_rs_result)
520    }
521
522    /// Wraps `isl_pw_qpolynomial_fold_gist`.
523    pub fn gist(self, context: Set) -> Result<PwQPolynomialFold, LibISLError> {
524        let pwf = self;
525        let isl_rs_ctx = pwf.get_ctx();
526        let mut pwf = pwf;
527        pwf.do_not_free_on_drop();
528        let pwf = pwf.ptr;
529        let mut context = context;
530        context.do_not_free_on_drop();
531        let context = context.ptr;
532        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_gist(pwf, context) };
533        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
534                                                should_free_on_drop: true };
535        let err = isl_rs_ctx.last_error();
536        if err != Error::None_ {
537            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
538        }
539        Ok(isl_rs_result)
540    }
541
542    /// Wraps `isl_pw_qpolynomial_fold_gist_params`.
543    pub fn gist_params(self, context: Set) -> Result<PwQPolynomialFold, LibISLError> {
544        let pwf = self;
545        let isl_rs_ctx = pwf.get_ctx();
546        let mut pwf = pwf;
547        pwf.do_not_free_on_drop();
548        let pwf = pwf.ptr;
549        let mut context = context;
550        context.do_not_free_on_drop();
551        let context = context.ptr;
552        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_gist_params(pwf, context) };
553        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
554                                                should_free_on_drop: true };
555        let err = isl_rs_ctx.last_error();
556        if err != Error::None_ {
557            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
558        }
559        Ok(isl_rs_result)
560    }
561
562    /// Wraps `isl_pw_qpolynomial_fold_has_equal_space`.
563    pub fn has_equal_space(&self, pwf2: &PwQPolynomialFold) -> Result<bool, LibISLError> {
564        let pwf1 = self;
565        let isl_rs_ctx = pwf1.get_ctx();
566        let pwf1 = pwf1.ptr;
567        let pwf2 = pwf2.ptr;
568        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_has_equal_space(pwf1, pwf2) };
569        let isl_rs_result = match isl_rs_result {
570            0 => false,
571            1 => true,
572            _ => panic!("Got isl_bool = -1"),
573        };
574        let err = isl_rs_ctx.last_error();
575        if err != Error::None_ {
576            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
577        }
578        Ok(isl_rs_result)
579    }
580
581    /// Wraps `isl_pw_qpolynomial_fold_intersect_domain`.
582    pub fn intersect_domain(self, set: Set) -> Result<PwQPolynomialFold, LibISLError> {
583        let pwf = self;
584        let isl_rs_ctx = pwf.get_ctx();
585        let mut pwf = pwf;
586        pwf.do_not_free_on_drop();
587        let pwf = pwf.ptr;
588        let mut set = set;
589        set.do_not_free_on_drop();
590        let set = set.ptr;
591        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_intersect_domain(pwf, set) };
592        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
593                                                should_free_on_drop: true };
594        let err = isl_rs_ctx.last_error();
595        if err != Error::None_ {
596            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
597        }
598        Ok(isl_rs_result)
599    }
600
601    /// Wraps `isl_pw_qpolynomial_fold_intersect_domain_wrapped_domain`.
602    pub fn intersect_domain_wrapped_domain(self, set: Set)
603                                           -> Result<PwQPolynomialFold, LibISLError> {
604        let pwf = self;
605        let isl_rs_ctx = pwf.get_ctx();
606        let mut pwf = pwf;
607        pwf.do_not_free_on_drop();
608        let pwf = pwf.ptr;
609        let mut set = set;
610        set.do_not_free_on_drop();
611        let set = set.ptr;
612        let isl_rs_result =
613            unsafe { isl_pw_qpolynomial_fold_intersect_domain_wrapped_domain(pwf, set) };
614        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
615                                                should_free_on_drop: true };
616        let err = isl_rs_ctx.last_error();
617        if err != Error::None_ {
618            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
619        }
620        Ok(isl_rs_result)
621    }
622
623    /// Wraps `isl_pw_qpolynomial_fold_intersect_domain_wrapped_range`.
624    pub fn intersect_domain_wrapped_range(self, set: Set)
625                                          -> Result<PwQPolynomialFold, LibISLError> {
626        let pwf = self;
627        let isl_rs_ctx = pwf.get_ctx();
628        let mut pwf = pwf;
629        pwf.do_not_free_on_drop();
630        let pwf = pwf.ptr;
631        let mut set = set;
632        set.do_not_free_on_drop();
633        let set = set.ptr;
634        let isl_rs_result =
635            unsafe { isl_pw_qpolynomial_fold_intersect_domain_wrapped_range(pwf, set) };
636        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
637                                                should_free_on_drop: true };
638        let err = isl_rs_ctx.last_error();
639        if err != Error::None_ {
640            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
641        }
642        Ok(isl_rs_result)
643    }
644
645    /// Wraps `isl_pw_qpolynomial_fold_intersect_params`.
646    pub fn intersect_params(self, set: Set) -> Result<PwQPolynomialFold, LibISLError> {
647        let pwf = self;
648        let isl_rs_ctx = pwf.get_ctx();
649        let mut pwf = pwf;
650        pwf.do_not_free_on_drop();
651        let pwf = pwf.ptr;
652        let mut set = set;
653        set.do_not_free_on_drop();
654        let set = set.ptr;
655        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_intersect_params(pwf, set) };
656        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
657                                                should_free_on_drop: true };
658        let err = isl_rs_ctx.last_error();
659        if err != Error::None_ {
660            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
661        }
662        Ok(isl_rs_result)
663    }
664
665    /// Wraps `isl_pw_qpolynomial_fold_involves_nan`.
666    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
667        let pwf = self;
668        let isl_rs_ctx = pwf.get_ctx();
669        let pwf = pwf.ptr;
670        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_involves_nan(pwf) };
671        let isl_rs_result = match isl_rs_result {
672            0 => false,
673            1 => true,
674            _ => panic!("Got isl_bool = -1"),
675        };
676        let err = isl_rs_ctx.last_error();
677        if err != Error::None_ {
678            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
679        }
680        Ok(isl_rs_result)
681    }
682
683    /// Wraps `isl_pw_qpolynomial_fold_involves_param_id`.
684    pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
685        let pwf = self;
686        let isl_rs_ctx = pwf.get_ctx();
687        let pwf = pwf.ptr;
688        let id = id.ptr;
689        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_involves_param_id(pwf, id) };
690        let isl_rs_result = match isl_rs_result {
691            0 => false,
692            1 => true,
693            _ => panic!("Got isl_bool = -1"),
694        };
695        let err = isl_rs_ctx.last_error();
696        if err != Error::None_ {
697            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
698        }
699        Ok(isl_rs_result)
700    }
701
702    /// Wraps `isl_pw_qpolynomial_fold_is_zero`.
703    pub fn is_zero(&self) -> Result<bool, LibISLError> {
704        let pwf = self;
705        let isl_rs_ctx = pwf.get_ctx();
706        let pwf = pwf.ptr;
707        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_is_zero(pwf) };
708        let isl_rs_result = match isl_rs_result {
709            0 => false,
710            1 => true,
711            _ => panic!("Got isl_bool = -1"),
712        };
713        let err = isl_rs_ctx.last_error();
714        if err != Error::None_ {
715            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
716        }
717        Ok(isl_rs_result)
718    }
719
720    /// Wraps `isl_pw_qpolynomial_fold_isa_qpolynomial_fold`.
721    pub fn isa_qpolynomial_fold(&self) -> Result<bool, LibISLError> {
722        let pwf = self;
723        let isl_rs_ctx = pwf.get_ctx();
724        let pwf = pwf.ptr;
725        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_isa_qpolynomial_fold(pwf) };
726        let isl_rs_result = match isl_rs_result {
727            0 => false,
728            1 => true,
729            _ => panic!("Got isl_bool = -1"),
730        };
731        let err = isl_rs_ctx.last_error();
732        if err != Error::None_ {
733            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
734        }
735        Ok(isl_rs_result)
736    }
737
738    /// Wraps `isl_pw_qpolynomial_fold_max`.
739    pub fn max(self) -> Result<Val, LibISLError> {
740        let pwf = self;
741        let isl_rs_ctx = pwf.get_ctx();
742        let mut pwf = pwf;
743        pwf.do_not_free_on_drop();
744        let pwf = pwf.ptr;
745        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_max(pwf) };
746        let isl_rs_result = Val { ptr: isl_rs_result,
747                                  should_free_on_drop: true };
748        let err = isl_rs_ctx.last_error();
749        if err != Error::None_ {
750            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
751        }
752        Ok(isl_rs_result)
753    }
754
755    /// Wraps `isl_pw_qpolynomial_fold_min`.
756    pub fn min(self) -> Result<Val, LibISLError> {
757        let pwf = self;
758        let isl_rs_ctx = pwf.get_ctx();
759        let mut pwf = pwf;
760        pwf.do_not_free_on_drop();
761        let pwf = pwf.ptr;
762        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_min(pwf) };
763        let isl_rs_result = Val { ptr: isl_rs_result,
764                                  should_free_on_drop: true };
765        let err = isl_rs_ctx.last_error();
766        if err != Error::None_ {
767            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
768        }
769        Ok(isl_rs_result)
770    }
771
772    /// Wraps `isl_pw_qpolynomial_fold_move_dims`.
773    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
774                     n: u32)
775                     -> Result<PwQPolynomialFold, LibISLError> {
776        let pwf = self;
777        let isl_rs_ctx = pwf.get_ctx();
778        let mut pwf = pwf;
779        pwf.do_not_free_on_drop();
780        let pwf = pwf.ptr;
781        let dst_type = dst_type.to_i32();
782        let src_type = src_type.to_i32();
783        let isl_rs_result = unsafe {
784            isl_pw_qpolynomial_fold_move_dims(pwf, dst_type, dst_pos, src_type, src_pos, n)
785        };
786        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
787                                                should_free_on_drop: true };
788        let err = isl_rs_ctx.last_error();
789        if err != Error::None_ {
790            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
791        }
792        Ok(isl_rs_result)
793    }
794
795    /// Wraps `isl_pw_qpolynomial_fold_n_piece`.
796    pub fn n_piece(&self) -> Result<i32, LibISLError> {
797        let pwf = self;
798        let isl_rs_ctx = pwf.get_ctx();
799        let pwf = pwf.ptr;
800        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_n_piece(pwf) };
801        let err = isl_rs_ctx.last_error();
802        if err != Error::None_ {
803            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
804        }
805        Ok(isl_rs_result)
806    }
807
808    /// Wraps `isl_pw_qpolynomial_fold_plain_is_equal`.
809    pub fn plain_is_equal(&self, pwf2: &PwQPolynomialFold) -> Result<bool, LibISLError> {
810        let pwf1 = self;
811        let isl_rs_ctx = pwf1.get_ctx();
812        let pwf1 = pwf1.ptr;
813        let pwf2 = pwf2.ptr;
814        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_plain_is_equal(pwf1, pwf2) };
815        let isl_rs_result = match isl_rs_result {
816            0 => false,
817            1 => true,
818            _ => panic!("Got isl_bool = -1"),
819        };
820        let err = isl_rs_ctx.last_error();
821        if err != Error::None_ {
822            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
823        }
824        Ok(isl_rs_result)
825    }
826
827    /// Wraps `isl_pw_qpolynomial_fold_project_domain_on_params`.
828    pub fn project_domain_on_params(self) -> Result<PwQPolynomialFold, LibISLError> {
829        let pwf = self;
830        let isl_rs_ctx = pwf.get_ctx();
831        let mut pwf = pwf;
832        pwf.do_not_free_on_drop();
833        let pwf = pwf.ptr;
834        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_project_domain_on_params(pwf) };
835        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
836                                                should_free_on_drop: true };
837        let err = isl_rs_ctx.last_error();
838        if err != Error::None_ {
839            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
840        }
841        Ok(isl_rs_result)
842    }
843
844    /// Wraps `isl_pw_qpolynomial_fold_read_from_str`.
845    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwQPolynomialFold, LibISLError> {
846        let isl_rs_ctx = Context { ptr: ctx.ptr,
847                                   should_free_on_drop: false };
848        let ctx = ctx.ptr;
849        let str_ = CString::new(str_).unwrap();
850        let str_ = str_.as_ptr();
851        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_read_from_str(ctx, str_) };
852        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
853                                                should_free_on_drop: true };
854        let err = isl_rs_ctx.last_error();
855        if err != Error::None_ {
856            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
857        }
858        Ok(isl_rs_result)
859    }
860
861    /// Wraps `isl_pw_qpolynomial_fold_reset_space`.
862    pub fn reset_space(self, space: Space) -> Result<PwQPolynomialFold, LibISLError> {
863        let pwf = self;
864        let isl_rs_ctx = pwf.get_ctx();
865        let mut pwf = pwf;
866        pwf.do_not_free_on_drop();
867        let pwf = pwf.ptr;
868        let mut space = space;
869        space.do_not_free_on_drop();
870        let space = space.ptr;
871        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_reset_space(pwf, space) };
872        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
873                                                should_free_on_drop: true };
874        let err = isl_rs_ctx.last_error();
875        if err != Error::None_ {
876            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
877        }
878        Ok(isl_rs_result)
879    }
880
881    /// Wraps `isl_pw_qpolynomial_fold_reset_user`.
882    pub fn reset_user(self) -> Result<PwQPolynomialFold, LibISLError> {
883        let pwf = self;
884        let isl_rs_ctx = pwf.get_ctx();
885        let mut pwf = pwf;
886        pwf.do_not_free_on_drop();
887        let pwf = pwf.ptr;
888        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_reset_user(pwf) };
889        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
890                                                should_free_on_drop: true };
891        let err = isl_rs_ctx.last_error();
892        if err != Error::None_ {
893            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
894        }
895        Ok(isl_rs_result)
896    }
897
898    /// Wraps `isl_pw_qpolynomial_fold_scale_down_val`.
899    pub fn scale_down_val(self, v: Val) -> Result<PwQPolynomialFold, LibISLError> {
900        let pwf = self;
901        let isl_rs_ctx = pwf.get_ctx();
902        let mut pwf = pwf;
903        pwf.do_not_free_on_drop();
904        let pwf = pwf.ptr;
905        let mut v = v;
906        v.do_not_free_on_drop();
907        let v = v.ptr;
908        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_scale_down_val(pwf, v) };
909        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
910                                                should_free_on_drop: true };
911        let err = isl_rs_ctx.last_error();
912        if err != Error::None_ {
913            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
914        }
915        Ok(isl_rs_result)
916    }
917
918    /// Wraps `isl_pw_qpolynomial_fold_scale_val`.
919    pub fn scale_val(self, v: Val) -> Result<PwQPolynomialFold, LibISLError> {
920        let pwf = self;
921        let isl_rs_ctx = pwf.get_ctx();
922        let mut pwf = pwf;
923        pwf.do_not_free_on_drop();
924        let pwf = pwf.ptr;
925        let mut v = v;
926        v.do_not_free_on_drop();
927        let v = v.ptr;
928        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_scale_val(pwf, v) };
929        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
930                                                should_free_on_drop: true };
931        let err = isl_rs_ctx.last_error();
932        if err != Error::None_ {
933            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
934        }
935        Ok(isl_rs_result)
936    }
937
938    /// Wraps `isl_pw_qpolynomial_fold_set_dim_name`.
939    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
940                        -> Result<PwQPolynomialFold, LibISLError> {
941        let pwf = self;
942        let isl_rs_ctx = pwf.get_ctx();
943        let mut pwf = pwf;
944        pwf.do_not_free_on_drop();
945        let pwf = pwf.ptr;
946        let type_ = type_.to_i32();
947        let s = CString::new(s).unwrap();
948        let s = s.as_ptr();
949        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_set_dim_name(pwf, type_, pos, s) };
950        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
951                                                should_free_on_drop: true };
952        let err = isl_rs_ctx.last_error();
953        if err != Error::None_ {
954            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
955        }
956        Ok(isl_rs_result)
957    }
958
959    /// Wraps `isl_pw_qpolynomial_fold_size`.
960    pub fn size(&self) -> Result<usize, LibISLError> {
961        let pwf = self;
962        let isl_rs_ctx = pwf.get_ctx();
963        let pwf = pwf.ptr;
964        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_size(pwf) };
965        let err = isl_rs_ctx.last_error();
966        if err != Error::None_ {
967            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
968        }
969        Ok(isl_rs_result)
970    }
971
972    /// Wraps `isl_pw_qpolynomial_fold_subtract_domain`.
973    pub fn subtract_domain(self, set: Set) -> Result<PwQPolynomialFold, LibISLError> {
974        let pwf = self;
975        let isl_rs_ctx = pwf.get_ctx();
976        let mut pwf = pwf;
977        pwf.do_not_free_on_drop();
978        let pwf = pwf.ptr;
979        let mut set = set;
980        set.do_not_free_on_drop();
981        let set = set.ptr;
982        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_subtract_domain(pwf, set) };
983        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
984                                                should_free_on_drop: true };
985        let err = isl_rs_ctx.last_error();
986        if err != Error::None_ {
987            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
988        }
989        Ok(isl_rs_result)
990    }
991
992    /// Wraps `isl_pw_qpolynomial_fold_to_list`.
993    pub fn to_list(self) -> Result<PwQPolynomialFoldList, LibISLError> {
994        let el = self;
995        let isl_rs_ctx = el.get_ctx();
996        let mut el = el;
997        el.do_not_free_on_drop();
998        let el = el.ptr;
999        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_to_list(el) };
1000        let isl_rs_result = PwQPolynomialFoldList { ptr: isl_rs_result,
1001                                                    should_free_on_drop: true };
1002        let err = isl_rs_ctx.last_error();
1003        if err != Error::None_ {
1004            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1005        }
1006        Ok(isl_rs_result)
1007    }
1008
1009    /// Wraps `isl_pw_qpolynomial_fold_to_union_pw_qpolynomial_fold`.
1010    pub fn to_union_pw_qpolynomial_fold(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
1011        let pwf = self;
1012        let isl_rs_ctx = pwf.get_ctx();
1013        let mut pwf = pwf;
1014        pwf.do_not_free_on_drop();
1015        let pwf = pwf.ptr;
1016        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_to_union_pw_qpolynomial_fold(pwf) };
1017        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
1018                                                     should_free_on_drop: true };
1019        let err = isl_rs_ctx.last_error();
1020        if err != Error::None_ {
1021            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1022        }
1023        Ok(isl_rs_result)
1024    }
1025
1026    /// Wraps `isl_pw_qpolynomial_fold_zero`.
1027    pub fn zero(space: Space, type_: Fold) -> Result<PwQPolynomialFold, LibISLError> {
1028        let isl_rs_ctx = space.get_ctx();
1029        let mut space = space;
1030        space.do_not_free_on_drop();
1031        let space = space.ptr;
1032        let type_ = type_.to_i32();
1033        let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_zero(space, type_) };
1034        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
1035                                                should_free_on_drop: true };
1036        let err = isl_rs_ctx.last_error();
1037        if err != Error::None_ {
1038            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1039        }
1040        Ok(isl_rs_result)
1041    }
1042
1043    /// Does not call isl_pw_qpolynomial_fold_free() on being dropped. (For
1044    /// internal use only.)
1045    pub fn do_not_free_on_drop(&mut self) {
1046        self.should_free_on_drop = false;
1047    }
1048}
1049
1050impl Drop for PwQPolynomialFold {
1051    fn drop(&mut self) {
1052        if self.should_free_on_drop {
1053            unsafe {
1054                isl_pw_qpolynomial_fold_free(self.ptr);
1055            }
1056        }
1057    }
1058}