1use super::{
5 BasicSet, BasicSetList, Context, DimType, Error, LibISLError, MultiAff, MultiUnionPwAff,
6 MultiVal, Point, PwMultiAff, Schedule, Set, SetList, Space, UnionMap, UnionPwMultiAff,
7 UnionSetList,
8};
9use libc::uintptr_t;
10use std::ffi::{CStr, CString};
11use std::os::raw::c_char;
12
13pub struct UnionSet {
15 pub ptr: uintptr_t,
16 pub should_free_on_drop: bool,
17}
18
19extern "C" {
20
21 fn isl_union_set_add_set(uset: uintptr_t, set: uintptr_t) -> uintptr_t;
22
23 fn isl_union_set_affine_hull(uset: uintptr_t) -> uintptr_t;
24
25 fn isl_union_set_align_params(uset: uintptr_t, model: uintptr_t) -> uintptr_t;
26
27 fn isl_union_set_apply(uset: uintptr_t, umap: uintptr_t) -> uintptr_t;
28
29 fn isl_union_set_as_set(uset: uintptr_t) -> uintptr_t;
30
31 fn isl_union_set_coalesce(uset: uintptr_t) -> uintptr_t;
32
33 fn isl_union_set_coefficients(bset: uintptr_t) -> uintptr_t;
34
35 fn isl_union_set_compute_divs(uset: uintptr_t) -> uintptr_t;
36
37 fn isl_union_set_compute_schedule(domain: uintptr_t, validity: uintptr_t, proximity: uintptr_t)
38 -> uintptr_t;
39
40 fn isl_union_set_contains(uset: uintptr_t, space: uintptr_t) -> i32;
41
42 fn isl_union_set_copy(uset: uintptr_t) -> uintptr_t;
43
44 fn isl_union_set_detect_equalities(uset: uintptr_t) -> uintptr_t;
45
46 fn isl_union_set_dim(uset: uintptr_t, type_: i32) -> i32;
47
48 fn isl_union_set_drop_unused_params(uset: uintptr_t) -> uintptr_t;
49
50 fn isl_union_set_dump(uset: uintptr_t) -> ();
51
52 fn isl_union_set_empty(space: uintptr_t) -> uintptr_t;
53
54 fn isl_union_set_empty_ctx(ctx: uintptr_t) -> uintptr_t;
55
56 fn isl_union_set_empty_space(space: uintptr_t) -> uintptr_t;
57
58 fn isl_union_set_extract_set(uset: uintptr_t, space: uintptr_t) -> uintptr_t;
59
60 fn isl_union_set_free(uset: uintptr_t) -> uintptr_t;
61
62 fn isl_union_set_from_basic_set(bset: uintptr_t) -> uintptr_t;
63
64 fn isl_union_set_from_point(pnt: uintptr_t) -> uintptr_t;
65
66 fn isl_union_set_from_set(set: uintptr_t) -> uintptr_t;
67
68 fn isl_union_set_get_basic_set_list(uset: uintptr_t) -> uintptr_t;
69
70 fn isl_union_set_get_ctx(uset: uintptr_t) -> uintptr_t;
71
72 fn isl_union_set_get_hash(uset: uintptr_t) -> u32;
73
74 fn isl_union_set_get_set_list(uset: uintptr_t) -> uintptr_t;
75
76 fn isl_union_set_get_space(uset: uintptr_t) -> uintptr_t;
77
78 fn isl_union_set_gist(uset: uintptr_t, context: uintptr_t) -> uintptr_t;
79
80 fn isl_union_set_gist_params(uset: uintptr_t, set: uintptr_t) -> uintptr_t;
81
82 fn isl_union_set_identity(uset: uintptr_t) -> uintptr_t;
83
84 fn isl_union_set_identity_union_pw_multi_aff(uset: uintptr_t) -> uintptr_t;
85
86 fn isl_union_set_intersect(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
87
88 fn isl_union_set_intersect_params(uset: uintptr_t, set: uintptr_t) -> uintptr_t;
89
90 fn isl_union_set_is_disjoint(uset1: uintptr_t, uset2: uintptr_t) -> i32;
91
92 fn isl_union_set_is_empty(uset: uintptr_t) -> i32;
93
94 fn isl_union_set_is_equal(uset1: uintptr_t, uset2: uintptr_t) -> i32;
95
96 fn isl_union_set_is_params(uset: uintptr_t) -> i32;
97
98 fn isl_union_set_is_strict_subset(uset1: uintptr_t, uset2: uintptr_t) -> i32;
99
100 fn isl_union_set_is_subset(uset1: uintptr_t, uset2: uintptr_t) -> i32;
101
102 fn isl_union_set_isa_set(uset: uintptr_t) -> i32;
103
104 fn isl_union_set_lex_ge_union_set(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
105
106 fn isl_union_set_lex_gt_union_set(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
107
108 fn isl_union_set_lex_le_union_set(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
109
110 fn isl_union_set_lex_lt_union_set(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
111
112 fn isl_union_set_lexmax(uset: uintptr_t) -> uintptr_t;
113
114 fn isl_union_set_lexmin(uset: uintptr_t) -> uintptr_t;
115
116 fn isl_union_set_lift(uset: uintptr_t) -> uintptr_t;
117
118 fn isl_union_set_min_multi_union_pw_aff(uset: uintptr_t, obj: uintptr_t) -> uintptr_t;
119
120 fn isl_union_set_n_set(uset: uintptr_t) -> i32;
121
122 fn isl_union_set_params(uset: uintptr_t) -> uintptr_t;
123
124 fn isl_union_set_plain_unshifted_simple_hull(uset: uintptr_t) -> uintptr_t;
125
126 fn isl_union_set_polyhedral_hull(uset: uintptr_t) -> uintptr_t;
127
128 fn isl_union_set_preimage_multi_aff(uset: uintptr_t, ma: uintptr_t) -> uintptr_t;
129
130 fn isl_union_set_preimage_pw_multi_aff(uset: uintptr_t, pma: uintptr_t) -> uintptr_t;
131
132 fn isl_union_set_preimage_union_pw_multi_aff(uset: uintptr_t, upma: uintptr_t) -> uintptr_t;
133
134 fn isl_union_set_product(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
135
136 fn isl_union_set_project_out(uset: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
137
138 fn isl_union_set_project_out_all_params(uset: uintptr_t) -> uintptr_t;
139
140 fn isl_union_set_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
141
142 fn isl_union_set_remove_divs(bset: uintptr_t) -> uintptr_t;
143
144 fn isl_union_set_remove_redundancies(uset: uintptr_t) -> uintptr_t;
145
146 fn isl_union_set_reset_user(uset: uintptr_t) -> uintptr_t;
147
148 fn isl_union_set_sample(uset: uintptr_t) -> uintptr_t;
149
150 fn isl_union_set_sample_point(uset: uintptr_t) -> uintptr_t;
151
152 fn isl_union_set_simple_hull(uset: uintptr_t) -> uintptr_t;
153
154 fn isl_union_set_solutions(bset: uintptr_t) -> uintptr_t;
155
156 fn isl_union_set_subtract(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
157
158 fn isl_union_set_to_list(el: uintptr_t) -> uintptr_t;
159
160 fn isl_union_set_to_str(uset: uintptr_t) -> *const c_char;
161
162 fn isl_union_set_union(uset1: uintptr_t, uset2: uintptr_t) -> uintptr_t;
163
164 fn isl_union_set_universe(uset: uintptr_t) -> uintptr_t;
165
166 fn isl_union_set_unwrap(uset: uintptr_t) -> uintptr_t;
167
168 fn isl_union_set_wrapped_domain_map(uset: uintptr_t) -> uintptr_t;
169
170}
171
172impl UnionSet {
173 pub fn add_set(self, set: Set) -> Result<UnionSet, LibISLError> {
175 let uset = self;
176 let isl_rs_ctx = uset.get_ctx();
177 let mut uset = uset;
178 uset.do_not_free_on_drop();
179 let uset = uset.ptr;
180 let mut set = set;
181 set.do_not_free_on_drop();
182 let set = set.ptr;
183 let isl_rs_result = unsafe { isl_union_set_add_set(uset, set) };
184 let isl_rs_result = UnionSet { ptr: isl_rs_result,
185 should_free_on_drop: true };
186 let err = isl_rs_ctx.last_error();
187 if err != Error::None_ {
188 let err_msg = isl_rs_ctx.last_error_msg();
189 isl_rs_ctx.reset_error();
190 return Err(LibISLError::new(err, err_msg));
191 }
192 Ok(isl_rs_result)
193 }
194
195 pub fn affine_hull(self) -> Result<UnionSet, LibISLError> {
197 let uset = self;
198 let isl_rs_ctx = uset.get_ctx();
199 let mut uset = uset;
200 uset.do_not_free_on_drop();
201 let uset = uset.ptr;
202 let isl_rs_result = unsafe { isl_union_set_affine_hull(uset) };
203 let isl_rs_result = UnionSet { ptr: isl_rs_result,
204 should_free_on_drop: true };
205 let err = isl_rs_ctx.last_error();
206 if err != Error::None_ {
207 let err_msg = isl_rs_ctx.last_error_msg();
208 isl_rs_ctx.reset_error();
209 return Err(LibISLError::new(err, err_msg));
210 }
211 Ok(isl_rs_result)
212 }
213
214 pub fn align_params(self, model: Space) -> Result<UnionSet, LibISLError> {
216 let uset = self;
217 let isl_rs_ctx = uset.get_ctx();
218 let mut uset = uset;
219 uset.do_not_free_on_drop();
220 let uset = uset.ptr;
221 let mut model = model;
222 model.do_not_free_on_drop();
223 let model = model.ptr;
224 let isl_rs_result = unsafe { isl_union_set_align_params(uset, model) };
225 let isl_rs_result = UnionSet { ptr: isl_rs_result,
226 should_free_on_drop: true };
227 let err = isl_rs_ctx.last_error();
228 if err != Error::None_ {
229 let err_msg = isl_rs_ctx.last_error_msg();
230 isl_rs_ctx.reset_error();
231 return Err(LibISLError::new(err, err_msg));
232 }
233 Ok(isl_rs_result)
234 }
235
236 pub fn apply(self, umap: UnionMap) -> Result<UnionSet, LibISLError> {
238 let uset = self;
239 let isl_rs_ctx = uset.get_ctx();
240 let mut uset = uset;
241 uset.do_not_free_on_drop();
242 let uset = uset.ptr;
243 let mut umap = umap;
244 umap.do_not_free_on_drop();
245 let umap = umap.ptr;
246 let isl_rs_result = unsafe { isl_union_set_apply(uset, umap) };
247 let isl_rs_result = UnionSet { ptr: isl_rs_result,
248 should_free_on_drop: true };
249 let err = isl_rs_ctx.last_error();
250 if err != Error::None_ {
251 let err_msg = isl_rs_ctx.last_error_msg();
252 isl_rs_ctx.reset_error();
253 return Err(LibISLError::new(err, err_msg));
254 }
255 Ok(isl_rs_result)
256 }
257
258 pub fn as_set(self) -> Result<Set, LibISLError> {
260 let uset = self;
261 let isl_rs_ctx = uset.get_ctx();
262 let mut uset = uset;
263 uset.do_not_free_on_drop();
264 let uset = uset.ptr;
265 let isl_rs_result = unsafe { isl_union_set_as_set(uset) };
266 let isl_rs_result = Set { ptr: isl_rs_result,
267 should_free_on_drop: true };
268 let err = isl_rs_ctx.last_error();
269 if err != Error::None_ {
270 let err_msg = isl_rs_ctx.last_error_msg();
271 isl_rs_ctx.reset_error();
272 return Err(LibISLError::new(err, err_msg));
273 }
274 Ok(isl_rs_result)
275 }
276
277 pub fn coalesce(self) -> Result<UnionSet, LibISLError> {
279 let uset = self;
280 let isl_rs_ctx = uset.get_ctx();
281 let mut uset = uset;
282 uset.do_not_free_on_drop();
283 let uset = uset.ptr;
284 let isl_rs_result = unsafe { isl_union_set_coalesce(uset) };
285 let isl_rs_result = UnionSet { ptr: isl_rs_result,
286 should_free_on_drop: true };
287 let err = isl_rs_ctx.last_error();
288 if err != Error::None_ {
289 let err_msg = isl_rs_ctx.last_error_msg();
290 isl_rs_ctx.reset_error();
291 return Err(LibISLError::new(err, err_msg));
292 }
293 Ok(isl_rs_result)
294 }
295
296 pub fn coefficients(self) -> Result<UnionSet, LibISLError> {
298 let bset = self;
299 let isl_rs_ctx = bset.get_ctx();
300 let mut bset = bset;
301 bset.do_not_free_on_drop();
302 let bset = bset.ptr;
303 let isl_rs_result = unsafe { isl_union_set_coefficients(bset) };
304 let isl_rs_result = UnionSet { ptr: isl_rs_result,
305 should_free_on_drop: true };
306 let err = isl_rs_ctx.last_error();
307 if err != Error::None_ {
308 let err_msg = isl_rs_ctx.last_error_msg();
309 isl_rs_ctx.reset_error();
310 return Err(LibISLError::new(err, err_msg));
311 }
312 Ok(isl_rs_result)
313 }
314
315 pub fn compute_divs(self) -> Result<UnionSet, LibISLError> {
317 let uset = self;
318 let isl_rs_ctx = uset.get_ctx();
319 let mut uset = uset;
320 uset.do_not_free_on_drop();
321 let uset = uset.ptr;
322 let isl_rs_result = unsafe { isl_union_set_compute_divs(uset) };
323 let isl_rs_result = UnionSet { ptr: isl_rs_result,
324 should_free_on_drop: true };
325 let err = isl_rs_ctx.last_error();
326 if err != Error::None_ {
327 let err_msg = isl_rs_ctx.last_error_msg();
328 isl_rs_ctx.reset_error();
329 return Err(LibISLError::new(err, err_msg));
330 }
331 Ok(isl_rs_result)
332 }
333
334 pub fn compute_schedule(self, validity: UnionMap, proximity: UnionMap)
336 -> Result<Schedule, LibISLError> {
337 let domain = self;
338 let isl_rs_ctx = domain.get_ctx();
339 let mut domain = domain;
340 domain.do_not_free_on_drop();
341 let domain = domain.ptr;
342 let mut validity = validity;
343 validity.do_not_free_on_drop();
344 let validity = validity.ptr;
345 let mut proximity = proximity;
346 proximity.do_not_free_on_drop();
347 let proximity = proximity.ptr;
348 let isl_rs_result = unsafe { isl_union_set_compute_schedule(domain, validity, proximity) };
349 let isl_rs_result = Schedule { ptr: isl_rs_result,
350 should_free_on_drop: true };
351 let err = isl_rs_ctx.last_error();
352 if err != Error::None_ {
353 let err_msg = isl_rs_ctx.last_error_msg();
354 isl_rs_ctx.reset_error();
355 return Err(LibISLError::new(err, err_msg));
356 }
357 Ok(isl_rs_result)
358 }
359
360 pub fn contains(&self, space: &Space) -> Result<bool, LibISLError> {
362 let uset = self;
363 let isl_rs_ctx = uset.get_ctx();
364 let uset = uset.ptr;
365 let space = space.ptr;
366 let isl_rs_result = unsafe { isl_union_set_contains(uset, space) };
367 let isl_rs_result = match isl_rs_result {
368 0 => false,
369 1 => true,
370 _ => {
371 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
372 }
373 };
374 let err = isl_rs_ctx.last_error();
375 if err != Error::None_ {
376 let err_msg = isl_rs_ctx.last_error_msg();
377 isl_rs_ctx.reset_error();
378 return Err(LibISLError::new(err, err_msg));
379 }
380 Ok(isl_rs_result)
381 }
382
383 pub fn copy(&self) -> Result<UnionSet, LibISLError> {
385 let uset = self;
386 let isl_rs_ctx = uset.get_ctx();
387 let uset = uset.ptr;
388 let isl_rs_result = unsafe { isl_union_set_copy(uset) };
389 let isl_rs_result = UnionSet { ptr: isl_rs_result,
390 should_free_on_drop: true };
391 let err = isl_rs_ctx.last_error();
392 if err != Error::None_ {
393 let err_msg = isl_rs_ctx.last_error_msg();
394 isl_rs_ctx.reset_error();
395 return Err(LibISLError::new(err, err_msg));
396 }
397 Ok(isl_rs_result)
398 }
399
400 pub fn detect_equalities(self) -> Result<UnionSet, LibISLError> {
402 let uset = self;
403 let isl_rs_ctx = uset.get_ctx();
404 let mut uset = uset;
405 uset.do_not_free_on_drop();
406 let uset = uset.ptr;
407 let isl_rs_result = unsafe { isl_union_set_detect_equalities(uset) };
408 let isl_rs_result = UnionSet { ptr: isl_rs_result,
409 should_free_on_drop: true };
410 let err = isl_rs_ctx.last_error();
411 if err != Error::None_ {
412 let err_msg = isl_rs_ctx.last_error_msg();
413 isl_rs_ctx.reset_error();
414 return Err(LibISLError::new(err, err_msg));
415 }
416 Ok(isl_rs_result)
417 }
418
419 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
421 let uset = self;
422 let isl_rs_ctx = uset.get_ctx();
423 let uset = uset.ptr;
424 let type_ = type_.to_i32();
425 let isl_rs_result = unsafe { isl_union_set_dim(uset, type_) };
426 let err = isl_rs_ctx.last_error();
427 if err != Error::None_ {
428 let err_msg = isl_rs_ctx.last_error_msg();
429 isl_rs_ctx.reset_error();
430 return Err(LibISLError::new(err, err_msg));
431 }
432 Ok(isl_rs_result)
433 }
434
435 pub fn drop_unused_params(self) -> Result<UnionSet, LibISLError> {
437 let uset = self;
438 let isl_rs_ctx = uset.get_ctx();
439 let mut uset = uset;
440 uset.do_not_free_on_drop();
441 let uset = uset.ptr;
442 let isl_rs_result = unsafe { isl_union_set_drop_unused_params(uset) };
443 let isl_rs_result = UnionSet { ptr: isl_rs_result,
444 should_free_on_drop: true };
445 let err = isl_rs_ctx.last_error();
446 if err != Error::None_ {
447 let err_msg = isl_rs_ctx.last_error_msg();
448 isl_rs_ctx.reset_error();
449 return Err(LibISLError::new(err, err_msg));
450 }
451 Ok(isl_rs_result)
452 }
453
454 pub fn dump(&self) -> Result<(), LibISLError> {
456 let uset = self;
457 let isl_rs_ctx = uset.get_ctx();
458 let uset = uset.ptr;
459 let isl_rs_result = unsafe { isl_union_set_dump(uset) };
460 let err = isl_rs_ctx.last_error();
461 if err != Error::None_ {
462 let err_msg = isl_rs_ctx.last_error_msg();
463 isl_rs_ctx.reset_error();
464 return Err(LibISLError::new(err, err_msg));
465 }
466 Ok(isl_rs_result)
467 }
468
469 pub fn empty(space: Space) -> Result<UnionSet, LibISLError> {
471 let isl_rs_ctx = space.get_ctx();
472 let mut space = space;
473 space.do_not_free_on_drop();
474 let space = space.ptr;
475 let isl_rs_result = unsafe { isl_union_set_empty(space) };
476 let isl_rs_result = UnionSet { ptr: isl_rs_result,
477 should_free_on_drop: true };
478 let err = isl_rs_ctx.last_error();
479 if err != Error::None_ {
480 let err_msg = isl_rs_ctx.last_error_msg();
481 isl_rs_ctx.reset_error();
482 return Err(LibISLError::new(err, err_msg));
483 }
484 Ok(isl_rs_result)
485 }
486
487 pub fn empty_ctx(ctx: &Context) -> Result<UnionSet, LibISLError> {
489 let isl_rs_ctx = Context { ptr: ctx.ptr,
490 should_free_on_drop: false };
491 let ctx = ctx.ptr;
492 let isl_rs_result = unsafe { isl_union_set_empty_ctx(ctx) };
493 let isl_rs_result = UnionSet { ptr: isl_rs_result,
494 should_free_on_drop: true };
495 let err = isl_rs_ctx.last_error();
496 if err != Error::None_ {
497 let err_msg = isl_rs_ctx.last_error_msg();
498 isl_rs_ctx.reset_error();
499 return Err(LibISLError::new(err, err_msg));
500 }
501 Ok(isl_rs_result)
502 }
503
504 pub fn empty_space(space: Space) -> Result<UnionSet, LibISLError> {
506 let isl_rs_ctx = space.get_ctx();
507 let mut space = space;
508 space.do_not_free_on_drop();
509 let space = space.ptr;
510 let isl_rs_result = unsafe { isl_union_set_empty_space(space) };
511 let isl_rs_result = UnionSet { ptr: isl_rs_result,
512 should_free_on_drop: true };
513 let err = isl_rs_ctx.last_error();
514 if err != Error::None_ {
515 let err_msg = isl_rs_ctx.last_error_msg();
516 isl_rs_ctx.reset_error();
517 return Err(LibISLError::new(err, err_msg));
518 }
519 Ok(isl_rs_result)
520 }
521
522 pub fn extract_set(&self, space: Space) -> Result<Set, LibISLError> {
524 let uset = self;
525 let isl_rs_ctx = uset.get_ctx();
526 let uset = uset.ptr;
527 let mut space = space;
528 space.do_not_free_on_drop();
529 let space = space.ptr;
530 let isl_rs_result = unsafe { isl_union_set_extract_set(uset, space) };
531 let isl_rs_result = Set { ptr: isl_rs_result,
532 should_free_on_drop: true };
533 let err = isl_rs_ctx.last_error();
534 if err != Error::None_ {
535 let err_msg = isl_rs_ctx.last_error_msg();
536 isl_rs_ctx.reset_error();
537 return Err(LibISLError::new(err, err_msg));
538 }
539 Ok(isl_rs_result)
540 }
541
542 pub fn free(self) -> Result<UnionSet, LibISLError> {
544 let uset = self;
545 let isl_rs_ctx = uset.get_ctx();
546 let mut uset = uset;
547 uset.do_not_free_on_drop();
548 let uset = uset.ptr;
549 let isl_rs_result = unsafe { isl_union_set_free(uset) };
550 let isl_rs_result = UnionSet { ptr: isl_rs_result,
551 should_free_on_drop: true };
552 let err = isl_rs_ctx.last_error();
553 if err != Error::None_ {
554 let err_msg = isl_rs_ctx.last_error_msg();
555 isl_rs_ctx.reset_error();
556 return Err(LibISLError::new(err, err_msg));
557 }
558 Ok(isl_rs_result)
559 }
560
561 pub fn from_basic_set(bset: BasicSet) -> Result<UnionSet, LibISLError> {
563 let isl_rs_ctx = bset.get_ctx();
564 let mut bset = bset;
565 bset.do_not_free_on_drop();
566 let bset = bset.ptr;
567 let isl_rs_result = unsafe { isl_union_set_from_basic_set(bset) };
568 let isl_rs_result = UnionSet { 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 from_point(pnt: Point) -> Result<UnionSet, LibISLError> {
581 let isl_rs_ctx = pnt.get_ctx();
582 let mut pnt = pnt;
583 pnt.do_not_free_on_drop();
584 let pnt = pnt.ptr;
585 let isl_rs_result = unsafe { isl_union_set_from_point(pnt) };
586 let isl_rs_result = UnionSet { ptr: isl_rs_result,
587 should_free_on_drop: true };
588 let err = isl_rs_ctx.last_error();
589 if err != Error::None_ {
590 let err_msg = isl_rs_ctx.last_error_msg();
591 isl_rs_ctx.reset_error();
592 return Err(LibISLError::new(err, err_msg));
593 }
594 Ok(isl_rs_result)
595 }
596
597 pub fn from_set(set: Set) -> Result<UnionSet, LibISLError> {
599 let isl_rs_ctx = set.get_ctx();
600 let mut set = set;
601 set.do_not_free_on_drop();
602 let set = set.ptr;
603 let isl_rs_result = unsafe { isl_union_set_from_set(set) };
604 let isl_rs_result = UnionSet { ptr: isl_rs_result,
605 should_free_on_drop: true };
606 let err = isl_rs_ctx.last_error();
607 if err != Error::None_ {
608 let err_msg = isl_rs_ctx.last_error_msg();
609 isl_rs_ctx.reset_error();
610 return Err(LibISLError::new(err, err_msg));
611 }
612 Ok(isl_rs_result)
613 }
614
615 pub fn get_basic_set_list(&self) -> Result<BasicSetList, LibISLError> {
617 let uset = self;
618 let isl_rs_ctx = uset.get_ctx();
619 let uset = uset.ptr;
620 let isl_rs_result = unsafe { isl_union_set_get_basic_set_list(uset) };
621 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
622 should_free_on_drop: true };
623 let err = isl_rs_ctx.last_error();
624 if err != Error::None_ {
625 let err_msg = isl_rs_ctx.last_error_msg();
626 isl_rs_ctx.reset_error();
627 return Err(LibISLError::new(err, err_msg));
628 }
629 Ok(isl_rs_result)
630 }
631
632 pub fn get_ctx(&self) -> Context {
634 let uset = self;
635 let uset = uset.ptr;
636 let isl_rs_result = unsafe { isl_union_set_get_ctx(uset) };
637 let isl_rs_result = Context { ptr: isl_rs_result,
638 should_free_on_drop: false };
639 isl_rs_result
640 }
641
642 pub fn get_hash(&self) -> Result<u32, LibISLError> {
644 let uset = self;
645 let isl_rs_ctx = uset.get_ctx();
646 let uset = uset.ptr;
647 let isl_rs_result = unsafe { isl_union_set_get_hash(uset) };
648 let err = isl_rs_ctx.last_error();
649 if err != Error::None_ {
650 let err_msg = isl_rs_ctx.last_error_msg();
651 isl_rs_ctx.reset_error();
652 return Err(LibISLError::new(err, err_msg));
653 }
654 Ok(isl_rs_result)
655 }
656
657 pub fn get_set_list(&self) -> Result<SetList, LibISLError> {
659 let uset = self;
660 let isl_rs_ctx = uset.get_ctx();
661 let uset = uset.ptr;
662 let isl_rs_result = unsafe { isl_union_set_get_set_list(uset) };
663 let isl_rs_result = SetList { ptr: isl_rs_result,
664 should_free_on_drop: true };
665 let err = isl_rs_ctx.last_error();
666 if err != Error::None_ {
667 let err_msg = isl_rs_ctx.last_error_msg();
668 isl_rs_ctx.reset_error();
669 return Err(LibISLError::new(err, err_msg));
670 }
671 Ok(isl_rs_result)
672 }
673
674 pub fn get_space(&self) -> Result<Space, LibISLError> {
676 let uset = self;
677 let isl_rs_ctx = uset.get_ctx();
678 let uset = uset.ptr;
679 let isl_rs_result = unsafe { isl_union_set_get_space(uset) };
680 let isl_rs_result = Space { ptr: isl_rs_result,
681 should_free_on_drop: true };
682 let err = isl_rs_ctx.last_error();
683 if err != Error::None_ {
684 let err_msg = isl_rs_ctx.last_error_msg();
685 isl_rs_ctx.reset_error();
686 return Err(LibISLError::new(err, err_msg));
687 }
688 Ok(isl_rs_result)
689 }
690
691 pub fn gist(self, context: UnionSet) -> Result<UnionSet, LibISLError> {
693 let uset = self;
694 let isl_rs_ctx = uset.get_ctx();
695 let mut uset = uset;
696 uset.do_not_free_on_drop();
697 let uset = uset.ptr;
698 let mut context = context;
699 context.do_not_free_on_drop();
700 let context = context.ptr;
701 let isl_rs_result = unsafe { isl_union_set_gist(uset, context) };
702 let isl_rs_result = UnionSet { ptr: isl_rs_result,
703 should_free_on_drop: true };
704 let err = isl_rs_ctx.last_error();
705 if err != Error::None_ {
706 let err_msg = isl_rs_ctx.last_error_msg();
707 isl_rs_ctx.reset_error();
708 return Err(LibISLError::new(err, err_msg));
709 }
710 Ok(isl_rs_result)
711 }
712
713 pub fn gist_params(self, set: Set) -> Result<UnionSet, LibISLError> {
715 let uset = self;
716 let isl_rs_ctx = uset.get_ctx();
717 let mut uset = uset;
718 uset.do_not_free_on_drop();
719 let uset = uset.ptr;
720 let mut set = set;
721 set.do_not_free_on_drop();
722 let set = set.ptr;
723 let isl_rs_result = unsafe { isl_union_set_gist_params(uset, set) };
724 let isl_rs_result = UnionSet { ptr: isl_rs_result,
725 should_free_on_drop: true };
726 let err = isl_rs_ctx.last_error();
727 if err != Error::None_ {
728 let err_msg = isl_rs_ctx.last_error_msg();
729 isl_rs_ctx.reset_error();
730 return Err(LibISLError::new(err, err_msg));
731 }
732 Ok(isl_rs_result)
733 }
734
735 pub fn identity(self) -> Result<UnionMap, LibISLError> {
737 let uset = self;
738 let isl_rs_ctx = uset.get_ctx();
739 let mut uset = uset;
740 uset.do_not_free_on_drop();
741 let uset = uset.ptr;
742 let isl_rs_result = unsafe { isl_union_set_identity(uset) };
743 let isl_rs_result = UnionMap { ptr: isl_rs_result,
744 should_free_on_drop: true };
745 let err = isl_rs_ctx.last_error();
746 if err != Error::None_ {
747 let err_msg = isl_rs_ctx.last_error_msg();
748 isl_rs_ctx.reset_error();
749 return Err(LibISLError::new(err, err_msg));
750 }
751 Ok(isl_rs_result)
752 }
753
754 pub fn identity_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
756 let uset = self;
757 let isl_rs_ctx = uset.get_ctx();
758 let mut uset = uset;
759 uset.do_not_free_on_drop();
760 let uset = uset.ptr;
761 let isl_rs_result = unsafe { isl_union_set_identity_union_pw_multi_aff(uset) };
762 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
763 should_free_on_drop: true };
764 let err = isl_rs_ctx.last_error();
765 if err != Error::None_ {
766 let err_msg = isl_rs_ctx.last_error_msg();
767 isl_rs_ctx.reset_error();
768 return Err(LibISLError::new(err, err_msg));
769 }
770 Ok(isl_rs_result)
771 }
772
773 pub fn intersect(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
775 let uset1 = self;
776 let isl_rs_ctx = uset1.get_ctx();
777 let mut uset1 = uset1;
778 uset1.do_not_free_on_drop();
779 let uset1 = uset1.ptr;
780 let mut uset2 = uset2;
781 uset2.do_not_free_on_drop();
782 let uset2 = uset2.ptr;
783 let isl_rs_result = unsafe { isl_union_set_intersect(uset1, uset2) };
784 let isl_rs_result = UnionSet { ptr: isl_rs_result,
785 should_free_on_drop: true };
786 let err = isl_rs_ctx.last_error();
787 if err != Error::None_ {
788 let err_msg = isl_rs_ctx.last_error_msg();
789 isl_rs_ctx.reset_error();
790 return Err(LibISLError::new(err, err_msg));
791 }
792 Ok(isl_rs_result)
793 }
794
795 pub fn intersect_params(self, set: Set) -> Result<UnionSet, LibISLError> {
797 let uset = self;
798 let isl_rs_ctx = uset.get_ctx();
799 let mut uset = uset;
800 uset.do_not_free_on_drop();
801 let uset = uset.ptr;
802 let mut set = set;
803 set.do_not_free_on_drop();
804 let set = set.ptr;
805 let isl_rs_result = unsafe { isl_union_set_intersect_params(uset, set) };
806 let isl_rs_result = UnionSet { ptr: isl_rs_result,
807 should_free_on_drop: true };
808 let err = isl_rs_ctx.last_error();
809 if err != Error::None_ {
810 let err_msg = isl_rs_ctx.last_error_msg();
811 isl_rs_ctx.reset_error();
812 return Err(LibISLError::new(err, err_msg));
813 }
814 Ok(isl_rs_result)
815 }
816
817 pub fn is_disjoint(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
819 let uset1 = self;
820 let isl_rs_ctx = uset1.get_ctx();
821 let uset1 = uset1.ptr;
822 let uset2 = uset2.ptr;
823 let isl_rs_result = unsafe { isl_union_set_is_disjoint(uset1, uset2) };
824 let isl_rs_result = match isl_rs_result {
825 0 => false,
826 1 => true,
827 _ => {
828 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
829 }
830 };
831 let err = isl_rs_ctx.last_error();
832 if err != Error::None_ {
833 let err_msg = isl_rs_ctx.last_error_msg();
834 isl_rs_ctx.reset_error();
835 return Err(LibISLError::new(err, err_msg));
836 }
837 Ok(isl_rs_result)
838 }
839
840 pub fn is_empty(&self) -> Result<bool, LibISLError> {
842 let uset = self;
843 let isl_rs_ctx = uset.get_ctx();
844 let uset = uset.ptr;
845 let isl_rs_result = unsafe { isl_union_set_is_empty(uset) };
846 let isl_rs_result = match isl_rs_result {
847 0 => false,
848 1 => true,
849 _ => {
850 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
851 }
852 };
853 let err = isl_rs_ctx.last_error();
854 if err != Error::None_ {
855 let err_msg = isl_rs_ctx.last_error_msg();
856 isl_rs_ctx.reset_error();
857 return Err(LibISLError::new(err, err_msg));
858 }
859 Ok(isl_rs_result)
860 }
861
862 pub fn is_equal(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
864 let uset1 = self;
865 let isl_rs_ctx = uset1.get_ctx();
866 let uset1 = uset1.ptr;
867 let uset2 = uset2.ptr;
868 let isl_rs_result = unsafe { isl_union_set_is_equal(uset1, uset2) };
869 let isl_rs_result = match isl_rs_result {
870 0 => false,
871 1 => true,
872 _ => {
873 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
874 }
875 };
876 let err = isl_rs_ctx.last_error();
877 if err != Error::None_ {
878 let err_msg = isl_rs_ctx.last_error_msg();
879 isl_rs_ctx.reset_error();
880 return Err(LibISLError::new(err, err_msg));
881 }
882 Ok(isl_rs_result)
883 }
884
885 pub fn is_params(&self) -> Result<bool, LibISLError> {
887 let uset = self;
888 let isl_rs_ctx = uset.get_ctx();
889 let uset = uset.ptr;
890 let isl_rs_result = unsafe { isl_union_set_is_params(uset) };
891 let isl_rs_result = match isl_rs_result {
892 0 => false,
893 1 => true,
894 _ => {
895 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
896 }
897 };
898 let err = isl_rs_ctx.last_error();
899 if err != Error::None_ {
900 let err_msg = isl_rs_ctx.last_error_msg();
901 isl_rs_ctx.reset_error();
902 return Err(LibISLError::new(err, err_msg));
903 }
904 Ok(isl_rs_result)
905 }
906
907 pub fn is_strict_subset(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
909 let uset1 = self;
910 let isl_rs_ctx = uset1.get_ctx();
911 let uset1 = uset1.ptr;
912 let uset2 = uset2.ptr;
913 let isl_rs_result = unsafe { isl_union_set_is_strict_subset(uset1, uset2) };
914 let isl_rs_result = match isl_rs_result {
915 0 => false,
916 1 => true,
917 _ => {
918 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
919 }
920 };
921 let err = isl_rs_ctx.last_error();
922 if err != Error::None_ {
923 let err_msg = isl_rs_ctx.last_error_msg();
924 isl_rs_ctx.reset_error();
925 return Err(LibISLError::new(err, err_msg));
926 }
927 Ok(isl_rs_result)
928 }
929
930 pub fn is_subset(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
932 let uset1 = self;
933 let isl_rs_ctx = uset1.get_ctx();
934 let uset1 = uset1.ptr;
935 let uset2 = uset2.ptr;
936 let isl_rs_result = unsafe { isl_union_set_is_subset(uset1, uset2) };
937 let isl_rs_result = match isl_rs_result {
938 0 => false,
939 1 => true,
940 _ => {
941 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
942 }
943 };
944 let err = isl_rs_ctx.last_error();
945 if err != Error::None_ {
946 let err_msg = isl_rs_ctx.last_error_msg();
947 isl_rs_ctx.reset_error();
948 return Err(LibISLError::new(err, err_msg));
949 }
950 Ok(isl_rs_result)
951 }
952
953 pub fn isa_set(&self) -> Result<bool, LibISLError> {
955 let uset = self;
956 let isl_rs_ctx = uset.get_ctx();
957 let uset = uset.ptr;
958 let isl_rs_result = unsafe { isl_union_set_isa_set(uset) };
959 let isl_rs_result = match isl_rs_result {
960 0 => false,
961 1 => true,
962 _ => {
963 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
964 }
965 };
966 let err = isl_rs_ctx.last_error();
967 if err != Error::None_ {
968 let err_msg = isl_rs_ctx.last_error_msg();
969 isl_rs_ctx.reset_error();
970 return Err(LibISLError::new(err, err_msg));
971 }
972 Ok(isl_rs_result)
973 }
974
975 pub fn lex_ge_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
977 let uset1 = self;
978 let isl_rs_ctx = uset1.get_ctx();
979 let mut uset1 = uset1;
980 uset1.do_not_free_on_drop();
981 let uset1 = uset1.ptr;
982 let mut uset2 = uset2;
983 uset2.do_not_free_on_drop();
984 let uset2 = uset2.ptr;
985 let isl_rs_result = unsafe { isl_union_set_lex_ge_union_set(uset1, uset2) };
986 let isl_rs_result = UnionMap { ptr: isl_rs_result,
987 should_free_on_drop: true };
988 let err = isl_rs_ctx.last_error();
989 if err != Error::None_ {
990 let err_msg = isl_rs_ctx.last_error_msg();
991 isl_rs_ctx.reset_error();
992 return Err(LibISLError::new(err, err_msg));
993 }
994 Ok(isl_rs_result)
995 }
996
997 pub fn lex_gt_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
999 let uset1 = self;
1000 let isl_rs_ctx = uset1.get_ctx();
1001 let mut uset1 = uset1;
1002 uset1.do_not_free_on_drop();
1003 let uset1 = uset1.ptr;
1004 let mut uset2 = uset2;
1005 uset2.do_not_free_on_drop();
1006 let uset2 = uset2.ptr;
1007 let isl_rs_result = unsafe { isl_union_set_lex_gt_union_set(uset1, uset2) };
1008 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1009 should_free_on_drop: true };
1010 let err = isl_rs_ctx.last_error();
1011 if err != Error::None_ {
1012 let err_msg = isl_rs_ctx.last_error_msg();
1013 isl_rs_ctx.reset_error();
1014 return Err(LibISLError::new(err, err_msg));
1015 }
1016 Ok(isl_rs_result)
1017 }
1018
1019 pub fn lex_le_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
1021 let uset1 = self;
1022 let isl_rs_ctx = uset1.get_ctx();
1023 let mut uset1 = uset1;
1024 uset1.do_not_free_on_drop();
1025 let uset1 = uset1.ptr;
1026 let mut uset2 = uset2;
1027 uset2.do_not_free_on_drop();
1028 let uset2 = uset2.ptr;
1029 let isl_rs_result = unsafe { isl_union_set_lex_le_union_set(uset1, uset2) };
1030 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1031 should_free_on_drop: true };
1032 let err = isl_rs_ctx.last_error();
1033 if err != Error::None_ {
1034 let err_msg = isl_rs_ctx.last_error_msg();
1035 isl_rs_ctx.reset_error();
1036 return Err(LibISLError::new(err, err_msg));
1037 }
1038 Ok(isl_rs_result)
1039 }
1040
1041 pub fn lex_lt_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
1043 let uset1 = self;
1044 let isl_rs_ctx = uset1.get_ctx();
1045 let mut uset1 = uset1;
1046 uset1.do_not_free_on_drop();
1047 let uset1 = uset1.ptr;
1048 let mut uset2 = uset2;
1049 uset2.do_not_free_on_drop();
1050 let uset2 = uset2.ptr;
1051 let isl_rs_result = unsafe { isl_union_set_lex_lt_union_set(uset1, uset2) };
1052 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1053 should_free_on_drop: true };
1054 let err = isl_rs_ctx.last_error();
1055 if err != Error::None_ {
1056 let err_msg = isl_rs_ctx.last_error_msg();
1057 isl_rs_ctx.reset_error();
1058 return Err(LibISLError::new(err, err_msg));
1059 }
1060 Ok(isl_rs_result)
1061 }
1062
1063 pub fn lexmax(self) -> Result<UnionSet, LibISLError> {
1065 let uset = self;
1066 let isl_rs_ctx = uset.get_ctx();
1067 let mut uset = uset;
1068 uset.do_not_free_on_drop();
1069 let uset = uset.ptr;
1070 let isl_rs_result = unsafe { isl_union_set_lexmax(uset) };
1071 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1072 should_free_on_drop: true };
1073 let err = isl_rs_ctx.last_error();
1074 if err != Error::None_ {
1075 let err_msg = isl_rs_ctx.last_error_msg();
1076 isl_rs_ctx.reset_error();
1077 return Err(LibISLError::new(err, err_msg));
1078 }
1079 Ok(isl_rs_result)
1080 }
1081
1082 pub fn lexmin(self) -> Result<UnionSet, LibISLError> {
1084 let uset = self;
1085 let isl_rs_ctx = uset.get_ctx();
1086 let mut uset = uset;
1087 uset.do_not_free_on_drop();
1088 let uset = uset.ptr;
1089 let isl_rs_result = unsafe { isl_union_set_lexmin(uset) };
1090 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1091 should_free_on_drop: true };
1092 let err = isl_rs_ctx.last_error();
1093 if err != Error::None_ {
1094 let err_msg = isl_rs_ctx.last_error_msg();
1095 isl_rs_ctx.reset_error();
1096 return Err(LibISLError::new(err, err_msg));
1097 }
1098 Ok(isl_rs_result)
1099 }
1100
1101 pub fn lift(self) -> Result<UnionSet, LibISLError> {
1103 let uset = self;
1104 let isl_rs_ctx = uset.get_ctx();
1105 let mut uset = uset;
1106 uset.do_not_free_on_drop();
1107 let uset = uset.ptr;
1108 let isl_rs_result = unsafe { isl_union_set_lift(uset) };
1109 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1110 should_free_on_drop: true };
1111 let err = isl_rs_ctx.last_error();
1112 if err != Error::None_ {
1113 let err_msg = isl_rs_ctx.last_error_msg();
1114 isl_rs_ctx.reset_error();
1115 return Err(LibISLError::new(err, err_msg));
1116 }
1117 Ok(isl_rs_result)
1118 }
1119
1120 pub fn min_multi_union_pw_aff(&self, obj: &MultiUnionPwAff) -> Result<MultiVal, LibISLError> {
1122 let uset = self;
1123 let isl_rs_ctx = uset.get_ctx();
1124 let uset = uset.ptr;
1125 let obj = obj.ptr;
1126 let isl_rs_result = unsafe { isl_union_set_min_multi_union_pw_aff(uset, obj) };
1127 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1128 should_free_on_drop: true };
1129 let err = isl_rs_ctx.last_error();
1130 if err != Error::None_ {
1131 let err_msg = isl_rs_ctx.last_error_msg();
1132 isl_rs_ctx.reset_error();
1133 return Err(LibISLError::new(err, err_msg));
1134 }
1135 Ok(isl_rs_result)
1136 }
1137
1138 pub fn n_set(&self) -> Result<i32, LibISLError> {
1140 let uset = self;
1141 let isl_rs_ctx = uset.get_ctx();
1142 let uset = uset.ptr;
1143 let isl_rs_result = unsafe { isl_union_set_n_set(uset) };
1144 let err = isl_rs_ctx.last_error();
1145 if err != Error::None_ {
1146 let err_msg = isl_rs_ctx.last_error_msg();
1147 isl_rs_ctx.reset_error();
1148 return Err(LibISLError::new(err, err_msg));
1149 }
1150 Ok(isl_rs_result)
1151 }
1152
1153 pub fn params(self) -> Result<Set, LibISLError> {
1155 let uset = self;
1156 let isl_rs_ctx = uset.get_ctx();
1157 let mut uset = uset;
1158 uset.do_not_free_on_drop();
1159 let uset = uset.ptr;
1160 let isl_rs_result = unsafe { isl_union_set_params(uset) };
1161 let isl_rs_result = Set { ptr: isl_rs_result,
1162 should_free_on_drop: true };
1163 let err = isl_rs_ctx.last_error();
1164 if err != Error::None_ {
1165 let err_msg = isl_rs_ctx.last_error_msg();
1166 isl_rs_ctx.reset_error();
1167 return Err(LibISLError::new(err, err_msg));
1168 }
1169 Ok(isl_rs_result)
1170 }
1171
1172 pub fn plain_unshifted_simple_hull(self) -> Result<UnionSet, LibISLError> {
1174 let uset = self;
1175 let isl_rs_ctx = uset.get_ctx();
1176 let mut uset = uset;
1177 uset.do_not_free_on_drop();
1178 let uset = uset.ptr;
1179 let isl_rs_result = unsafe { isl_union_set_plain_unshifted_simple_hull(uset) };
1180 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1181 should_free_on_drop: true };
1182 let err = isl_rs_ctx.last_error();
1183 if err != Error::None_ {
1184 let err_msg = isl_rs_ctx.last_error_msg();
1185 isl_rs_ctx.reset_error();
1186 return Err(LibISLError::new(err, err_msg));
1187 }
1188 Ok(isl_rs_result)
1189 }
1190
1191 pub fn polyhedral_hull(self) -> Result<UnionSet, LibISLError> {
1193 let uset = self;
1194 let isl_rs_ctx = uset.get_ctx();
1195 let mut uset = uset;
1196 uset.do_not_free_on_drop();
1197 let uset = uset.ptr;
1198 let isl_rs_result = unsafe { isl_union_set_polyhedral_hull(uset) };
1199 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1200 should_free_on_drop: true };
1201 let err = isl_rs_ctx.last_error();
1202 if err != Error::None_ {
1203 let err_msg = isl_rs_ctx.last_error_msg();
1204 isl_rs_ctx.reset_error();
1205 return Err(LibISLError::new(err, err_msg));
1206 }
1207 Ok(isl_rs_result)
1208 }
1209
1210 pub fn preimage_multi_aff(self, ma: MultiAff) -> Result<UnionSet, LibISLError> {
1212 let uset = self;
1213 let isl_rs_ctx = uset.get_ctx();
1214 let mut uset = uset;
1215 uset.do_not_free_on_drop();
1216 let uset = uset.ptr;
1217 let mut ma = ma;
1218 ma.do_not_free_on_drop();
1219 let ma = ma.ptr;
1220 let isl_rs_result = unsafe { isl_union_set_preimage_multi_aff(uset, ma) };
1221 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1222 should_free_on_drop: true };
1223 let err = isl_rs_ctx.last_error();
1224 if err != Error::None_ {
1225 let err_msg = isl_rs_ctx.last_error_msg();
1226 isl_rs_ctx.reset_error();
1227 return Err(LibISLError::new(err, err_msg));
1228 }
1229 Ok(isl_rs_result)
1230 }
1231
1232 pub fn preimage_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionSet, LibISLError> {
1234 let uset = self;
1235 let isl_rs_ctx = uset.get_ctx();
1236 let mut uset = uset;
1237 uset.do_not_free_on_drop();
1238 let uset = uset.ptr;
1239 let mut pma = pma;
1240 pma.do_not_free_on_drop();
1241 let pma = pma.ptr;
1242 let isl_rs_result = unsafe { isl_union_set_preimage_pw_multi_aff(uset, pma) };
1243 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1244 should_free_on_drop: true };
1245 let err = isl_rs_ctx.last_error();
1246 if err != Error::None_ {
1247 let err_msg = isl_rs_ctx.last_error_msg();
1248 isl_rs_ctx.reset_error();
1249 return Err(LibISLError::new(err, err_msg));
1250 }
1251 Ok(isl_rs_result)
1252 }
1253
1254 pub fn preimage_union_pw_multi_aff(self, upma: UnionPwMultiAff)
1256 -> Result<UnionSet, LibISLError> {
1257 let uset = self;
1258 let isl_rs_ctx = uset.get_ctx();
1259 let mut uset = uset;
1260 uset.do_not_free_on_drop();
1261 let uset = uset.ptr;
1262 let mut upma = upma;
1263 upma.do_not_free_on_drop();
1264 let upma = upma.ptr;
1265 let isl_rs_result = unsafe { isl_union_set_preimage_union_pw_multi_aff(uset, upma) };
1266 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1267 should_free_on_drop: true };
1268 let err = isl_rs_ctx.last_error();
1269 if err != Error::None_ {
1270 let err_msg = isl_rs_ctx.last_error_msg();
1271 isl_rs_ctx.reset_error();
1272 return Err(LibISLError::new(err, err_msg));
1273 }
1274 Ok(isl_rs_result)
1275 }
1276
1277 pub fn product(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1279 let uset1 = self;
1280 let isl_rs_ctx = uset1.get_ctx();
1281 let mut uset1 = uset1;
1282 uset1.do_not_free_on_drop();
1283 let uset1 = uset1.ptr;
1284 let mut uset2 = uset2;
1285 uset2.do_not_free_on_drop();
1286 let uset2 = uset2.ptr;
1287 let isl_rs_result = unsafe { isl_union_set_product(uset1, uset2) };
1288 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1289 should_free_on_drop: true };
1290 let err = isl_rs_ctx.last_error();
1291 if err != Error::None_ {
1292 let err_msg = isl_rs_ctx.last_error_msg();
1293 isl_rs_ctx.reset_error();
1294 return Err(LibISLError::new(err, err_msg));
1295 }
1296 Ok(isl_rs_result)
1297 }
1298
1299 pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<UnionSet, LibISLError> {
1301 let uset = self;
1302 let isl_rs_ctx = uset.get_ctx();
1303 let mut uset = uset;
1304 uset.do_not_free_on_drop();
1305 let uset = uset.ptr;
1306 let type_ = type_.to_i32();
1307 let isl_rs_result = unsafe { isl_union_set_project_out(uset, type_, first, n) };
1308 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1309 should_free_on_drop: true };
1310 let err = isl_rs_ctx.last_error();
1311 if err != Error::None_ {
1312 let err_msg = isl_rs_ctx.last_error_msg();
1313 isl_rs_ctx.reset_error();
1314 return Err(LibISLError::new(err, err_msg));
1315 }
1316 Ok(isl_rs_result)
1317 }
1318
1319 pub fn project_out_all_params(self) -> Result<UnionSet, LibISLError> {
1321 let uset = self;
1322 let isl_rs_ctx = uset.get_ctx();
1323 let mut uset = uset;
1324 uset.do_not_free_on_drop();
1325 let uset = uset.ptr;
1326 let isl_rs_result = unsafe { isl_union_set_project_out_all_params(uset) };
1327 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1328 should_free_on_drop: true };
1329 let err = isl_rs_ctx.last_error();
1330 if err != Error::None_ {
1331 let err_msg = isl_rs_ctx.last_error_msg();
1332 isl_rs_ctx.reset_error();
1333 return Err(LibISLError::new(err, err_msg));
1334 }
1335 Ok(isl_rs_result)
1336 }
1337
1338 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionSet, LibISLError> {
1340 let isl_rs_ctx = Context { ptr: ctx.ptr,
1341 should_free_on_drop: false };
1342 let ctx = ctx.ptr;
1343 let str_ = CString::new(str_).unwrap();
1344 let str_ = str_.as_ptr();
1345 let isl_rs_result = unsafe { isl_union_set_read_from_str(ctx, str_) };
1346 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1347 should_free_on_drop: true };
1348 let err = isl_rs_ctx.last_error();
1349 if err != Error::None_ {
1350 let err_msg = isl_rs_ctx.last_error_msg();
1351 isl_rs_ctx.reset_error();
1352 return Err(LibISLError::new(err, err_msg));
1353 }
1354 Ok(isl_rs_result)
1355 }
1356
1357 pub fn remove_divs(self) -> Result<UnionSet, LibISLError> {
1359 let bset = self;
1360 let isl_rs_ctx = bset.get_ctx();
1361 let mut bset = bset;
1362 bset.do_not_free_on_drop();
1363 let bset = bset.ptr;
1364 let isl_rs_result = unsafe { isl_union_set_remove_divs(bset) };
1365 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1366 should_free_on_drop: true };
1367 let err = isl_rs_ctx.last_error();
1368 if err != Error::None_ {
1369 let err_msg = isl_rs_ctx.last_error_msg();
1370 isl_rs_ctx.reset_error();
1371 return Err(LibISLError::new(err, err_msg));
1372 }
1373 Ok(isl_rs_result)
1374 }
1375
1376 pub fn remove_redundancies(self) -> Result<UnionSet, LibISLError> {
1378 let uset = self;
1379 let isl_rs_ctx = uset.get_ctx();
1380 let mut uset = uset;
1381 uset.do_not_free_on_drop();
1382 let uset = uset.ptr;
1383 let isl_rs_result = unsafe { isl_union_set_remove_redundancies(uset) };
1384 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1385 should_free_on_drop: true };
1386 let err = isl_rs_ctx.last_error();
1387 if err != Error::None_ {
1388 let err_msg = isl_rs_ctx.last_error_msg();
1389 isl_rs_ctx.reset_error();
1390 return Err(LibISLError::new(err, err_msg));
1391 }
1392 Ok(isl_rs_result)
1393 }
1394
1395 pub fn reset_user(self) -> Result<UnionSet, LibISLError> {
1397 let uset = self;
1398 let isl_rs_ctx = uset.get_ctx();
1399 let mut uset = uset;
1400 uset.do_not_free_on_drop();
1401 let uset = uset.ptr;
1402 let isl_rs_result = unsafe { isl_union_set_reset_user(uset) };
1403 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1404 should_free_on_drop: true };
1405 let err = isl_rs_ctx.last_error();
1406 if err != Error::None_ {
1407 let err_msg = isl_rs_ctx.last_error_msg();
1408 isl_rs_ctx.reset_error();
1409 return Err(LibISLError::new(err, err_msg));
1410 }
1411 Ok(isl_rs_result)
1412 }
1413
1414 pub fn sample(self) -> Result<BasicSet, LibISLError> {
1416 let uset = self;
1417 let isl_rs_ctx = uset.get_ctx();
1418 let mut uset = uset;
1419 uset.do_not_free_on_drop();
1420 let uset = uset.ptr;
1421 let isl_rs_result = unsafe { isl_union_set_sample(uset) };
1422 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1423 should_free_on_drop: true };
1424 let err = isl_rs_ctx.last_error();
1425 if err != Error::None_ {
1426 let err_msg = isl_rs_ctx.last_error_msg();
1427 isl_rs_ctx.reset_error();
1428 return Err(LibISLError::new(err, err_msg));
1429 }
1430 Ok(isl_rs_result)
1431 }
1432
1433 pub fn sample_point(self) -> Result<Point, LibISLError> {
1435 let uset = self;
1436 let isl_rs_ctx = uset.get_ctx();
1437 let mut uset = uset;
1438 uset.do_not_free_on_drop();
1439 let uset = uset.ptr;
1440 let isl_rs_result = unsafe { isl_union_set_sample_point(uset) };
1441 let isl_rs_result = Point { ptr: isl_rs_result,
1442 should_free_on_drop: true };
1443 let err = isl_rs_ctx.last_error();
1444 if err != Error::None_ {
1445 let err_msg = isl_rs_ctx.last_error_msg();
1446 isl_rs_ctx.reset_error();
1447 return Err(LibISLError::new(err, err_msg));
1448 }
1449 Ok(isl_rs_result)
1450 }
1451
1452 pub fn simple_hull(self) -> Result<UnionSet, LibISLError> {
1454 let uset = self;
1455 let isl_rs_ctx = uset.get_ctx();
1456 let mut uset = uset;
1457 uset.do_not_free_on_drop();
1458 let uset = uset.ptr;
1459 let isl_rs_result = unsafe { isl_union_set_simple_hull(uset) };
1460 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1461 should_free_on_drop: true };
1462 let err = isl_rs_ctx.last_error();
1463 if err != Error::None_ {
1464 let err_msg = isl_rs_ctx.last_error_msg();
1465 isl_rs_ctx.reset_error();
1466 return Err(LibISLError::new(err, err_msg));
1467 }
1468 Ok(isl_rs_result)
1469 }
1470
1471 pub fn solutions(self) -> Result<UnionSet, LibISLError> {
1473 let bset = self;
1474 let isl_rs_ctx = bset.get_ctx();
1475 let mut bset = bset;
1476 bset.do_not_free_on_drop();
1477 let bset = bset.ptr;
1478 let isl_rs_result = unsafe { isl_union_set_solutions(bset) };
1479 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1480 should_free_on_drop: true };
1481 let err = isl_rs_ctx.last_error();
1482 if err != Error::None_ {
1483 let err_msg = isl_rs_ctx.last_error_msg();
1484 isl_rs_ctx.reset_error();
1485 return Err(LibISLError::new(err, err_msg));
1486 }
1487 Ok(isl_rs_result)
1488 }
1489
1490 pub fn subtract(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1492 let uset1 = self;
1493 let isl_rs_ctx = uset1.get_ctx();
1494 let mut uset1 = uset1;
1495 uset1.do_not_free_on_drop();
1496 let uset1 = uset1.ptr;
1497 let mut uset2 = uset2;
1498 uset2.do_not_free_on_drop();
1499 let uset2 = uset2.ptr;
1500 let isl_rs_result = unsafe { isl_union_set_subtract(uset1, uset2) };
1501 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1502 should_free_on_drop: true };
1503 let err = isl_rs_ctx.last_error();
1504 if err != Error::None_ {
1505 let err_msg = isl_rs_ctx.last_error_msg();
1506 isl_rs_ctx.reset_error();
1507 return Err(LibISLError::new(err, err_msg));
1508 }
1509 Ok(isl_rs_result)
1510 }
1511
1512 pub fn to_list(self) -> Result<UnionSetList, LibISLError> {
1514 let el = self;
1515 let isl_rs_ctx = el.get_ctx();
1516 let mut el = el;
1517 el.do_not_free_on_drop();
1518 let el = el.ptr;
1519 let isl_rs_result = unsafe { isl_union_set_to_list(el) };
1520 let isl_rs_result = UnionSetList { ptr: isl_rs_result,
1521 should_free_on_drop: true };
1522 let err = isl_rs_ctx.last_error();
1523 if err != Error::None_ {
1524 let err_msg = isl_rs_ctx.last_error_msg();
1525 isl_rs_ctx.reset_error();
1526 return Err(LibISLError::new(err, err_msg));
1527 }
1528 Ok(isl_rs_result)
1529 }
1530
1531 pub fn to_str(&self) -> Result<&str, LibISLError> {
1533 let uset = self;
1534 let isl_rs_ctx = uset.get_ctx();
1535 let uset = uset.ptr;
1536 let isl_rs_result = unsafe { isl_union_set_to_str(uset) };
1537 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1538 let isl_rs_result = isl_rs_result.to_str().unwrap();
1539 let err = isl_rs_ctx.last_error();
1540 if err != Error::None_ {
1541 let err_msg = isl_rs_ctx.last_error_msg();
1542 isl_rs_ctx.reset_error();
1543 return Err(LibISLError::new(err, err_msg));
1544 }
1545 Ok(isl_rs_result)
1546 }
1547
1548 pub fn union(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1550 let uset1 = self;
1551 let isl_rs_ctx = uset1.get_ctx();
1552 let mut uset1 = uset1;
1553 uset1.do_not_free_on_drop();
1554 let uset1 = uset1.ptr;
1555 let mut uset2 = uset2;
1556 uset2.do_not_free_on_drop();
1557 let uset2 = uset2.ptr;
1558 let isl_rs_result = unsafe { isl_union_set_union(uset1, uset2) };
1559 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1560 should_free_on_drop: true };
1561 let err = isl_rs_ctx.last_error();
1562 if err != Error::None_ {
1563 let err_msg = isl_rs_ctx.last_error_msg();
1564 isl_rs_ctx.reset_error();
1565 return Err(LibISLError::new(err, err_msg));
1566 }
1567 Ok(isl_rs_result)
1568 }
1569
1570 pub fn universe(self) -> Result<UnionSet, LibISLError> {
1572 let uset = self;
1573 let isl_rs_ctx = uset.get_ctx();
1574 let mut uset = uset;
1575 uset.do_not_free_on_drop();
1576 let uset = uset.ptr;
1577 let isl_rs_result = unsafe { isl_union_set_universe(uset) };
1578 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1579 should_free_on_drop: true };
1580 let err = isl_rs_ctx.last_error();
1581 if err != Error::None_ {
1582 let err_msg = isl_rs_ctx.last_error_msg();
1583 isl_rs_ctx.reset_error();
1584 return Err(LibISLError::new(err, err_msg));
1585 }
1586 Ok(isl_rs_result)
1587 }
1588
1589 pub fn unwrap(self) -> Result<UnionMap, LibISLError> {
1591 let uset = self;
1592 let isl_rs_ctx = uset.get_ctx();
1593 let mut uset = uset;
1594 uset.do_not_free_on_drop();
1595 let uset = uset.ptr;
1596 let isl_rs_result = unsafe { isl_union_set_unwrap(uset) };
1597 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1598 should_free_on_drop: true };
1599 let err = isl_rs_ctx.last_error();
1600 if err != Error::None_ {
1601 let err_msg = isl_rs_ctx.last_error_msg();
1602 isl_rs_ctx.reset_error();
1603 return Err(LibISLError::new(err, err_msg));
1604 }
1605 Ok(isl_rs_result)
1606 }
1607
1608 pub fn wrapped_domain_map(self) -> Result<UnionMap, LibISLError> {
1610 let uset = self;
1611 let isl_rs_ctx = uset.get_ctx();
1612 let mut uset = uset;
1613 uset.do_not_free_on_drop();
1614 let uset = uset.ptr;
1615 let isl_rs_result = unsafe { isl_union_set_wrapped_domain_map(uset) };
1616 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1617 should_free_on_drop: true };
1618 let err = isl_rs_ctx.last_error();
1619 if err != Error::None_ {
1620 let err_msg = isl_rs_ctx.last_error_msg();
1621 isl_rs_ctx.reset_error();
1622 return Err(LibISLError::new(err, err_msg));
1623 }
1624 Ok(isl_rs_result)
1625 }
1626
1627 pub fn do_not_free_on_drop(&mut self) {
1630 self.should_free_on_drop = false;
1631 }
1632}
1633
1634impl Drop for UnionSet {
1635 fn drop(&mut self) {
1636 if self.should_free_on_drop {
1637 unsafe {
1638 isl_union_set_free(self.ptr);
1639 }
1640 }
1641 }
1642}