1use 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
12pub 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 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 let err_msg = isl_rs_ctx.last_error_msg();
140 isl_rs_ctx.reset_error();
141 return Err(LibISLError::new(err, err_msg));
142 }
143 Ok(isl_rs_result)
144 }
145
146 pub fn align_params(self, model: Space) -> Result<UnionPwQPolynomialFold, LibISLError> {
148 let upwf = self;
149 let isl_rs_ctx = upwf.get_ctx();
150 let mut upwf = upwf;
151 upwf.do_not_free_on_drop();
152 let upwf = upwf.ptr;
153 let mut model = model;
154 model.do_not_free_on_drop();
155 let model = model.ptr;
156 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_align_params(upwf, model) };
157 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
158 should_free_on_drop: true };
159 let err = isl_rs_ctx.last_error();
160 if err != Error::None_ {
161 let err_msg = isl_rs_ctx.last_error_msg();
162 isl_rs_ctx.reset_error();
163 return Err(LibISLError::new(err, err_msg));
164 }
165 Ok(isl_rs_result)
166 }
167
168 pub fn coalesce(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
170 let upwf = self;
171 let isl_rs_ctx = upwf.get_ctx();
172 let mut upwf = upwf;
173 upwf.do_not_free_on_drop();
174 let upwf = upwf.ptr;
175 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_coalesce(upwf) };
176 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
177 should_free_on_drop: true };
178 let err = isl_rs_ctx.last_error();
179 if err != Error::None_ {
180 let err_msg = isl_rs_ctx.last_error_msg();
181 isl_rs_ctx.reset_error();
182 return Err(LibISLError::new(err, err_msg));
183 }
184 Ok(isl_rs_result)
185 }
186
187 pub fn copy(&self) -> Result<UnionPwQPolynomialFold, LibISLError> {
189 let upwf = self;
190 let isl_rs_ctx = upwf.get_ctx();
191 let upwf = upwf.ptr;
192 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_copy(upwf) };
193 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
194 should_free_on_drop: true };
195 let err = isl_rs_ctx.last_error();
196 if err != Error::None_ {
197 let err_msg = isl_rs_ctx.last_error_msg();
198 isl_rs_ctx.reset_error();
199 return Err(LibISLError::new(err, err_msg));
200 }
201 Ok(isl_rs_result)
202 }
203
204 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
206 let upwf = self;
207 let isl_rs_ctx = upwf.get_ctx();
208 let upwf = upwf.ptr;
209 let type_ = type_.to_i32();
210 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_dim(upwf, type_) };
211 let err = isl_rs_ctx.last_error();
212 if err != Error::None_ {
213 let err_msg = isl_rs_ctx.last_error_msg();
214 isl_rs_ctx.reset_error();
215 return Err(LibISLError::new(err, err_msg));
216 }
217 Ok(isl_rs_result)
218 }
219
220 pub fn domain(self) -> Result<UnionSet, LibISLError> {
222 let upwf = self;
223 let isl_rs_ctx = upwf.get_ctx();
224 let mut upwf = upwf;
225 upwf.do_not_free_on_drop();
226 let upwf = upwf.ptr;
227 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_domain(upwf) };
228 let isl_rs_result = UnionSet { ptr: isl_rs_result,
229 should_free_on_drop: true };
230 let err = isl_rs_ctx.last_error();
231 if err != Error::None_ {
232 let err_msg = isl_rs_ctx.last_error_msg();
233 isl_rs_ctx.reset_error();
234 return Err(LibISLError::new(err, err_msg));
235 }
236 Ok(isl_rs_result)
237 }
238
239 pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
241 -> Result<UnionPwQPolynomialFold, LibISLError> {
242 let upwf = self;
243 let isl_rs_ctx = upwf.get_ctx();
244 let mut upwf = upwf;
245 upwf.do_not_free_on_drop();
246 let upwf = upwf.ptr;
247 let type_ = type_.to_i32();
248 let isl_rs_result =
249 unsafe { isl_union_pw_qpolynomial_fold_drop_dims(upwf, type_, first, n) };
250 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
251 should_free_on_drop: true };
252 let err = isl_rs_ctx.last_error();
253 if err != Error::None_ {
254 let err_msg = isl_rs_ctx.last_error_msg();
255 isl_rs_ctx.reset_error();
256 return Err(LibISLError::new(err, err_msg));
257 }
258 Ok(isl_rs_result)
259 }
260
261 pub fn drop_unused_params(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
263 let upwf = self;
264 let isl_rs_ctx = upwf.get_ctx();
265 let mut upwf = upwf;
266 upwf.do_not_free_on_drop();
267 let upwf = upwf.ptr;
268 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_drop_unused_params(upwf) };
269 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
270 should_free_on_drop: true };
271 let err = isl_rs_ctx.last_error();
272 if err != Error::None_ {
273 let err_msg = isl_rs_ctx.last_error_msg();
274 isl_rs_ctx.reset_error();
275 return Err(LibISLError::new(err, err_msg));
276 }
277 Ok(isl_rs_result)
278 }
279
280 pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
282 let upwf = self;
283 let isl_rs_ctx = upwf.get_ctx();
284 let mut upwf = upwf;
285 upwf.do_not_free_on_drop();
286 let upwf = upwf.ptr;
287 let mut pnt = pnt;
288 pnt.do_not_free_on_drop();
289 let pnt = pnt.ptr;
290 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_eval(upwf, pnt) };
291 let isl_rs_result = Val { ptr: isl_rs_result,
292 should_free_on_drop: true };
293 let err = isl_rs_ctx.last_error();
294 if err != Error::None_ {
295 let err_msg = isl_rs_ctx.last_error_msg();
296 isl_rs_ctx.reset_error();
297 return Err(LibISLError::new(err, err_msg));
298 }
299 Ok(isl_rs_result)
300 }
301
302 pub fn extract_pw_qpolynomial_fold(&self, space: Space)
304 -> Result<PwQPolynomialFold, LibISLError> {
305 let upwf = self;
306 let isl_rs_ctx = upwf.get_ctx();
307 let upwf = upwf.ptr;
308 let mut space = space;
309 space.do_not_free_on_drop();
310 let space = space.ptr;
311 let isl_rs_result =
312 unsafe { isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold(upwf, space) };
313 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
314 should_free_on_drop: true };
315 let err = isl_rs_ctx.last_error();
316 if err != Error::None_ {
317 let err_msg = isl_rs_ctx.last_error_msg();
318 isl_rs_ctx.reset_error();
319 return Err(LibISLError::new(err, err_msg));
320 }
321 Ok(isl_rs_result)
322 }
323
324 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
326 let upwf = self;
327 let isl_rs_ctx = upwf.get_ctx();
328 let upwf = upwf.ptr;
329 let type_ = type_.to_i32();
330 let name = CString::new(name).unwrap();
331 let name = name.as_ptr();
332 let isl_rs_result =
333 unsafe { isl_union_pw_qpolynomial_fold_find_dim_by_name(upwf, type_, name) };
334 let err = isl_rs_ctx.last_error();
335 if err != Error::None_ {
336 let err_msg = isl_rs_ctx.last_error_msg();
337 isl_rs_ctx.reset_error();
338 return Err(LibISLError::new(err, err_msg));
339 }
340 Ok(isl_rs_result)
341 }
342
343 pub fn fold(self, upwf2: UnionPwQPolynomialFold)
345 -> Result<UnionPwQPolynomialFold, LibISLError> {
346 let upwf1 = self;
347 let isl_rs_ctx = upwf1.get_ctx();
348 let mut upwf1 = upwf1;
349 upwf1.do_not_free_on_drop();
350 let upwf1 = upwf1.ptr;
351 let mut upwf2 = upwf2;
352 upwf2.do_not_free_on_drop();
353 let upwf2 = upwf2.ptr;
354 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_fold(upwf1, upwf2) };
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 let err_msg = isl_rs_ctx.last_error_msg();
360 isl_rs_ctx.reset_error();
361 return Err(LibISLError::new(err, err_msg));
362 }
363 Ok(isl_rs_result)
364 }
365
366 pub fn fold_pw_qpolynomial_fold(self, pwqp: PwQPolynomialFold)
368 -> Result<UnionPwQPolynomialFold, LibISLError> {
369 let upwqp = self;
370 let isl_rs_ctx = upwqp.get_ctx();
371 let mut upwqp = upwqp;
372 upwqp.do_not_free_on_drop();
373 let upwqp = upwqp.ptr;
374 let mut pwqp = pwqp;
375 pwqp.do_not_free_on_drop();
376 let pwqp = pwqp.ptr;
377 let isl_rs_result =
378 unsafe { isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold(upwqp, pwqp) };
379 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
380 should_free_on_drop: true };
381 let err = isl_rs_ctx.last_error();
382 if err != Error::None_ {
383 let err_msg = isl_rs_ctx.last_error_msg();
384 isl_rs_ctx.reset_error();
385 return Err(LibISLError::new(err, err_msg));
386 }
387 Ok(isl_rs_result)
388 }
389
390 pub fn free(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
392 let upwf = self;
393 let isl_rs_ctx = upwf.get_ctx();
394 let mut upwf = upwf;
395 upwf.do_not_free_on_drop();
396 let upwf = upwf.ptr;
397 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_free(upwf) };
398 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
399 should_free_on_drop: true };
400 let err = isl_rs_ctx.last_error();
401 if err != Error::None_ {
402 let err_msg = isl_rs_ctx.last_error_msg();
403 isl_rs_ctx.reset_error();
404 return Err(LibISLError::new(err, err_msg));
405 }
406 Ok(isl_rs_result)
407 }
408
409 pub fn from_pw_qpolynomial_fold(pwf: PwQPolynomialFold)
411 -> Result<UnionPwQPolynomialFold, LibISLError> {
412 let isl_rs_ctx = pwf.get_ctx();
413 let mut pwf = pwf;
414 pwf.do_not_free_on_drop();
415 let pwf = pwf.ptr;
416 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(pwf) };
417 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
418 should_free_on_drop: true };
419 let err = isl_rs_ctx.last_error();
420 if err != Error::None_ {
421 let err_msg = isl_rs_ctx.last_error_msg();
422 isl_rs_ctx.reset_error();
423 return Err(LibISLError::new(err, err_msg));
424 }
425 Ok(isl_rs_result)
426 }
427
428 pub fn get_ctx(&self) -> Context {
430 let upwf = self;
431 let upwf = upwf.ptr;
432 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_ctx(upwf) };
433 let isl_rs_result = Context { ptr: isl_rs_result,
434 should_free_on_drop: false };
435 isl_rs_result
436 }
437
438 pub fn get_pw_qpolynomial_fold_list(&self) -> Result<PwQPolynomialFoldList, LibISLError> {
440 let upwf = self;
441 let isl_rs_ctx = upwf.get_ctx();
442 let upwf = upwf.ptr;
443 let isl_rs_result =
444 unsafe { isl_union_pw_qpolynomial_fold_get_pw_qpolynomial_fold_list(upwf) };
445 let isl_rs_result = PwQPolynomialFoldList { ptr: isl_rs_result,
446 should_free_on_drop: true };
447 let err = isl_rs_ctx.last_error();
448 if err != Error::None_ {
449 let err_msg = isl_rs_ctx.last_error_msg();
450 isl_rs_ctx.reset_error();
451 return Err(LibISLError::new(err, err_msg));
452 }
453 Ok(isl_rs_result)
454 }
455
456 pub fn get_space(&self) -> Result<Space, LibISLError> {
458 let upwf = self;
459 let isl_rs_ctx = upwf.get_ctx();
460 let upwf = upwf.ptr;
461 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_space(upwf) };
462 let isl_rs_result = Space { ptr: isl_rs_result,
463 should_free_on_drop: true };
464 let err = isl_rs_ctx.last_error();
465 if err != Error::None_ {
466 let err_msg = isl_rs_ctx.last_error_msg();
467 isl_rs_ctx.reset_error();
468 return Err(LibISLError::new(err, err_msg));
469 }
470 Ok(isl_rs_result)
471 }
472
473 pub fn get_type(&self) -> Result<Fold, LibISLError> {
475 let upwf = self;
476 let isl_rs_ctx = upwf.get_ctx();
477 let upwf = upwf.ptr;
478 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_type(upwf) };
479 let isl_rs_result = Fold::from_i32(isl_rs_result);
480 let err = isl_rs_ctx.last_error();
481 if err != Error::None_ {
482 let err_msg = isl_rs_ctx.last_error_msg();
483 isl_rs_ctx.reset_error();
484 return Err(LibISLError::new(err, err_msg));
485 }
486 Ok(isl_rs_result)
487 }
488
489 pub fn gist(self, context: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
491 let upwf = self;
492 let isl_rs_ctx = upwf.get_ctx();
493 let mut upwf = upwf;
494 upwf.do_not_free_on_drop();
495 let upwf = upwf.ptr;
496 let mut context = context;
497 context.do_not_free_on_drop();
498 let context = context.ptr;
499 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_gist(upwf, context) };
500 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
501 should_free_on_drop: true };
502 let err = isl_rs_ctx.last_error();
503 if err != Error::None_ {
504 let err_msg = isl_rs_ctx.last_error_msg();
505 isl_rs_ctx.reset_error();
506 return Err(LibISLError::new(err, err_msg));
507 }
508 Ok(isl_rs_result)
509 }
510
511 pub fn gist_params(self, context: Set) -> Result<UnionPwQPolynomialFold, LibISLError> {
513 let upwf = self;
514 let isl_rs_ctx = upwf.get_ctx();
515 let mut upwf = upwf;
516 upwf.do_not_free_on_drop();
517 let upwf = upwf.ptr;
518 let mut context = context;
519 context.do_not_free_on_drop();
520 let context = context.ptr;
521 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_gist_params(upwf, context) };
522 let isl_rs_result = UnionPwQPolynomialFold { 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 intersect_domain(self, uset: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
535 let upwf = self;
536 let isl_rs_ctx = upwf.get_ctx();
537 let mut upwf = upwf;
538 upwf.do_not_free_on_drop();
539 let upwf = upwf.ptr;
540 let mut uset = uset;
541 uset.do_not_free_on_drop();
542 let uset = uset.ptr;
543 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_intersect_domain(upwf, uset) };
544 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
545 should_free_on_drop: true };
546 let err = isl_rs_ctx.last_error();
547 if err != Error::None_ {
548 let err_msg = isl_rs_ctx.last_error_msg();
549 isl_rs_ctx.reset_error();
550 return Err(LibISLError::new(err, err_msg));
551 }
552 Ok(isl_rs_result)
553 }
554
555 pub fn intersect_domain_space(self, space: Space)
557 -> Result<UnionPwQPolynomialFold, LibISLError> {
558 let upwf = self;
559 let isl_rs_ctx = upwf.get_ctx();
560 let mut upwf = upwf;
561 upwf.do_not_free_on_drop();
562 let upwf = upwf.ptr;
563 let mut space = space;
564 space.do_not_free_on_drop();
565 let space = space.ptr;
566 let isl_rs_result =
567 unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_space(upwf, space) };
568 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
569 should_free_on_drop: true };
570 let err = isl_rs_ctx.last_error();
571 if err != Error::None_ {
572 let err_msg = isl_rs_ctx.last_error_msg();
573 isl_rs_ctx.reset_error();
574 return Err(LibISLError::new(err, err_msg));
575 }
576 Ok(isl_rs_result)
577 }
578
579 pub fn intersect_domain_union_set(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_union_set(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 let err_msg = isl_rs_ctx.last_error_msg();
597 isl_rs_ctx.reset_error();
598 return Err(LibISLError::new(err, err_msg));
599 }
600 Ok(isl_rs_result)
601 }
602
603 pub fn intersect_domain_wrapped_domain(self, uset: UnionSet)
605 -> Result<UnionPwQPolynomialFold, LibISLError> {
606 let upwf = self;
607 let isl_rs_ctx = upwf.get_ctx();
608 let mut upwf = upwf;
609 upwf.do_not_free_on_drop();
610 let upwf = upwf.ptr;
611 let mut uset = uset;
612 uset.do_not_free_on_drop();
613 let uset = uset.ptr;
614 let isl_rs_result =
615 unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_domain(upwf, uset) };
616 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
617 should_free_on_drop: true };
618 let err = isl_rs_ctx.last_error();
619 if err != Error::None_ {
620 let err_msg = isl_rs_ctx.last_error_msg();
621 isl_rs_ctx.reset_error();
622 return Err(LibISLError::new(err, err_msg));
623 }
624 Ok(isl_rs_result)
625 }
626
627 pub fn intersect_domain_wrapped_range(self, uset: UnionSet)
629 -> Result<UnionPwQPolynomialFold, LibISLError> {
630 let upwf = self;
631 let isl_rs_ctx = upwf.get_ctx();
632 let mut upwf = upwf;
633 upwf.do_not_free_on_drop();
634 let upwf = upwf.ptr;
635 let mut uset = uset;
636 uset.do_not_free_on_drop();
637 let uset = uset.ptr;
638 let isl_rs_result =
639 unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_range(upwf, uset) };
640 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
641 should_free_on_drop: true };
642 let err = isl_rs_ctx.last_error();
643 if err != Error::None_ {
644 let err_msg = isl_rs_ctx.last_error_msg();
645 isl_rs_ctx.reset_error();
646 return Err(LibISLError::new(err, err_msg));
647 }
648 Ok(isl_rs_result)
649 }
650
651 pub fn intersect_params(self, set: Set) -> Result<UnionPwQPolynomialFold, LibISLError> {
653 let upwf = self;
654 let isl_rs_ctx = upwf.get_ctx();
655 let mut upwf = upwf;
656 upwf.do_not_free_on_drop();
657 let upwf = upwf.ptr;
658 let mut set = set;
659 set.do_not_free_on_drop();
660 let set = set.ptr;
661 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_intersect_params(upwf, set) };
662 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
663 should_free_on_drop: true };
664 let err = isl_rs_ctx.last_error();
665 if err != Error::None_ {
666 let err_msg = isl_rs_ctx.last_error_msg();
667 isl_rs_ctx.reset_error();
668 return Err(LibISLError::new(err, err_msg));
669 }
670 Ok(isl_rs_result)
671 }
672
673 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
675 let upwf = self;
676 let isl_rs_ctx = upwf.get_ctx();
677 let upwf = upwf.ptr;
678 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_involves_nan(upwf) };
679 let isl_rs_result = match isl_rs_result {
680 0 => false,
681 1 => true,
682 _ => {
683 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
684 }
685 };
686 let err = isl_rs_ctx.last_error();
687 if err != Error::None_ {
688 let err_msg = isl_rs_ctx.last_error_msg();
689 isl_rs_ctx.reset_error();
690 return Err(LibISLError::new(err, err_msg));
691 }
692 Ok(isl_rs_result)
693 }
694
695 pub fn n_pw_qpolynomial_fold(&self) -> Result<i32, LibISLError> {
697 let upwf = self;
698 let isl_rs_ctx = upwf.get_ctx();
699 let upwf = upwf.ptr;
700 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_n_pw_qpolynomial_fold(upwf) };
701 let err = isl_rs_ctx.last_error();
702 if err != Error::None_ {
703 let err_msg = isl_rs_ctx.last_error_msg();
704 isl_rs_ctx.reset_error();
705 return Err(LibISLError::new(err, err_msg));
706 }
707 Ok(isl_rs_result)
708 }
709
710 pub fn plain_is_equal(&self, upwf2: &UnionPwQPolynomialFold) -> Result<bool, LibISLError> {
712 let upwf1 = self;
713 let isl_rs_ctx = upwf1.get_ctx();
714 let upwf1 = upwf1.ptr;
715 let upwf2 = upwf2.ptr;
716 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_plain_is_equal(upwf1, upwf2) };
717 let isl_rs_result = match isl_rs_result {
718 0 => false,
719 1 => true,
720 _ => {
721 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
722 }
723 };
724 let err = isl_rs_ctx.last_error();
725 if err != Error::None_ {
726 let err_msg = isl_rs_ctx.last_error_msg();
727 isl_rs_ctx.reset_error();
728 return Err(LibISLError::new(err, err_msg));
729 }
730 Ok(isl_rs_result)
731 }
732
733 pub fn reset_user(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
735 let upwf = self;
736 let isl_rs_ctx = upwf.get_ctx();
737 let mut upwf = upwf;
738 upwf.do_not_free_on_drop();
739 let upwf = upwf.ptr;
740 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_reset_user(upwf) };
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 let err_msg = isl_rs_ctx.last_error_msg();
746 isl_rs_ctx.reset_error();
747 return Err(LibISLError::new(err, err_msg));
748 }
749 Ok(isl_rs_result)
750 }
751
752 pub fn scale_down_val(self, v: Val) -> Result<UnionPwQPolynomialFold, LibISLError> {
754 let upwf = self;
755 let isl_rs_ctx = upwf.get_ctx();
756 let mut upwf = upwf;
757 upwf.do_not_free_on_drop();
758 let upwf = upwf.ptr;
759 let mut v = v;
760 v.do_not_free_on_drop();
761 let v = v.ptr;
762 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_scale_down_val(upwf, v) };
763 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
764 should_free_on_drop: true };
765 let err = isl_rs_ctx.last_error();
766 if err != Error::None_ {
767 let err_msg = isl_rs_ctx.last_error_msg();
768 isl_rs_ctx.reset_error();
769 return Err(LibISLError::new(err, err_msg));
770 }
771 Ok(isl_rs_result)
772 }
773
774 pub fn scale_val(self, v: Val) -> Result<UnionPwQPolynomialFold, LibISLError> {
776 let upwf = self;
777 let isl_rs_ctx = upwf.get_ctx();
778 let mut upwf = upwf;
779 upwf.do_not_free_on_drop();
780 let upwf = upwf.ptr;
781 let mut v = v;
782 v.do_not_free_on_drop();
783 let v = v.ptr;
784 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_scale_val(upwf, v) };
785 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
786 should_free_on_drop: true };
787 let err = isl_rs_ctx.last_error();
788 if err != Error::None_ {
789 let err_msg = isl_rs_ctx.last_error_msg();
790 isl_rs_ctx.reset_error();
791 return Err(LibISLError::new(err, err_msg));
792 }
793 Ok(isl_rs_result)
794 }
795
796 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
798 -> Result<UnionPwQPolynomialFold, LibISLError> {
799 let upwf = self;
800 let isl_rs_ctx = upwf.get_ctx();
801 let mut upwf = upwf;
802 upwf.do_not_free_on_drop();
803 let upwf = upwf.ptr;
804 let type_ = type_.to_i32();
805 let s = CString::new(s).unwrap();
806 let s = s.as_ptr();
807 let isl_rs_result =
808 unsafe { isl_union_pw_qpolynomial_fold_set_dim_name(upwf, type_, pos, s) };
809 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
810 should_free_on_drop: true };
811 let err = isl_rs_ctx.last_error();
812 if err != Error::None_ {
813 let err_msg = isl_rs_ctx.last_error_msg();
814 isl_rs_ctx.reset_error();
815 return Err(LibISLError::new(err, err_msg));
816 }
817 Ok(isl_rs_result)
818 }
819
820 pub fn subtract_domain(self, uset: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
822 let upwf = self;
823 let isl_rs_ctx = upwf.get_ctx();
824 let mut upwf = upwf;
825 upwf.do_not_free_on_drop();
826 let upwf = upwf.ptr;
827 let mut uset = uset;
828 uset.do_not_free_on_drop();
829 let uset = uset.ptr;
830 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_subtract_domain(upwf, uset) };
831 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
832 should_free_on_drop: true };
833 let err = isl_rs_ctx.last_error();
834 if err != Error::None_ {
835 let err_msg = isl_rs_ctx.last_error_msg();
836 isl_rs_ctx.reset_error();
837 return Err(LibISLError::new(err, err_msg));
838 }
839 Ok(isl_rs_result)
840 }
841
842 pub fn subtract_domain_space(self, space: Space)
844 -> Result<UnionPwQPolynomialFold, LibISLError> {
845 let upwf = self;
846 let isl_rs_ctx = upwf.get_ctx();
847 let mut upwf = upwf;
848 upwf.do_not_free_on_drop();
849 let upwf = upwf.ptr;
850 let mut space = space;
851 space.do_not_free_on_drop();
852 let space = space.ptr;
853 let isl_rs_result =
854 unsafe { isl_union_pw_qpolynomial_fold_subtract_domain_space(upwf, space) };
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 let err_msg = isl_rs_ctx.last_error_msg();
860 isl_rs_ctx.reset_error();
861 return Err(LibISLError::new(err, err_msg));
862 }
863 Ok(isl_rs_result)
864 }
865
866 pub fn subtract_domain_union_set(self, uset: UnionSet)
868 -> Result<UnionPwQPolynomialFold, LibISLError> {
869 let upwf = self;
870 let isl_rs_ctx = upwf.get_ctx();
871 let mut upwf = upwf;
872 upwf.do_not_free_on_drop();
873 let upwf = upwf.ptr;
874 let mut uset = uset;
875 uset.do_not_free_on_drop();
876 let uset = uset.ptr;
877 let isl_rs_result =
878 unsafe { isl_union_pw_qpolynomial_fold_subtract_domain_union_set(upwf, uset) };
879 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
880 should_free_on_drop: true };
881 let err = isl_rs_ctx.last_error();
882 if err != Error::None_ {
883 let err_msg = isl_rs_ctx.last_error_msg();
884 isl_rs_ctx.reset_error();
885 return Err(LibISLError::new(err, err_msg));
886 }
887 Ok(isl_rs_result)
888 }
889
890 pub fn zero(space: Space, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
892 let isl_rs_ctx = space.get_ctx();
893 let mut space = space;
894 space.do_not_free_on_drop();
895 let space = space.ptr;
896 let type_ = type_.to_i32();
897 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero(space, type_) };
898 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
899 should_free_on_drop: true };
900 let err = isl_rs_ctx.last_error();
901 if err != Error::None_ {
902 let err_msg = isl_rs_ctx.last_error_msg();
903 isl_rs_ctx.reset_error();
904 return Err(LibISLError::new(err, err_msg));
905 }
906 Ok(isl_rs_result)
907 }
908
909 pub fn zero_ctx(ctx: &Context, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
911 let isl_rs_ctx = Context { ptr: ctx.ptr,
912 should_free_on_drop: false };
913 let ctx = ctx.ptr;
914 let type_ = type_.to_i32();
915 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero_ctx(ctx, type_) };
916 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
917 should_free_on_drop: true };
918 let err = isl_rs_ctx.last_error();
919 if err != Error::None_ {
920 let err_msg = isl_rs_ctx.last_error_msg();
921 isl_rs_ctx.reset_error();
922 return Err(LibISLError::new(err, err_msg));
923 }
924 Ok(isl_rs_result)
925 }
926
927 pub fn zero_space(space: Space, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
929 let isl_rs_ctx = space.get_ctx();
930 let mut space = space;
931 space.do_not_free_on_drop();
932 let space = space.ptr;
933 let type_ = type_.to_i32();
934 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero_space(space, type_) };
935 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
936 should_free_on_drop: true };
937 let err = isl_rs_ctx.last_error();
938 if err != Error::None_ {
939 let err_msg = isl_rs_ctx.last_error_msg();
940 isl_rs_ctx.reset_error();
941 return Err(LibISLError::new(err, err_msg));
942 }
943 Ok(isl_rs_result)
944 }
945
946 pub fn do_not_free_on_drop(&mut self) {
949 self.should_free_on_drop = false;
950 }
951}
952
953impl Drop for UnionPwQPolynomialFold {
954 fn drop(&mut self) {
955 if self.should_free_on_drop {
956 unsafe {
957 isl_union_pw_qpolynomial_fold_free(self.ptr);
958 }
959 }
960 }
961}