isl_rs/bindings/
union_pw_qpolynomial_fold.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Context, DimType, Error, Fold, LibISLError, Point, PwQPolynomialFold, PwQPolynomialFoldList,
6    Set, Space, UnionPwQPolynomial, UnionSet, Val,
7};
8use libc::uintptr_t;
9use std::ffi::CString;
10use std::os::raw::c_char;
11
12/// Wraps `isl_union_pw_qpolynomial_fold`.
13pub struct UnionPwQPolynomialFold {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_union_pw_qpolynomial_fold_add_union_pw_qpolynomial(upwf: uintptr_t, upwqp: uintptr_t)
21                                                              -> uintptr_t;
22
23    fn isl_union_pw_qpolynomial_fold_align_params(upwf: uintptr_t, model: uintptr_t) -> uintptr_t;
24
25    fn isl_union_pw_qpolynomial_fold_coalesce(upwf: uintptr_t) -> uintptr_t;
26
27    fn isl_union_pw_qpolynomial_fold_copy(upwf: uintptr_t) -> uintptr_t;
28
29    fn isl_union_pw_qpolynomial_fold_dim(upwf: uintptr_t, type_: i32) -> i32;
30
31    fn isl_union_pw_qpolynomial_fold_domain(upwf: uintptr_t) -> uintptr_t;
32
33    fn isl_union_pw_qpolynomial_fold_drop_dims(upwf: uintptr_t, type_: i32, first: u32, n: u32)
34                                               -> uintptr_t;
35
36    fn isl_union_pw_qpolynomial_fold_drop_unused_params(upwf: uintptr_t) -> uintptr_t;
37
38    fn isl_union_pw_qpolynomial_fold_eval(upwf: uintptr_t, pnt: uintptr_t) -> uintptr_t;
39
40    fn isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold(upwf: uintptr_t, space: uintptr_t)
41                                                                 -> uintptr_t;
42
43    fn isl_union_pw_qpolynomial_fold_find_dim_by_name(upwf: uintptr_t, type_: i32,
44                                                      name: *const c_char)
45                                                      -> i32;
46
47    fn isl_union_pw_qpolynomial_fold_fold(upwf1: uintptr_t, upwf2: uintptr_t) -> uintptr_t;
48
49    fn isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold(upwqp: uintptr_t, pwqp: uintptr_t)
50                                                              -> uintptr_t;
51
52    fn isl_union_pw_qpolynomial_fold_free(upwf: uintptr_t) -> uintptr_t;
53
54    fn isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(pwf: uintptr_t) -> uintptr_t;
55
56    fn isl_union_pw_qpolynomial_fold_get_ctx(upwf: uintptr_t) -> uintptr_t;
57
58    fn isl_union_pw_qpolynomial_fold_get_pw_qpolynomial_fold_list(upwf: uintptr_t) -> uintptr_t;
59
60    fn isl_union_pw_qpolynomial_fold_get_space(upwf: uintptr_t) -> uintptr_t;
61
62    fn isl_union_pw_qpolynomial_fold_get_type(upwf: uintptr_t) -> i32;
63
64    fn isl_union_pw_qpolynomial_fold_gist(upwf: uintptr_t, context: uintptr_t) -> uintptr_t;
65
66    fn isl_union_pw_qpolynomial_fold_gist_params(upwf: uintptr_t, context: uintptr_t) -> uintptr_t;
67
68    fn isl_union_pw_qpolynomial_fold_intersect_domain(upwf: uintptr_t, uset: uintptr_t)
69                                                      -> uintptr_t;
70
71    fn isl_union_pw_qpolynomial_fold_intersect_domain_space(upwf: uintptr_t, space: uintptr_t)
72                                                            -> uintptr_t;
73
74    fn isl_union_pw_qpolynomial_fold_intersect_domain_union_set(upwf: uintptr_t, uset: uintptr_t)
75                                                                -> uintptr_t;
76
77    fn isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_domain(upwf: uintptr_t,
78                                                                     uset: uintptr_t)
79                                                                     -> uintptr_t;
80
81    fn isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_range(upwf: uintptr_t,
82                                                                    uset: uintptr_t)
83                                                                    -> uintptr_t;
84
85    fn isl_union_pw_qpolynomial_fold_intersect_params(upwf: uintptr_t, set: uintptr_t)
86                                                      -> uintptr_t;
87
88    fn isl_union_pw_qpolynomial_fold_involves_nan(upwf: uintptr_t) -> i32;
89
90    fn isl_union_pw_qpolynomial_fold_n_pw_qpolynomial_fold(upwf: uintptr_t) -> i32;
91
92    fn isl_union_pw_qpolynomial_fold_plain_is_equal(upwf1: uintptr_t, upwf2: uintptr_t) -> i32;
93
94    fn isl_union_pw_qpolynomial_fold_reset_user(upwf: uintptr_t) -> uintptr_t;
95
96    fn isl_union_pw_qpolynomial_fold_scale_down_val(upwf: uintptr_t, v: uintptr_t) -> uintptr_t;
97
98    fn isl_union_pw_qpolynomial_fold_scale_val(upwf: uintptr_t, v: uintptr_t) -> uintptr_t;
99
100    fn isl_union_pw_qpolynomial_fold_set_dim_name(upwf: uintptr_t, type_: i32, pos: u32,
101                                                  s: *const c_char)
102                                                  -> uintptr_t;
103
104    fn isl_union_pw_qpolynomial_fold_subtract_domain(upwf: uintptr_t, uset: uintptr_t)
105                                                     -> uintptr_t;
106
107    fn isl_union_pw_qpolynomial_fold_subtract_domain_space(upwf: uintptr_t, space: uintptr_t)
108                                                           -> uintptr_t;
109
110    fn isl_union_pw_qpolynomial_fold_subtract_domain_union_set(upwf: uintptr_t, uset: uintptr_t)
111                                                               -> uintptr_t;
112
113    fn isl_union_pw_qpolynomial_fold_zero(space: uintptr_t, type_: i32) -> uintptr_t;
114
115    fn isl_union_pw_qpolynomial_fold_zero_ctx(ctx: uintptr_t, type_: i32) -> uintptr_t;
116
117    fn isl_union_pw_qpolynomial_fold_zero_space(space: uintptr_t, type_: i32) -> uintptr_t;
118
119}
120
121impl UnionPwQPolynomialFold {
122    /// Wraps `isl_union_pw_qpolynomial_fold_add_union_pw_qpolynomial`.
123    pub fn add_union_pw_qpolynomial(self, upwqp: UnionPwQPolynomial)
124                                    -> Result<UnionPwQPolynomialFold, LibISLError> {
125        let upwf = self;
126        let isl_rs_ctx = upwf.get_ctx();
127        let mut upwf = upwf;
128        upwf.do_not_free_on_drop();
129        let upwf = upwf.ptr;
130        let mut upwqp = upwqp;
131        upwqp.do_not_free_on_drop();
132        let upwqp = upwqp.ptr;
133        let isl_rs_result =
134            unsafe { isl_union_pw_qpolynomial_fold_add_union_pw_qpolynomial(upwf, upwqp) };
135        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
136                                                     should_free_on_drop: true };
137        let err = isl_rs_ctx.last_error();
138        if err != Error::None_ {
139            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
140        }
141        Ok(isl_rs_result)
142    }
143
144    /// Wraps `isl_union_pw_qpolynomial_fold_align_params`.
145    pub fn align_params(self, model: Space) -> Result<UnionPwQPolynomialFold, LibISLError> {
146        let upwf = self;
147        let isl_rs_ctx = upwf.get_ctx();
148        let mut upwf = upwf;
149        upwf.do_not_free_on_drop();
150        let upwf = upwf.ptr;
151        let mut model = model;
152        model.do_not_free_on_drop();
153        let model = model.ptr;
154        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_align_params(upwf, model) };
155        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
156                                                     should_free_on_drop: true };
157        let err = isl_rs_ctx.last_error();
158        if err != Error::None_ {
159            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
160        }
161        Ok(isl_rs_result)
162    }
163
164    /// Wraps `isl_union_pw_qpolynomial_fold_coalesce`.
165    pub fn coalesce(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
166        let upwf = self;
167        let isl_rs_ctx = upwf.get_ctx();
168        let mut upwf = upwf;
169        upwf.do_not_free_on_drop();
170        let upwf = upwf.ptr;
171        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_coalesce(upwf) };
172        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
173                                                     should_free_on_drop: true };
174        let err = isl_rs_ctx.last_error();
175        if err != Error::None_ {
176            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
177        }
178        Ok(isl_rs_result)
179    }
180
181    /// Wraps `isl_union_pw_qpolynomial_fold_copy`.
182    pub fn copy(&self) -> Result<UnionPwQPolynomialFold, LibISLError> {
183        let upwf = self;
184        let isl_rs_ctx = upwf.get_ctx();
185        let upwf = upwf.ptr;
186        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_copy(upwf) };
187        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
188                                                     should_free_on_drop: true };
189        let err = isl_rs_ctx.last_error();
190        if err != Error::None_ {
191            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
192        }
193        Ok(isl_rs_result)
194    }
195
196    /// Wraps `isl_union_pw_qpolynomial_fold_dim`.
197    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
198        let upwf = self;
199        let isl_rs_ctx = upwf.get_ctx();
200        let upwf = upwf.ptr;
201        let type_ = type_.to_i32();
202        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_dim(upwf, type_) };
203        let err = isl_rs_ctx.last_error();
204        if err != Error::None_ {
205            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
206        }
207        Ok(isl_rs_result)
208    }
209
210    /// Wraps `isl_union_pw_qpolynomial_fold_domain`.
211    pub fn domain(self) -> Result<UnionSet, LibISLError> {
212        let upwf = self;
213        let isl_rs_ctx = upwf.get_ctx();
214        let mut upwf = upwf;
215        upwf.do_not_free_on_drop();
216        let upwf = upwf.ptr;
217        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_domain(upwf) };
218        let isl_rs_result = UnionSet { 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_union_pw_qpolynomial_fold_drop_dims`.
228    pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
229                     -> Result<UnionPwQPolynomialFold, LibISLError> {
230        let upwf = self;
231        let isl_rs_ctx = upwf.get_ctx();
232        let mut upwf = upwf;
233        upwf.do_not_free_on_drop();
234        let upwf = upwf.ptr;
235        let type_ = type_.to_i32();
236        let isl_rs_result =
237            unsafe { isl_union_pw_qpolynomial_fold_drop_dims(upwf, type_, first, n) };
238        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
239                                                     should_free_on_drop: true };
240        let err = isl_rs_ctx.last_error();
241        if err != Error::None_ {
242            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
243        }
244        Ok(isl_rs_result)
245    }
246
247    /// Wraps `isl_union_pw_qpolynomial_fold_drop_unused_params`.
248    pub fn drop_unused_params(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
249        let upwf = self;
250        let isl_rs_ctx = upwf.get_ctx();
251        let mut upwf = upwf;
252        upwf.do_not_free_on_drop();
253        let upwf = upwf.ptr;
254        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_drop_unused_params(upwf) };
255        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
256                                                     should_free_on_drop: true };
257        let err = isl_rs_ctx.last_error();
258        if err != Error::None_ {
259            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
260        }
261        Ok(isl_rs_result)
262    }
263
264    /// Wraps `isl_union_pw_qpolynomial_fold_eval`.
265    pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
266        let upwf = self;
267        let isl_rs_ctx = upwf.get_ctx();
268        let mut upwf = upwf;
269        upwf.do_not_free_on_drop();
270        let upwf = upwf.ptr;
271        let mut pnt = pnt;
272        pnt.do_not_free_on_drop();
273        let pnt = pnt.ptr;
274        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_eval(upwf, pnt) };
275        let isl_rs_result = Val { ptr: isl_rs_result,
276                                  should_free_on_drop: true };
277        let err = isl_rs_ctx.last_error();
278        if err != Error::None_ {
279            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
280        }
281        Ok(isl_rs_result)
282    }
283
284    /// Wraps `isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold`.
285    pub fn extract_pw_qpolynomial_fold(&self, space: Space)
286                                       -> Result<PwQPolynomialFold, LibISLError> {
287        let upwf = self;
288        let isl_rs_ctx = upwf.get_ctx();
289        let upwf = upwf.ptr;
290        let mut space = space;
291        space.do_not_free_on_drop();
292        let space = space.ptr;
293        let isl_rs_result =
294            unsafe { isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold(upwf, space) };
295        let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
296                                                should_free_on_drop: true };
297        let err = isl_rs_ctx.last_error();
298        if err != Error::None_ {
299            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
300        }
301        Ok(isl_rs_result)
302    }
303
304    /// Wraps `isl_union_pw_qpolynomial_fold_find_dim_by_name`.
305    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
306        let upwf = self;
307        let isl_rs_ctx = upwf.get_ctx();
308        let upwf = upwf.ptr;
309        let type_ = type_.to_i32();
310        let name = CString::new(name).unwrap();
311        let name = name.as_ptr();
312        let isl_rs_result =
313            unsafe { isl_union_pw_qpolynomial_fold_find_dim_by_name(upwf, type_, name) };
314        let err = isl_rs_ctx.last_error();
315        if err != Error::None_ {
316            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
317        }
318        Ok(isl_rs_result)
319    }
320
321    /// Wraps `isl_union_pw_qpolynomial_fold_fold`.
322    pub fn fold(self, upwf2: UnionPwQPolynomialFold)
323                -> Result<UnionPwQPolynomialFold, LibISLError> {
324        let upwf1 = self;
325        let isl_rs_ctx = upwf1.get_ctx();
326        let mut upwf1 = upwf1;
327        upwf1.do_not_free_on_drop();
328        let upwf1 = upwf1.ptr;
329        let mut upwf2 = upwf2;
330        upwf2.do_not_free_on_drop();
331        let upwf2 = upwf2.ptr;
332        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_fold(upwf1, upwf2) };
333        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
334                                                     should_free_on_drop: true };
335        let err = isl_rs_ctx.last_error();
336        if err != Error::None_ {
337            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
338        }
339        Ok(isl_rs_result)
340    }
341
342    /// Wraps `isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold`.
343    pub fn fold_pw_qpolynomial_fold(self, pwqp: PwQPolynomialFold)
344                                    -> Result<UnionPwQPolynomialFold, LibISLError> {
345        let upwqp = self;
346        let isl_rs_ctx = upwqp.get_ctx();
347        let mut upwqp = upwqp;
348        upwqp.do_not_free_on_drop();
349        let upwqp = upwqp.ptr;
350        let mut pwqp = pwqp;
351        pwqp.do_not_free_on_drop();
352        let pwqp = pwqp.ptr;
353        let isl_rs_result =
354            unsafe { isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold(upwqp, pwqp) };
355        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
356                                                     should_free_on_drop: true };
357        let err = isl_rs_ctx.last_error();
358        if err != Error::None_ {
359            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
360        }
361        Ok(isl_rs_result)
362    }
363
364    /// Wraps `isl_union_pw_qpolynomial_fold_free`.
365    pub fn free(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
366        let upwf = self;
367        let isl_rs_ctx = upwf.get_ctx();
368        let mut upwf = upwf;
369        upwf.do_not_free_on_drop();
370        let upwf = upwf.ptr;
371        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_free(upwf) };
372        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
373                                                     should_free_on_drop: true };
374        let err = isl_rs_ctx.last_error();
375        if err != Error::None_ {
376            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
377        }
378        Ok(isl_rs_result)
379    }
380
381    /// Wraps `isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold`.
382    pub fn from_pw_qpolynomial_fold(pwf: PwQPolynomialFold)
383                                    -> Result<UnionPwQPolynomialFold, LibISLError> {
384        let isl_rs_ctx = pwf.get_ctx();
385        let mut pwf = pwf;
386        pwf.do_not_free_on_drop();
387        let pwf = pwf.ptr;
388        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(pwf) };
389        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
390                                                     should_free_on_drop: true };
391        let err = isl_rs_ctx.last_error();
392        if err != Error::None_ {
393            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
394        }
395        Ok(isl_rs_result)
396    }
397
398    /// Wraps `isl_union_pw_qpolynomial_fold_get_ctx`.
399    pub fn get_ctx(&self) -> Context {
400        let upwf = self;
401        let upwf = upwf.ptr;
402        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_ctx(upwf) };
403        let isl_rs_result = Context { ptr: isl_rs_result,
404                                      should_free_on_drop: false };
405        isl_rs_result
406    }
407
408    /// Wraps `isl_union_pw_qpolynomial_fold_get_pw_qpolynomial_fold_list`.
409    pub fn get_pw_qpolynomial_fold_list(&self) -> Result<PwQPolynomialFoldList, LibISLError> {
410        let upwf = self;
411        let isl_rs_ctx = upwf.get_ctx();
412        let upwf = upwf.ptr;
413        let isl_rs_result =
414            unsafe { isl_union_pw_qpolynomial_fold_get_pw_qpolynomial_fold_list(upwf) };
415        let isl_rs_result = PwQPolynomialFoldList { ptr: isl_rs_result,
416                                                    should_free_on_drop: true };
417        let err = isl_rs_ctx.last_error();
418        if err != Error::None_ {
419            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
420        }
421        Ok(isl_rs_result)
422    }
423
424    /// Wraps `isl_union_pw_qpolynomial_fold_get_space`.
425    pub fn get_space(&self) -> Result<Space, LibISLError> {
426        let upwf = self;
427        let isl_rs_ctx = upwf.get_ctx();
428        let upwf = upwf.ptr;
429        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_space(upwf) };
430        let isl_rs_result = Space { ptr: isl_rs_result,
431                                    should_free_on_drop: true };
432        let err = isl_rs_ctx.last_error();
433        if err != Error::None_ {
434            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
435        }
436        Ok(isl_rs_result)
437    }
438
439    /// Wraps `isl_union_pw_qpolynomial_fold_get_type`.
440    pub fn get_type(&self) -> Result<Fold, LibISLError> {
441        let upwf = self;
442        let isl_rs_ctx = upwf.get_ctx();
443        let upwf = upwf.ptr;
444        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_type(upwf) };
445        let isl_rs_result = Fold::from_i32(isl_rs_result);
446        let err = isl_rs_ctx.last_error();
447        if err != Error::None_ {
448            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
449        }
450        Ok(isl_rs_result)
451    }
452
453    /// Wraps `isl_union_pw_qpolynomial_fold_gist`.
454    pub fn gist(self, context: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
455        let upwf = self;
456        let isl_rs_ctx = upwf.get_ctx();
457        let mut upwf = upwf;
458        upwf.do_not_free_on_drop();
459        let upwf = upwf.ptr;
460        let mut context = context;
461        context.do_not_free_on_drop();
462        let context = context.ptr;
463        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_gist(upwf, context) };
464        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
465                                                     should_free_on_drop: true };
466        let err = isl_rs_ctx.last_error();
467        if err != Error::None_ {
468            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
469        }
470        Ok(isl_rs_result)
471    }
472
473    /// Wraps `isl_union_pw_qpolynomial_fold_gist_params`.
474    pub fn gist_params(self, context: Set) -> Result<UnionPwQPolynomialFold, LibISLError> {
475        let upwf = self;
476        let isl_rs_ctx = upwf.get_ctx();
477        let mut upwf = upwf;
478        upwf.do_not_free_on_drop();
479        let upwf = upwf.ptr;
480        let mut context = context;
481        context.do_not_free_on_drop();
482        let context = context.ptr;
483        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_gist_params(upwf, context) };
484        let isl_rs_result = UnionPwQPolynomialFold { 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_union_pw_qpolynomial_fold_intersect_domain`.
494    pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
495        let upwf = self;
496        let isl_rs_ctx = upwf.get_ctx();
497        let mut upwf = upwf;
498        upwf.do_not_free_on_drop();
499        let upwf = upwf.ptr;
500        let mut uset = uset;
501        uset.do_not_free_on_drop();
502        let uset = uset.ptr;
503        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_intersect_domain(upwf, uset) };
504        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
505                                                     should_free_on_drop: true };
506        let err = isl_rs_ctx.last_error();
507        if err != Error::None_ {
508            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
509        }
510        Ok(isl_rs_result)
511    }
512
513    /// Wraps `isl_union_pw_qpolynomial_fold_intersect_domain_space`.
514    pub fn intersect_domain_space(self, space: Space)
515                                  -> Result<UnionPwQPolynomialFold, LibISLError> {
516        let upwf = self;
517        let isl_rs_ctx = upwf.get_ctx();
518        let mut upwf = upwf;
519        upwf.do_not_free_on_drop();
520        let upwf = upwf.ptr;
521        let mut space = space;
522        space.do_not_free_on_drop();
523        let space = space.ptr;
524        let isl_rs_result =
525            unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_space(upwf, space) };
526        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
527                                                     should_free_on_drop: true };
528        let err = isl_rs_ctx.last_error();
529        if err != Error::None_ {
530            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
531        }
532        Ok(isl_rs_result)
533    }
534
535    /// Wraps `isl_union_pw_qpolynomial_fold_intersect_domain_union_set`.
536    pub fn intersect_domain_union_set(self, uset: UnionSet)
537                                      -> Result<UnionPwQPolynomialFold, LibISLError> {
538        let upwf = self;
539        let isl_rs_ctx = upwf.get_ctx();
540        let mut upwf = upwf;
541        upwf.do_not_free_on_drop();
542        let upwf = upwf.ptr;
543        let mut uset = uset;
544        uset.do_not_free_on_drop();
545        let uset = uset.ptr;
546        let isl_rs_result =
547            unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_union_set(upwf, uset) };
548        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
549                                                     should_free_on_drop: true };
550        let err = isl_rs_ctx.last_error();
551        if err != Error::None_ {
552            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
553        }
554        Ok(isl_rs_result)
555    }
556
557    /// Wraps `isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_domain`.
558    pub fn intersect_domain_wrapped_domain(self, uset: UnionSet)
559                                           -> Result<UnionPwQPolynomialFold, LibISLError> {
560        let upwf = self;
561        let isl_rs_ctx = upwf.get_ctx();
562        let mut upwf = upwf;
563        upwf.do_not_free_on_drop();
564        let upwf = upwf.ptr;
565        let mut uset = uset;
566        uset.do_not_free_on_drop();
567        let uset = uset.ptr;
568        let isl_rs_result =
569            unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_domain(upwf, uset) };
570        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
571                                                     should_free_on_drop: true };
572        let err = isl_rs_ctx.last_error();
573        if err != Error::None_ {
574            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
575        }
576        Ok(isl_rs_result)
577    }
578
579    /// Wraps `isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_range`.
580    pub fn intersect_domain_wrapped_range(self, uset: UnionSet)
581                                          -> Result<UnionPwQPolynomialFold, LibISLError> {
582        let upwf = self;
583        let isl_rs_ctx = upwf.get_ctx();
584        let mut upwf = upwf;
585        upwf.do_not_free_on_drop();
586        let upwf = upwf.ptr;
587        let mut uset = uset;
588        uset.do_not_free_on_drop();
589        let uset = uset.ptr;
590        let isl_rs_result =
591            unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_range(upwf, uset) };
592        let isl_rs_result = UnionPwQPolynomialFold { 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_union_pw_qpolynomial_fold_intersect_params`.
602    pub fn intersect_params(self, set: Set) -> Result<UnionPwQPolynomialFold, LibISLError> {
603        let upwf = self;
604        let isl_rs_ctx = upwf.get_ctx();
605        let mut upwf = upwf;
606        upwf.do_not_free_on_drop();
607        let upwf = upwf.ptr;
608        let mut set = set;
609        set.do_not_free_on_drop();
610        let set = set.ptr;
611        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_intersect_params(upwf, set) };
612        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
613                                                     should_free_on_drop: true };
614        let err = isl_rs_ctx.last_error();
615        if err != Error::None_ {
616            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
617        }
618        Ok(isl_rs_result)
619    }
620
621    /// Wraps `isl_union_pw_qpolynomial_fold_involves_nan`.
622    pub fn involves_nan(&self) -> Result<bool, LibISLError> {
623        let upwf = self;
624        let isl_rs_ctx = upwf.get_ctx();
625        let upwf = upwf.ptr;
626        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_involves_nan(upwf) };
627        let isl_rs_result = match isl_rs_result {
628            0 => false,
629            1 => true,
630            _ => panic!("Got isl_bool = -1"),
631        };
632        let err = isl_rs_ctx.last_error();
633        if err != Error::None_ {
634            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
635        }
636        Ok(isl_rs_result)
637    }
638
639    /// Wraps `isl_union_pw_qpolynomial_fold_n_pw_qpolynomial_fold`.
640    pub fn n_pw_qpolynomial_fold(&self) -> Result<i32, LibISLError> {
641        let upwf = self;
642        let isl_rs_ctx = upwf.get_ctx();
643        let upwf = upwf.ptr;
644        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_n_pw_qpolynomial_fold(upwf) };
645        let err = isl_rs_ctx.last_error();
646        if err != Error::None_ {
647            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
648        }
649        Ok(isl_rs_result)
650    }
651
652    /// Wraps `isl_union_pw_qpolynomial_fold_plain_is_equal`.
653    pub fn plain_is_equal(&self, upwf2: &UnionPwQPolynomialFold) -> Result<bool, LibISLError> {
654        let upwf1 = self;
655        let isl_rs_ctx = upwf1.get_ctx();
656        let upwf1 = upwf1.ptr;
657        let upwf2 = upwf2.ptr;
658        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_plain_is_equal(upwf1, upwf2) };
659        let isl_rs_result = match isl_rs_result {
660            0 => false,
661            1 => true,
662            _ => panic!("Got isl_bool = -1"),
663        };
664        let err = isl_rs_ctx.last_error();
665        if err != Error::None_ {
666            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
667        }
668        Ok(isl_rs_result)
669    }
670
671    /// Wraps `isl_union_pw_qpolynomial_fold_reset_user`.
672    pub fn reset_user(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
673        let upwf = self;
674        let isl_rs_ctx = upwf.get_ctx();
675        let mut upwf = upwf;
676        upwf.do_not_free_on_drop();
677        let upwf = upwf.ptr;
678        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_reset_user(upwf) };
679        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
680                                                     should_free_on_drop: true };
681        let err = isl_rs_ctx.last_error();
682        if err != Error::None_ {
683            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
684        }
685        Ok(isl_rs_result)
686    }
687
688    /// Wraps `isl_union_pw_qpolynomial_fold_scale_down_val`.
689    pub fn scale_down_val(self, v: Val) -> Result<UnionPwQPolynomialFold, LibISLError> {
690        let upwf = self;
691        let isl_rs_ctx = upwf.get_ctx();
692        let mut upwf = upwf;
693        upwf.do_not_free_on_drop();
694        let upwf = upwf.ptr;
695        let mut v = v;
696        v.do_not_free_on_drop();
697        let v = v.ptr;
698        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_scale_down_val(upwf, v) };
699        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
700                                                     should_free_on_drop: true };
701        let err = isl_rs_ctx.last_error();
702        if err != Error::None_ {
703            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
704        }
705        Ok(isl_rs_result)
706    }
707
708    /// Wraps `isl_union_pw_qpolynomial_fold_scale_val`.
709    pub fn scale_val(self, v: Val) -> Result<UnionPwQPolynomialFold, LibISLError> {
710        let upwf = self;
711        let isl_rs_ctx = upwf.get_ctx();
712        let mut upwf = upwf;
713        upwf.do_not_free_on_drop();
714        let upwf = upwf.ptr;
715        let mut v = v;
716        v.do_not_free_on_drop();
717        let v = v.ptr;
718        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_scale_val(upwf, v) };
719        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
720                                                     should_free_on_drop: true };
721        let err = isl_rs_ctx.last_error();
722        if err != Error::None_ {
723            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
724        }
725        Ok(isl_rs_result)
726    }
727
728    /// Wraps `isl_union_pw_qpolynomial_fold_set_dim_name`.
729    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
730                        -> Result<UnionPwQPolynomialFold, LibISLError> {
731        let upwf = self;
732        let isl_rs_ctx = upwf.get_ctx();
733        let mut upwf = upwf;
734        upwf.do_not_free_on_drop();
735        let upwf = upwf.ptr;
736        let type_ = type_.to_i32();
737        let s = CString::new(s).unwrap();
738        let s = s.as_ptr();
739        let isl_rs_result =
740            unsafe { isl_union_pw_qpolynomial_fold_set_dim_name(upwf, type_, pos, s) };
741        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
742                                                     should_free_on_drop: true };
743        let err = isl_rs_ctx.last_error();
744        if err != Error::None_ {
745            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
746        }
747        Ok(isl_rs_result)
748    }
749
750    /// Wraps `isl_union_pw_qpolynomial_fold_subtract_domain`.
751    pub fn subtract_domain(self, uset: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
752        let upwf = self;
753        let isl_rs_ctx = upwf.get_ctx();
754        let mut upwf = upwf;
755        upwf.do_not_free_on_drop();
756        let upwf = upwf.ptr;
757        let mut uset = uset;
758        uset.do_not_free_on_drop();
759        let uset = uset.ptr;
760        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_subtract_domain(upwf, uset) };
761        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
762                                                     should_free_on_drop: true };
763        let err = isl_rs_ctx.last_error();
764        if err != Error::None_ {
765            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
766        }
767        Ok(isl_rs_result)
768    }
769
770    /// Wraps `isl_union_pw_qpolynomial_fold_subtract_domain_space`.
771    pub fn subtract_domain_space(self, space: Space)
772                                 -> Result<UnionPwQPolynomialFold, LibISLError> {
773        let upwf = self;
774        let isl_rs_ctx = upwf.get_ctx();
775        let mut upwf = upwf;
776        upwf.do_not_free_on_drop();
777        let upwf = upwf.ptr;
778        let mut space = space;
779        space.do_not_free_on_drop();
780        let space = space.ptr;
781        let isl_rs_result =
782            unsafe { isl_union_pw_qpolynomial_fold_subtract_domain_space(upwf, space) };
783        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
784                                                     should_free_on_drop: true };
785        let err = isl_rs_ctx.last_error();
786        if err != Error::None_ {
787            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
788        }
789        Ok(isl_rs_result)
790    }
791
792    /// Wraps `isl_union_pw_qpolynomial_fold_subtract_domain_union_set`.
793    pub fn subtract_domain_union_set(self, uset: UnionSet)
794                                     -> Result<UnionPwQPolynomialFold, LibISLError> {
795        let upwf = self;
796        let isl_rs_ctx = upwf.get_ctx();
797        let mut upwf = upwf;
798        upwf.do_not_free_on_drop();
799        let upwf = upwf.ptr;
800        let mut uset = uset;
801        uset.do_not_free_on_drop();
802        let uset = uset.ptr;
803        let isl_rs_result =
804            unsafe { isl_union_pw_qpolynomial_fold_subtract_domain_union_set(upwf, uset) };
805        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
806                                                     should_free_on_drop: true };
807        let err = isl_rs_ctx.last_error();
808        if err != Error::None_ {
809            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
810        }
811        Ok(isl_rs_result)
812    }
813
814    /// Wraps `isl_union_pw_qpolynomial_fold_zero`.
815    pub fn zero(space: Space, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
816        let isl_rs_ctx = space.get_ctx();
817        let mut space = space;
818        space.do_not_free_on_drop();
819        let space = space.ptr;
820        let type_ = type_.to_i32();
821        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero(space, type_) };
822        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
823                                                     should_free_on_drop: true };
824        let err = isl_rs_ctx.last_error();
825        if err != Error::None_ {
826            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
827        }
828        Ok(isl_rs_result)
829    }
830
831    /// Wraps `isl_union_pw_qpolynomial_fold_zero_ctx`.
832    pub fn zero_ctx(ctx: &Context, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
833        let isl_rs_ctx = Context { ptr: ctx.ptr,
834                                   should_free_on_drop: false };
835        let ctx = ctx.ptr;
836        let type_ = type_.to_i32();
837        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero_ctx(ctx, type_) };
838        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
839                                                     should_free_on_drop: true };
840        let err = isl_rs_ctx.last_error();
841        if err != Error::None_ {
842            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
843        }
844        Ok(isl_rs_result)
845    }
846
847    /// Wraps `isl_union_pw_qpolynomial_fold_zero_space`.
848    pub fn zero_space(space: Space, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
849        let isl_rs_ctx = space.get_ctx();
850        let mut space = space;
851        space.do_not_free_on_drop();
852        let space = space.ptr;
853        let type_ = type_.to_i32();
854        let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero_space(space, type_) };
855        let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
856                                                     should_free_on_drop: true };
857        let err = isl_rs_ctx.last_error();
858        if err != Error::None_ {
859            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
860        }
861        Ok(isl_rs_result)
862    }
863
864    /// Does not call isl_union_pw_qpolynomial_fold_free() on being dropped.
865    /// (For internal use only.)
866    pub fn do_not_free_on_drop(&mut self) {
867        self.should_free_on_drop = false;
868    }
869}
870
871impl Drop for UnionPwQPolynomialFold {
872    fn drop(&mut self) {
873        if self.should_free_on_drop {
874            unsafe {
875                isl_union_pw_qpolynomial_fold_free(self.ptr);
876            }
877        }
878    }
879}