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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
140 }
141 Ok(isl_rs_result)
142 }
143
144 pub fn align_params(self, model: Space) -> Result<UnionPwQPolynomialFold, LibISLError> {
146 let upwf = self;
147 let isl_rs_ctx = upwf.get_ctx();
148 let mut upwf = upwf;
149 upwf.do_not_free_on_drop();
150 let upwf = upwf.ptr;
151 let mut model = model;
152 model.do_not_free_on_drop();
153 let model = model.ptr;
154 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_align_params(upwf, model) };
155 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
156 should_free_on_drop: true };
157 let err = isl_rs_ctx.last_error();
158 if err != Error::None_ {
159 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
160 }
161 Ok(isl_rs_result)
162 }
163
164 pub fn coalesce(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
166 let upwf = self;
167 let isl_rs_ctx = upwf.get_ctx();
168 let mut upwf = upwf;
169 upwf.do_not_free_on_drop();
170 let upwf = upwf.ptr;
171 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_coalesce(upwf) };
172 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
173 should_free_on_drop: true };
174 let err = isl_rs_ctx.last_error();
175 if err != Error::None_ {
176 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
177 }
178 Ok(isl_rs_result)
179 }
180
181 pub fn copy(&self) -> Result<UnionPwQPolynomialFold, LibISLError> {
183 let upwf = self;
184 let isl_rs_ctx = upwf.get_ctx();
185 let upwf = upwf.ptr;
186 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_copy(upwf) };
187 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
188 should_free_on_drop: true };
189 let err = isl_rs_ctx.last_error();
190 if err != Error::None_ {
191 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
192 }
193 Ok(isl_rs_result)
194 }
195
196 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
198 let upwf = self;
199 let isl_rs_ctx = upwf.get_ctx();
200 let upwf = upwf.ptr;
201 let type_ = type_.to_i32();
202 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_dim(upwf, type_) };
203 let err = isl_rs_ctx.last_error();
204 if err != Error::None_ {
205 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
206 }
207 Ok(isl_rs_result)
208 }
209
210 pub fn domain(self) -> Result<UnionSet, LibISLError> {
212 let upwf = self;
213 let isl_rs_ctx = upwf.get_ctx();
214 let mut upwf = upwf;
215 upwf.do_not_free_on_drop();
216 let upwf = upwf.ptr;
217 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_domain(upwf) };
218 let isl_rs_result = UnionSet { ptr: isl_rs_result,
219 should_free_on_drop: true };
220 let err = isl_rs_ctx.last_error();
221 if err != Error::None_ {
222 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
223 }
224 Ok(isl_rs_result)
225 }
226
227 pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
229 -> Result<UnionPwQPolynomialFold, LibISLError> {
230 let upwf = self;
231 let isl_rs_ctx = upwf.get_ctx();
232 let mut upwf = upwf;
233 upwf.do_not_free_on_drop();
234 let upwf = upwf.ptr;
235 let type_ = type_.to_i32();
236 let isl_rs_result =
237 unsafe { isl_union_pw_qpolynomial_fold_drop_dims(upwf, type_, first, n) };
238 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
239 should_free_on_drop: true };
240 let err = isl_rs_ctx.last_error();
241 if err != Error::None_ {
242 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
243 }
244 Ok(isl_rs_result)
245 }
246
247 pub fn drop_unused_params(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
249 let upwf = self;
250 let isl_rs_ctx = upwf.get_ctx();
251 let mut upwf = upwf;
252 upwf.do_not_free_on_drop();
253 let upwf = upwf.ptr;
254 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_drop_unused_params(upwf) };
255 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
256 should_free_on_drop: true };
257 let err = isl_rs_ctx.last_error();
258 if err != Error::None_ {
259 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
260 }
261 Ok(isl_rs_result)
262 }
263
264 pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
266 let upwf = self;
267 let isl_rs_ctx = upwf.get_ctx();
268 let mut upwf = upwf;
269 upwf.do_not_free_on_drop();
270 let upwf = upwf.ptr;
271 let mut pnt = pnt;
272 pnt.do_not_free_on_drop();
273 let pnt = pnt.ptr;
274 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_eval(upwf, pnt) };
275 let isl_rs_result = Val { ptr: isl_rs_result,
276 should_free_on_drop: true };
277 let err = isl_rs_ctx.last_error();
278 if err != Error::None_ {
279 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
280 }
281 Ok(isl_rs_result)
282 }
283
284 pub fn extract_pw_qpolynomial_fold(&self, space: Space)
286 -> Result<PwQPolynomialFold, LibISLError> {
287 let upwf = self;
288 let isl_rs_ctx = upwf.get_ctx();
289 let upwf = upwf.ptr;
290 let mut space = space;
291 space.do_not_free_on_drop();
292 let space = space.ptr;
293 let isl_rs_result =
294 unsafe { isl_union_pw_qpolynomial_fold_extract_pw_qpolynomial_fold(upwf, space) };
295 let isl_rs_result = PwQPolynomialFold { ptr: isl_rs_result,
296 should_free_on_drop: true };
297 let err = isl_rs_ctx.last_error();
298 if err != Error::None_ {
299 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
300 }
301 Ok(isl_rs_result)
302 }
303
304 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
306 let upwf = self;
307 let isl_rs_ctx = upwf.get_ctx();
308 let upwf = upwf.ptr;
309 let type_ = type_.to_i32();
310 let name = CString::new(name).unwrap();
311 let name = name.as_ptr();
312 let isl_rs_result =
313 unsafe { isl_union_pw_qpolynomial_fold_find_dim_by_name(upwf, type_, name) };
314 let err = isl_rs_ctx.last_error();
315 if err != Error::None_ {
316 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
317 }
318 Ok(isl_rs_result)
319 }
320
321 pub fn fold(self, upwf2: UnionPwQPolynomialFold)
323 -> Result<UnionPwQPolynomialFold, LibISLError> {
324 let upwf1 = self;
325 let isl_rs_ctx = upwf1.get_ctx();
326 let mut upwf1 = upwf1;
327 upwf1.do_not_free_on_drop();
328 let upwf1 = upwf1.ptr;
329 let mut upwf2 = upwf2;
330 upwf2.do_not_free_on_drop();
331 let upwf2 = upwf2.ptr;
332 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_fold(upwf1, upwf2) };
333 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
334 should_free_on_drop: true };
335 let err = isl_rs_ctx.last_error();
336 if err != Error::None_ {
337 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
338 }
339 Ok(isl_rs_result)
340 }
341
342 pub fn fold_pw_qpolynomial_fold(self, pwqp: PwQPolynomialFold)
344 -> Result<UnionPwQPolynomialFold, LibISLError> {
345 let upwqp = self;
346 let isl_rs_ctx = upwqp.get_ctx();
347 let mut upwqp = upwqp;
348 upwqp.do_not_free_on_drop();
349 let upwqp = upwqp.ptr;
350 let mut pwqp = pwqp;
351 pwqp.do_not_free_on_drop();
352 let pwqp = pwqp.ptr;
353 let isl_rs_result =
354 unsafe { isl_union_pw_qpolynomial_fold_fold_pw_qpolynomial_fold(upwqp, pwqp) };
355 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
356 should_free_on_drop: true };
357 let err = isl_rs_ctx.last_error();
358 if err != Error::None_ {
359 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
360 }
361 Ok(isl_rs_result)
362 }
363
364 pub fn free(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
366 let upwf = self;
367 let isl_rs_ctx = upwf.get_ctx();
368 let mut upwf = upwf;
369 upwf.do_not_free_on_drop();
370 let upwf = upwf.ptr;
371 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_free(upwf) };
372 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
373 should_free_on_drop: true };
374 let err = isl_rs_ctx.last_error();
375 if err != Error::None_ {
376 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
377 }
378 Ok(isl_rs_result)
379 }
380
381 pub fn from_pw_qpolynomial_fold(pwf: PwQPolynomialFold)
383 -> Result<UnionPwQPolynomialFold, LibISLError> {
384 let isl_rs_ctx = pwf.get_ctx();
385 let mut pwf = pwf;
386 pwf.do_not_free_on_drop();
387 let pwf = pwf.ptr;
388 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_from_pw_qpolynomial_fold(pwf) };
389 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
390 should_free_on_drop: true };
391 let err = isl_rs_ctx.last_error();
392 if err != Error::None_ {
393 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
394 }
395 Ok(isl_rs_result)
396 }
397
398 pub fn get_ctx(&self) -> Context {
400 let upwf = self;
401 let upwf = upwf.ptr;
402 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_ctx(upwf) };
403 let isl_rs_result = Context { ptr: isl_rs_result,
404 should_free_on_drop: false };
405 isl_rs_result
406 }
407
408 pub fn get_pw_qpolynomial_fold_list(&self) -> Result<PwQPolynomialFoldList, LibISLError> {
410 let upwf = self;
411 let isl_rs_ctx = upwf.get_ctx();
412 let upwf = upwf.ptr;
413 let isl_rs_result =
414 unsafe { isl_union_pw_qpolynomial_fold_get_pw_qpolynomial_fold_list(upwf) };
415 let isl_rs_result = PwQPolynomialFoldList { ptr: isl_rs_result,
416 should_free_on_drop: true };
417 let err = isl_rs_ctx.last_error();
418 if err != Error::None_ {
419 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
420 }
421 Ok(isl_rs_result)
422 }
423
424 pub fn get_space(&self) -> Result<Space, LibISLError> {
426 let upwf = self;
427 let isl_rs_ctx = upwf.get_ctx();
428 let upwf = upwf.ptr;
429 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_space(upwf) };
430 let isl_rs_result = Space { ptr: isl_rs_result,
431 should_free_on_drop: true };
432 let err = isl_rs_ctx.last_error();
433 if err != Error::None_ {
434 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
435 }
436 Ok(isl_rs_result)
437 }
438
439 pub fn get_type(&self) -> Result<Fold, LibISLError> {
441 let upwf = self;
442 let isl_rs_ctx = upwf.get_ctx();
443 let upwf = upwf.ptr;
444 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_get_type(upwf) };
445 let isl_rs_result = Fold::from_i32(isl_rs_result);
446 let err = isl_rs_ctx.last_error();
447 if err != Error::None_ {
448 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
449 }
450 Ok(isl_rs_result)
451 }
452
453 pub fn gist(self, context: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
455 let upwf = self;
456 let isl_rs_ctx = upwf.get_ctx();
457 let mut upwf = upwf;
458 upwf.do_not_free_on_drop();
459 let upwf = upwf.ptr;
460 let mut context = context;
461 context.do_not_free_on_drop();
462 let context = context.ptr;
463 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_gist(upwf, context) };
464 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
465 should_free_on_drop: true };
466 let err = isl_rs_ctx.last_error();
467 if err != Error::None_ {
468 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
469 }
470 Ok(isl_rs_result)
471 }
472
473 pub fn gist_params(self, context: Set) -> Result<UnionPwQPolynomialFold, LibISLError> {
475 let upwf = self;
476 let isl_rs_ctx = upwf.get_ctx();
477 let mut upwf = upwf;
478 upwf.do_not_free_on_drop();
479 let upwf = upwf.ptr;
480 let mut context = context;
481 context.do_not_free_on_drop();
482 let context = context.ptr;
483 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_gist_params(upwf, context) };
484 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
485 should_free_on_drop: true };
486 let err = isl_rs_ctx.last_error();
487 if err != Error::None_ {
488 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
489 }
490 Ok(isl_rs_result)
491 }
492
493 pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
495 let upwf = self;
496 let isl_rs_ctx = upwf.get_ctx();
497 let mut upwf = upwf;
498 upwf.do_not_free_on_drop();
499 let upwf = upwf.ptr;
500 let mut uset = uset;
501 uset.do_not_free_on_drop();
502 let uset = uset.ptr;
503 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_intersect_domain(upwf, uset) };
504 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
505 should_free_on_drop: true };
506 let err = isl_rs_ctx.last_error();
507 if err != Error::None_ {
508 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
509 }
510 Ok(isl_rs_result)
511 }
512
513 pub fn intersect_domain_space(self, space: Space)
515 -> Result<UnionPwQPolynomialFold, LibISLError> {
516 let upwf = self;
517 let isl_rs_ctx = upwf.get_ctx();
518 let mut upwf = upwf;
519 upwf.do_not_free_on_drop();
520 let upwf = upwf.ptr;
521 let mut space = space;
522 space.do_not_free_on_drop();
523 let space = space.ptr;
524 let isl_rs_result =
525 unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_space(upwf, space) };
526 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
527 should_free_on_drop: true };
528 let err = isl_rs_ctx.last_error();
529 if err != Error::None_ {
530 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
531 }
532 Ok(isl_rs_result)
533 }
534
535 pub fn intersect_domain_union_set(self, uset: UnionSet)
537 -> Result<UnionPwQPolynomialFold, LibISLError> {
538 let upwf = self;
539 let isl_rs_ctx = upwf.get_ctx();
540 let mut upwf = upwf;
541 upwf.do_not_free_on_drop();
542 let upwf = upwf.ptr;
543 let mut uset = uset;
544 uset.do_not_free_on_drop();
545 let uset = uset.ptr;
546 let isl_rs_result =
547 unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_union_set(upwf, uset) };
548 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
549 should_free_on_drop: true };
550 let err = isl_rs_ctx.last_error();
551 if err != Error::None_ {
552 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
553 }
554 Ok(isl_rs_result)
555 }
556
557 pub fn intersect_domain_wrapped_domain(self, uset: UnionSet)
559 -> Result<UnionPwQPolynomialFold, LibISLError> {
560 let upwf = self;
561 let isl_rs_ctx = upwf.get_ctx();
562 let mut upwf = upwf;
563 upwf.do_not_free_on_drop();
564 let upwf = upwf.ptr;
565 let mut uset = uset;
566 uset.do_not_free_on_drop();
567 let uset = uset.ptr;
568 let isl_rs_result =
569 unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_domain(upwf, uset) };
570 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
571 should_free_on_drop: true };
572 let err = isl_rs_ctx.last_error();
573 if err != Error::None_ {
574 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
575 }
576 Ok(isl_rs_result)
577 }
578
579 pub fn intersect_domain_wrapped_range(self, uset: UnionSet)
581 -> Result<UnionPwQPolynomialFold, LibISLError> {
582 let upwf = self;
583 let isl_rs_ctx = upwf.get_ctx();
584 let mut upwf = upwf;
585 upwf.do_not_free_on_drop();
586 let upwf = upwf.ptr;
587 let mut uset = uset;
588 uset.do_not_free_on_drop();
589 let uset = uset.ptr;
590 let isl_rs_result =
591 unsafe { isl_union_pw_qpolynomial_fold_intersect_domain_wrapped_range(upwf, uset) };
592 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
593 should_free_on_drop: true };
594 let err = isl_rs_ctx.last_error();
595 if err != Error::None_ {
596 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
597 }
598 Ok(isl_rs_result)
599 }
600
601 pub fn intersect_params(self, set: Set) -> Result<UnionPwQPolynomialFold, LibISLError> {
603 let upwf = self;
604 let isl_rs_ctx = upwf.get_ctx();
605 let mut upwf = upwf;
606 upwf.do_not_free_on_drop();
607 let upwf = upwf.ptr;
608 let mut set = set;
609 set.do_not_free_on_drop();
610 let set = set.ptr;
611 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_intersect_params(upwf, set) };
612 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
613 should_free_on_drop: true };
614 let err = isl_rs_ctx.last_error();
615 if err != Error::None_ {
616 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
617 }
618 Ok(isl_rs_result)
619 }
620
621 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
623 let upwf = self;
624 let isl_rs_ctx = upwf.get_ctx();
625 let upwf = upwf.ptr;
626 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_involves_nan(upwf) };
627 let isl_rs_result = match isl_rs_result {
628 0 => false,
629 1 => true,
630 _ => panic!("Got isl_bool = -1"),
631 };
632 let err = isl_rs_ctx.last_error();
633 if err != Error::None_ {
634 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
635 }
636 Ok(isl_rs_result)
637 }
638
639 pub fn n_pw_qpolynomial_fold(&self) -> Result<i32, LibISLError> {
641 let upwf = self;
642 let isl_rs_ctx = upwf.get_ctx();
643 let upwf = upwf.ptr;
644 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_n_pw_qpolynomial_fold(upwf) };
645 let err = isl_rs_ctx.last_error();
646 if err != Error::None_ {
647 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
648 }
649 Ok(isl_rs_result)
650 }
651
652 pub fn plain_is_equal(&self, upwf2: &UnionPwQPolynomialFold) -> Result<bool, LibISLError> {
654 let upwf1 = self;
655 let isl_rs_ctx = upwf1.get_ctx();
656 let upwf1 = upwf1.ptr;
657 let upwf2 = upwf2.ptr;
658 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_plain_is_equal(upwf1, upwf2) };
659 let isl_rs_result = match isl_rs_result {
660 0 => false,
661 1 => true,
662 _ => panic!("Got isl_bool = -1"),
663 };
664 let err = isl_rs_ctx.last_error();
665 if err != Error::None_ {
666 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
667 }
668 Ok(isl_rs_result)
669 }
670
671 pub fn reset_user(self) -> Result<UnionPwQPolynomialFold, LibISLError> {
673 let upwf = self;
674 let isl_rs_ctx = upwf.get_ctx();
675 let mut upwf = upwf;
676 upwf.do_not_free_on_drop();
677 let upwf = upwf.ptr;
678 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_reset_user(upwf) };
679 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
680 should_free_on_drop: true };
681 let err = isl_rs_ctx.last_error();
682 if err != Error::None_ {
683 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
684 }
685 Ok(isl_rs_result)
686 }
687
688 pub fn scale_down_val(self, v: Val) -> Result<UnionPwQPolynomialFold, LibISLError> {
690 let upwf = self;
691 let isl_rs_ctx = upwf.get_ctx();
692 let mut upwf = upwf;
693 upwf.do_not_free_on_drop();
694 let upwf = upwf.ptr;
695 let mut v = v;
696 v.do_not_free_on_drop();
697 let v = v.ptr;
698 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_scale_down_val(upwf, v) };
699 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
700 should_free_on_drop: true };
701 let err = isl_rs_ctx.last_error();
702 if err != Error::None_ {
703 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
704 }
705 Ok(isl_rs_result)
706 }
707
708 pub fn scale_val(self, v: Val) -> Result<UnionPwQPolynomialFold, LibISLError> {
710 let upwf = self;
711 let isl_rs_ctx = upwf.get_ctx();
712 let mut upwf = upwf;
713 upwf.do_not_free_on_drop();
714 let upwf = upwf.ptr;
715 let mut v = v;
716 v.do_not_free_on_drop();
717 let v = v.ptr;
718 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_scale_val(upwf, v) };
719 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
720 should_free_on_drop: true };
721 let err = isl_rs_ctx.last_error();
722 if err != Error::None_ {
723 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
724 }
725 Ok(isl_rs_result)
726 }
727
728 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
730 -> Result<UnionPwQPolynomialFold, LibISLError> {
731 let upwf = self;
732 let isl_rs_ctx = upwf.get_ctx();
733 let mut upwf = upwf;
734 upwf.do_not_free_on_drop();
735 let upwf = upwf.ptr;
736 let type_ = type_.to_i32();
737 let s = CString::new(s).unwrap();
738 let s = s.as_ptr();
739 let isl_rs_result =
740 unsafe { isl_union_pw_qpolynomial_fold_set_dim_name(upwf, type_, pos, s) };
741 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
742 should_free_on_drop: true };
743 let err = isl_rs_ctx.last_error();
744 if err != Error::None_ {
745 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
746 }
747 Ok(isl_rs_result)
748 }
749
750 pub fn subtract_domain(self, uset: UnionSet) -> Result<UnionPwQPolynomialFold, LibISLError> {
752 let upwf = self;
753 let isl_rs_ctx = upwf.get_ctx();
754 let mut upwf = upwf;
755 upwf.do_not_free_on_drop();
756 let upwf = upwf.ptr;
757 let mut uset = uset;
758 uset.do_not_free_on_drop();
759 let uset = uset.ptr;
760 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_subtract_domain(upwf, uset) };
761 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
762 should_free_on_drop: true };
763 let err = isl_rs_ctx.last_error();
764 if err != Error::None_ {
765 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
766 }
767 Ok(isl_rs_result)
768 }
769
770 pub fn subtract_domain_space(self, space: Space)
772 -> Result<UnionPwQPolynomialFold, LibISLError> {
773 let upwf = self;
774 let isl_rs_ctx = upwf.get_ctx();
775 let mut upwf = upwf;
776 upwf.do_not_free_on_drop();
777 let upwf = upwf.ptr;
778 let mut space = space;
779 space.do_not_free_on_drop();
780 let space = space.ptr;
781 let isl_rs_result =
782 unsafe { isl_union_pw_qpolynomial_fold_subtract_domain_space(upwf, space) };
783 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
784 should_free_on_drop: true };
785 let err = isl_rs_ctx.last_error();
786 if err != Error::None_ {
787 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
788 }
789 Ok(isl_rs_result)
790 }
791
792 pub fn subtract_domain_union_set(self, uset: UnionSet)
794 -> Result<UnionPwQPolynomialFold, LibISLError> {
795 let upwf = self;
796 let isl_rs_ctx = upwf.get_ctx();
797 let mut upwf = upwf;
798 upwf.do_not_free_on_drop();
799 let upwf = upwf.ptr;
800 let mut uset = uset;
801 uset.do_not_free_on_drop();
802 let uset = uset.ptr;
803 let isl_rs_result =
804 unsafe { isl_union_pw_qpolynomial_fold_subtract_domain_union_set(upwf, uset) };
805 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
806 should_free_on_drop: true };
807 let err = isl_rs_ctx.last_error();
808 if err != Error::None_ {
809 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
810 }
811 Ok(isl_rs_result)
812 }
813
814 pub fn zero(space: Space, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
816 let isl_rs_ctx = space.get_ctx();
817 let mut space = space;
818 space.do_not_free_on_drop();
819 let space = space.ptr;
820 let type_ = type_.to_i32();
821 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero(space, type_) };
822 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
823 should_free_on_drop: true };
824 let err = isl_rs_ctx.last_error();
825 if err != Error::None_ {
826 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
827 }
828 Ok(isl_rs_result)
829 }
830
831 pub fn zero_ctx(ctx: &Context, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
833 let isl_rs_ctx = Context { ptr: ctx.ptr,
834 should_free_on_drop: false };
835 let ctx = ctx.ptr;
836 let type_ = type_.to_i32();
837 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero_ctx(ctx, type_) };
838 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
839 should_free_on_drop: true };
840 let err = isl_rs_ctx.last_error();
841 if err != Error::None_ {
842 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
843 }
844 Ok(isl_rs_result)
845 }
846
847 pub fn zero_space(space: Space, type_: Fold) -> Result<UnionPwQPolynomialFold, LibISLError> {
849 let isl_rs_ctx = space.get_ctx();
850 let mut space = space;
851 space.do_not_free_on_drop();
852 let space = space.ptr;
853 let type_ = type_.to_i32();
854 let isl_rs_result = unsafe { isl_union_pw_qpolynomial_fold_zero_space(space, type_) };
855 let isl_rs_result = UnionPwQPolynomialFold { ptr: isl_rs_result,
856 should_free_on_drop: true };
857 let err = isl_rs_ctx.last_error();
858 if err != Error::None_ {
859 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
860 }
861 Ok(isl_rs_result)
862 }
863
864 pub fn do_not_free_on_drop(&mut self) {
867 self.should_free_on_drop = false;
868 }
869}
870
871impl Drop for UnionPwQPolynomialFold {
872 fn drop(&mut self) {
873 if self.should_free_on_drop {
874 unsafe {
875 isl_union_pw_qpolynomial_fold_free(self.ptr);
876 }
877 }
878 }
879}