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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
189 }
190 Ok(isl_rs_result)
191 }
192
193 pub fn affine_hull(self) -> Result<UnionSet, LibISLError> {
195 let uset = self;
196 let isl_rs_ctx = uset.get_ctx();
197 let mut uset = uset;
198 uset.do_not_free_on_drop();
199 let uset = uset.ptr;
200 let isl_rs_result = unsafe { isl_union_set_affine_hull(uset) };
201 let isl_rs_result = UnionSet { ptr: isl_rs_result,
202 should_free_on_drop: true };
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 align_params(self, model: Space) -> Result<UnionSet, LibISLError> {
212 let uset = self;
213 let isl_rs_ctx = uset.get_ctx();
214 let mut uset = uset;
215 uset.do_not_free_on_drop();
216 let uset = uset.ptr;
217 let mut model = model;
218 model.do_not_free_on_drop();
219 let model = model.ptr;
220 let isl_rs_result = unsafe { isl_union_set_align_params(uset, model) };
221 let isl_rs_result = UnionSet { ptr: isl_rs_result,
222 should_free_on_drop: true };
223 let err = isl_rs_ctx.last_error();
224 if err != Error::None_ {
225 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
226 }
227 Ok(isl_rs_result)
228 }
229
230 pub fn apply(self, umap: UnionMap) -> Result<UnionSet, LibISLError> {
232 let uset = self;
233 let isl_rs_ctx = uset.get_ctx();
234 let mut uset = uset;
235 uset.do_not_free_on_drop();
236 let uset = uset.ptr;
237 let mut umap = umap;
238 umap.do_not_free_on_drop();
239 let umap = umap.ptr;
240 let isl_rs_result = unsafe { isl_union_set_apply(uset, umap) };
241 let isl_rs_result = UnionSet { ptr: isl_rs_result,
242 should_free_on_drop: true };
243 let err = isl_rs_ctx.last_error();
244 if err != Error::None_ {
245 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
246 }
247 Ok(isl_rs_result)
248 }
249
250 pub fn as_set(self) -> Result<Set, LibISLError> {
252 let uset = self;
253 let isl_rs_ctx = uset.get_ctx();
254 let mut uset = uset;
255 uset.do_not_free_on_drop();
256 let uset = uset.ptr;
257 let isl_rs_result = unsafe { isl_union_set_as_set(uset) };
258 let isl_rs_result = Set { ptr: isl_rs_result,
259 should_free_on_drop: true };
260 let err = isl_rs_ctx.last_error();
261 if err != Error::None_ {
262 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
263 }
264 Ok(isl_rs_result)
265 }
266
267 pub fn coalesce(self) -> Result<UnionSet, LibISLError> {
269 let uset = self;
270 let isl_rs_ctx = uset.get_ctx();
271 let mut uset = uset;
272 uset.do_not_free_on_drop();
273 let uset = uset.ptr;
274 let isl_rs_result = unsafe { isl_union_set_coalesce(uset) };
275 let isl_rs_result = UnionSet { 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 coefficients(self) -> Result<UnionSet, LibISLError> {
286 let bset = self;
287 let isl_rs_ctx = bset.get_ctx();
288 let mut bset = bset;
289 bset.do_not_free_on_drop();
290 let bset = bset.ptr;
291 let isl_rs_result = unsafe { isl_union_set_coefficients(bset) };
292 let isl_rs_result = UnionSet { ptr: isl_rs_result,
293 should_free_on_drop: true };
294 let err = isl_rs_ctx.last_error();
295 if err != Error::None_ {
296 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
297 }
298 Ok(isl_rs_result)
299 }
300
301 pub fn compute_divs(self) -> Result<UnionSet, LibISLError> {
303 let uset = self;
304 let isl_rs_ctx = uset.get_ctx();
305 let mut uset = uset;
306 uset.do_not_free_on_drop();
307 let uset = uset.ptr;
308 let isl_rs_result = unsafe { isl_union_set_compute_divs(uset) };
309 let isl_rs_result = UnionSet { ptr: isl_rs_result,
310 should_free_on_drop: true };
311 let err = isl_rs_ctx.last_error();
312 if err != Error::None_ {
313 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
314 }
315 Ok(isl_rs_result)
316 }
317
318 pub fn compute_schedule(self, validity: UnionMap, proximity: UnionMap)
320 -> Result<Schedule, LibISLError> {
321 let domain = self;
322 let isl_rs_ctx = domain.get_ctx();
323 let mut domain = domain;
324 domain.do_not_free_on_drop();
325 let domain = domain.ptr;
326 let mut validity = validity;
327 validity.do_not_free_on_drop();
328 let validity = validity.ptr;
329 let mut proximity = proximity;
330 proximity.do_not_free_on_drop();
331 let proximity = proximity.ptr;
332 let isl_rs_result = unsafe { isl_union_set_compute_schedule(domain, validity, proximity) };
333 let isl_rs_result = Schedule { 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 contains(&self, space: &Space) -> Result<bool, LibISLError> {
344 let uset = self;
345 let isl_rs_ctx = uset.get_ctx();
346 let uset = uset.ptr;
347 let space = space.ptr;
348 let isl_rs_result = unsafe { isl_union_set_contains(uset, space) };
349 let isl_rs_result = match isl_rs_result {
350 0 => false,
351 1 => true,
352 _ => panic!("Got isl_bool = -1"),
353 };
354 let err = isl_rs_ctx.last_error();
355 if err != Error::None_ {
356 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
357 }
358 Ok(isl_rs_result)
359 }
360
361 pub fn copy(&self) -> Result<UnionSet, LibISLError> {
363 let uset = self;
364 let isl_rs_ctx = uset.get_ctx();
365 let uset = uset.ptr;
366 let isl_rs_result = unsafe { isl_union_set_copy(uset) };
367 let isl_rs_result = UnionSet { ptr: isl_rs_result,
368 should_free_on_drop: true };
369 let err = isl_rs_ctx.last_error();
370 if err != Error::None_ {
371 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
372 }
373 Ok(isl_rs_result)
374 }
375
376 pub fn detect_equalities(self) -> Result<UnionSet, LibISLError> {
378 let uset = self;
379 let isl_rs_ctx = uset.get_ctx();
380 let mut uset = uset;
381 uset.do_not_free_on_drop();
382 let uset = uset.ptr;
383 let isl_rs_result = unsafe { isl_union_set_detect_equalities(uset) };
384 let isl_rs_result = UnionSet { ptr: isl_rs_result,
385 should_free_on_drop: true };
386 let err = isl_rs_ctx.last_error();
387 if err != Error::None_ {
388 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
389 }
390 Ok(isl_rs_result)
391 }
392
393 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
395 let uset = self;
396 let isl_rs_ctx = uset.get_ctx();
397 let uset = uset.ptr;
398 let type_ = type_.to_i32();
399 let isl_rs_result = unsafe { isl_union_set_dim(uset, type_) };
400 let err = isl_rs_ctx.last_error();
401 if err != Error::None_ {
402 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
403 }
404 Ok(isl_rs_result)
405 }
406
407 pub fn drop_unused_params(self) -> Result<UnionSet, LibISLError> {
409 let uset = self;
410 let isl_rs_ctx = uset.get_ctx();
411 let mut uset = uset;
412 uset.do_not_free_on_drop();
413 let uset = uset.ptr;
414 let isl_rs_result = unsafe { isl_union_set_drop_unused_params(uset) };
415 let isl_rs_result = UnionSet { 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 dump(&self) -> Result<(), LibISLError> {
426 let uset = self;
427 let isl_rs_ctx = uset.get_ctx();
428 let uset = uset.ptr;
429 let isl_rs_result = unsafe { isl_union_set_dump(uset) };
430 let err = isl_rs_ctx.last_error();
431 if err != Error::None_ {
432 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
433 }
434 Ok(isl_rs_result)
435 }
436
437 pub fn empty(space: Space) -> Result<UnionSet, LibISLError> {
439 let isl_rs_ctx = space.get_ctx();
440 let mut space = space;
441 space.do_not_free_on_drop();
442 let space = space.ptr;
443 let isl_rs_result = unsafe { isl_union_set_empty(space) };
444 let isl_rs_result = UnionSet { ptr: isl_rs_result,
445 should_free_on_drop: true };
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 empty_ctx(ctx: &Context) -> Result<UnionSet, LibISLError> {
455 let isl_rs_ctx = Context { ptr: ctx.ptr,
456 should_free_on_drop: false };
457 let ctx = ctx.ptr;
458 let isl_rs_result = unsafe { isl_union_set_empty_ctx(ctx) };
459 let isl_rs_result = UnionSet { ptr: isl_rs_result,
460 should_free_on_drop: true };
461 let err = isl_rs_ctx.last_error();
462 if err != Error::None_ {
463 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
464 }
465 Ok(isl_rs_result)
466 }
467
468 pub fn empty_space(space: Space) -> Result<UnionSet, LibISLError> {
470 let isl_rs_ctx = space.get_ctx();
471 let mut space = space;
472 space.do_not_free_on_drop();
473 let space = space.ptr;
474 let isl_rs_result = unsafe { isl_union_set_empty_space(space) };
475 let isl_rs_result = UnionSet { ptr: isl_rs_result,
476 should_free_on_drop: true };
477 let err = isl_rs_ctx.last_error();
478 if err != Error::None_ {
479 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
480 }
481 Ok(isl_rs_result)
482 }
483
484 pub fn extract_set(&self, space: Space) -> Result<Set, LibISLError> {
486 let uset = self;
487 let isl_rs_ctx = uset.get_ctx();
488 let uset = uset.ptr;
489 let mut space = space;
490 space.do_not_free_on_drop();
491 let space = space.ptr;
492 let isl_rs_result = unsafe { isl_union_set_extract_set(uset, space) };
493 let isl_rs_result = Set { ptr: isl_rs_result,
494 should_free_on_drop: true };
495 let err = isl_rs_ctx.last_error();
496 if err != Error::None_ {
497 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
498 }
499 Ok(isl_rs_result)
500 }
501
502 pub fn free(self) -> Result<UnionSet, LibISLError> {
504 let uset = self;
505 let isl_rs_ctx = uset.get_ctx();
506 let mut uset = uset;
507 uset.do_not_free_on_drop();
508 let uset = uset.ptr;
509 let isl_rs_result = unsafe { isl_union_set_free(uset) };
510 let isl_rs_result = UnionSet { ptr: isl_rs_result,
511 should_free_on_drop: true };
512 let err = isl_rs_ctx.last_error();
513 if err != Error::None_ {
514 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
515 }
516 Ok(isl_rs_result)
517 }
518
519 pub fn from_basic_set(bset: BasicSet) -> Result<UnionSet, LibISLError> {
521 let isl_rs_ctx = bset.get_ctx();
522 let mut bset = bset;
523 bset.do_not_free_on_drop();
524 let bset = bset.ptr;
525 let isl_rs_result = unsafe { isl_union_set_from_basic_set(bset) };
526 let isl_rs_result = UnionSet { 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 from_point(pnt: Point) -> Result<UnionSet, LibISLError> {
537 let isl_rs_ctx = pnt.get_ctx();
538 let mut pnt = pnt;
539 pnt.do_not_free_on_drop();
540 let pnt = pnt.ptr;
541 let isl_rs_result = unsafe { isl_union_set_from_point(pnt) };
542 let isl_rs_result = UnionSet { ptr: isl_rs_result,
543 should_free_on_drop: true };
544 let err = isl_rs_ctx.last_error();
545 if err != Error::None_ {
546 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
547 }
548 Ok(isl_rs_result)
549 }
550
551 pub fn from_set(set: Set) -> Result<UnionSet, LibISLError> {
553 let isl_rs_ctx = set.get_ctx();
554 let mut set = set;
555 set.do_not_free_on_drop();
556 let set = set.ptr;
557 let isl_rs_result = unsafe { isl_union_set_from_set(set) };
558 let isl_rs_result = UnionSet { ptr: isl_rs_result,
559 should_free_on_drop: true };
560 let err = isl_rs_ctx.last_error();
561 if err != Error::None_ {
562 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
563 }
564 Ok(isl_rs_result)
565 }
566
567 pub fn get_basic_set_list(&self) -> Result<BasicSetList, LibISLError> {
569 let uset = self;
570 let isl_rs_ctx = uset.get_ctx();
571 let uset = uset.ptr;
572 let isl_rs_result = unsafe { isl_union_set_get_basic_set_list(uset) };
573 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
574 should_free_on_drop: true };
575 let err = isl_rs_ctx.last_error();
576 if err != Error::None_ {
577 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
578 }
579 Ok(isl_rs_result)
580 }
581
582 pub fn get_ctx(&self) -> Context {
584 let uset = self;
585 let uset = uset.ptr;
586 let isl_rs_result = unsafe { isl_union_set_get_ctx(uset) };
587 let isl_rs_result = Context { ptr: isl_rs_result,
588 should_free_on_drop: false };
589 isl_rs_result
590 }
591
592 pub fn get_hash(&self) -> Result<u32, LibISLError> {
594 let uset = self;
595 let isl_rs_ctx = uset.get_ctx();
596 let uset = uset.ptr;
597 let isl_rs_result = unsafe { isl_union_set_get_hash(uset) };
598 let err = isl_rs_ctx.last_error();
599 if err != Error::None_ {
600 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
601 }
602 Ok(isl_rs_result)
603 }
604
605 pub fn get_set_list(&self) -> Result<SetList, LibISLError> {
607 let uset = self;
608 let isl_rs_ctx = uset.get_ctx();
609 let uset = uset.ptr;
610 let isl_rs_result = unsafe { isl_union_set_get_set_list(uset) };
611 let isl_rs_result = SetList { ptr: isl_rs_result,
612 should_free_on_drop: true };
613 let err = isl_rs_ctx.last_error();
614 if err != Error::None_ {
615 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
616 }
617 Ok(isl_rs_result)
618 }
619
620 pub fn get_space(&self) -> Result<Space, LibISLError> {
622 let uset = self;
623 let isl_rs_ctx = uset.get_ctx();
624 let uset = uset.ptr;
625 let isl_rs_result = unsafe { isl_union_set_get_space(uset) };
626 let isl_rs_result = Space { ptr: isl_rs_result,
627 should_free_on_drop: true };
628 let err = isl_rs_ctx.last_error();
629 if err != Error::None_ {
630 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
631 }
632 Ok(isl_rs_result)
633 }
634
635 pub fn gist(self, context: UnionSet) -> Result<UnionSet, LibISLError> {
637 let uset = self;
638 let isl_rs_ctx = uset.get_ctx();
639 let mut uset = uset;
640 uset.do_not_free_on_drop();
641 let uset = uset.ptr;
642 let mut context = context;
643 context.do_not_free_on_drop();
644 let context = context.ptr;
645 let isl_rs_result = unsafe { isl_union_set_gist(uset, context) };
646 let isl_rs_result = UnionSet { ptr: isl_rs_result,
647 should_free_on_drop: true };
648 let err = isl_rs_ctx.last_error();
649 if err != Error::None_ {
650 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
651 }
652 Ok(isl_rs_result)
653 }
654
655 pub fn gist_params(self, set: Set) -> Result<UnionSet, LibISLError> {
657 let uset = self;
658 let isl_rs_ctx = uset.get_ctx();
659 let mut uset = uset;
660 uset.do_not_free_on_drop();
661 let uset = uset.ptr;
662 let mut set = set;
663 set.do_not_free_on_drop();
664 let set = set.ptr;
665 let isl_rs_result = unsafe { isl_union_set_gist_params(uset, set) };
666 let isl_rs_result = UnionSet { ptr: isl_rs_result,
667 should_free_on_drop: true };
668 let err = isl_rs_ctx.last_error();
669 if err != Error::None_ {
670 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
671 }
672 Ok(isl_rs_result)
673 }
674
675 pub fn identity(self) -> Result<UnionMap, LibISLError> {
677 let uset = self;
678 let isl_rs_ctx = uset.get_ctx();
679 let mut uset = uset;
680 uset.do_not_free_on_drop();
681 let uset = uset.ptr;
682 let isl_rs_result = unsafe { isl_union_set_identity(uset) };
683 let isl_rs_result = UnionMap { ptr: isl_rs_result,
684 should_free_on_drop: true };
685 let err = isl_rs_ctx.last_error();
686 if err != Error::None_ {
687 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
688 }
689 Ok(isl_rs_result)
690 }
691
692 pub fn identity_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
694 let uset = self;
695 let isl_rs_ctx = uset.get_ctx();
696 let mut uset = uset;
697 uset.do_not_free_on_drop();
698 let uset = uset.ptr;
699 let isl_rs_result = unsafe { isl_union_set_identity_union_pw_multi_aff(uset) };
700 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
701 should_free_on_drop: true };
702 let err = isl_rs_ctx.last_error();
703 if err != Error::None_ {
704 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
705 }
706 Ok(isl_rs_result)
707 }
708
709 pub fn intersect(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
711 let uset1 = self;
712 let isl_rs_ctx = uset1.get_ctx();
713 let mut uset1 = uset1;
714 uset1.do_not_free_on_drop();
715 let uset1 = uset1.ptr;
716 let mut uset2 = uset2;
717 uset2.do_not_free_on_drop();
718 let uset2 = uset2.ptr;
719 let isl_rs_result = unsafe { isl_union_set_intersect(uset1, uset2) };
720 let isl_rs_result = UnionSet { ptr: isl_rs_result,
721 should_free_on_drop: true };
722 let err = isl_rs_ctx.last_error();
723 if err != Error::None_ {
724 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
725 }
726 Ok(isl_rs_result)
727 }
728
729 pub fn intersect_params(self, set: Set) -> Result<UnionSet, LibISLError> {
731 let uset = self;
732 let isl_rs_ctx = uset.get_ctx();
733 let mut uset = uset;
734 uset.do_not_free_on_drop();
735 let uset = uset.ptr;
736 let mut set = set;
737 set.do_not_free_on_drop();
738 let set = set.ptr;
739 let isl_rs_result = unsafe { isl_union_set_intersect_params(uset, set) };
740 let isl_rs_result = UnionSet { ptr: isl_rs_result,
741 should_free_on_drop: true };
742 let err = isl_rs_ctx.last_error();
743 if err != Error::None_ {
744 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
745 }
746 Ok(isl_rs_result)
747 }
748
749 pub fn is_disjoint(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
751 let uset1 = self;
752 let isl_rs_ctx = uset1.get_ctx();
753 let uset1 = uset1.ptr;
754 let uset2 = uset2.ptr;
755 let isl_rs_result = unsafe { isl_union_set_is_disjoint(uset1, uset2) };
756 let isl_rs_result = match isl_rs_result {
757 0 => false,
758 1 => true,
759 _ => panic!("Got isl_bool = -1"),
760 };
761 let err = isl_rs_ctx.last_error();
762 if err != Error::None_ {
763 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
764 }
765 Ok(isl_rs_result)
766 }
767
768 pub fn is_empty(&self) -> Result<bool, LibISLError> {
770 let uset = self;
771 let isl_rs_ctx = uset.get_ctx();
772 let uset = uset.ptr;
773 let isl_rs_result = unsafe { isl_union_set_is_empty(uset) };
774 let isl_rs_result = match isl_rs_result {
775 0 => false,
776 1 => true,
777 _ => panic!("Got isl_bool = -1"),
778 };
779 let err = isl_rs_ctx.last_error();
780 if err != Error::None_ {
781 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
782 }
783 Ok(isl_rs_result)
784 }
785
786 pub fn is_equal(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
788 let uset1 = self;
789 let isl_rs_ctx = uset1.get_ctx();
790 let uset1 = uset1.ptr;
791 let uset2 = uset2.ptr;
792 let isl_rs_result = unsafe { isl_union_set_is_equal(uset1, uset2) };
793 let isl_rs_result = match isl_rs_result {
794 0 => false,
795 1 => true,
796 _ => panic!("Got isl_bool = -1"),
797 };
798 let err = isl_rs_ctx.last_error();
799 if err != Error::None_ {
800 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
801 }
802 Ok(isl_rs_result)
803 }
804
805 pub fn is_params(&self) -> Result<bool, LibISLError> {
807 let uset = self;
808 let isl_rs_ctx = uset.get_ctx();
809 let uset = uset.ptr;
810 let isl_rs_result = unsafe { isl_union_set_is_params(uset) };
811 let isl_rs_result = match isl_rs_result {
812 0 => false,
813 1 => true,
814 _ => panic!("Got isl_bool = -1"),
815 };
816 let err = isl_rs_ctx.last_error();
817 if err != Error::None_ {
818 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
819 }
820 Ok(isl_rs_result)
821 }
822
823 pub fn is_strict_subset(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
825 let uset1 = self;
826 let isl_rs_ctx = uset1.get_ctx();
827 let uset1 = uset1.ptr;
828 let uset2 = uset2.ptr;
829 let isl_rs_result = unsafe { isl_union_set_is_strict_subset(uset1, uset2) };
830 let isl_rs_result = match isl_rs_result {
831 0 => false,
832 1 => true,
833 _ => panic!("Got isl_bool = -1"),
834 };
835 let err = isl_rs_ctx.last_error();
836 if err != Error::None_ {
837 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
838 }
839 Ok(isl_rs_result)
840 }
841
842 pub fn is_subset(&self, uset2: &UnionSet) -> Result<bool, LibISLError> {
844 let uset1 = self;
845 let isl_rs_ctx = uset1.get_ctx();
846 let uset1 = uset1.ptr;
847 let uset2 = uset2.ptr;
848 let isl_rs_result = unsafe { isl_union_set_is_subset(uset1, uset2) };
849 let isl_rs_result = match isl_rs_result {
850 0 => false,
851 1 => true,
852 _ => panic!("Got isl_bool = -1"),
853 };
854 let err = isl_rs_ctx.last_error();
855 if err != Error::None_ {
856 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
857 }
858 Ok(isl_rs_result)
859 }
860
861 pub fn isa_set(&self) -> Result<bool, LibISLError> {
863 let uset = self;
864 let isl_rs_ctx = uset.get_ctx();
865 let uset = uset.ptr;
866 let isl_rs_result = unsafe { isl_union_set_isa_set(uset) };
867 let isl_rs_result = match isl_rs_result {
868 0 => false,
869 1 => true,
870 _ => panic!("Got isl_bool = -1"),
871 };
872 let err = isl_rs_ctx.last_error();
873 if err != Error::None_ {
874 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
875 }
876 Ok(isl_rs_result)
877 }
878
879 pub fn lex_ge_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
881 let uset1 = self;
882 let isl_rs_ctx = uset1.get_ctx();
883 let mut uset1 = uset1;
884 uset1.do_not_free_on_drop();
885 let uset1 = uset1.ptr;
886 let mut uset2 = uset2;
887 uset2.do_not_free_on_drop();
888 let uset2 = uset2.ptr;
889 let isl_rs_result = unsafe { isl_union_set_lex_ge_union_set(uset1, uset2) };
890 let isl_rs_result = UnionMap { ptr: isl_rs_result,
891 should_free_on_drop: true };
892 let err = isl_rs_ctx.last_error();
893 if err != Error::None_ {
894 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
895 }
896 Ok(isl_rs_result)
897 }
898
899 pub fn lex_gt_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
901 let uset1 = self;
902 let isl_rs_ctx = uset1.get_ctx();
903 let mut uset1 = uset1;
904 uset1.do_not_free_on_drop();
905 let uset1 = uset1.ptr;
906 let mut uset2 = uset2;
907 uset2.do_not_free_on_drop();
908 let uset2 = uset2.ptr;
909 let isl_rs_result = unsafe { isl_union_set_lex_gt_union_set(uset1, uset2) };
910 let isl_rs_result = UnionMap { ptr: isl_rs_result,
911 should_free_on_drop: true };
912 let err = isl_rs_ctx.last_error();
913 if err != Error::None_ {
914 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
915 }
916 Ok(isl_rs_result)
917 }
918
919 pub fn lex_le_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
921 let uset1 = self;
922 let isl_rs_ctx = uset1.get_ctx();
923 let mut uset1 = uset1;
924 uset1.do_not_free_on_drop();
925 let uset1 = uset1.ptr;
926 let mut uset2 = uset2;
927 uset2.do_not_free_on_drop();
928 let uset2 = uset2.ptr;
929 let isl_rs_result = unsafe { isl_union_set_lex_le_union_set(uset1, uset2) };
930 let isl_rs_result = UnionMap { ptr: isl_rs_result,
931 should_free_on_drop: true };
932 let err = isl_rs_ctx.last_error();
933 if err != Error::None_ {
934 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
935 }
936 Ok(isl_rs_result)
937 }
938
939 pub fn lex_lt_union_set(self, uset2: UnionSet) -> Result<UnionMap, LibISLError> {
941 let uset1 = self;
942 let isl_rs_ctx = uset1.get_ctx();
943 let mut uset1 = uset1;
944 uset1.do_not_free_on_drop();
945 let uset1 = uset1.ptr;
946 let mut uset2 = uset2;
947 uset2.do_not_free_on_drop();
948 let uset2 = uset2.ptr;
949 let isl_rs_result = unsafe { isl_union_set_lex_lt_union_set(uset1, uset2) };
950 let isl_rs_result = UnionMap { ptr: isl_rs_result,
951 should_free_on_drop: true };
952 let err = isl_rs_ctx.last_error();
953 if err != Error::None_ {
954 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
955 }
956 Ok(isl_rs_result)
957 }
958
959 pub fn lexmax(self) -> Result<UnionSet, LibISLError> {
961 let uset = self;
962 let isl_rs_ctx = uset.get_ctx();
963 let mut uset = uset;
964 uset.do_not_free_on_drop();
965 let uset = uset.ptr;
966 let isl_rs_result = unsafe { isl_union_set_lexmax(uset) };
967 let isl_rs_result = UnionSet { ptr: isl_rs_result,
968 should_free_on_drop: true };
969 let err = isl_rs_ctx.last_error();
970 if err != Error::None_ {
971 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
972 }
973 Ok(isl_rs_result)
974 }
975
976 pub fn lexmin(self) -> Result<UnionSet, LibISLError> {
978 let uset = self;
979 let isl_rs_ctx = uset.get_ctx();
980 let mut uset = uset;
981 uset.do_not_free_on_drop();
982 let uset = uset.ptr;
983 let isl_rs_result = unsafe { isl_union_set_lexmin(uset) };
984 let isl_rs_result = UnionSet { ptr: isl_rs_result,
985 should_free_on_drop: true };
986 let err = isl_rs_ctx.last_error();
987 if err != Error::None_ {
988 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
989 }
990 Ok(isl_rs_result)
991 }
992
993 pub fn lift(self) -> Result<UnionSet, LibISLError> {
995 let uset = self;
996 let isl_rs_ctx = uset.get_ctx();
997 let mut uset = uset;
998 uset.do_not_free_on_drop();
999 let uset = uset.ptr;
1000 let isl_rs_result = unsafe { isl_union_set_lift(uset) };
1001 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1002 should_free_on_drop: true };
1003 let err = isl_rs_ctx.last_error();
1004 if err != Error::None_ {
1005 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1006 }
1007 Ok(isl_rs_result)
1008 }
1009
1010 pub fn min_multi_union_pw_aff(&self, obj: &MultiUnionPwAff) -> Result<MultiVal, LibISLError> {
1012 let uset = self;
1013 let isl_rs_ctx = uset.get_ctx();
1014 let uset = uset.ptr;
1015 let obj = obj.ptr;
1016 let isl_rs_result = unsafe { isl_union_set_min_multi_union_pw_aff(uset, obj) };
1017 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1018 should_free_on_drop: true };
1019 let err = isl_rs_ctx.last_error();
1020 if err != Error::None_ {
1021 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1022 }
1023 Ok(isl_rs_result)
1024 }
1025
1026 pub fn n_set(&self) -> Result<i32, LibISLError> {
1028 let uset = self;
1029 let isl_rs_ctx = uset.get_ctx();
1030 let uset = uset.ptr;
1031 let isl_rs_result = unsafe { isl_union_set_n_set(uset) };
1032 let err = isl_rs_ctx.last_error();
1033 if err != Error::None_ {
1034 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1035 }
1036 Ok(isl_rs_result)
1037 }
1038
1039 pub fn params(self) -> Result<Set, LibISLError> {
1041 let uset = self;
1042 let isl_rs_ctx = uset.get_ctx();
1043 let mut uset = uset;
1044 uset.do_not_free_on_drop();
1045 let uset = uset.ptr;
1046 let isl_rs_result = unsafe { isl_union_set_params(uset) };
1047 let isl_rs_result = Set { ptr: isl_rs_result,
1048 should_free_on_drop: true };
1049 let err = isl_rs_ctx.last_error();
1050 if err != Error::None_ {
1051 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1052 }
1053 Ok(isl_rs_result)
1054 }
1055
1056 pub fn plain_unshifted_simple_hull(self) -> Result<UnionSet, LibISLError> {
1058 let uset = self;
1059 let isl_rs_ctx = uset.get_ctx();
1060 let mut uset = uset;
1061 uset.do_not_free_on_drop();
1062 let uset = uset.ptr;
1063 let isl_rs_result = unsafe { isl_union_set_plain_unshifted_simple_hull(uset) };
1064 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1065 should_free_on_drop: true };
1066 let err = isl_rs_ctx.last_error();
1067 if err != Error::None_ {
1068 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1069 }
1070 Ok(isl_rs_result)
1071 }
1072
1073 pub fn polyhedral_hull(self) -> Result<UnionSet, LibISLError> {
1075 let uset = self;
1076 let isl_rs_ctx = uset.get_ctx();
1077 let mut uset = uset;
1078 uset.do_not_free_on_drop();
1079 let uset = uset.ptr;
1080 let isl_rs_result = unsafe { isl_union_set_polyhedral_hull(uset) };
1081 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1082 should_free_on_drop: true };
1083 let err = isl_rs_ctx.last_error();
1084 if err != Error::None_ {
1085 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1086 }
1087 Ok(isl_rs_result)
1088 }
1089
1090 pub fn preimage_multi_aff(self, ma: MultiAff) -> Result<UnionSet, LibISLError> {
1092 let uset = self;
1093 let isl_rs_ctx = uset.get_ctx();
1094 let mut uset = uset;
1095 uset.do_not_free_on_drop();
1096 let uset = uset.ptr;
1097 let mut ma = ma;
1098 ma.do_not_free_on_drop();
1099 let ma = ma.ptr;
1100 let isl_rs_result = unsafe { isl_union_set_preimage_multi_aff(uset, ma) };
1101 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1102 should_free_on_drop: true };
1103 let err = isl_rs_ctx.last_error();
1104 if err != Error::None_ {
1105 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1106 }
1107 Ok(isl_rs_result)
1108 }
1109
1110 pub fn preimage_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionSet, LibISLError> {
1112 let uset = self;
1113 let isl_rs_ctx = uset.get_ctx();
1114 let mut uset = uset;
1115 uset.do_not_free_on_drop();
1116 let uset = uset.ptr;
1117 let mut pma = pma;
1118 pma.do_not_free_on_drop();
1119 let pma = pma.ptr;
1120 let isl_rs_result = unsafe { isl_union_set_preimage_pw_multi_aff(uset, pma) };
1121 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1122 should_free_on_drop: true };
1123 let err = isl_rs_ctx.last_error();
1124 if err != Error::None_ {
1125 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1126 }
1127 Ok(isl_rs_result)
1128 }
1129
1130 pub fn preimage_union_pw_multi_aff(self, upma: UnionPwMultiAff)
1132 -> Result<UnionSet, LibISLError> {
1133 let uset = self;
1134 let isl_rs_ctx = uset.get_ctx();
1135 let mut uset = uset;
1136 uset.do_not_free_on_drop();
1137 let uset = uset.ptr;
1138 let mut upma = upma;
1139 upma.do_not_free_on_drop();
1140 let upma = upma.ptr;
1141 let isl_rs_result = unsafe { isl_union_set_preimage_union_pw_multi_aff(uset, upma) };
1142 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1143 should_free_on_drop: true };
1144 let err = isl_rs_ctx.last_error();
1145 if err != Error::None_ {
1146 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1147 }
1148 Ok(isl_rs_result)
1149 }
1150
1151 pub fn product(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1153 let uset1 = self;
1154 let isl_rs_ctx = uset1.get_ctx();
1155 let mut uset1 = uset1;
1156 uset1.do_not_free_on_drop();
1157 let uset1 = uset1.ptr;
1158 let mut uset2 = uset2;
1159 uset2.do_not_free_on_drop();
1160 let uset2 = uset2.ptr;
1161 let isl_rs_result = unsafe { isl_union_set_product(uset1, uset2) };
1162 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1163 should_free_on_drop: true };
1164 let err = isl_rs_ctx.last_error();
1165 if err != Error::None_ {
1166 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1167 }
1168 Ok(isl_rs_result)
1169 }
1170
1171 pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<UnionSet, LibISLError> {
1173 let uset = self;
1174 let isl_rs_ctx = uset.get_ctx();
1175 let mut uset = uset;
1176 uset.do_not_free_on_drop();
1177 let uset = uset.ptr;
1178 let type_ = type_.to_i32();
1179 let isl_rs_result = unsafe { isl_union_set_project_out(uset, type_, first, n) };
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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1185 }
1186 Ok(isl_rs_result)
1187 }
1188
1189 pub fn project_out_all_params(self) -> Result<UnionSet, LibISLError> {
1191 let uset = self;
1192 let isl_rs_ctx = uset.get_ctx();
1193 let mut uset = uset;
1194 uset.do_not_free_on_drop();
1195 let uset = uset.ptr;
1196 let isl_rs_result = unsafe { isl_union_set_project_out_all_params(uset) };
1197 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1198 should_free_on_drop: true };
1199 let err = isl_rs_ctx.last_error();
1200 if err != Error::None_ {
1201 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1202 }
1203 Ok(isl_rs_result)
1204 }
1205
1206 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionSet, LibISLError> {
1208 let isl_rs_ctx = Context { ptr: ctx.ptr,
1209 should_free_on_drop: false };
1210 let ctx = ctx.ptr;
1211 let str_ = CString::new(str_).unwrap();
1212 let str_ = str_.as_ptr();
1213 let isl_rs_result = unsafe { isl_union_set_read_from_str(ctx, str_) };
1214 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1215 should_free_on_drop: true };
1216 let err = isl_rs_ctx.last_error();
1217 if err != Error::None_ {
1218 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1219 }
1220 Ok(isl_rs_result)
1221 }
1222
1223 pub fn remove_divs(self) -> Result<UnionSet, LibISLError> {
1225 let bset = self;
1226 let isl_rs_ctx = bset.get_ctx();
1227 let mut bset = bset;
1228 bset.do_not_free_on_drop();
1229 let bset = bset.ptr;
1230 let isl_rs_result = unsafe { isl_union_set_remove_divs(bset) };
1231 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1232 should_free_on_drop: true };
1233 let err = isl_rs_ctx.last_error();
1234 if err != Error::None_ {
1235 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1236 }
1237 Ok(isl_rs_result)
1238 }
1239
1240 pub fn remove_redundancies(self) -> Result<UnionSet, LibISLError> {
1242 let uset = self;
1243 let isl_rs_ctx = uset.get_ctx();
1244 let mut uset = uset;
1245 uset.do_not_free_on_drop();
1246 let uset = uset.ptr;
1247 let isl_rs_result = unsafe { isl_union_set_remove_redundancies(uset) };
1248 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1249 should_free_on_drop: true };
1250 let err = isl_rs_ctx.last_error();
1251 if err != Error::None_ {
1252 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1253 }
1254 Ok(isl_rs_result)
1255 }
1256
1257 pub fn reset_user(self) -> Result<UnionSet, LibISLError> {
1259 let uset = self;
1260 let isl_rs_ctx = uset.get_ctx();
1261 let mut uset = uset;
1262 uset.do_not_free_on_drop();
1263 let uset = uset.ptr;
1264 let isl_rs_result = unsafe { isl_union_set_reset_user(uset) };
1265 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1266 should_free_on_drop: true };
1267 let err = isl_rs_ctx.last_error();
1268 if err != Error::None_ {
1269 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1270 }
1271 Ok(isl_rs_result)
1272 }
1273
1274 pub fn sample(self) -> Result<BasicSet, LibISLError> {
1276 let uset = self;
1277 let isl_rs_ctx = uset.get_ctx();
1278 let mut uset = uset;
1279 uset.do_not_free_on_drop();
1280 let uset = uset.ptr;
1281 let isl_rs_result = unsafe { isl_union_set_sample(uset) };
1282 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1283 should_free_on_drop: true };
1284 let err = isl_rs_ctx.last_error();
1285 if err != Error::None_ {
1286 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1287 }
1288 Ok(isl_rs_result)
1289 }
1290
1291 pub fn sample_point(self) -> Result<Point, LibISLError> {
1293 let uset = self;
1294 let isl_rs_ctx = uset.get_ctx();
1295 let mut uset = uset;
1296 uset.do_not_free_on_drop();
1297 let uset = uset.ptr;
1298 let isl_rs_result = unsafe { isl_union_set_sample_point(uset) };
1299 let isl_rs_result = Point { ptr: isl_rs_result,
1300 should_free_on_drop: true };
1301 let err = isl_rs_ctx.last_error();
1302 if err != Error::None_ {
1303 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1304 }
1305 Ok(isl_rs_result)
1306 }
1307
1308 pub fn simple_hull(self) -> Result<UnionSet, LibISLError> {
1310 let uset = self;
1311 let isl_rs_ctx = uset.get_ctx();
1312 let mut uset = uset;
1313 uset.do_not_free_on_drop();
1314 let uset = uset.ptr;
1315 let isl_rs_result = unsafe { isl_union_set_simple_hull(uset) };
1316 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1317 should_free_on_drop: true };
1318 let err = isl_rs_ctx.last_error();
1319 if err != Error::None_ {
1320 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1321 }
1322 Ok(isl_rs_result)
1323 }
1324
1325 pub fn solutions(self) -> Result<UnionSet, LibISLError> {
1327 let bset = self;
1328 let isl_rs_ctx = bset.get_ctx();
1329 let mut bset = bset;
1330 bset.do_not_free_on_drop();
1331 let bset = bset.ptr;
1332 let isl_rs_result = unsafe { isl_union_set_solutions(bset) };
1333 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1334 should_free_on_drop: true };
1335 let err = isl_rs_ctx.last_error();
1336 if err != Error::None_ {
1337 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1338 }
1339 Ok(isl_rs_result)
1340 }
1341
1342 pub fn subtract(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1344 let uset1 = self;
1345 let isl_rs_ctx = uset1.get_ctx();
1346 let mut uset1 = uset1;
1347 uset1.do_not_free_on_drop();
1348 let uset1 = uset1.ptr;
1349 let mut uset2 = uset2;
1350 uset2.do_not_free_on_drop();
1351 let uset2 = uset2.ptr;
1352 let isl_rs_result = unsafe { isl_union_set_subtract(uset1, uset2) };
1353 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1354 should_free_on_drop: true };
1355 let err = isl_rs_ctx.last_error();
1356 if err != Error::None_ {
1357 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1358 }
1359 Ok(isl_rs_result)
1360 }
1361
1362 pub fn to_list(self) -> Result<UnionSetList, LibISLError> {
1364 let el = self;
1365 let isl_rs_ctx = el.get_ctx();
1366 let mut el = el;
1367 el.do_not_free_on_drop();
1368 let el = el.ptr;
1369 let isl_rs_result = unsafe { isl_union_set_to_list(el) };
1370 let isl_rs_result = UnionSetList { ptr: isl_rs_result,
1371 should_free_on_drop: true };
1372 let err = isl_rs_ctx.last_error();
1373 if err != Error::None_ {
1374 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1375 }
1376 Ok(isl_rs_result)
1377 }
1378
1379 pub fn to_str(&self) -> Result<&str, LibISLError> {
1381 let uset = self;
1382 let isl_rs_ctx = uset.get_ctx();
1383 let uset = uset.ptr;
1384 let isl_rs_result = unsafe { isl_union_set_to_str(uset) };
1385 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1386 let isl_rs_result = isl_rs_result.to_str().unwrap();
1387 let err = isl_rs_ctx.last_error();
1388 if err != Error::None_ {
1389 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1390 }
1391 Ok(isl_rs_result)
1392 }
1393
1394 pub fn union(self, uset2: UnionSet) -> Result<UnionSet, LibISLError> {
1396 let uset1 = self;
1397 let isl_rs_ctx = uset1.get_ctx();
1398 let mut uset1 = uset1;
1399 uset1.do_not_free_on_drop();
1400 let uset1 = uset1.ptr;
1401 let mut uset2 = uset2;
1402 uset2.do_not_free_on_drop();
1403 let uset2 = uset2.ptr;
1404 let isl_rs_result = unsafe { isl_union_set_union(uset1, uset2) };
1405 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1406 should_free_on_drop: true };
1407 let err = isl_rs_ctx.last_error();
1408 if err != Error::None_ {
1409 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1410 }
1411 Ok(isl_rs_result)
1412 }
1413
1414 pub fn universe(self) -> Result<UnionSet, 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_universe(uset) };
1422 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1423 should_free_on_drop: true };
1424 let err = isl_rs_ctx.last_error();
1425 if err != Error::None_ {
1426 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1427 }
1428 Ok(isl_rs_result)
1429 }
1430
1431 pub fn unwrap(self) -> Result<UnionMap, LibISLError> {
1433 let uset = self;
1434 let isl_rs_ctx = uset.get_ctx();
1435 let mut uset = uset;
1436 uset.do_not_free_on_drop();
1437 let uset = uset.ptr;
1438 let isl_rs_result = unsafe { isl_union_set_unwrap(uset) };
1439 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1440 should_free_on_drop: true };
1441 let err = isl_rs_ctx.last_error();
1442 if err != Error::None_ {
1443 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1444 }
1445 Ok(isl_rs_result)
1446 }
1447
1448 pub fn wrapped_domain_map(self) -> Result<UnionMap, LibISLError> {
1450 let uset = self;
1451 let isl_rs_ctx = uset.get_ctx();
1452 let mut uset = uset;
1453 uset.do_not_free_on_drop();
1454 let uset = uset.ptr;
1455 let isl_rs_result = unsafe { isl_union_set_wrapped_domain_map(uset) };
1456 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1457 should_free_on_drop: true };
1458 let err = isl_rs_ctx.last_error();
1459 if err != Error::None_ {
1460 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1461 }
1462 Ok(isl_rs_result)
1463 }
1464
1465 pub fn do_not_free_on_drop(&mut self) {
1468 self.should_free_on_drop = false;
1469 }
1470}
1471
1472impl Drop for UnionSet {
1473 fn drop(&mut self) {
1474 if self.should_free_on_drop {
1475 unsafe {
1476 isl_union_set_free(self.ptr);
1477 }
1478 }
1479 }
1480}