1use 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
12pub 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 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 let err_msg = isl_rs_ctx.last_error_msg();
149 isl_rs_ctx.reset_error();
150 return Err(LibISLError::new(err, err_msg));
151 }
152 Ok(isl_rs_result)
153 }
154
155 pub fn add_disjoint(self, pwf2: PwQPolynomialFold) -> Result<PwQPolynomialFold, LibISLError> {
157 let pwf1 = self;
158 let isl_rs_ctx = pwf1.get_ctx();
159 let mut pwf1 = pwf1;
160 pwf1.do_not_free_on_drop();
161 let pwf1 = pwf1.ptr;
162 let mut pwf2 = pwf2;
163 pwf2.do_not_free_on_drop();
164 let pwf2 = pwf2.ptr;
165 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_add_disjoint(pwf1, pwf2) };
166 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
167 should_free_on_drop: true };
168 let err = isl_rs_ctx.last_error();
169 if err != Error::None_ {
170 let err_msg = isl_rs_ctx.last_error_msg();
171 isl_rs_ctx.reset_error();
172 return Err(LibISLError::new(err, err_msg));
173 }
174 Ok(isl_rs_result)
175 }
176
177 pub fn alloc(type_: Fold, set: Set, fold: QPolynomialFold)
179 -> Result<PwQPolynomialFold, LibISLError> {
180 let isl_rs_ctx = set.get_ctx();
181 let type_ = type_.to_i32();
182 let mut set = set;
183 set.do_not_free_on_drop();
184 let set = set.ptr;
185 let mut fold = fold;
186 fold.do_not_free_on_drop();
187 let fold = fold.ptr;
188 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_alloc(type_, set, fold) };
189 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
190 should_free_on_drop: true };
191 let err = isl_rs_ctx.last_error();
192 if err != Error::None_ {
193 let err_msg = isl_rs_ctx.last_error_msg();
194 isl_rs_ctx.reset_error();
195 return Err(LibISLError::new(err, err_msg));
196 }
197 Ok(isl_rs_result)
198 }
199
200 pub fn as_qpolynomial_fold(self) -> Result<QPolynomialFold, LibISLError> {
202 let pwf = self;
203 let isl_rs_ctx = pwf.get_ctx();
204 let mut pwf = pwf;
205 pwf.do_not_free_on_drop();
206 let pwf = pwf.ptr;
207 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_as_qpolynomial_fold(pwf) };
208 let isl_rs_result = QPolynomialFold { ptr: isl_rs_result,
209 should_free_on_drop: true };
210 let err = isl_rs_ctx.last_error();
211 if err != Error::None_ {
212 let err_msg = isl_rs_ctx.last_error_msg();
213 isl_rs_ctx.reset_error();
214 return Err(LibISLError::new(err, err_msg));
215 }
216 Ok(isl_rs_result)
217 }
218
219 pub fn coalesce(self) -> Result<PwQPolynomialFold, LibISLError> {
221 let pwf = self;
222 let isl_rs_ctx = pwf.get_ctx();
223 let mut pwf = pwf;
224 pwf.do_not_free_on_drop();
225 let pwf = pwf.ptr;
226 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_coalesce(pwf) };
227 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
228 should_free_on_drop: true };
229 let err = isl_rs_ctx.last_error();
230 if err != Error::None_ {
231 let err_msg = isl_rs_ctx.last_error_msg();
232 isl_rs_ctx.reset_error();
233 return Err(LibISLError::new(err, err_msg));
234 }
235 Ok(isl_rs_result)
236 }
237
238 pub fn copy(&self) -> Result<PwQPolynomialFold, LibISLError> {
240 let pwf = self;
241 let isl_rs_ctx = pwf.get_ctx();
242 let pwf = pwf.ptr;
243 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_copy(pwf) };
244 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
245 should_free_on_drop: true };
246 let err = isl_rs_ctx.last_error();
247 if err != Error::None_ {
248 let err_msg = isl_rs_ctx.last_error_msg();
249 isl_rs_ctx.reset_error();
250 return Err(LibISLError::new(err, err_msg));
251 }
252 Ok(isl_rs_result)
253 }
254
255 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
257 let pwf = self;
258 let isl_rs_ctx = pwf.get_ctx();
259 let pwf = pwf.ptr;
260 let type_ = type_.to_i32();
261 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_dim(pwf, type_) };
262 let err = isl_rs_ctx.last_error();
263 if err != Error::None_ {
264 let err_msg = isl_rs_ctx.last_error_msg();
265 isl_rs_ctx.reset_error();
266 return Err(LibISLError::new(err, err_msg));
267 }
268 Ok(isl_rs_result)
269 }
270
271 pub fn domain(self) -> Result<Set, LibISLError> {
273 let pwf = self;
274 let isl_rs_ctx = pwf.get_ctx();
275 let mut pwf = pwf;
276 pwf.do_not_free_on_drop();
277 let pwf = pwf.ptr;
278 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_domain(pwf) };
279 let isl_rs_result = Set { ptr: isl_rs_result,
280 should_free_on_drop: true };
281 let err = isl_rs_ctx.last_error();
282 if err != Error::None_ {
283 let err_msg = isl_rs_ctx.last_error_msg();
284 isl_rs_ctx.reset_error();
285 return Err(LibISLError::new(err, err_msg));
286 }
287 Ok(isl_rs_result)
288 }
289
290 pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
292 -> Result<PwQPolynomialFold, LibISLError> {
293 let pwf = self;
294 let isl_rs_ctx = pwf.get_ctx();
295 let mut pwf = pwf;
296 pwf.do_not_free_on_drop();
297 let pwf = pwf.ptr;
298 let type_ = type_.to_i32();
299 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_drop_dims(pwf, type_, first, n) };
300 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
301 should_free_on_drop: true };
302 let err = isl_rs_ctx.last_error();
303 if err != Error::None_ {
304 let err_msg = isl_rs_ctx.last_error_msg();
305 isl_rs_ctx.reset_error();
306 return Err(LibISLError::new(err, err_msg));
307 }
308 Ok(isl_rs_result)
309 }
310
311 pub fn drop_unused_params(self) -> Result<PwQPolynomialFold, LibISLError> {
313 let pwf = self;
314 let isl_rs_ctx = pwf.get_ctx();
315 let mut pwf = pwf;
316 pwf.do_not_free_on_drop();
317 let pwf = pwf.ptr;
318 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_drop_unused_params(pwf) };
319 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
320 should_free_on_drop: true };
321 let err = isl_rs_ctx.last_error();
322 if err != Error::None_ {
323 let err_msg = isl_rs_ctx.last_error_msg();
324 isl_rs_ctx.reset_error();
325 return Err(LibISLError::new(err, err_msg));
326 }
327 Ok(isl_rs_result)
328 }
329
330 pub fn dump(&self) -> Result<(), LibISLError> {
332 let pwf = self;
333 let isl_rs_ctx = pwf.get_ctx();
334 let pwf = pwf.ptr;
335 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_dump(pwf) };
336 let err = isl_rs_ctx.last_error();
337 if err != Error::None_ {
338 let err_msg = isl_rs_ctx.last_error_msg();
339 isl_rs_ctx.reset_error();
340 return Err(LibISLError::new(err, err_msg));
341 }
342 Ok(isl_rs_result)
343 }
344
345 pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
347 let pwf = self;
348 let isl_rs_ctx = pwf.get_ctx();
349 let mut pwf = pwf;
350 pwf.do_not_free_on_drop();
351 let pwf = pwf.ptr;
352 let mut pnt = pnt;
353 pnt.do_not_free_on_drop();
354 let pnt = pnt.ptr;
355 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_eval(pwf, pnt) };
356 let isl_rs_result = Val { ptr: isl_rs_result,
357 should_free_on_drop: true };
358 let err = isl_rs_ctx.last_error();
359 if err != Error::None_ {
360 let err_msg = isl_rs_ctx.last_error_msg();
361 isl_rs_ctx.reset_error();
362 return Err(LibISLError::new(err, err_msg));
363 }
364 Ok(isl_rs_result)
365 }
366
367 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
369 let pwf = self;
370 let isl_rs_ctx = pwf.get_ctx();
371 let pwf = pwf.ptr;
372 let type_ = type_.to_i32();
373 let name = CString::new(name).unwrap();
374 let name = name.as_ptr();
375 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_find_dim_by_name(pwf, type_, name) };
376 let err = isl_rs_ctx.last_error();
377 if err != Error::None_ {
378 let err_msg = isl_rs_ctx.last_error_msg();
379 isl_rs_ctx.reset_error();
380 return Err(LibISLError::new(err, err_msg));
381 }
382 Ok(isl_rs_result)
383 }
384
385 pub fn fix_val(self, type_: DimType, n: u32, v: Val) -> Result<PwQPolynomialFold, LibISLError> {
387 let pwf = self;
388 let isl_rs_ctx = pwf.get_ctx();
389 let mut pwf = pwf;
390 pwf.do_not_free_on_drop();
391 let pwf = pwf.ptr;
392 let type_ = type_.to_i32();
393 let mut v = v;
394 v.do_not_free_on_drop();
395 let v = v.ptr;
396 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_fix_val(pwf, type_, n, v) };
397 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
398 should_free_on_drop: true };
399 let err = isl_rs_ctx.last_error();
400 if err != Error::None_ {
401 let err_msg = isl_rs_ctx.last_error_msg();
402 isl_rs_ctx.reset_error();
403 return Err(LibISLError::new(err, err_msg));
404 }
405 Ok(isl_rs_result)
406 }
407
408 pub fn fold(self, pwf2: PwQPolynomialFold) -> Result<PwQPolynomialFold, LibISLError> {
410 let pwf1 = self;
411 let isl_rs_ctx = pwf1.get_ctx();
412 let mut pwf1 = pwf1;
413 pwf1.do_not_free_on_drop();
414 let pwf1 = pwf1.ptr;
415 let mut pwf2 = pwf2;
416 pwf2.do_not_free_on_drop();
417 let pwf2 = pwf2.ptr;
418 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_fold(pwf1, pwf2) };
419 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
420 should_free_on_drop: true };
421 let err = isl_rs_ctx.last_error();
422 if err != Error::None_ {
423 let err_msg = isl_rs_ctx.last_error_msg();
424 isl_rs_ctx.reset_error();
425 return Err(LibISLError::new(err, err_msg));
426 }
427 Ok(isl_rs_result)
428 }
429
430 pub fn free(self) -> Result<PwQPolynomialFold, LibISLError> {
432 let pwf = self;
433 let isl_rs_ctx = pwf.get_ctx();
434 let mut pwf = pwf;
435 pwf.do_not_free_on_drop();
436 let pwf = pwf.ptr;
437 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_free(pwf) };
438 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
439 should_free_on_drop: true };
440 let err = isl_rs_ctx.last_error();
441 if err != Error::None_ {
442 let err_msg = isl_rs_ctx.last_error_msg();
443 isl_rs_ctx.reset_error();
444 return Err(LibISLError::new(err, err_msg));
445 }
446 Ok(isl_rs_result)
447 }
448
449 pub fn from_pw_qpolynomial(type_: Fold, pwqp: PwQPolynomial)
451 -> Result<PwQPolynomialFold, LibISLError> {
452 let isl_rs_ctx = pwqp.get_ctx();
453 let type_ = type_.to_i32();
454 let mut pwqp = pwqp;
455 pwqp.do_not_free_on_drop();
456 let pwqp = pwqp.ptr;
457 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_from_pw_qpolynomial(type_, pwqp) };
458 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
459 should_free_on_drop: true };
460 let err = isl_rs_ctx.last_error();
461 if err != Error::None_ {
462 let err_msg = isl_rs_ctx.last_error_msg();
463 isl_rs_ctx.reset_error();
464 return Err(LibISLError::new(err, err_msg));
465 }
466 Ok(isl_rs_result)
467 }
468
469 pub fn from_qpolynomial_fold(fold: QPolynomialFold) -> Result<PwQPolynomialFold, LibISLError> {
471 let isl_rs_ctx = fold.get_ctx();
472 let mut fold = fold;
473 fold.do_not_free_on_drop();
474 let fold = fold.ptr;
475 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_from_qpolynomial_fold(fold) };
476 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
477 should_free_on_drop: true };
478 let err = isl_rs_ctx.last_error();
479 if err != Error::None_ {
480 let err_msg = isl_rs_ctx.last_error_msg();
481 isl_rs_ctx.reset_error();
482 return Err(LibISLError::new(err, err_msg));
483 }
484 Ok(isl_rs_result)
485 }
486
487 pub fn from_range(self) -> Result<PwQPolynomialFold, LibISLError> {
489 let pwf = self;
490 let isl_rs_ctx = pwf.get_ctx();
491 let mut pwf = pwf;
492 pwf.do_not_free_on_drop();
493 let pwf = pwf.ptr;
494 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_from_range(pwf) };
495 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
496 should_free_on_drop: true };
497 let err = isl_rs_ctx.last_error();
498 if err != Error::None_ {
499 let err_msg = isl_rs_ctx.last_error_msg();
500 isl_rs_ctx.reset_error();
501 return Err(LibISLError::new(err, err_msg));
502 }
503 Ok(isl_rs_result)
504 }
505
506 pub fn get_ctx(&self) -> Context {
508 let pwf = self;
509 let pwf = pwf.ptr;
510 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_get_ctx(pwf) };
511 let isl_rs_result = Context { ptr: isl_rs_result,
512 should_free_on_drop: false };
513 isl_rs_result
514 }
515
516 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
518 let pwf = self;
519 let isl_rs_ctx = pwf.get_ctx();
520 let pwf = pwf.ptr;
521 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_get_domain_space(pwf) };
522 let isl_rs_result = Space { ptr: isl_rs_result,
523 should_free_on_drop: true };
524 let err = isl_rs_ctx.last_error();
525 if err != Error::None_ {
526 let err_msg = isl_rs_ctx.last_error_msg();
527 isl_rs_ctx.reset_error();
528 return Err(LibISLError::new(err, err_msg));
529 }
530 Ok(isl_rs_result)
531 }
532
533 pub fn get_space(&self) -> Result<Space, LibISLError> {
535 let pwf = self;
536 let isl_rs_ctx = pwf.get_ctx();
537 let pwf = pwf.ptr;
538 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_get_space(pwf) };
539 let isl_rs_result = Space { ptr: isl_rs_result,
540 should_free_on_drop: true };
541 let err = isl_rs_ctx.last_error();
542 if err != Error::None_ {
543 let err_msg = isl_rs_ctx.last_error_msg();
544 isl_rs_ctx.reset_error();
545 return Err(LibISLError::new(err, err_msg));
546 }
547 Ok(isl_rs_result)
548 }
549
550 pub fn get_type(&self) -> Result<Fold, LibISLError> {
552 let pwf = self;
553 let isl_rs_ctx = pwf.get_ctx();
554 let pwf = pwf.ptr;
555 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_get_type(pwf) };
556 let isl_rs_result = Fold::from_i32(isl_rs_result);
557 let err = isl_rs_ctx.last_error();
558 if err != Error::None_ {
559 let err_msg = isl_rs_ctx.last_error_msg();
560 isl_rs_ctx.reset_error();
561 return Err(LibISLError::new(err, err_msg));
562 }
563 Ok(isl_rs_result)
564 }
565
566 pub fn gist(self, context: Set) -> Result<PwQPolynomialFold, LibISLError> {
568 let pwf = self;
569 let isl_rs_ctx = pwf.get_ctx();
570 let mut pwf = pwf;
571 pwf.do_not_free_on_drop();
572 let pwf = pwf.ptr;
573 let mut context = context;
574 context.do_not_free_on_drop();
575 let context = context.ptr;
576 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_gist(pwf, context) };
577 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
578 should_free_on_drop: true };
579 let err = isl_rs_ctx.last_error();
580 if err != Error::None_ {
581 let err_msg = isl_rs_ctx.last_error_msg();
582 isl_rs_ctx.reset_error();
583 return Err(LibISLError::new(err, err_msg));
584 }
585 Ok(isl_rs_result)
586 }
587
588 pub fn gist_params(self, context: Set) -> Result<PwQPolynomialFold, LibISLError> {
590 let pwf = self;
591 let isl_rs_ctx = pwf.get_ctx();
592 let mut pwf = pwf;
593 pwf.do_not_free_on_drop();
594 let pwf = pwf.ptr;
595 let mut context = context;
596 context.do_not_free_on_drop();
597 let context = context.ptr;
598 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_gist_params(pwf, context) };
599 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
600 should_free_on_drop: true };
601 let err = isl_rs_ctx.last_error();
602 if err != Error::None_ {
603 let err_msg = isl_rs_ctx.last_error_msg();
604 isl_rs_ctx.reset_error();
605 return Err(LibISLError::new(err, err_msg));
606 }
607 Ok(isl_rs_result)
608 }
609
610 pub fn has_equal_space(&self, pwf2: &PwQPolynomialFold) -> Result<bool, LibISLError> {
612 let pwf1 = self;
613 let isl_rs_ctx = pwf1.get_ctx();
614 let pwf1 = pwf1.ptr;
615 let pwf2 = pwf2.ptr;
616 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_has_equal_space(pwf1, pwf2) };
617 let isl_rs_result = match isl_rs_result {
618 0 => false,
619 1 => true,
620 _ => {
621 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
622 }
623 };
624 let err = isl_rs_ctx.last_error();
625 if err != Error::None_ {
626 let err_msg = isl_rs_ctx.last_error_msg();
627 isl_rs_ctx.reset_error();
628 return Err(LibISLError::new(err, err_msg));
629 }
630 Ok(isl_rs_result)
631 }
632
633 pub fn intersect_domain(self, set: Set) -> Result<PwQPolynomialFold, LibISLError> {
635 let pwf = self;
636 let isl_rs_ctx = pwf.get_ctx();
637 let mut pwf = pwf;
638 pwf.do_not_free_on_drop();
639 let pwf = pwf.ptr;
640 let mut set = set;
641 set.do_not_free_on_drop();
642 let set = set.ptr;
643 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_intersect_domain(pwf, set) };
644 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
645 should_free_on_drop: true };
646 let err = isl_rs_ctx.last_error();
647 if err != Error::None_ {
648 let err_msg = isl_rs_ctx.last_error_msg();
649 isl_rs_ctx.reset_error();
650 return Err(LibISLError::new(err, err_msg));
651 }
652 Ok(isl_rs_result)
653 }
654
655 pub fn intersect_domain_wrapped_domain(self, set: Set)
657 -> Result<PwQPolynomialFold, LibISLError> {
658 let pwf = self;
659 let isl_rs_ctx = pwf.get_ctx();
660 let mut pwf = pwf;
661 pwf.do_not_free_on_drop();
662 let pwf = pwf.ptr;
663 let mut set = set;
664 set.do_not_free_on_drop();
665 let set = set.ptr;
666 let isl_rs_result =
667 unsafe { isl_pw_qpolynomial_fold_intersect_domain_wrapped_domain(pwf, set) };
668 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
669 should_free_on_drop: true };
670 let err = isl_rs_ctx.last_error();
671 if err != Error::None_ {
672 let err_msg = isl_rs_ctx.last_error_msg();
673 isl_rs_ctx.reset_error();
674 return Err(LibISLError::new(err, err_msg));
675 }
676 Ok(isl_rs_result)
677 }
678
679 pub fn intersect_domain_wrapped_range(self, set: Set)
681 -> Result<PwQPolynomialFold, LibISLError> {
682 let pwf = self;
683 let isl_rs_ctx = pwf.get_ctx();
684 let mut pwf = pwf;
685 pwf.do_not_free_on_drop();
686 let pwf = pwf.ptr;
687 let mut set = set;
688 set.do_not_free_on_drop();
689 let set = set.ptr;
690 let isl_rs_result =
691 unsafe { isl_pw_qpolynomial_fold_intersect_domain_wrapped_range(pwf, set) };
692 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
693 should_free_on_drop: true };
694 let err = isl_rs_ctx.last_error();
695 if err != Error::None_ {
696 let err_msg = isl_rs_ctx.last_error_msg();
697 isl_rs_ctx.reset_error();
698 return Err(LibISLError::new(err, err_msg));
699 }
700 Ok(isl_rs_result)
701 }
702
703 pub fn intersect_params(self, set: Set) -> Result<PwQPolynomialFold, LibISLError> {
705 let pwf = self;
706 let isl_rs_ctx = pwf.get_ctx();
707 let mut pwf = pwf;
708 pwf.do_not_free_on_drop();
709 let pwf = pwf.ptr;
710 let mut set = set;
711 set.do_not_free_on_drop();
712 let set = set.ptr;
713 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_intersect_params(pwf, set) };
714 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
715 should_free_on_drop: true };
716 let err = isl_rs_ctx.last_error();
717 if err != Error::None_ {
718 let err_msg = isl_rs_ctx.last_error_msg();
719 isl_rs_ctx.reset_error();
720 return Err(LibISLError::new(err, err_msg));
721 }
722 Ok(isl_rs_result)
723 }
724
725 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
727 let pwf = self;
728 let isl_rs_ctx = pwf.get_ctx();
729 let pwf = pwf.ptr;
730 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_involves_nan(pwf) };
731 let isl_rs_result = match isl_rs_result {
732 0 => false,
733 1 => true,
734 _ => {
735 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
736 }
737 };
738 let err = isl_rs_ctx.last_error();
739 if err != Error::None_ {
740 let err_msg = isl_rs_ctx.last_error_msg();
741 isl_rs_ctx.reset_error();
742 return Err(LibISLError::new(err, err_msg));
743 }
744 Ok(isl_rs_result)
745 }
746
747 pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
749 let pwf = self;
750 let isl_rs_ctx = pwf.get_ctx();
751 let pwf = pwf.ptr;
752 let id = id.ptr;
753 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_involves_param_id(pwf, id) };
754 let isl_rs_result = match isl_rs_result {
755 0 => false,
756 1 => true,
757 _ => {
758 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
759 }
760 };
761 let err = isl_rs_ctx.last_error();
762 if err != Error::None_ {
763 let err_msg = isl_rs_ctx.last_error_msg();
764 isl_rs_ctx.reset_error();
765 return Err(LibISLError::new(err, err_msg));
766 }
767 Ok(isl_rs_result)
768 }
769
770 pub fn is_zero(&self) -> Result<bool, LibISLError> {
772 let pwf = self;
773 let isl_rs_ctx = pwf.get_ctx();
774 let pwf = pwf.ptr;
775 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_is_zero(pwf) };
776 let isl_rs_result = match isl_rs_result {
777 0 => false,
778 1 => true,
779 _ => {
780 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
781 }
782 };
783 let err = isl_rs_ctx.last_error();
784 if err != Error::None_ {
785 let err_msg = isl_rs_ctx.last_error_msg();
786 isl_rs_ctx.reset_error();
787 return Err(LibISLError::new(err, err_msg));
788 }
789 Ok(isl_rs_result)
790 }
791
792 pub fn isa_qpolynomial_fold(&self) -> Result<bool, LibISLError> {
794 let pwf = self;
795 let isl_rs_ctx = pwf.get_ctx();
796 let pwf = pwf.ptr;
797 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_isa_qpolynomial_fold(pwf) };
798 let isl_rs_result = match isl_rs_result {
799 0 => false,
800 1 => true,
801 _ => {
802 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
803 }
804 };
805 let err = isl_rs_ctx.last_error();
806 if err != Error::None_ {
807 let err_msg = isl_rs_ctx.last_error_msg();
808 isl_rs_ctx.reset_error();
809 return Err(LibISLError::new(err, err_msg));
810 }
811 Ok(isl_rs_result)
812 }
813
814 pub fn max(self) -> Result<Val, LibISLError> {
816 let pwf = self;
817 let isl_rs_ctx = pwf.get_ctx();
818 let mut pwf = pwf;
819 pwf.do_not_free_on_drop();
820 let pwf = pwf.ptr;
821 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_max(pwf) };
822 let isl_rs_result = Val { ptr: isl_rs_result,
823 should_free_on_drop: true };
824 let err = isl_rs_ctx.last_error();
825 if err != Error::None_ {
826 let err_msg = isl_rs_ctx.last_error_msg();
827 isl_rs_ctx.reset_error();
828 return Err(LibISLError::new(err, err_msg));
829 }
830 Ok(isl_rs_result)
831 }
832
833 pub fn min(self) -> Result<Val, LibISLError> {
835 let pwf = self;
836 let isl_rs_ctx = pwf.get_ctx();
837 let mut pwf = pwf;
838 pwf.do_not_free_on_drop();
839 let pwf = pwf.ptr;
840 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_min(pwf) };
841 let isl_rs_result = Val { ptr: isl_rs_result,
842 should_free_on_drop: true };
843 let err = isl_rs_ctx.last_error();
844 if err != Error::None_ {
845 let err_msg = isl_rs_ctx.last_error_msg();
846 isl_rs_ctx.reset_error();
847 return Err(LibISLError::new(err, err_msg));
848 }
849 Ok(isl_rs_result)
850 }
851
852 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
854 n: u32)
855 -> Result<PwQPolynomialFold, LibISLError> {
856 let pwf = self;
857 let isl_rs_ctx = pwf.get_ctx();
858 let mut pwf = pwf;
859 pwf.do_not_free_on_drop();
860 let pwf = pwf.ptr;
861 let dst_type = dst_type.to_i32();
862 let src_type = src_type.to_i32();
863 let isl_rs_result = unsafe {
864 isl_pw_qpolynomial_fold_move_dims(pwf, dst_type, dst_pos, src_type, src_pos, n)
865 };
866 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
867 should_free_on_drop: true };
868 let err = isl_rs_ctx.last_error();
869 if err != Error::None_ {
870 let err_msg = isl_rs_ctx.last_error_msg();
871 isl_rs_ctx.reset_error();
872 return Err(LibISLError::new(err, err_msg));
873 }
874 Ok(isl_rs_result)
875 }
876
877 pub fn n_piece(&self) -> Result<i32, LibISLError> {
879 let pwf = self;
880 let isl_rs_ctx = pwf.get_ctx();
881 let pwf = pwf.ptr;
882 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_n_piece(pwf) };
883 let err = isl_rs_ctx.last_error();
884 if err != Error::None_ {
885 let err_msg = isl_rs_ctx.last_error_msg();
886 isl_rs_ctx.reset_error();
887 return Err(LibISLError::new(err, err_msg));
888 }
889 Ok(isl_rs_result)
890 }
891
892 pub fn plain_is_equal(&self, pwf2: &PwQPolynomialFold) -> Result<bool, LibISLError> {
894 let pwf1 = self;
895 let isl_rs_ctx = pwf1.get_ctx();
896 let pwf1 = pwf1.ptr;
897 let pwf2 = pwf2.ptr;
898 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_plain_is_equal(pwf1, pwf2) };
899 let isl_rs_result = match isl_rs_result {
900 0 => false,
901 1 => true,
902 _ => {
903 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
904 }
905 };
906 let err = isl_rs_ctx.last_error();
907 if err != Error::None_ {
908 let err_msg = isl_rs_ctx.last_error_msg();
909 isl_rs_ctx.reset_error();
910 return Err(LibISLError::new(err, err_msg));
911 }
912 Ok(isl_rs_result)
913 }
914
915 pub fn project_domain_on_params(self) -> Result<PwQPolynomialFold, LibISLError> {
917 let pwf = self;
918 let isl_rs_ctx = pwf.get_ctx();
919 let mut pwf = pwf;
920 pwf.do_not_free_on_drop();
921 let pwf = pwf.ptr;
922 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_project_domain_on_params(pwf) };
923 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
924 should_free_on_drop: true };
925 let err = isl_rs_ctx.last_error();
926 if err != Error::None_ {
927 let err_msg = isl_rs_ctx.last_error_msg();
928 isl_rs_ctx.reset_error();
929 return Err(LibISLError::new(err, err_msg));
930 }
931 Ok(isl_rs_result)
932 }
933
934 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwQPolynomialFold, LibISLError> {
936 let isl_rs_ctx = Context { ptr: ctx.ptr,
937 should_free_on_drop: false };
938 let ctx = ctx.ptr;
939 let str_ = CString::new(str_).unwrap();
940 let str_ = str_.as_ptr();
941 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_read_from_str(ctx, str_) };
942 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
943 should_free_on_drop: true };
944 let err = isl_rs_ctx.last_error();
945 if err != Error::None_ {
946 let err_msg = isl_rs_ctx.last_error_msg();
947 isl_rs_ctx.reset_error();
948 return Err(LibISLError::new(err, err_msg));
949 }
950 Ok(isl_rs_result)
951 }
952
953 pub fn reset_space(self, space: Space) -> Result<PwQPolynomialFold, LibISLError> {
955 let pwf = self;
956 let isl_rs_ctx = pwf.get_ctx();
957 let mut pwf = pwf;
958 pwf.do_not_free_on_drop();
959 let pwf = pwf.ptr;
960 let mut space = space;
961 space.do_not_free_on_drop();
962 let space = space.ptr;
963 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_reset_space(pwf, space) };
964 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
965 should_free_on_drop: true };
966 let err = isl_rs_ctx.last_error();
967 if err != Error::None_ {
968 let err_msg = isl_rs_ctx.last_error_msg();
969 isl_rs_ctx.reset_error();
970 return Err(LibISLError::new(err, err_msg));
971 }
972 Ok(isl_rs_result)
973 }
974
975 pub fn reset_user(self) -> Result<PwQPolynomialFold, LibISLError> {
977 let pwf = self;
978 let isl_rs_ctx = pwf.get_ctx();
979 let mut pwf = pwf;
980 pwf.do_not_free_on_drop();
981 let pwf = pwf.ptr;
982 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_reset_user(pwf) };
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 let err_msg = isl_rs_ctx.last_error_msg();
988 isl_rs_ctx.reset_error();
989 return Err(LibISLError::new(err, err_msg));
990 }
991 Ok(isl_rs_result)
992 }
993
994 pub fn scale_down_val(self, v: Val) -> Result<PwQPolynomialFold, LibISLError> {
996 let pwf = self;
997 let isl_rs_ctx = pwf.get_ctx();
998 let mut pwf = pwf;
999 pwf.do_not_free_on_drop();
1000 let pwf = pwf.ptr;
1001 let mut v = v;
1002 v.do_not_free_on_drop();
1003 let v = v.ptr;
1004 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_scale_down_val(pwf, v) };
1005 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
1006 should_free_on_drop: true };
1007 let err = isl_rs_ctx.last_error();
1008 if err != Error::None_ {
1009 let err_msg = isl_rs_ctx.last_error_msg();
1010 isl_rs_ctx.reset_error();
1011 return Err(LibISLError::new(err, err_msg));
1012 }
1013 Ok(isl_rs_result)
1014 }
1015
1016 pub fn scale_val(self, v: Val) -> Result<PwQPolynomialFold, LibISLError> {
1018 let pwf = self;
1019 let isl_rs_ctx = pwf.get_ctx();
1020 let mut pwf = pwf;
1021 pwf.do_not_free_on_drop();
1022 let pwf = pwf.ptr;
1023 let mut v = v;
1024 v.do_not_free_on_drop();
1025 let v = v.ptr;
1026 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_scale_val(pwf, v) };
1027 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
1028 should_free_on_drop: true };
1029 let err = isl_rs_ctx.last_error();
1030 if err != Error::None_ {
1031 let err_msg = isl_rs_ctx.last_error_msg();
1032 isl_rs_ctx.reset_error();
1033 return Err(LibISLError::new(err, err_msg));
1034 }
1035 Ok(isl_rs_result)
1036 }
1037
1038 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1040 -> Result<PwQPolynomialFold, LibISLError> {
1041 let pwf = self;
1042 let isl_rs_ctx = pwf.get_ctx();
1043 let mut pwf = pwf;
1044 pwf.do_not_free_on_drop();
1045 let pwf = pwf.ptr;
1046 let type_ = type_.to_i32();
1047 let s = CString::new(s).unwrap();
1048 let s = s.as_ptr();
1049 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_set_dim_name(pwf, type_, pos, s) };
1050 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
1051 should_free_on_drop: true };
1052 let err = isl_rs_ctx.last_error();
1053 if err != Error::None_ {
1054 let err_msg = isl_rs_ctx.last_error_msg();
1055 isl_rs_ctx.reset_error();
1056 return Err(LibISLError::new(err, err_msg));
1057 }
1058 Ok(isl_rs_result)
1059 }
1060
1061 pub fn size(&self) -> Result<usize, LibISLError> {
1063 let pwf = self;
1064 let isl_rs_ctx = pwf.get_ctx();
1065 let pwf = pwf.ptr;
1066 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_size(pwf) };
1067 let err = isl_rs_ctx.last_error();
1068 if err != Error::None_ {
1069 let err_msg = isl_rs_ctx.last_error_msg();
1070 isl_rs_ctx.reset_error();
1071 return Err(LibISLError::new(err, err_msg));
1072 }
1073 Ok(isl_rs_result)
1074 }
1075
1076 pub fn subtract_domain(self, set: Set) -> Result<PwQPolynomialFold, LibISLError> {
1078 let pwf = self;
1079 let isl_rs_ctx = pwf.get_ctx();
1080 let mut pwf = pwf;
1081 pwf.do_not_free_on_drop();
1082 let pwf = pwf.ptr;
1083 let mut set = set;
1084 set.do_not_free_on_drop();
1085 let set = set.ptr;
1086 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_subtract_domain(pwf, set) };
1087 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
1088 should_free_on_drop: true };
1089 let err = isl_rs_ctx.last_error();
1090 if err != Error::None_ {
1091 let err_msg = isl_rs_ctx.last_error_msg();
1092 isl_rs_ctx.reset_error();
1093 return Err(LibISLError::new(err, err_msg));
1094 }
1095 Ok(isl_rs_result)
1096 }
1097
1098 pub fn to_list(self) -> Result<PwQPolynomialFoldList, LibISLError> {
1100 let el = self;
1101 let isl_rs_ctx = el.get_ctx();
1102 let mut el = el;
1103 el.do_not_free_on_drop();
1104 let el = el.ptr;
1105 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_to_list(el) };
1106 let isl_rs_result = PwQPolynomialFoldList { ptr: isl_rs_result,
1107 should_free_on_drop: true };
1108 let err = isl_rs_ctx.last_error();
1109 if err != Error::None_ {
1110 let err_msg = isl_rs_ctx.last_error_msg();
1111 isl_rs_ctx.reset_error();
1112 return Err(LibISLError::new(err, err_msg));
1113 }
1114 Ok(isl_rs_result)
1115 }
1116
1117 pub fn to_union_pw_qpolynomial_fold(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
1119 let pwf = self;
1120 let isl_rs_ctx = pwf.get_ctx();
1121 let mut pwf = pwf;
1122 pwf.do_not_free_on_drop();
1123 let pwf = pwf.ptr;
1124 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_to_union_pw_qpolynomial_fold(pwf) };
1125 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
1126 should_free_on_drop: true };
1127 let err = isl_rs_ctx.last_error();
1128 if err != Error::None_ {
1129 let err_msg = isl_rs_ctx.last_error_msg();
1130 isl_rs_ctx.reset_error();
1131 return Err(LibISLError::new(err, err_msg));
1132 }
1133 Ok(isl_rs_result)
1134 }
1135
1136 pub fn zero(space: Space, type_: Fold) -> Result<PwQPolynomialFold, LibISLError> {
1138 let isl_rs_ctx = space.get_ctx();
1139 let mut space = space;
1140 space.do_not_free_on_drop();
1141 let space = space.ptr;
1142 let type_ = type_.to_i32();
1143 let isl_rs_result = unsafe { isl_pw_qpolynomial_fold_zero(space, type_) };
1144 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
1145 should_free_on_drop: true };
1146 let err = isl_rs_ctx.last_error();
1147 if err != Error::None_ {
1148 let err_msg = isl_rs_ctx.last_error_msg();
1149 isl_rs_ctx.reset_error();
1150 return Err(LibISLError::new(err, err_msg));
1151 }
1152 Ok(isl_rs_result)
1153 }
1154
1155 pub fn do_not_free_on_drop(&mut self) {
1158 self.should_free_on_drop = false;
1159 }
1160}
1161
1162impl Drop for PwQPolynomialFold {
1163 fn drop(&mut self) {
1164 if self.should_free_on_drop {
1165 unsafe {
1166 isl_pw_qpolynomial_fold_free(self.ptr);
1167 }
1168 }
1169 }
1170}