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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
149 }
150 Ok(isl_rs_result)
151 }
152
153 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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}