1use crate::bindings::{
5 BasicSet, Context, DimType, FixedBox, Id, Map, Point, PwAff, Space, StrideInfo, Val,
6};
7use libc::uintptr_t;
8use std::ffi::{CStr, CString};
9use std::os::raw::c_char;
10
11pub struct Set {
13 pub ptr: uintptr_t,
14 pub should_free_on_drop: bool,
15}
16
17extern "C" {
18
19 fn isl_set_n_dim(set: uintptr_t) -> i32;
20
21 fn isl_set_n_param(set: uintptr_t) -> i32;
22
23 fn isl_set_tuple_dim(set: uintptr_t) -> i32;
24
25 fn isl_set_dim(set: uintptr_t, type_: DimType) -> i32;
26
27 fn isl_set_get_ctx(set: uintptr_t) -> uintptr_t;
28
29 fn isl_set_get_space(set: uintptr_t) -> uintptr_t;
30
31 fn isl_set_reset_space(set: uintptr_t, space: uintptr_t) -> uintptr_t;
32
33 fn isl_set_has_tuple_name(set: uintptr_t) -> i32;
34
35 fn isl_set_get_tuple_name(set: uintptr_t) -> *const c_char;
36
37 fn isl_set_set_tuple_name(set: uintptr_t, s: *const c_char) -> uintptr_t;
38
39 fn isl_set_has_dim_name(set: uintptr_t, type_: DimType, pos: u32) -> i32;
40
41 fn isl_set_get_dim_name(set: uintptr_t, type_: DimType, pos: u32) -> *const c_char;
42
43 fn isl_set_set_dim_name(set: uintptr_t, type_: DimType, pos: u32, s: *const c_char)
44 -> uintptr_t;
45
46 fn isl_set_set_dim_id(set: uintptr_t, type_: DimType, pos: u32, id: uintptr_t) -> uintptr_t;
47
48 fn isl_set_has_dim_id(set: uintptr_t, type_: DimType, pos: u32) -> i32;
49
50 fn isl_set_get_dim_id(set: uintptr_t, type_: DimType, pos: u32) -> uintptr_t;
51
52 fn isl_set_set_tuple_id(set: uintptr_t, id: uintptr_t) -> uintptr_t;
53
54 fn isl_set_reset_tuple_id(set: uintptr_t) -> uintptr_t;
55
56 fn isl_set_has_tuple_id(set: uintptr_t) -> i32;
57
58 fn isl_set_get_tuple_id(set: uintptr_t) -> uintptr_t;
59
60 fn isl_set_reset_user(set: uintptr_t) -> uintptr_t;
61
62 fn isl_set_find_dim_by_id(set: uintptr_t, type_: DimType, id: uintptr_t) -> i32;
63
64 fn isl_set_find_dim_by_name(set: uintptr_t, type_: DimType, name: *const c_char) -> i32;
65
66 fn isl_set_remove_redundancies(set: uintptr_t) -> uintptr_t;
67
68 fn isl_set_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
69
70 fn isl_set_dump(set: uintptr_t);
71
72 fn isl_set_fix_si(set: uintptr_t, type_: DimType, pos: u32, value: i32) -> uintptr_t;
73
74 fn isl_set_lower_bound_si(set: uintptr_t, type_: DimType, pos: u32, value: i32) -> uintptr_t;
75
76 fn isl_set_lower_bound_val(set: uintptr_t, type_: DimType, pos: u32, value: uintptr_t)
77 -> uintptr_t;
78
79 fn isl_set_upper_bound_si(set: uintptr_t, type_: DimType, pos: u32, value: i32) -> uintptr_t;
80
81 fn isl_set_upper_bound_val(set: uintptr_t, type_: DimType, pos: u32, value: uintptr_t)
82 -> uintptr_t;
83
84 fn isl_set_equate(set: uintptr_t, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
85 -> uintptr_t;
86
87 fn isl_set_lexmin(set: uintptr_t) -> uintptr_t;
88
89 fn isl_set_lexmax(set: uintptr_t) -> uintptr_t;
90
91 fn isl_set_follows_at(set1: uintptr_t, set2: uintptr_t, pos: i32) -> i32;
92
93 fn isl_set_params(set: uintptr_t) -> uintptr_t;
94
95 fn isl_set_from_params(set: uintptr_t) -> uintptr_t;
96
97 fn isl_set_empty(space: uintptr_t) -> uintptr_t;
98
99 fn isl_set_universe(space: uintptr_t) -> uintptr_t;
100
101 fn isl_set_nat_universe(space: uintptr_t) -> uintptr_t;
102
103 fn isl_set_copy(set: uintptr_t) -> uintptr_t;
104
105 fn isl_set_free(set: uintptr_t) -> uintptr_t;
106
107 fn isl_set_from_basic_set(bset: uintptr_t) -> uintptr_t;
108
109 fn isl_set_sample(set: uintptr_t) -> uintptr_t;
110
111 fn isl_set_sample_point(set: uintptr_t) -> uintptr_t;
112
113 fn isl_set_detect_equalities(set: uintptr_t) -> uintptr_t;
114
115 fn isl_set_affine_hull(set: uintptr_t) -> uintptr_t;
116
117 fn isl_set_convex_hull(set: uintptr_t) -> uintptr_t;
118
119 fn isl_set_polyhedral_hull(set: uintptr_t) -> uintptr_t;
120
121 fn isl_set_simple_hull(set: uintptr_t) -> uintptr_t;
122
123 fn isl_set_unshifted_simple_hull(set: uintptr_t) -> uintptr_t;
124
125 fn isl_set_plain_unshifted_simple_hull(set: uintptr_t) -> uintptr_t;
126
127 fn isl_set_bounded_simple_hull(set: uintptr_t) -> uintptr_t;
128
129 fn isl_set_union_disjoint(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
130
131 fn isl_set_union(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
132
133 fn isl_set_product(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
134
135 fn isl_set_flat_product(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
136
137 fn isl_set_intersect(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
138
139 fn isl_set_intersect_params(set: uintptr_t, params: uintptr_t) -> uintptr_t;
140
141 fn isl_set_intersect_factor_domain(set: uintptr_t, domain: uintptr_t) -> uintptr_t;
142
143 fn isl_set_intersect_factor_range(set: uintptr_t, range: uintptr_t) -> uintptr_t;
144
145 fn isl_set_subtract(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
146
147 fn isl_set_complement(set: uintptr_t) -> uintptr_t;
148
149 fn isl_set_apply(set: uintptr_t, map: uintptr_t) -> uintptr_t;
150
151 fn isl_set_fix_val(set: uintptr_t, type_: DimType, pos: u32, v: uintptr_t) -> uintptr_t;
152
153 fn isl_set_fix_dim_si(set: uintptr_t, dim: u32, value: i32) -> uintptr_t;
154
155 fn isl_set_insert_dims(set: uintptr_t, type_: DimType, pos: u32, n: u32) -> uintptr_t;
156
157 fn isl_set_add_dims(set: uintptr_t, type_: DimType, n: u32) -> uintptr_t;
158
159 fn isl_set_move_dims(set: uintptr_t, dst_type: DimType, dst_pos: u32, src_type: DimType,
160 src_pos: u32, n: u32)
161 -> uintptr_t;
162
163 fn isl_set_project_out_param_id(set: uintptr_t, id: uintptr_t) -> uintptr_t;
164
165 fn isl_set_project_out(set: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
166
167 fn isl_set_project_out_all_params(set: uintptr_t) -> uintptr_t;
168
169 fn isl_set_project_onto_map(set: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
170
171 fn isl_set_eliminate(set: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
172
173 fn isl_set_eliminate_dims(set: uintptr_t, first: u32, n: u32) -> uintptr_t;
174
175 fn isl_set_remove_dims(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
176
177 fn isl_set_remove_divs_involving_dims(set: uintptr_t, type_: DimType, first: u32, n: u32)
178 -> uintptr_t;
179
180 fn isl_set_remove_unknown_divs(set: uintptr_t) -> uintptr_t;
181
182 fn isl_set_remove_divs(set: uintptr_t) -> uintptr_t;
183
184 fn isl_set_split_dims(set: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
185
186 fn isl_set_drop_constraints_involving_dims(set: uintptr_t, type_: DimType, first: u32, n: u32)
187 -> uintptr_t;
188
189 fn isl_set_drop_constraints_not_involving_dims(set: uintptr_t, type_: DimType, first: u32,
190 n: u32)
191 -> uintptr_t;
192
193 fn isl_set_involves_locals(set: uintptr_t) -> i32;
194
195 fn isl_set_involves_dims(set: uintptr_t, type_: DimType, first: u32, n: u32) -> i32;
196
197 fn isl_set_plain_is_empty(set: uintptr_t) -> i32;
198
199 fn isl_set_plain_is_universe(set: uintptr_t) -> i32;
200
201 fn isl_set_is_params(set: uintptr_t) -> i32;
202
203 fn isl_set_is_empty(set: uintptr_t) -> i32;
204
205 fn isl_set_is_bounded(set: uintptr_t) -> i32;
206
207 fn isl_set_is_subset(set1: uintptr_t, set2: uintptr_t) -> i32;
208
209 fn isl_set_is_strict_subset(set1: uintptr_t, set2: uintptr_t) -> i32;
210
211 fn isl_set_is_equal(set1: uintptr_t, set2: uintptr_t) -> i32;
212
213 fn isl_set_is_disjoint(set1: uintptr_t, set2: uintptr_t) -> i32;
214
215 fn isl_set_is_singleton(set: uintptr_t) -> i32;
216
217 fn isl_set_is_box(set: uintptr_t) -> i32;
218
219 fn isl_set_has_equal_space(set1: uintptr_t, set2: uintptr_t) -> i32;
220
221 fn isl_set_sum(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
222
223 fn isl_set_neg(set: uintptr_t) -> uintptr_t;
224
225 fn isl_set_make_disjoint(set: uintptr_t) -> uintptr_t;
226
227 fn isl_set_compute_divs(set: uintptr_t) -> uintptr_t;
228
229 fn isl_set_align_divs(set: uintptr_t) -> uintptr_t;
230
231 fn isl_set_plain_get_val_if_fixed(set: uintptr_t, type_: DimType, pos: u32) -> uintptr_t;
232
233 fn isl_set_dim_is_bounded(set: uintptr_t, type_: DimType, pos: u32) -> i32;
234
235 fn isl_set_dim_has_lower_bound(set: uintptr_t, type_: DimType, pos: u32) -> i32;
236
237 fn isl_set_dim_has_upper_bound(set: uintptr_t, type_: DimType, pos: u32) -> i32;
238
239 fn isl_set_dim_has_any_lower_bound(set: uintptr_t, type_: DimType, pos: u32) -> i32;
240
241 fn isl_set_dim_has_any_upper_bound(set: uintptr_t, type_: DimType, pos: u32) -> i32;
242
243 fn isl_set_gist_basic_set(set: uintptr_t, context: uintptr_t) -> uintptr_t;
244
245 fn isl_set_gist(set: uintptr_t, context: uintptr_t) -> uintptr_t;
246
247 fn isl_set_gist_params(set: uintptr_t, context: uintptr_t) -> uintptr_t;
248
249 fn isl_set_get_stride_info(set: uintptr_t, pos: i32) -> uintptr_t;
250
251 fn isl_set_get_stride(set: uintptr_t, pos: i32) -> uintptr_t;
252
253 fn isl_set_get_lattice_tile(set: uintptr_t) -> uintptr_t;
254
255 fn isl_set_get_simple_fixed_box_hull(set: uintptr_t) -> uintptr_t;
256
257 fn isl_set_coalesce(set: uintptr_t) -> uintptr_t;
258
259 fn isl_set_plain_cmp(set1: uintptr_t, set2: uintptr_t) -> i32;
260
261 fn isl_set_plain_is_equal(set1: uintptr_t, set2: uintptr_t) -> i32;
262
263 fn isl_set_plain_is_disjoint(set1: uintptr_t, set2: uintptr_t) -> i32;
264
265 fn isl_set_get_hash(set: uintptr_t) -> u32;
266
267 fn isl_set_n_basic_set(set: uintptr_t) -> i32;
268
269 fn isl_set_count_val(set: uintptr_t) -> uintptr_t;
270
271 fn isl_set_from_point(pnt: uintptr_t) -> uintptr_t;
272
273 fn isl_set_box_from_points(pnt1: uintptr_t, pnt2: uintptr_t) -> uintptr_t;
274
275 fn isl_set_lift(set: uintptr_t) -> uintptr_t;
276
277 fn isl_set_lex_le_set(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
278
279 fn isl_set_lex_lt_set(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
280
281 fn isl_set_lex_ge_set(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
282
283 fn isl_set_lex_gt_set(set1: uintptr_t, set2: uintptr_t) -> uintptr_t;
284
285 fn isl_set_size(set: uintptr_t) -> i32;
286
287 fn isl_set_align_params(set: uintptr_t, model: uintptr_t) -> uintptr_t;
288
289 fn isl_set_drop_unused_params(set: uintptr_t) -> uintptr_t;
290
291 fn isl_set_coefficients(set: uintptr_t) -> uintptr_t;
292
293 fn isl_set_solutions(set: uintptr_t) -> uintptr_t;
294
295 fn isl_set_dim_max(set: uintptr_t, pos: i32) -> uintptr_t;
296
297 fn isl_set_dim_min(set: uintptr_t, pos: i32) -> uintptr_t;
298
299 fn isl_set_to_str(set: uintptr_t) -> *const c_char;
300
301}
302
303impl Set {
304 pub fn n_dim(&self) -> i32 {
306 let set = self;
307 let set = set.ptr;
308 let isl_rs_result = unsafe { isl_set_n_dim(set) };
309 isl_rs_result
310 }
311
312 pub fn n_param(&self) -> i32 {
314 let set = self;
315 let set = set.ptr;
316 let isl_rs_result = unsafe { isl_set_n_param(set) };
317 isl_rs_result
318 }
319
320 pub fn tuple_dim(&self) -> i32 {
322 let set = self;
323 let set = set.ptr;
324 let isl_rs_result = unsafe { isl_set_tuple_dim(set) };
325 isl_rs_result
326 }
327
328 pub fn dim(&self, type_: DimType) -> i32 {
330 let set = self;
331 let set = set.ptr;
332 let isl_rs_result = unsafe { isl_set_dim(set, type_) };
333 isl_rs_result
334 }
335
336 pub fn get_ctx(&self) -> Context {
338 let set = self;
339 let set = set.ptr;
340 let isl_rs_result = unsafe { isl_set_get_ctx(set) };
341 let isl_rs_result = Context { ptr: isl_rs_result,
342 should_free_on_drop: true };
343 let mut isl_rs_result = isl_rs_result;
344 isl_rs_result.do_not_free_on_drop();
345 isl_rs_result
346 }
347
348 pub fn get_space(&self) -> Space {
350 let set = self;
351 let set = set.ptr;
352 let isl_rs_result = unsafe { isl_set_get_space(set) };
353 let isl_rs_result = Space { ptr: isl_rs_result,
354 should_free_on_drop: true };
355 isl_rs_result
356 }
357
358 pub fn reset_space(self, space: Space) -> Set {
360 let set = self;
361 let mut set = set;
362 set.do_not_free_on_drop();
363 let set = set.ptr;
364 let mut space = space;
365 space.do_not_free_on_drop();
366 let space = space.ptr;
367 let isl_rs_result = unsafe { isl_set_reset_space(set, space) };
368 let isl_rs_result = Set { ptr: isl_rs_result,
369 should_free_on_drop: true };
370 isl_rs_result
371 }
372
373 pub fn has_tuple_name(&self) -> bool {
375 let set = self;
376 let set = set.ptr;
377 let isl_rs_result = unsafe { isl_set_has_tuple_name(set) };
378 let isl_rs_result = match isl_rs_result {
379 0 => false,
380 1 => true,
381 _ => panic!("Got isl_bool = -1"),
382 };
383 isl_rs_result
384 }
385
386 pub fn get_tuple_name(&self) -> &str {
388 let set = self;
389 let set = set.ptr;
390 let isl_rs_result = unsafe { isl_set_get_tuple_name(set) };
391 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
392 let isl_rs_result = isl_rs_result.to_str().unwrap();
393 isl_rs_result
394 }
395
396 pub fn set_tuple_name(self, s: &str) -> Set {
398 let set = self;
399 let mut set = set;
400 set.do_not_free_on_drop();
401 let set = set.ptr;
402 let s = CString::new(s).unwrap();
403 let s = s.as_ptr();
404 let isl_rs_result = unsafe { isl_set_set_tuple_name(set, s) };
405 let isl_rs_result = Set { ptr: isl_rs_result,
406 should_free_on_drop: true };
407 isl_rs_result
408 }
409
410 pub fn has_dim_name(&self, type_: DimType, pos: u32) -> bool {
412 let set = self;
413 let set = set.ptr;
414 let isl_rs_result = unsafe { isl_set_has_dim_name(set, type_, pos) };
415 let isl_rs_result = match isl_rs_result {
416 0 => false,
417 1 => true,
418 _ => panic!("Got isl_bool = -1"),
419 };
420 isl_rs_result
421 }
422
423 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> &str {
425 let set = self;
426 let set = set.ptr;
427 let isl_rs_result = unsafe { isl_set_get_dim_name(set, type_, pos) };
428 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
429 let isl_rs_result = isl_rs_result.to_str().unwrap();
430 isl_rs_result
431 }
432
433 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Set {
435 let set = self;
436 let mut set = set;
437 set.do_not_free_on_drop();
438 let set = set.ptr;
439 let s = CString::new(s).unwrap();
440 let s = s.as_ptr();
441 let isl_rs_result = unsafe { isl_set_set_dim_name(set, type_, pos, s) };
442 let isl_rs_result = Set { ptr: isl_rs_result,
443 should_free_on_drop: true };
444 isl_rs_result
445 }
446
447 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Set {
449 let set = self;
450 let mut set = set;
451 set.do_not_free_on_drop();
452 let set = set.ptr;
453 let mut id = id;
454 id.do_not_free_on_drop();
455 let id = id.ptr;
456 let isl_rs_result = unsafe { isl_set_set_dim_id(set, type_, pos, id) };
457 let isl_rs_result = Set { ptr: isl_rs_result,
458 should_free_on_drop: true };
459 isl_rs_result
460 }
461
462 pub fn has_dim_id(&self, type_: DimType, pos: u32) -> bool {
464 let set = self;
465 let set = set.ptr;
466 let isl_rs_result = unsafe { isl_set_has_dim_id(set, type_, pos) };
467 let isl_rs_result = match isl_rs_result {
468 0 => false,
469 1 => true,
470 _ => panic!("Got isl_bool = -1"),
471 };
472 isl_rs_result
473 }
474
475 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Id {
477 let set = self;
478 let set = set.ptr;
479 let isl_rs_result = unsafe { isl_set_get_dim_id(set, type_, pos) };
480 let isl_rs_result = Id { ptr: isl_rs_result,
481 should_free_on_drop: true };
482 isl_rs_result
483 }
484
485 pub fn set_tuple_id(self, id: Id) -> Set {
487 let set = self;
488 let mut set = set;
489 set.do_not_free_on_drop();
490 let set = set.ptr;
491 let mut id = id;
492 id.do_not_free_on_drop();
493 let id = id.ptr;
494 let isl_rs_result = unsafe { isl_set_set_tuple_id(set, id) };
495 let isl_rs_result = Set { ptr: isl_rs_result,
496 should_free_on_drop: true };
497 isl_rs_result
498 }
499
500 pub fn reset_tuple_id(self) -> Set {
502 let set = self;
503 let mut set = set;
504 set.do_not_free_on_drop();
505 let set = set.ptr;
506 let isl_rs_result = unsafe { isl_set_reset_tuple_id(set) };
507 let isl_rs_result = Set { ptr: isl_rs_result,
508 should_free_on_drop: true };
509 isl_rs_result
510 }
511
512 pub fn has_tuple_id(&self) -> bool {
514 let set = self;
515 let set = set.ptr;
516 let isl_rs_result = unsafe { isl_set_has_tuple_id(set) };
517 let isl_rs_result = match isl_rs_result {
518 0 => false,
519 1 => true,
520 _ => panic!("Got isl_bool = -1"),
521 };
522 isl_rs_result
523 }
524
525 pub fn get_tuple_id(&self) -> Id {
527 let set = self;
528 let set = set.ptr;
529 let isl_rs_result = unsafe { isl_set_get_tuple_id(set) };
530 let isl_rs_result = Id { ptr: isl_rs_result,
531 should_free_on_drop: true };
532 isl_rs_result
533 }
534
535 pub fn reset_user(self) -> Set {
537 let set = self;
538 let mut set = set;
539 set.do_not_free_on_drop();
540 let set = set.ptr;
541 let isl_rs_result = unsafe { isl_set_reset_user(set) };
542 let isl_rs_result = Set { ptr: isl_rs_result,
543 should_free_on_drop: true };
544 isl_rs_result
545 }
546
547 pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> i32 {
549 let set = self;
550 let set = set.ptr;
551 let id = id.ptr;
552 let isl_rs_result = unsafe { isl_set_find_dim_by_id(set, type_, id) };
553 isl_rs_result
554 }
555
556 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> i32 {
558 let set = self;
559 let set = set.ptr;
560 let name = CString::new(name).unwrap();
561 let name = name.as_ptr();
562 let isl_rs_result = unsafe { isl_set_find_dim_by_name(set, type_, name) };
563 isl_rs_result
564 }
565
566 pub fn remove_redundancies(self) -> Set {
568 let set = self;
569 let mut set = set;
570 set.do_not_free_on_drop();
571 let set = set.ptr;
572 let isl_rs_result = unsafe { isl_set_remove_redundancies(set) };
573 let isl_rs_result = Set { ptr: isl_rs_result,
574 should_free_on_drop: true };
575 isl_rs_result
576 }
577
578 pub fn read_from_str(ctx: &Context, str_: &str) -> Set {
580 let ctx = ctx.ptr;
581 let str_ = CString::new(str_).unwrap();
582 let str_ = str_.as_ptr();
583 let isl_rs_result = unsafe { isl_set_read_from_str(ctx, str_) };
584 let isl_rs_result = Set { ptr: isl_rs_result,
585 should_free_on_drop: true };
586 isl_rs_result
587 }
588
589 pub fn dump(&self) {
591 let set = self;
592 let set = set.ptr;
593 let isl_rs_result = unsafe { isl_set_dump(set) };
594 isl_rs_result
595 }
596
597 pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Set {
599 let set = self;
600 let mut set = set;
601 set.do_not_free_on_drop();
602 let set = set.ptr;
603 let isl_rs_result = unsafe { isl_set_fix_si(set, type_, pos, value) };
604 let isl_rs_result = Set { ptr: isl_rs_result,
605 should_free_on_drop: true };
606 isl_rs_result
607 }
608
609 pub fn lower_bound_si(self, type_: DimType, pos: u32, value: i32) -> Set {
611 let set = self;
612 let mut set = set;
613 set.do_not_free_on_drop();
614 let set = set.ptr;
615 let isl_rs_result = unsafe { isl_set_lower_bound_si(set, type_, pos, value) };
616 let isl_rs_result = Set { ptr: isl_rs_result,
617 should_free_on_drop: true };
618 isl_rs_result
619 }
620
621 pub fn lower_bound_val(self, type_: DimType, pos: u32, value: Val) -> Set {
623 let set = self;
624 let mut set = set;
625 set.do_not_free_on_drop();
626 let set = set.ptr;
627 let mut value = value;
628 value.do_not_free_on_drop();
629 let value = value.ptr;
630 let isl_rs_result = unsafe { isl_set_lower_bound_val(set, type_, pos, value) };
631 let isl_rs_result = Set { ptr: isl_rs_result,
632 should_free_on_drop: true };
633 isl_rs_result
634 }
635
636 pub fn upper_bound_si(self, type_: DimType, pos: u32, value: i32) -> Set {
638 let set = self;
639 let mut set = set;
640 set.do_not_free_on_drop();
641 let set = set.ptr;
642 let isl_rs_result = unsafe { isl_set_upper_bound_si(set, type_, pos, value) };
643 let isl_rs_result = Set { ptr: isl_rs_result,
644 should_free_on_drop: true };
645 isl_rs_result
646 }
647
648 pub fn upper_bound_val(self, type_: DimType, pos: u32, value: Val) -> Set {
650 let set = self;
651 let mut set = set;
652 set.do_not_free_on_drop();
653 let set = set.ptr;
654 let mut value = value;
655 value.do_not_free_on_drop();
656 let value = value.ptr;
657 let isl_rs_result = unsafe { isl_set_upper_bound_val(set, type_, pos, value) };
658 let isl_rs_result = Set { ptr: isl_rs_result,
659 should_free_on_drop: true };
660 isl_rs_result
661 }
662
663 pub fn equate(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32) -> Set {
665 let set = self;
666 let mut set = set;
667 set.do_not_free_on_drop();
668 let set = set.ptr;
669 let isl_rs_result = unsafe { isl_set_equate(set, type1, pos1, type2, pos2) };
670 let isl_rs_result = Set { ptr: isl_rs_result,
671 should_free_on_drop: true };
672 isl_rs_result
673 }
674
675 pub fn lexmin(self) -> Set {
677 let set = self;
678 let mut set = set;
679 set.do_not_free_on_drop();
680 let set = set.ptr;
681 let isl_rs_result = unsafe { isl_set_lexmin(set) };
682 let isl_rs_result = Set { ptr: isl_rs_result,
683 should_free_on_drop: true };
684 isl_rs_result
685 }
686
687 pub fn lexmax(self) -> Set {
689 let set = self;
690 let mut set = set;
691 set.do_not_free_on_drop();
692 let set = set.ptr;
693 let isl_rs_result = unsafe { isl_set_lexmax(set) };
694 let isl_rs_result = Set { ptr: isl_rs_result,
695 should_free_on_drop: true };
696 isl_rs_result
697 }
698
699 pub fn follows_at(&self, set2: &Set, pos: i32) -> i32 {
701 let set1 = self;
702 let set1 = set1.ptr;
703 let set2 = set2.ptr;
704 let isl_rs_result = unsafe { isl_set_follows_at(set1, set2, pos) };
705 isl_rs_result
706 }
707
708 pub fn params(self) -> Set {
710 let set = self;
711 let mut set = set;
712 set.do_not_free_on_drop();
713 let set = set.ptr;
714 let isl_rs_result = unsafe { isl_set_params(set) };
715 let isl_rs_result = Set { ptr: isl_rs_result,
716 should_free_on_drop: true };
717 isl_rs_result
718 }
719
720 pub fn from_params(self) -> Set {
722 let set = self;
723 let mut set = set;
724 set.do_not_free_on_drop();
725 let set = set.ptr;
726 let isl_rs_result = unsafe { isl_set_from_params(set) };
727 let isl_rs_result = Set { ptr: isl_rs_result,
728 should_free_on_drop: true };
729 isl_rs_result
730 }
731
732 pub fn empty(space: Space) -> Set {
734 let mut space = space;
735 space.do_not_free_on_drop();
736 let space = space.ptr;
737 let isl_rs_result = unsafe { isl_set_empty(space) };
738 let isl_rs_result = Set { ptr: isl_rs_result,
739 should_free_on_drop: true };
740 isl_rs_result
741 }
742
743 pub fn universe(space: Space) -> Set {
745 let mut space = space;
746 space.do_not_free_on_drop();
747 let space = space.ptr;
748 let isl_rs_result = unsafe { isl_set_universe(space) };
749 let isl_rs_result = Set { ptr: isl_rs_result,
750 should_free_on_drop: true };
751 isl_rs_result
752 }
753
754 pub fn nat_universe(space: Space) -> Set {
756 let mut space = space;
757 space.do_not_free_on_drop();
758 let space = space.ptr;
759 let isl_rs_result = unsafe { isl_set_nat_universe(space) };
760 let isl_rs_result = Set { ptr: isl_rs_result,
761 should_free_on_drop: true };
762 isl_rs_result
763 }
764
765 pub fn copy(&self) -> Set {
767 let set = self;
768 let set = set.ptr;
769 let isl_rs_result = unsafe { isl_set_copy(set) };
770 let isl_rs_result = Set { ptr: isl_rs_result,
771 should_free_on_drop: true };
772 isl_rs_result
773 }
774
775 pub fn free(self) -> Set {
777 let set = self;
778 let mut set = set;
779 set.do_not_free_on_drop();
780 let set = set.ptr;
781 let isl_rs_result = unsafe { isl_set_free(set) };
782 let isl_rs_result = Set { ptr: isl_rs_result,
783 should_free_on_drop: true };
784 isl_rs_result
785 }
786
787 pub fn from_basic_set(bset: BasicSet) -> Set {
789 let mut bset = bset;
790 bset.do_not_free_on_drop();
791 let bset = bset.ptr;
792 let isl_rs_result = unsafe { isl_set_from_basic_set(bset) };
793 let isl_rs_result = Set { ptr: isl_rs_result,
794 should_free_on_drop: true };
795 isl_rs_result
796 }
797
798 pub fn sample(self) -> BasicSet {
800 let set = self;
801 let mut set = set;
802 set.do_not_free_on_drop();
803 let set = set.ptr;
804 let isl_rs_result = unsafe { isl_set_sample(set) };
805 let isl_rs_result = BasicSet { ptr: isl_rs_result,
806 should_free_on_drop: true };
807 isl_rs_result
808 }
809
810 pub fn sample_point(self) -> Point {
812 let set = self;
813 let mut set = set;
814 set.do_not_free_on_drop();
815 let set = set.ptr;
816 let isl_rs_result = unsafe { isl_set_sample_point(set) };
817 let isl_rs_result = Point { ptr: isl_rs_result,
818 should_free_on_drop: true };
819 isl_rs_result
820 }
821
822 pub fn detect_equalities(self) -> Set {
824 let set = self;
825 let mut set = set;
826 set.do_not_free_on_drop();
827 let set = set.ptr;
828 let isl_rs_result = unsafe { isl_set_detect_equalities(set) };
829 let isl_rs_result = Set { ptr: isl_rs_result,
830 should_free_on_drop: true };
831 isl_rs_result
832 }
833
834 pub fn affine_hull(self) -> BasicSet {
836 let set = self;
837 let mut set = set;
838 set.do_not_free_on_drop();
839 let set = set.ptr;
840 let isl_rs_result = unsafe { isl_set_affine_hull(set) };
841 let isl_rs_result = BasicSet { ptr: isl_rs_result,
842 should_free_on_drop: true };
843 isl_rs_result
844 }
845
846 pub fn convex_hull(self) -> BasicSet {
848 let set = self;
849 let mut set = set;
850 set.do_not_free_on_drop();
851 let set = set.ptr;
852 let isl_rs_result = unsafe { isl_set_convex_hull(set) };
853 let isl_rs_result = BasicSet { ptr: isl_rs_result,
854 should_free_on_drop: true };
855 isl_rs_result
856 }
857
858 pub fn polyhedral_hull(self) -> BasicSet {
860 let set = self;
861 let mut set = set;
862 set.do_not_free_on_drop();
863 let set = set.ptr;
864 let isl_rs_result = unsafe { isl_set_polyhedral_hull(set) };
865 let isl_rs_result = BasicSet { ptr: isl_rs_result,
866 should_free_on_drop: true };
867 isl_rs_result
868 }
869
870 pub fn simple_hull(self) -> BasicSet {
872 let set = self;
873 let mut set = set;
874 set.do_not_free_on_drop();
875 let set = set.ptr;
876 let isl_rs_result = unsafe { isl_set_simple_hull(set) };
877 let isl_rs_result = BasicSet { ptr: isl_rs_result,
878 should_free_on_drop: true };
879 isl_rs_result
880 }
881
882 pub fn unshifted_simple_hull(self) -> BasicSet {
884 let set = self;
885 let mut set = set;
886 set.do_not_free_on_drop();
887 let set = set.ptr;
888 let isl_rs_result = unsafe { isl_set_unshifted_simple_hull(set) };
889 let isl_rs_result = BasicSet { ptr: isl_rs_result,
890 should_free_on_drop: true };
891 isl_rs_result
892 }
893
894 pub fn plain_unshifted_simple_hull(self) -> BasicSet {
896 let set = self;
897 let mut set = set;
898 set.do_not_free_on_drop();
899 let set = set.ptr;
900 let isl_rs_result = unsafe { isl_set_plain_unshifted_simple_hull(set) };
901 let isl_rs_result = BasicSet { ptr: isl_rs_result,
902 should_free_on_drop: true };
903 isl_rs_result
904 }
905
906 pub fn bounded_simple_hull(self) -> BasicSet {
908 let set = self;
909 let mut set = set;
910 set.do_not_free_on_drop();
911 let set = set.ptr;
912 let isl_rs_result = unsafe { isl_set_bounded_simple_hull(set) };
913 let isl_rs_result = BasicSet { ptr: isl_rs_result,
914 should_free_on_drop: true };
915 isl_rs_result
916 }
917
918 pub fn union_disjoint(self, set2: Set) -> Set {
920 let set1 = self;
921 let mut set1 = set1;
922 set1.do_not_free_on_drop();
923 let set1 = set1.ptr;
924 let mut set2 = set2;
925 set2.do_not_free_on_drop();
926 let set2 = set2.ptr;
927 let isl_rs_result = unsafe { isl_set_union_disjoint(set1, set2) };
928 let isl_rs_result = Set { ptr: isl_rs_result,
929 should_free_on_drop: true };
930 isl_rs_result
931 }
932
933 pub fn union(self, set2: Set) -> Set {
935 let set1 = self;
936 let mut set1 = set1;
937 set1.do_not_free_on_drop();
938 let set1 = set1.ptr;
939 let mut set2 = set2;
940 set2.do_not_free_on_drop();
941 let set2 = set2.ptr;
942 let isl_rs_result = unsafe { isl_set_union(set1, set2) };
943 let isl_rs_result = Set { ptr: isl_rs_result,
944 should_free_on_drop: true };
945 isl_rs_result
946 }
947
948 pub fn product(self, set2: Set) -> Set {
950 let set1 = self;
951 let mut set1 = set1;
952 set1.do_not_free_on_drop();
953 let set1 = set1.ptr;
954 let mut set2 = set2;
955 set2.do_not_free_on_drop();
956 let set2 = set2.ptr;
957 let isl_rs_result = unsafe { isl_set_product(set1, set2) };
958 let isl_rs_result = Set { ptr: isl_rs_result,
959 should_free_on_drop: true };
960 isl_rs_result
961 }
962
963 pub fn flat_product(self, set2: Set) -> Set {
965 let set1 = self;
966 let mut set1 = set1;
967 set1.do_not_free_on_drop();
968 let set1 = set1.ptr;
969 let mut set2 = set2;
970 set2.do_not_free_on_drop();
971 let set2 = set2.ptr;
972 let isl_rs_result = unsafe { isl_set_flat_product(set1, set2) };
973 let isl_rs_result = Set { ptr: isl_rs_result,
974 should_free_on_drop: true };
975 isl_rs_result
976 }
977
978 pub fn intersect(self, set2: Set) -> Set {
980 let set1 = self;
981 let mut set1 = set1;
982 set1.do_not_free_on_drop();
983 let set1 = set1.ptr;
984 let mut set2 = set2;
985 set2.do_not_free_on_drop();
986 let set2 = set2.ptr;
987 let isl_rs_result = unsafe { isl_set_intersect(set1, set2) };
988 let isl_rs_result = Set { ptr: isl_rs_result,
989 should_free_on_drop: true };
990 isl_rs_result
991 }
992
993 pub fn intersect_params(self, params: Set) -> Set {
995 let set = self;
996 let mut set = set;
997 set.do_not_free_on_drop();
998 let set = set.ptr;
999 let mut params = params;
1000 params.do_not_free_on_drop();
1001 let params = params.ptr;
1002 let isl_rs_result = unsafe { isl_set_intersect_params(set, params) };
1003 let isl_rs_result = Set { ptr: isl_rs_result,
1004 should_free_on_drop: true };
1005 isl_rs_result
1006 }
1007
1008 pub fn intersect_factor_domain(self, domain: Set) -> Set {
1010 let set = self;
1011 let mut set = set;
1012 set.do_not_free_on_drop();
1013 let set = set.ptr;
1014 let mut domain = domain;
1015 domain.do_not_free_on_drop();
1016 let domain = domain.ptr;
1017 let isl_rs_result = unsafe { isl_set_intersect_factor_domain(set, domain) };
1018 let isl_rs_result = Set { ptr: isl_rs_result,
1019 should_free_on_drop: true };
1020 isl_rs_result
1021 }
1022
1023 pub fn intersect_factor_range(self, range: Set) -> Set {
1025 let set = self;
1026 let mut set = set;
1027 set.do_not_free_on_drop();
1028 let set = set.ptr;
1029 let mut range = range;
1030 range.do_not_free_on_drop();
1031 let range = range.ptr;
1032 let isl_rs_result = unsafe { isl_set_intersect_factor_range(set, range) };
1033 let isl_rs_result = Set { ptr: isl_rs_result,
1034 should_free_on_drop: true };
1035 isl_rs_result
1036 }
1037
1038 pub fn subtract(self, set2: Set) -> Set {
1040 let set1 = self;
1041 let mut set1 = set1;
1042 set1.do_not_free_on_drop();
1043 let set1 = set1.ptr;
1044 let mut set2 = set2;
1045 set2.do_not_free_on_drop();
1046 let set2 = set2.ptr;
1047 let isl_rs_result = unsafe { isl_set_subtract(set1, set2) };
1048 let isl_rs_result = Set { ptr: isl_rs_result,
1049 should_free_on_drop: true };
1050 isl_rs_result
1051 }
1052
1053 pub fn complement(self) -> Set {
1055 let set = self;
1056 let mut set = set;
1057 set.do_not_free_on_drop();
1058 let set = set.ptr;
1059 let isl_rs_result = unsafe { isl_set_complement(set) };
1060 let isl_rs_result = Set { ptr: isl_rs_result,
1061 should_free_on_drop: true };
1062 isl_rs_result
1063 }
1064
1065 pub fn apply(self, map: Map) -> Set {
1067 let set = self;
1068 let mut set = set;
1069 set.do_not_free_on_drop();
1070 let set = set.ptr;
1071 let mut map = map;
1072 map.do_not_free_on_drop();
1073 let map = map.ptr;
1074 let isl_rs_result = unsafe { isl_set_apply(set, map) };
1075 let isl_rs_result = Set { ptr: isl_rs_result,
1076 should_free_on_drop: true };
1077 isl_rs_result
1078 }
1079
1080 pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> Set {
1082 let set = self;
1083 let mut set = set;
1084 set.do_not_free_on_drop();
1085 let set = set.ptr;
1086 let mut v = v;
1087 v.do_not_free_on_drop();
1088 let v = v.ptr;
1089 let isl_rs_result = unsafe { isl_set_fix_val(set, type_, pos, v) };
1090 let isl_rs_result = Set { ptr: isl_rs_result,
1091 should_free_on_drop: true };
1092 isl_rs_result
1093 }
1094
1095 pub fn fix_dim_si(self, dim: u32, value: i32) -> Set {
1097 let set = self;
1098 let mut set = set;
1099 set.do_not_free_on_drop();
1100 let set = set.ptr;
1101 let isl_rs_result = unsafe { isl_set_fix_dim_si(set, dim, value) };
1102 let isl_rs_result = Set { ptr: isl_rs_result,
1103 should_free_on_drop: true };
1104 isl_rs_result
1105 }
1106
1107 pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> Set {
1109 let set = self;
1110 let mut set = set;
1111 set.do_not_free_on_drop();
1112 let set = set.ptr;
1113 let isl_rs_result = unsafe { isl_set_insert_dims(set, type_, pos, n) };
1114 let isl_rs_result = Set { ptr: isl_rs_result,
1115 should_free_on_drop: true };
1116 isl_rs_result
1117 }
1118
1119 pub fn add_dims(self, type_: DimType, n: u32) -> Set {
1121 let set = self;
1122 let mut set = set;
1123 set.do_not_free_on_drop();
1124 let set = set.ptr;
1125 let isl_rs_result = unsafe { isl_set_add_dims(set, type_, n) };
1126 let isl_rs_result = Set { ptr: isl_rs_result,
1127 should_free_on_drop: true };
1128 isl_rs_result
1129 }
1130
1131 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1133 n: u32)
1134 -> Set {
1135 let set = self;
1136 let mut set = set;
1137 set.do_not_free_on_drop();
1138 let set = set.ptr;
1139 let isl_rs_result =
1140 unsafe { isl_set_move_dims(set, dst_type, dst_pos, src_type, src_pos, n) };
1141 let isl_rs_result = Set { ptr: isl_rs_result,
1142 should_free_on_drop: true };
1143 isl_rs_result
1144 }
1145
1146 pub fn project_out_param_id(self, id: Id) -> Set {
1148 let set = self;
1149 let mut set = set;
1150 set.do_not_free_on_drop();
1151 let set = set.ptr;
1152 let mut id = id;
1153 id.do_not_free_on_drop();
1154 let id = id.ptr;
1155 let isl_rs_result = unsafe { isl_set_project_out_param_id(set, id) };
1156 let isl_rs_result = Set { ptr: isl_rs_result,
1157 should_free_on_drop: true };
1158 isl_rs_result
1159 }
1160
1161 pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Set {
1163 let set = self;
1164 let mut set = set;
1165 set.do_not_free_on_drop();
1166 let set = set.ptr;
1167 let isl_rs_result = unsafe { isl_set_project_out(set, type_, first, n) };
1168 let isl_rs_result = Set { ptr: isl_rs_result,
1169 should_free_on_drop: true };
1170 isl_rs_result
1171 }
1172
1173 pub fn project_out_all_params(self) -> Set {
1175 let set = self;
1176 let mut set = set;
1177 set.do_not_free_on_drop();
1178 let set = set.ptr;
1179 let isl_rs_result = unsafe { isl_set_project_out_all_params(set) };
1180 let isl_rs_result = Set { ptr: isl_rs_result,
1181 should_free_on_drop: true };
1182 isl_rs_result
1183 }
1184
1185 pub fn project_onto_map(self, type_: DimType, first: u32, n: u32) -> Map {
1187 let set = self;
1188 let mut set = set;
1189 set.do_not_free_on_drop();
1190 let set = set.ptr;
1191 let isl_rs_result = unsafe { isl_set_project_onto_map(set, type_, first, n) };
1192 let isl_rs_result = Map { ptr: isl_rs_result,
1193 should_free_on_drop: true };
1194 isl_rs_result
1195 }
1196
1197 pub fn eliminate(self, type_: DimType, first: u32, n: u32) -> Set {
1199 let set = self;
1200 let mut set = set;
1201 set.do_not_free_on_drop();
1202 let set = set.ptr;
1203 let isl_rs_result = unsafe { isl_set_eliminate(set, type_, first, n) };
1204 let isl_rs_result = Set { ptr: isl_rs_result,
1205 should_free_on_drop: true };
1206 isl_rs_result
1207 }
1208
1209 pub fn eliminate_dims(self, first: u32, n: u32) -> Set {
1211 let set = self;
1212 let mut set = set;
1213 set.do_not_free_on_drop();
1214 let set = set.ptr;
1215 let isl_rs_result = unsafe { isl_set_eliminate_dims(set, first, n) };
1216 let isl_rs_result = Set { ptr: isl_rs_result,
1217 should_free_on_drop: true };
1218 isl_rs_result
1219 }
1220
1221 pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> Set {
1223 let bset = self;
1224 let mut bset = bset;
1225 bset.do_not_free_on_drop();
1226 let bset = bset.ptr;
1227 let isl_rs_result = unsafe { isl_set_remove_dims(bset, type_, first, n) };
1228 let isl_rs_result = Set { ptr: isl_rs_result,
1229 should_free_on_drop: true };
1230 isl_rs_result
1231 }
1232
1233 pub fn remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32) -> Set {
1235 let set = self;
1236 let mut set = set;
1237 set.do_not_free_on_drop();
1238 let set = set.ptr;
1239 let isl_rs_result = unsafe { isl_set_remove_divs_involving_dims(set, type_, first, n) };
1240 let isl_rs_result = Set { ptr: isl_rs_result,
1241 should_free_on_drop: true };
1242 isl_rs_result
1243 }
1244
1245 pub fn remove_unknown_divs(self) -> Set {
1247 let set = self;
1248 let mut set = set;
1249 set.do_not_free_on_drop();
1250 let set = set.ptr;
1251 let isl_rs_result = unsafe { isl_set_remove_unknown_divs(set) };
1252 let isl_rs_result = Set { ptr: isl_rs_result,
1253 should_free_on_drop: true };
1254 isl_rs_result
1255 }
1256
1257 pub fn remove_divs(self) -> Set {
1259 let set = self;
1260 let mut set = set;
1261 set.do_not_free_on_drop();
1262 let set = set.ptr;
1263 let isl_rs_result = unsafe { isl_set_remove_divs(set) };
1264 let isl_rs_result = Set { ptr: isl_rs_result,
1265 should_free_on_drop: true };
1266 isl_rs_result
1267 }
1268
1269 pub fn split_dims(self, type_: DimType, first: u32, n: u32) -> Set {
1271 let set = self;
1272 let mut set = set;
1273 set.do_not_free_on_drop();
1274 let set = set.ptr;
1275 let isl_rs_result = unsafe { isl_set_split_dims(set, type_, first, n) };
1276 let isl_rs_result = Set { ptr: isl_rs_result,
1277 should_free_on_drop: true };
1278 isl_rs_result
1279 }
1280
1281 pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32) -> Set {
1283 let set = self;
1284 let mut set = set;
1285 set.do_not_free_on_drop();
1286 let set = set.ptr;
1287 let isl_rs_result =
1288 unsafe { isl_set_drop_constraints_involving_dims(set, type_, first, n) };
1289 let isl_rs_result = Set { ptr: isl_rs_result,
1290 should_free_on_drop: true };
1291 isl_rs_result
1292 }
1293
1294 pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32) -> Set {
1296 let set = self;
1297 let mut set = set;
1298 set.do_not_free_on_drop();
1299 let set = set.ptr;
1300 let isl_rs_result =
1301 unsafe { isl_set_drop_constraints_not_involving_dims(set, type_, first, n) };
1302 let isl_rs_result = Set { ptr: isl_rs_result,
1303 should_free_on_drop: true };
1304 isl_rs_result
1305 }
1306
1307 pub fn involves_locals(&self) -> bool {
1309 let set = self;
1310 let set = set.ptr;
1311 let isl_rs_result = unsafe { isl_set_involves_locals(set) };
1312 let isl_rs_result = match isl_rs_result {
1313 0 => false,
1314 1 => true,
1315 _ => panic!("Got isl_bool = -1"),
1316 };
1317 isl_rs_result
1318 }
1319
1320 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> bool {
1322 let set = self;
1323 let set = set.ptr;
1324 let isl_rs_result = unsafe { isl_set_involves_dims(set, type_, first, n) };
1325 let isl_rs_result = match isl_rs_result {
1326 0 => false,
1327 1 => true,
1328 _ => panic!("Got isl_bool = -1"),
1329 };
1330 isl_rs_result
1331 }
1332
1333 pub fn plain_is_empty(&self) -> bool {
1335 let set = self;
1336 let set = set.ptr;
1337 let isl_rs_result = unsafe { isl_set_plain_is_empty(set) };
1338 let isl_rs_result = match isl_rs_result {
1339 0 => false,
1340 1 => true,
1341 _ => panic!("Got isl_bool = -1"),
1342 };
1343 isl_rs_result
1344 }
1345
1346 pub fn plain_is_universe(&self) -> bool {
1348 let set = self;
1349 let set = set.ptr;
1350 let isl_rs_result = unsafe { isl_set_plain_is_universe(set) };
1351 let isl_rs_result = match isl_rs_result {
1352 0 => false,
1353 1 => true,
1354 _ => panic!("Got isl_bool = -1"),
1355 };
1356 isl_rs_result
1357 }
1358
1359 pub fn is_params(&self) -> bool {
1361 let set = self;
1362 let set = set.ptr;
1363 let isl_rs_result = unsafe { isl_set_is_params(set) };
1364 let isl_rs_result = match isl_rs_result {
1365 0 => false,
1366 1 => true,
1367 _ => panic!("Got isl_bool = -1"),
1368 };
1369 isl_rs_result
1370 }
1371
1372 pub fn is_empty(&self) -> bool {
1374 let set = self;
1375 let set = set.ptr;
1376 let isl_rs_result = unsafe { isl_set_is_empty(set) };
1377 let isl_rs_result = match isl_rs_result {
1378 0 => false,
1379 1 => true,
1380 _ => panic!("Got isl_bool = -1"),
1381 };
1382 isl_rs_result
1383 }
1384
1385 pub fn is_bounded(&self) -> bool {
1387 let set = self;
1388 let set = set.ptr;
1389 let isl_rs_result = unsafe { isl_set_is_bounded(set) };
1390 let isl_rs_result = match isl_rs_result {
1391 0 => false,
1392 1 => true,
1393 _ => panic!("Got isl_bool = -1"),
1394 };
1395 isl_rs_result
1396 }
1397
1398 pub fn is_subset(&self, set2: &Set) -> bool {
1400 let set1 = self;
1401 let set1 = set1.ptr;
1402 let set2 = set2.ptr;
1403 let isl_rs_result = unsafe { isl_set_is_subset(set1, set2) };
1404 let isl_rs_result = match isl_rs_result {
1405 0 => false,
1406 1 => true,
1407 _ => panic!("Got isl_bool = -1"),
1408 };
1409 isl_rs_result
1410 }
1411
1412 pub fn is_strict_subset(&self, set2: &Set) -> bool {
1414 let set1 = self;
1415 let set1 = set1.ptr;
1416 let set2 = set2.ptr;
1417 let isl_rs_result = unsafe { isl_set_is_strict_subset(set1, set2) };
1418 let isl_rs_result = match isl_rs_result {
1419 0 => false,
1420 1 => true,
1421 _ => panic!("Got isl_bool = -1"),
1422 };
1423 isl_rs_result
1424 }
1425
1426 pub fn is_equal(&self, set2: &Set) -> bool {
1428 let set1 = self;
1429 let set1 = set1.ptr;
1430 let set2 = set2.ptr;
1431 let isl_rs_result = unsafe { isl_set_is_equal(set1, set2) };
1432 let isl_rs_result = match isl_rs_result {
1433 0 => false,
1434 1 => true,
1435 _ => panic!("Got isl_bool = -1"),
1436 };
1437 isl_rs_result
1438 }
1439
1440 pub fn is_disjoint(&self, set2: &Set) -> bool {
1442 let set1 = self;
1443 let set1 = set1.ptr;
1444 let set2 = set2.ptr;
1445 let isl_rs_result = unsafe { isl_set_is_disjoint(set1, set2) };
1446 let isl_rs_result = match isl_rs_result {
1447 0 => false,
1448 1 => true,
1449 _ => panic!("Got isl_bool = -1"),
1450 };
1451 isl_rs_result
1452 }
1453
1454 pub fn is_singleton(&self) -> bool {
1456 let set = self;
1457 let set = set.ptr;
1458 let isl_rs_result = unsafe { isl_set_is_singleton(set) };
1459 let isl_rs_result = match isl_rs_result {
1460 0 => false,
1461 1 => true,
1462 _ => panic!("Got isl_bool = -1"),
1463 };
1464 isl_rs_result
1465 }
1466
1467 pub fn is_box(&self) -> bool {
1469 let set = self;
1470 let set = set.ptr;
1471 let isl_rs_result = unsafe { isl_set_is_box(set) };
1472 let isl_rs_result = match isl_rs_result {
1473 0 => false,
1474 1 => true,
1475 _ => panic!("Got isl_bool = -1"),
1476 };
1477 isl_rs_result
1478 }
1479
1480 pub fn has_equal_space(&self, set2: &Set) -> bool {
1482 let set1 = self;
1483 let set1 = set1.ptr;
1484 let set2 = set2.ptr;
1485 let isl_rs_result = unsafe { isl_set_has_equal_space(set1, set2) };
1486 let isl_rs_result = match isl_rs_result {
1487 0 => false,
1488 1 => true,
1489 _ => panic!("Got isl_bool = -1"),
1490 };
1491 isl_rs_result
1492 }
1493
1494 pub fn sum(self, set2: Set) -> Set {
1496 let set1 = self;
1497 let mut set1 = set1;
1498 set1.do_not_free_on_drop();
1499 let set1 = set1.ptr;
1500 let mut set2 = set2;
1501 set2.do_not_free_on_drop();
1502 let set2 = set2.ptr;
1503 let isl_rs_result = unsafe { isl_set_sum(set1, set2) };
1504 let isl_rs_result = Set { ptr: isl_rs_result,
1505 should_free_on_drop: true };
1506 isl_rs_result
1507 }
1508
1509 pub fn neg(self) -> Set {
1511 let set = self;
1512 let mut set = set;
1513 set.do_not_free_on_drop();
1514 let set = set.ptr;
1515 let isl_rs_result = unsafe { isl_set_neg(set) };
1516 let isl_rs_result = Set { ptr: isl_rs_result,
1517 should_free_on_drop: true };
1518 isl_rs_result
1519 }
1520
1521 pub fn make_disjoint(self) -> Set {
1523 let set = self;
1524 let mut set = set;
1525 set.do_not_free_on_drop();
1526 let set = set.ptr;
1527 let isl_rs_result = unsafe { isl_set_make_disjoint(set) };
1528 let isl_rs_result = Set { ptr: isl_rs_result,
1529 should_free_on_drop: true };
1530 isl_rs_result
1531 }
1532
1533 pub fn compute_divs(self) -> Set {
1535 let set = self;
1536 let mut set = set;
1537 set.do_not_free_on_drop();
1538 let set = set.ptr;
1539 let isl_rs_result = unsafe { isl_set_compute_divs(set) };
1540 let isl_rs_result = Set { ptr: isl_rs_result,
1541 should_free_on_drop: true };
1542 isl_rs_result
1543 }
1544
1545 pub fn align_divs(self) -> Set {
1547 let set = self;
1548 let mut set = set;
1549 set.do_not_free_on_drop();
1550 let set = set.ptr;
1551 let isl_rs_result = unsafe { isl_set_align_divs(set) };
1552 let isl_rs_result = Set { ptr: isl_rs_result,
1553 should_free_on_drop: true };
1554 isl_rs_result
1555 }
1556
1557 pub fn plain_get_val_if_fixed(&self, type_: DimType, pos: u32) -> Val {
1559 let set = self;
1560 let set = set.ptr;
1561 let isl_rs_result = unsafe { isl_set_plain_get_val_if_fixed(set, type_, pos) };
1562 let isl_rs_result = Val { ptr: isl_rs_result,
1563 should_free_on_drop: true };
1564 isl_rs_result
1565 }
1566
1567 pub fn dim_is_bounded(&self, type_: DimType, pos: u32) -> bool {
1569 let set = self;
1570 let set = set.ptr;
1571 let isl_rs_result = unsafe { isl_set_dim_is_bounded(set, type_, pos) };
1572 let isl_rs_result = match isl_rs_result {
1573 0 => false,
1574 1 => true,
1575 _ => panic!("Got isl_bool = -1"),
1576 };
1577 isl_rs_result
1578 }
1579
1580 pub fn dim_has_lower_bound(&self, type_: DimType, pos: u32) -> bool {
1582 let set = self;
1583 let set = set.ptr;
1584 let isl_rs_result = unsafe { isl_set_dim_has_lower_bound(set, type_, pos) };
1585 let isl_rs_result = match isl_rs_result {
1586 0 => false,
1587 1 => true,
1588 _ => panic!("Got isl_bool = -1"),
1589 };
1590 isl_rs_result
1591 }
1592
1593 pub fn dim_has_upper_bound(&self, type_: DimType, pos: u32) -> bool {
1595 let set = self;
1596 let set = set.ptr;
1597 let isl_rs_result = unsafe { isl_set_dim_has_upper_bound(set, type_, pos) };
1598 let isl_rs_result = match isl_rs_result {
1599 0 => false,
1600 1 => true,
1601 _ => panic!("Got isl_bool = -1"),
1602 };
1603 isl_rs_result
1604 }
1605
1606 pub fn dim_has_any_lower_bound(&self, type_: DimType, pos: u32) -> bool {
1608 let set = self;
1609 let set = set.ptr;
1610 let isl_rs_result = unsafe { isl_set_dim_has_any_lower_bound(set, type_, pos) };
1611 let isl_rs_result = match isl_rs_result {
1612 0 => false,
1613 1 => true,
1614 _ => panic!("Got isl_bool = -1"),
1615 };
1616 isl_rs_result
1617 }
1618
1619 pub fn dim_has_any_upper_bound(&self, type_: DimType, pos: u32) -> bool {
1621 let set = self;
1622 let set = set.ptr;
1623 let isl_rs_result = unsafe { isl_set_dim_has_any_upper_bound(set, type_, pos) };
1624 let isl_rs_result = match isl_rs_result {
1625 0 => false,
1626 1 => true,
1627 _ => panic!("Got isl_bool = -1"),
1628 };
1629 isl_rs_result
1630 }
1631
1632 pub fn gist_basic_set(self, context: BasicSet) -> Set {
1634 let set = self;
1635 let mut set = set;
1636 set.do_not_free_on_drop();
1637 let set = set.ptr;
1638 let mut context = context;
1639 context.do_not_free_on_drop();
1640 let context = context.ptr;
1641 let isl_rs_result = unsafe { isl_set_gist_basic_set(set, context) };
1642 let isl_rs_result = Set { ptr: isl_rs_result,
1643 should_free_on_drop: true };
1644 isl_rs_result
1645 }
1646
1647 pub fn gist(self, context: Set) -> Set {
1649 let set = self;
1650 let mut set = set;
1651 set.do_not_free_on_drop();
1652 let set = set.ptr;
1653 let mut context = context;
1654 context.do_not_free_on_drop();
1655 let context = context.ptr;
1656 let isl_rs_result = unsafe { isl_set_gist(set, context) };
1657 let isl_rs_result = Set { ptr: isl_rs_result,
1658 should_free_on_drop: true };
1659 isl_rs_result
1660 }
1661
1662 pub fn gist_params(self, context: Set) -> Set {
1664 let set = self;
1665 let mut set = set;
1666 set.do_not_free_on_drop();
1667 let set = set.ptr;
1668 let mut context = context;
1669 context.do_not_free_on_drop();
1670 let context = context.ptr;
1671 let isl_rs_result = unsafe { isl_set_gist_params(set, context) };
1672 let isl_rs_result = Set { ptr: isl_rs_result,
1673 should_free_on_drop: true };
1674 isl_rs_result
1675 }
1676
1677 pub fn get_stride_info(&self, pos: i32) -> StrideInfo {
1679 let set = self;
1680 let set = set.ptr;
1681 let isl_rs_result = unsafe { isl_set_get_stride_info(set, pos) };
1682 let isl_rs_result = StrideInfo { ptr: isl_rs_result,
1683 should_free_on_drop: true };
1684 isl_rs_result
1685 }
1686
1687 pub fn get_stride(&self, pos: i32) -> Val {
1689 let set = self;
1690 let set = set.ptr;
1691 let isl_rs_result = unsafe { isl_set_get_stride(set, pos) };
1692 let isl_rs_result = Val { ptr: isl_rs_result,
1693 should_free_on_drop: true };
1694 isl_rs_result
1695 }
1696
1697 pub fn get_lattice_tile(&self) -> FixedBox {
1699 let set = self;
1700 let set = set.ptr;
1701 let isl_rs_result = unsafe { isl_set_get_lattice_tile(set) };
1702 let isl_rs_result = FixedBox { ptr: isl_rs_result,
1703 should_free_on_drop: true };
1704 isl_rs_result
1705 }
1706
1707 pub fn get_simple_fixed_box_hull(&self) -> FixedBox {
1709 let set = self;
1710 let set = set.ptr;
1711 let isl_rs_result = unsafe { isl_set_get_simple_fixed_box_hull(set) };
1712 let isl_rs_result = FixedBox { ptr: isl_rs_result,
1713 should_free_on_drop: true };
1714 isl_rs_result
1715 }
1716
1717 pub fn coalesce(self) -> Set {
1719 let set = self;
1720 let mut set = set;
1721 set.do_not_free_on_drop();
1722 let set = set.ptr;
1723 let isl_rs_result = unsafe { isl_set_coalesce(set) };
1724 let isl_rs_result = Set { ptr: isl_rs_result,
1725 should_free_on_drop: true };
1726 isl_rs_result
1727 }
1728
1729 pub fn plain_cmp(&self, set2: &Set) -> i32 {
1731 let set1 = self;
1732 let set1 = set1.ptr;
1733 let set2 = set2.ptr;
1734 let isl_rs_result = unsafe { isl_set_plain_cmp(set1, set2) };
1735 isl_rs_result
1736 }
1737
1738 pub fn plain_is_equal(&self, set2: &Set) -> bool {
1740 let set1 = self;
1741 let set1 = set1.ptr;
1742 let set2 = set2.ptr;
1743 let isl_rs_result = unsafe { isl_set_plain_is_equal(set1, set2) };
1744 let isl_rs_result = match isl_rs_result {
1745 0 => false,
1746 1 => true,
1747 _ => panic!("Got isl_bool = -1"),
1748 };
1749 isl_rs_result
1750 }
1751
1752 pub fn plain_is_disjoint(&self, set2: &Set) -> bool {
1754 let set1 = self;
1755 let set1 = set1.ptr;
1756 let set2 = set2.ptr;
1757 let isl_rs_result = unsafe { isl_set_plain_is_disjoint(set1, set2) };
1758 let isl_rs_result = match isl_rs_result {
1759 0 => false,
1760 1 => true,
1761 _ => panic!("Got isl_bool = -1"),
1762 };
1763 isl_rs_result
1764 }
1765
1766 pub fn get_hash(&self) -> u32 {
1768 let set = self;
1769 let set = set.ptr;
1770 let isl_rs_result = unsafe { isl_set_get_hash(set) };
1771 isl_rs_result
1772 }
1773
1774 pub fn n_basic_set(&self) -> i32 {
1776 let set = self;
1777 let set = set.ptr;
1778 let isl_rs_result = unsafe { isl_set_n_basic_set(set) };
1779 isl_rs_result
1780 }
1781
1782 pub fn count_val(&self) -> Val {
1784 let set = self;
1785 let set = set.ptr;
1786 let isl_rs_result = unsafe { isl_set_count_val(set) };
1787 let isl_rs_result = Val { ptr: isl_rs_result,
1788 should_free_on_drop: true };
1789 isl_rs_result
1790 }
1791
1792 pub fn from_point(pnt: Point) -> Set {
1794 let mut pnt = pnt;
1795 pnt.do_not_free_on_drop();
1796 let pnt = pnt.ptr;
1797 let isl_rs_result = unsafe { isl_set_from_point(pnt) };
1798 let isl_rs_result = Set { ptr: isl_rs_result,
1799 should_free_on_drop: true };
1800 isl_rs_result
1801 }
1802
1803 pub fn box_from_points(pnt1: Point, pnt2: Point) -> Set {
1805 let mut pnt1 = pnt1;
1806 pnt1.do_not_free_on_drop();
1807 let pnt1 = pnt1.ptr;
1808 let mut pnt2 = pnt2;
1809 pnt2.do_not_free_on_drop();
1810 let pnt2 = pnt2.ptr;
1811 let isl_rs_result = unsafe { isl_set_box_from_points(pnt1, pnt2) };
1812 let isl_rs_result = Set { ptr: isl_rs_result,
1813 should_free_on_drop: true };
1814 isl_rs_result
1815 }
1816
1817 pub fn lift(self) -> Set {
1819 let set = self;
1820 let mut set = set;
1821 set.do_not_free_on_drop();
1822 let set = set.ptr;
1823 let isl_rs_result = unsafe { isl_set_lift(set) };
1824 let isl_rs_result = Set { ptr: isl_rs_result,
1825 should_free_on_drop: true };
1826 isl_rs_result
1827 }
1828
1829 pub fn lex_le_set(self, set2: Set) -> Map {
1831 let set1 = self;
1832 let mut set1 = set1;
1833 set1.do_not_free_on_drop();
1834 let set1 = set1.ptr;
1835 let mut set2 = set2;
1836 set2.do_not_free_on_drop();
1837 let set2 = set2.ptr;
1838 let isl_rs_result = unsafe { isl_set_lex_le_set(set1, set2) };
1839 let isl_rs_result = Map { ptr: isl_rs_result,
1840 should_free_on_drop: true };
1841 isl_rs_result
1842 }
1843
1844 pub fn lex_lt_set(self, set2: Set) -> Map {
1846 let set1 = self;
1847 let mut set1 = set1;
1848 set1.do_not_free_on_drop();
1849 let set1 = set1.ptr;
1850 let mut set2 = set2;
1851 set2.do_not_free_on_drop();
1852 let set2 = set2.ptr;
1853 let isl_rs_result = unsafe { isl_set_lex_lt_set(set1, set2) };
1854 let isl_rs_result = Map { ptr: isl_rs_result,
1855 should_free_on_drop: true };
1856 isl_rs_result
1857 }
1858
1859 pub fn lex_ge_set(self, set2: Set) -> Map {
1861 let set1 = self;
1862 let mut set1 = set1;
1863 set1.do_not_free_on_drop();
1864 let set1 = set1.ptr;
1865 let mut set2 = set2;
1866 set2.do_not_free_on_drop();
1867 let set2 = set2.ptr;
1868 let isl_rs_result = unsafe { isl_set_lex_ge_set(set1, set2) };
1869 let isl_rs_result = Map { ptr: isl_rs_result,
1870 should_free_on_drop: true };
1871 isl_rs_result
1872 }
1873
1874 pub fn lex_gt_set(self, set2: Set) -> Map {
1876 let set1 = self;
1877 let mut set1 = set1;
1878 set1.do_not_free_on_drop();
1879 let set1 = set1.ptr;
1880 let mut set2 = set2;
1881 set2.do_not_free_on_drop();
1882 let set2 = set2.ptr;
1883 let isl_rs_result = unsafe { isl_set_lex_gt_set(set1, set2) };
1884 let isl_rs_result = Map { ptr: isl_rs_result,
1885 should_free_on_drop: true };
1886 isl_rs_result
1887 }
1888
1889 pub fn size(&self) -> i32 {
1891 let set = self;
1892 let set = set.ptr;
1893 let isl_rs_result = unsafe { isl_set_size(set) };
1894 isl_rs_result
1895 }
1896
1897 pub fn align_params(self, model: Space) -> Set {
1899 let set = self;
1900 let mut set = set;
1901 set.do_not_free_on_drop();
1902 let set = set.ptr;
1903 let mut model = model;
1904 model.do_not_free_on_drop();
1905 let model = model.ptr;
1906 let isl_rs_result = unsafe { isl_set_align_params(set, model) };
1907 let isl_rs_result = Set { ptr: isl_rs_result,
1908 should_free_on_drop: true };
1909 isl_rs_result
1910 }
1911
1912 pub fn drop_unused_params(self) -> Set {
1914 let set = self;
1915 let mut set = set;
1916 set.do_not_free_on_drop();
1917 let set = set.ptr;
1918 let isl_rs_result = unsafe { isl_set_drop_unused_params(set) };
1919 let isl_rs_result = Set { ptr: isl_rs_result,
1920 should_free_on_drop: true };
1921 isl_rs_result
1922 }
1923
1924 pub fn coefficients(self) -> BasicSet {
1926 let set = self;
1927 let mut set = set;
1928 set.do_not_free_on_drop();
1929 let set = set.ptr;
1930 let isl_rs_result = unsafe { isl_set_coefficients(set) };
1931 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1932 should_free_on_drop: true };
1933 isl_rs_result
1934 }
1935
1936 pub fn solutions(self) -> BasicSet {
1938 let set = self;
1939 let mut set = set;
1940 set.do_not_free_on_drop();
1941 let set = set.ptr;
1942 let isl_rs_result = unsafe { isl_set_solutions(set) };
1943 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1944 should_free_on_drop: true };
1945 isl_rs_result
1946 }
1947
1948 pub fn dim_max(self, pos: i32) -> PwAff {
1950 let set = self;
1951 let mut set = set;
1952 set.do_not_free_on_drop();
1953 let set = set.ptr;
1954 let isl_rs_result = unsafe { isl_set_dim_max(set, pos) };
1955 let isl_rs_result = PwAff { ptr: isl_rs_result,
1956 should_free_on_drop: true };
1957 isl_rs_result
1958 }
1959
1960 pub fn dim_min(self, pos: i32) -> PwAff {
1962 let set = self;
1963 let mut set = set;
1964 set.do_not_free_on_drop();
1965 let set = set.ptr;
1966 let isl_rs_result = unsafe { isl_set_dim_min(set, pos) };
1967 let isl_rs_result = PwAff { ptr: isl_rs_result,
1968 should_free_on_drop: true };
1969 isl_rs_result
1970 }
1971
1972 pub fn to_str(&self) -> &str {
1974 let set = self;
1975 let set = set.ptr;
1976 let isl_rs_result = unsafe { isl_set_to_str(set) };
1977 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1978 let isl_rs_result = isl_rs_result.to_str().unwrap();
1979 isl_rs_result
1980 }
1981
1982 pub fn do_not_free_on_drop(&mut self) {
1984 self.should_free_on_drop = false;
1985 }
1986}
1987
1988impl Drop for Set {
1989 fn drop(&mut self) {
1990 if self.should_free_on_drop {
1991 unsafe {
1992 isl_set_free(self.ptr);
1993 }
1994 }
1995 }
1996}