1use crate::bindings::{
5 Aff, BasicMap, Context, DimType, Id, LocalSpace, Mat, Point, Set, Space, Val,
6};
7use libc::uintptr_t;
8use std::ffi::{CStr, CString};
9use std::os::raw::c_char;
10
11pub struct BasicSet {
13 pub ptr: uintptr_t,
14 pub should_free_on_drop: bool,
15}
16
17extern "C" {
18
19 fn isl_basic_set_dim(bset: uintptr_t, type_: DimType) -> i32;
20
21 fn isl_basic_set_n_dim(bset: uintptr_t) -> i32;
22
23 fn isl_basic_set_n_param(bset: uintptr_t) -> i32;
24
25 fn isl_basic_set_total_dim(bset: uintptr_t) -> i32;
26
27 fn isl_basic_set_get_ctx(bset: uintptr_t) -> uintptr_t;
28
29 fn isl_basic_set_get_space(bset: uintptr_t) -> uintptr_t;
30
31 fn isl_basic_set_get_div(bset: uintptr_t, pos: i32) -> uintptr_t;
32
33 fn isl_basic_set_get_local_space(bset: uintptr_t) -> uintptr_t;
34
35 fn isl_basic_set_get_tuple_name(bset: uintptr_t) -> *const c_char;
36
37 fn isl_basic_set_set_tuple_name(set: uintptr_t, s: *const c_char) -> uintptr_t;
38
39 fn isl_basic_set_get_dim_name(bset: uintptr_t, type_: DimType, pos: u32) -> *const c_char;
40
41 fn isl_basic_set_set_dim_name(bset: uintptr_t, type_: DimType, pos: u32, s: *const c_char)
42 -> uintptr_t;
43
44 fn isl_basic_set_get_dim_id(bset: uintptr_t, type_: DimType, pos: u32) -> uintptr_t;
45
46 fn isl_basic_set_set_tuple_id(bset: uintptr_t, id: uintptr_t) -> uintptr_t;
47
48 fn isl_basic_set_is_rational(bset: uintptr_t) -> i32;
49
50 fn isl_basic_set_free(bset: uintptr_t) -> uintptr_t;
51
52 fn isl_basic_set_copy(bset: uintptr_t) -> uintptr_t;
53
54 fn isl_basic_set_empty(space: uintptr_t) -> uintptr_t;
55
56 fn isl_basic_set_universe(space: uintptr_t) -> uintptr_t;
57
58 fn isl_basic_set_nat_universe(space: uintptr_t) -> uintptr_t;
59
60 fn isl_basic_set_positive_orthant(space: uintptr_t) -> uintptr_t;
61
62 fn isl_basic_set_intersect(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
63
64 fn isl_basic_set_intersect_params(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
65
66 fn isl_basic_set_apply(bset: uintptr_t, bmap: uintptr_t) -> uintptr_t;
67
68 fn isl_basic_set_affine_hull(bset: uintptr_t) -> uintptr_t;
69
70 fn isl_basic_set_remove_dims(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
71
72 fn isl_basic_set_sample(bset: uintptr_t) -> uintptr_t;
73
74 fn isl_basic_set_detect_equalities(bset: uintptr_t) -> uintptr_t;
75
76 fn isl_basic_set_remove_redundancies(bset: uintptr_t) -> uintptr_t;
77
78 fn isl_basic_set_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
79
80 fn isl_basic_set_dump(bset: uintptr_t);
81
82 fn isl_basic_set_fix_si(bset: uintptr_t, type_: DimType, pos: u32, value: i32) -> uintptr_t;
83
84 fn isl_basic_set_fix_val(bset: uintptr_t, type_: DimType, pos: u32, v: uintptr_t) -> uintptr_t;
85
86 fn isl_basic_set_lower_bound_val(bset: uintptr_t, type_: DimType, pos: u32, value: uintptr_t)
87 -> uintptr_t;
88
89 fn isl_basic_set_upper_bound_val(bset: uintptr_t, type_: DimType, pos: u32, value: uintptr_t)
90 -> uintptr_t;
91
92 fn isl_basic_set_is_equal(bset1: uintptr_t, bset2: uintptr_t) -> i32;
93
94 fn isl_basic_set_is_disjoint(bset1: uintptr_t, bset2: uintptr_t) -> i32;
95
96 fn isl_basic_set_lexmin(bset: uintptr_t) -> uintptr_t;
97
98 fn isl_basic_set_lexmax(bset: uintptr_t) -> uintptr_t;
99
100 fn isl_basic_set_union(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
101
102 fn isl_basic_set_compare_at(bset1: uintptr_t, bset2: uintptr_t, pos: i32) -> i32;
103
104 fn isl_basic_set_params(bset: uintptr_t) -> uintptr_t;
105
106 fn isl_basic_set_from_params(bset: uintptr_t) -> uintptr_t;
107
108 fn isl_basic_set_plain_is_universe(bset: uintptr_t) -> i32;
109
110 fn isl_basic_set_is_universe(bset: uintptr_t) -> i32;
111
112 fn isl_basic_set_plain_is_empty(bset: uintptr_t) -> i32;
113
114 fn isl_basic_set_is_empty(bset: uintptr_t) -> i32;
115
116 fn isl_basic_set_is_bounded(bset: uintptr_t) -> i32;
117
118 fn isl_basic_set_is_subset(bset1: uintptr_t, bset2: uintptr_t) -> i32;
119
120 fn isl_basic_set_plain_is_equal(bset1: uintptr_t, bset2: uintptr_t) -> i32;
121
122 fn isl_basic_set_to_set(bset: uintptr_t) -> uintptr_t;
123
124 fn isl_basic_set_sample_point(bset: uintptr_t) -> uintptr_t;
125
126 fn isl_basic_set_flat_product(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
127
128 fn isl_basic_set_insert_dims(bset: uintptr_t, type_: DimType, pos: u32, n: u32) -> uintptr_t;
129
130 fn isl_basic_set_add_dims(bset: uintptr_t, type_: DimType, n: u32) -> uintptr_t;
131
132 fn isl_basic_set_move_dims(bset: uintptr_t, dst_type: DimType, dst_pos: u32,
133 src_type: DimType, src_pos: u32, n: u32)
134 -> uintptr_t;
135
136 fn isl_basic_set_project_out(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
137
138 fn isl_basic_set_remove_divs(bset: uintptr_t) -> uintptr_t;
139
140 fn isl_basic_set_eliminate(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> uintptr_t;
141
142 fn isl_basic_set_remove_divs_involving_dims(bset: uintptr_t, type_: DimType, first: u32,
143 n: u32)
144 -> uintptr_t;
145
146 fn isl_basic_set_remove_unknown_divs(bset: uintptr_t) -> uintptr_t;
147
148 fn isl_basic_set_drop_constraints_involving_dims(bset: uintptr_t, type_: DimType, first: u32,
149 n: u32)
150 -> uintptr_t;
151
152 fn isl_basic_set_drop_constraints_not_involving_dims(bset: uintptr_t, type_: DimType,
153 first: u32, n: u32)
154 -> uintptr_t;
155
156 fn isl_basic_set_involves_dims(bset: uintptr_t, type_: DimType, first: u32, n: u32) -> i32;
157
158 fn isl_basic_set_neg(bset: uintptr_t) -> uintptr_t;
159
160 fn isl_basic_set_compute_divs(bset: uintptr_t) -> uintptr_t;
161
162 fn isl_basic_set_gist(bset: uintptr_t, context: uintptr_t) -> uintptr_t;
163
164 fn isl_basic_set_from_point(pnt: uintptr_t) -> uintptr_t;
165
166 fn isl_basic_set_box_from_points(pnt1: uintptr_t, pnt2: uintptr_t) -> uintptr_t;
167
168 fn isl_basic_set_lift(bset: uintptr_t) -> uintptr_t;
169
170 fn isl_basic_set_align_params(bset: uintptr_t, model: uintptr_t) -> uintptr_t;
171
172 fn isl_basic_set_drop_unused_params(bset: uintptr_t) -> uintptr_t;
173
174 fn isl_basic_set_equalities_matrix(bset: uintptr_t, c1: DimType, c2: DimType, c3: DimType,
175 c4: DimType)
176 -> uintptr_t;
177
178 fn isl_basic_set_inequalities_matrix(bset: uintptr_t, c1: DimType, c2: DimType, c3: DimType,
179 c4: DimType)
180 -> uintptr_t;
181
182 fn isl_basic_set_from_constraint_matrices(space: uintptr_t, eq: uintptr_t, ineq: uintptr_t,
183 c1: DimType, c2: DimType, c3: DimType, c4: DimType)
184 -> uintptr_t;
185
186 fn isl_basic_set_reduced_basis(bset: uintptr_t) -> uintptr_t;
187
188 fn isl_basic_set_coefficients(bset: uintptr_t) -> uintptr_t;
189
190 fn isl_basic_set_solutions(bset: uintptr_t) -> uintptr_t;
191
192 fn isl_basic_set_to_str(bset: uintptr_t) -> *const c_char;
193
194}
195
196impl BasicSet {
197 pub fn dim(&self, type_: DimType) -> i32 {
199 let bset = self;
200 let bset = bset.ptr;
201 let isl_rs_result = unsafe { isl_basic_set_dim(bset, type_) };
202 isl_rs_result
203 }
204
205 pub fn n_dim(&self) -> i32 {
207 let bset = self;
208 let bset = bset.ptr;
209 let isl_rs_result = unsafe { isl_basic_set_n_dim(bset) };
210 isl_rs_result
211 }
212
213 pub fn n_param(&self) -> i32 {
215 let bset = self;
216 let bset = bset.ptr;
217 let isl_rs_result = unsafe { isl_basic_set_n_param(bset) };
218 isl_rs_result
219 }
220
221 pub fn total_dim(&self) -> i32 {
223 let bset = self;
224 let bset = bset.ptr;
225 let isl_rs_result = unsafe { isl_basic_set_total_dim(bset) };
226 isl_rs_result
227 }
228
229 pub fn get_ctx(&self) -> Context {
231 let bset = self;
232 let bset = bset.ptr;
233 let isl_rs_result = unsafe { isl_basic_set_get_ctx(bset) };
234 let isl_rs_result = Context { ptr: isl_rs_result,
235 should_free_on_drop: true };
236 let mut isl_rs_result = isl_rs_result;
237 isl_rs_result.do_not_free_on_drop();
238 isl_rs_result
239 }
240
241 pub fn get_space(&self) -> Space {
243 let bset = self;
244 let bset = bset.ptr;
245 let isl_rs_result = unsafe { isl_basic_set_get_space(bset) };
246 let isl_rs_result = Space { ptr: isl_rs_result,
247 should_free_on_drop: true };
248 isl_rs_result
249 }
250
251 pub fn get_div(&self, pos: i32) -> Aff {
253 let bset = self;
254 let bset = bset.ptr;
255 let isl_rs_result = unsafe { isl_basic_set_get_div(bset, pos) };
256 let isl_rs_result = Aff { ptr: isl_rs_result,
257 should_free_on_drop: true };
258 isl_rs_result
259 }
260
261 pub fn get_local_space(&self) -> LocalSpace {
263 let bset = self;
264 let bset = bset.ptr;
265 let isl_rs_result = unsafe { isl_basic_set_get_local_space(bset) };
266 let isl_rs_result = LocalSpace { ptr: isl_rs_result,
267 should_free_on_drop: true };
268 isl_rs_result
269 }
270
271 pub fn get_tuple_name(&self) -> &str {
273 let bset = self;
274 let bset = bset.ptr;
275 let isl_rs_result = unsafe { isl_basic_set_get_tuple_name(bset) };
276 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
277 let isl_rs_result = isl_rs_result.to_str().unwrap();
278 isl_rs_result
279 }
280
281 pub fn set_tuple_name(self, s: &str) -> BasicSet {
283 let set = self;
284 let mut set = set;
285 set.do_not_free_on_drop();
286 let set = set.ptr;
287 let s = CString::new(s).unwrap();
288 let s = s.as_ptr();
289 let isl_rs_result = unsafe { isl_basic_set_set_tuple_name(set, s) };
290 let isl_rs_result = BasicSet { ptr: isl_rs_result,
291 should_free_on_drop: true };
292 isl_rs_result
293 }
294
295 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> &str {
297 let bset = self;
298 let bset = bset.ptr;
299 let isl_rs_result = unsafe { isl_basic_set_get_dim_name(bset, type_, pos) };
300 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
301 let isl_rs_result = isl_rs_result.to_str().unwrap();
302 isl_rs_result
303 }
304
305 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> BasicSet {
307 let bset = self;
308 let mut bset = bset;
309 bset.do_not_free_on_drop();
310 let bset = bset.ptr;
311 let s = CString::new(s).unwrap();
312 let s = s.as_ptr();
313 let isl_rs_result = unsafe { isl_basic_set_set_dim_name(bset, type_, pos, s) };
314 let isl_rs_result = BasicSet { ptr: isl_rs_result,
315 should_free_on_drop: true };
316 isl_rs_result
317 }
318
319 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Id {
321 let bset = self;
322 let bset = bset.ptr;
323 let isl_rs_result = unsafe { isl_basic_set_get_dim_id(bset, type_, pos) };
324 let isl_rs_result = Id { ptr: isl_rs_result,
325 should_free_on_drop: true };
326 isl_rs_result
327 }
328
329 pub fn set_tuple_id(self, id: Id) -> BasicSet {
331 let bset = self;
332 let mut bset = bset;
333 bset.do_not_free_on_drop();
334 let bset = bset.ptr;
335 let mut id = id;
336 id.do_not_free_on_drop();
337 let id = id.ptr;
338 let isl_rs_result = unsafe { isl_basic_set_set_tuple_id(bset, id) };
339 let isl_rs_result = BasicSet { ptr: isl_rs_result,
340 should_free_on_drop: true };
341 isl_rs_result
342 }
343
344 pub fn is_rational(&self) -> i32 {
346 let bset = self;
347 let bset = bset.ptr;
348 let isl_rs_result = unsafe { isl_basic_set_is_rational(bset) };
349 isl_rs_result
350 }
351
352 pub fn free(self) -> BasicSet {
354 let bset = self;
355 let mut bset = bset;
356 bset.do_not_free_on_drop();
357 let bset = bset.ptr;
358 let isl_rs_result = unsafe { isl_basic_set_free(bset) };
359 let isl_rs_result = BasicSet { ptr: isl_rs_result,
360 should_free_on_drop: true };
361 isl_rs_result
362 }
363
364 pub fn copy(&self) -> BasicSet {
366 let bset = self;
367 let bset = bset.ptr;
368 let isl_rs_result = unsafe { isl_basic_set_copy(bset) };
369 let isl_rs_result = BasicSet { ptr: isl_rs_result,
370 should_free_on_drop: true };
371 isl_rs_result
372 }
373
374 pub fn empty(space: Space) -> BasicSet {
376 let mut space = space;
377 space.do_not_free_on_drop();
378 let space = space.ptr;
379 let isl_rs_result = unsafe { isl_basic_set_empty(space) };
380 let isl_rs_result = BasicSet { ptr: isl_rs_result,
381 should_free_on_drop: true };
382 isl_rs_result
383 }
384
385 pub fn universe(space: Space) -> BasicSet {
387 let mut space = space;
388 space.do_not_free_on_drop();
389 let space = space.ptr;
390 let isl_rs_result = unsafe { isl_basic_set_universe(space) };
391 let isl_rs_result = BasicSet { ptr: isl_rs_result,
392 should_free_on_drop: true };
393 isl_rs_result
394 }
395
396 pub fn nat_universe(space: Space) -> BasicSet {
398 let mut space = space;
399 space.do_not_free_on_drop();
400 let space = space.ptr;
401 let isl_rs_result = unsafe { isl_basic_set_nat_universe(space) };
402 let isl_rs_result = BasicSet { ptr: isl_rs_result,
403 should_free_on_drop: true };
404 isl_rs_result
405 }
406
407 pub fn positive_orthant(space: Space) -> BasicSet {
409 let mut space = space;
410 space.do_not_free_on_drop();
411 let space = space.ptr;
412 let isl_rs_result = unsafe { isl_basic_set_positive_orthant(space) };
413 let isl_rs_result = BasicSet { ptr: isl_rs_result,
414 should_free_on_drop: true };
415 isl_rs_result
416 }
417
418 pub fn intersect(self, bset2: BasicSet) -> BasicSet {
420 let bset1 = self;
421 let mut bset1 = bset1;
422 bset1.do_not_free_on_drop();
423 let bset1 = bset1.ptr;
424 let mut bset2 = bset2;
425 bset2.do_not_free_on_drop();
426 let bset2 = bset2.ptr;
427 let isl_rs_result = unsafe { isl_basic_set_intersect(bset1, bset2) };
428 let isl_rs_result = BasicSet { ptr: isl_rs_result,
429 should_free_on_drop: true };
430 isl_rs_result
431 }
432
433 pub fn intersect_params(self, bset2: BasicSet) -> BasicSet {
435 let bset1 = self;
436 let mut bset1 = bset1;
437 bset1.do_not_free_on_drop();
438 let bset1 = bset1.ptr;
439 let mut bset2 = bset2;
440 bset2.do_not_free_on_drop();
441 let bset2 = bset2.ptr;
442 let isl_rs_result = unsafe { isl_basic_set_intersect_params(bset1, bset2) };
443 let isl_rs_result = BasicSet { ptr: isl_rs_result,
444 should_free_on_drop: true };
445 isl_rs_result
446 }
447
448 pub fn apply(self, bmap: BasicMap) -> BasicSet {
450 let bset = self;
451 let mut bset = bset;
452 bset.do_not_free_on_drop();
453 let bset = bset.ptr;
454 let mut bmap = bmap;
455 bmap.do_not_free_on_drop();
456 let bmap = bmap.ptr;
457 let isl_rs_result = unsafe { isl_basic_set_apply(bset, bmap) };
458 let isl_rs_result = BasicSet { ptr: isl_rs_result,
459 should_free_on_drop: true };
460 isl_rs_result
461 }
462
463 pub fn affine_hull(self) -> BasicSet {
465 let bset = self;
466 let mut bset = bset;
467 bset.do_not_free_on_drop();
468 let bset = bset.ptr;
469 let isl_rs_result = unsafe { isl_basic_set_affine_hull(bset) };
470 let isl_rs_result = BasicSet { ptr: isl_rs_result,
471 should_free_on_drop: true };
472 isl_rs_result
473 }
474
475 pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> BasicSet {
477 let bset = self;
478 let mut bset = bset;
479 bset.do_not_free_on_drop();
480 let bset = bset.ptr;
481 let isl_rs_result = unsafe { isl_basic_set_remove_dims(bset, type_, first, n) };
482 let isl_rs_result = BasicSet { ptr: isl_rs_result,
483 should_free_on_drop: true };
484 isl_rs_result
485 }
486
487 pub fn sample(self) -> BasicSet {
489 let bset = self;
490 let mut bset = bset;
491 bset.do_not_free_on_drop();
492 let bset = bset.ptr;
493 let isl_rs_result = unsafe { isl_basic_set_sample(bset) };
494 let isl_rs_result = BasicSet { ptr: isl_rs_result,
495 should_free_on_drop: true };
496 isl_rs_result
497 }
498
499 pub fn detect_equalities(self) -> BasicSet {
501 let bset = self;
502 let mut bset = bset;
503 bset.do_not_free_on_drop();
504 let bset = bset.ptr;
505 let isl_rs_result = unsafe { isl_basic_set_detect_equalities(bset) };
506 let isl_rs_result = BasicSet { ptr: isl_rs_result,
507 should_free_on_drop: true };
508 isl_rs_result
509 }
510
511 pub fn remove_redundancies(self) -> BasicSet {
513 let bset = self;
514 let mut bset = bset;
515 bset.do_not_free_on_drop();
516 let bset = bset.ptr;
517 let isl_rs_result = unsafe { isl_basic_set_remove_redundancies(bset) };
518 let isl_rs_result = BasicSet { ptr: isl_rs_result,
519 should_free_on_drop: true };
520 isl_rs_result
521 }
522
523 pub fn read_from_str(ctx: &Context, str_: &str) -> BasicSet {
525 let ctx = ctx.ptr;
526 let str_ = CString::new(str_).unwrap();
527 let str_ = str_.as_ptr();
528 let isl_rs_result = unsafe { isl_basic_set_read_from_str(ctx, str_) };
529 let isl_rs_result = BasicSet { ptr: isl_rs_result,
530 should_free_on_drop: true };
531 isl_rs_result
532 }
533
534 pub fn dump(&self) {
536 let bset = self;
537 let bset = bset.ptr;
538 let isl_rs_result = unsafe { isl_basic_set_dump(bset) };
539 isl_rs_result
540 }
541
542 pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> BasicSet {
544 let bset = self;
545 let mut bset = bset;
546 bset.do_not_free_on_drop();
547 let bset = bset.ptr;
548 let isl_rs_result = unsafe { isl_basic_set_fix_si(bset, type_, pos, value) };
549 let isl_rs_result = BasicSet { ptr: isl_rs_result,
550 should_free_on_drop: true };
551 isl_rs_result
552 }
553
554 pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> BasicSet {
556 let bset = self;
557 let mut bset = bset;
558 bset.do_not_free_on_drop();
559 let bset = bset.ptr;
560 let mut v = v;
561 v.do_not_free_on_drop();
562 let v = v.ptr;
563 let isl_rs_result = unsafe { isl_basic_set_fix_val(bset, type_, pos, v) };
564 let isl_rs_result = BasicSet { ptr: isl_rs_result,
565 should_free_on_drop: true };
566 isl_rs_result
567 }
568
569 pub fn lower_bound_val(self, type_: DimType, pos: u32, value: Val) -> BasicSet {
571 let bset = self;
572 let mut bset = bset;
573 bset.do_not_free_on_drop();
574 let bset = bset.ptr;
575 let mut value = value;
576 value.do_not_free_on_drop();
577 let value = value.ptr;
578 let isl_rs_result = unsafe { isl_basic_set_lower_bound_val(bset, type_, pos, value) };
579 let isl_rs_result = BasicSet { ptr: isl_rs_result,
580 should_free_on_drop: true };
581 isl_rs_result
582 }
583
584 pub fn upper_bound_val(self, type_: DimType, pos: u32, value: Val) -> BasicSet {
586 let bset = self;
587 let mut bset = bset;
588 bset.do_not_free_on_drop();
589 let bset = bset.ptr;
590 let mut value = value;
591 value.do_not_free_on_drop();
592 let value = value.ptr;
593 let isl_rs_result = unsafe { isl_basic_set_upper_bound_val(bset, type_, pos, value) };
594 let isl_rs_result = BasicSet { ptr: isl_rs_result,
595 should_free_on_drop: true };
596 isl_rs_result
597 }
598
599 pub fn is_equal(&self, bset2: &BasicSet) -> bool {
601 let bset1 = self;
602 let bset1 = bset1.ptr;
603 let bset2 = bset2.ptr;
604 let isl_rs_result = unsafe { isl_basic_set_is_equal(bset1, bset2) };
605 let isl_rs_result = match isl_rs_result {
606 0 => false,
607 1 => true,
608 _ => panic!("Got isl_bool = -1"),
609 };
610 isl_rs_result
611 }
612
613 pub fn is_disjoint(&self, bset2: &BasicSet) -> bool {
615 let bset1 = self;
616 let bset1 = bset1.ptr;
617 let bset2 = bset2.ptr;
618 let isl_rs_result = unsafe { isl_basic_set_is_disjoint(bset1, bset2) };
619 let isl_rs_result = match isl_rs_result {
620 0 => false,
621 1 => true,
622 _ => panic!("Got isl_bool = -1"),
623 };
624 isl_rs_result
625 }
626
627 pub fn lexmin(self) -> Set {
629 let bset = self;
630 let mut bset = bset;
631 bset.do_not_free_on_drop();
632 let bset = bset.ptr;
633 let isl_rs_result = unsafe { isl_basic_set_lexmin(bset) };
634 let isl_rs_result = Set { ptr: isl_rs_result,
635 should_free_on_drop: true };
636 isl_rs_result
637 }
638
639 pub fn lexmax(self) -> Set {
641 let bset = self;
642 let mut bset = bset;
643 bset.do_not_free_on_drop();
644 let bset = bset.ptr;
645 let isl_rs_result = unsafe { isl_basic_set_lexmax(bset) };
646 let isl_rs_result = Set { ptr: isl_rs_result,
647 should_free_on_drop: true };
648 isl_rs_result
649 }
650
651 pub fn union(self, bset2: BasicSet) -> Set {
653 let bset1 = self;
654 let mut bset1 = bset1;
655 bset1.do_not_free_on_drop();
656 let bset1 = bset1.ptr;
657 let mut bset2 = bset2;
658 bset2.do_not_free_on_drop();
659 let bset2 = bset2.ptr;
660 let isl_rs_result = unsafe { isl_basic_set_union(bset1, bset2) };
661 let isl_rs_result = Set { ptr: isl_rs_result,
662 should_free_on_drop: true };
663 isl_rs_result
664 }
665
666 pub fn compare_at(&self, bset2: &BasicSet, pos: i32) -> i32 {
668 let bset1 = self;
669 let bset1 = bset1.ptr;
670 let bset2 = bset2.ptr;
671 let isl_rs_result = unsafe { isl_basic_set_compare_at(bset1, bset2, pos) };
672 isl_rs_result
673 }
674
675 pub fn params(self) -> BasicSet {
677 let bset = self;
678 let mut bset = bset;
679 bset.do_not_free_on_drop();
680 let bset = bset.ptr;
681 let isl_rs_result = unsafe { isl_basic_set_params(bset) };
682 let isl_rs_result = BasicSet { ptr: isl_rs_result,
683 should_free_on_drop: true };
684 isl_rs_result
685 }
686
687 pub fn from_params(self) -> BasicSet {
689 let bset = self;
690 let mut bset = bset;
691 bset.do_not_free_on_drop();
692 let bset = bset.ptr;
693 let isl_rs_result = unsafe { isl_basic_set_from_params(bset) };
694 let isl_rs_result = BasicSet { ptr: isl_rs_result,
695 should_free_on_drop: true };
696 isl_rs_result
697 }
698
699 pub fn plain_is_universe(&self) -> bool {
701 let bset = self;
702 let bset = bset.ptr;
703 let isl_rs_result = unsafe { isl_basic_set_plain_is_universe(bset) };
704 let isl_rs_result = match isl_rs_result {
705 0 => false,
706 1 => true,
707 _ => panic!("Got isl_bool = -1"),
708 };
709 isl_rs_result
710 }
711
712 pub fn is_universe(&self) -> bool {
714 let bset = self;
715 let bset = bset.ptr;
716 let isl_rs_result = unsafe { isl_basic_set_is_universe(bset) };
717 let isl_rs_result = match isl_rs_result {
718 0 => false,
719 1 => true,
720 _ => panic!("Got isl_bool = -1"),
721 };
722 isl_rs_result
723 }
724
725 pub fn plain_is_empty(&self) -> bool {
727 let bset = self;
728 let bset = bset.ptr;
729 let isl_rs_result = unsafe { isl_basic_set_plain_is_empty(bset) };
730 let isl_rs_result = match isl_rs_result {
731 0 => false,
732 1 => true,
733 _ => panic!("Got isl_bool = -1"),
734 };
735 isl_rs_result
736 }
737
738 pub fn is_empty(&self) -> bool {
740 let bset = self;
741 let bset = bset.ptr;
742 let isl_rs_result = unsafe { isl_basic_set_is_empty(bset) };
743 let isl_rs_result = match isl_rs_result {
744 0 => false,
745 1 => true,
746 _ => panic!("Got isl_bool = -1"),
747 };
748 isl_rs_result
749 }
750
751 pub fn is_bounded(&self) -> bool {
753 let bset = self;
754 let bset = bset.ptr;
755 let isl_rs_result = unsafe { isl_basic_set_is_bounded(bset) };
756 let isl_rs_result = match isl_rs_result {
757 0 => false,
758 1 => true,
759 _ => panic!("Got isl_bool = -1"),
760 };
761 isl_rs_result
762 }
763
764 pub fn is_subset(&self, bset2: &BasicSet) -> bool {
766 let bset1 = self;
767 let bset1 = bset1.ptr;
768 let bset2 = bset2.ptr;
769 let isl_rs_result = unsafe { isl_basic_set_is_subset(bset1, bset2) };
770 let isl_rs_result = match isl_rs_result {
771 0 => false,
772 1 => true,
773 _ => panic!("Got isl_bool = -1"),
774 };
775 isl_rs_result
776 }
777
778 pub fn plain_is_equal(&self, bset2: &BasicSet) -> bool {
780 let bset1 = self;
781 let bset1 = bset1.ptr;
782 let bset2 = bset2.ptr;
783 let isl_rs_result = unsafe { isl_basic_set_plain_is_equal(bset1, bset2) };
784 let isl_rs_result = match isl_rs_result {
785 0 => false,
786 1 => true,
787 _ => panic!("Got isl_bool = -1"),
788 };
789 isl_rs_result
790 }
791
792 pub fn to_set(self) -> Set {
794 let bset = self;
795 let mut bset = bset;
796 bset.do_not_free_on_drop();
797 let bset = bset.ptr;
798 let isl_rs_result = unsafe { isl_basic_set_to_set(bset) };
799 let isl_rs_result = Set { ptr: isl_rs_result,
800 should_free_on_drop: true };
801 isl_rs_result
802 }
803
804 pub fn sample_point(self) -> Point {
806 let bset = self;
807 let mut bset = bset;
808 bset.do_not_free_on_drop();
809 let bset = bset.ptr;
810 let isl_rs_result = unsafe { isl_basic_set_sample_point(bset) };
811 let isl_rs_result = Point { ptr: isl_rs_result,
812 should_free_on_drop: true };
813 isl_rs_result
814 }
815
816 pub fn flat_product(self, bset2: BasicSet) -> BasicSet {
818 let bset1 = self;
819 let mut bset1 = bset1;
820 bset1.do_not_free_on_drop();
821 let bset1 = bset1.ptr;
822 let mut bset2 = bset2;
823 bset2.do_not_free_on_drop();
824 let bset2 = bset2.ptr;
825 let isl_rs_result = unsafe { isl_basic_set_flat_product(bset1, bset2) };
826 let isl_rs_result = BasicSet { ptr: isl_rs_result,
827 should_free_on_drop: true };
828 isl_rs_result
829 }
830
831 pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> BasicSet {
833 let bset = self;
834 let mut bset = bset;
835 bset.do_not_free_on_drop();
836 let bset = bset.ptr;
837 let isl_rs_result = unsafe { isl_basic_set_insert_dims(bset, type_, pos, n) };
838 let isl_rs_result = BasicSet { ptr: isl_rs_result,
839 should_free_on_drop: true };
840 isl_rs_result
841 }
842
843 pub fn add_dims(self, type_: DimType, n: u32) -> BasicSet {
845 let bset = self;
846 let mut bset = bset;
847 bset.do_not_free_on_drop();
848 let bset = bset.ptr;
849 let isl_rs_result = unsafe { isl_basic_set_add_dims(bset, type_, n) };
850 let isl_rs_result = BasicSet { ptr: isl_rs_result,
851 should_free_on_drop: true };
852 isl_rs_result
853 }
854
855 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
857 n: u32)
858 -> BasicSet {
859 let bset = self;
860 let mut bset = bset;
861 bset.do_not_free_on_drop();
862 let bset = bset.ptr;
863 let isl_rs_result =
864 unsafe { isl_basic_set_move_dims(bset, dst_type, dst_pos, src_type, src_pos, n) };
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 project_out(self, type_: DimType, first: u32, n: u32) -> BasicSet {
872 let bset = self;
873 let mut bset = bset;
874 bset.do_not_free_on_drop();
875 let bset = bset.ptr;
876 let isl_rs_result = unsafe { isl_basic_set_project_out(bset, type_, first, n) };
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 remove_divs(self) -> BasicSet {
884 let bset = self;
885 let mut bset = bset;
886 bset.do_not_free_on_drop();
887 let bset = bset.ptr;
888 let isl_rs_result = unsafe { isl_basic_set_remove_divs(bset) };
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 eliminate(self, type_: DimType, first: u32, n: u32) -> BasicSet {
896 let bset = self;
897 let mut bset = bset;
898 bset.do_not_free_on_drop();
899 let bset = bset.ptr;
900 let isl_rs_result = unsafe { isl_basic_set_eliminate(bset, type_, first, n) };
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 remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32) -> BasicSet {
908 let bset = self;
909 let mut bset = bset;
910 bset.do_not_free_on_drop();
911 let bset = bset.ptr;
912 let isl_rs_result =
913 unsafe { isl_basic_set_remove_divs_involving_dims(bset, type_, first, n) };
914 let isl_rs_result = BasicSet { ptr: isl_rs_result,
915 should_free_on_drop: true };
916 isl_rs_result
917 }
918
919 pub fn remove_unknown_divs(self) -> BasicSet {
921 let bset = self;
922 let mut bset = bset;
923 bset.do_not_free_on_drop();
924 let bset = bset.ptr;
925 let isl_rs_result = unsafe { isl_basic_set_remove_unknown_divs(bset) };
926 let isl_rs_result = BasicSet { ptr: isl_rs_result,
927 should_free_on_drop: true };
928 isl_rs_result
929 }
930
931 pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32) -> BasicSet {
933 let bset = self;
934 let mut bset = bset;
935 bset.do_not_free_on_drop();
936 let bset = bset.ptr;
937 let isl_rs_result =
938 unsafe { isl_basic_set_drop_constraints_involving_dims(bset, type_, first, n) };
939 let isl_rs_result = BasicSet { ptr: isl_rs_result,
940 should_free_on_drop: true };
941 isl_rs_result
942 }
943
944 pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32)
946 -> BasicSet {
947 let bset = self;
948 let mut bset = bset;
949 bset.do_not_free_on_drop();
950 let bset = bset.ptr;
951 let isl_rs_result =
952 unsafe { isl_basic_set_drop_constraints_not_involving_dims(bset, type_, first, n) };
953 let isl_rs_result = BasicSet { ptr: isl_rs_result,
954 should_free_on_drop: true };
955 isl_rs_result
956 }
957
958 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> bool {
960 let bset = self;
961 let bset = bset.ptr;
962 let isl_rs_result = unsafe { isl_basic_set_involves_dims(bset, type_, first, n) };
963 let isl_rs_result = match isl_rs_result {
964 0 => false,
965 1 => true,
966 _ => panic!("Got isl_bool = -1"),
967 };
968 isl_rs_result
969 }
970
971 pub fn neg(self) -> BasicSet {
973 let bset = self;
974 let mut bset = bset;
975 bset.do_not_free_on_drop();
976 let bset = bset.ptr;
977 let isl_rs_result = unsafe { isl_basic_set_neg(bset) };
978 let isl_rs_result = BasicSet { ptr: isl_rs_result,
979 should_free_on_drop: true };
980 isl_rs_result
981 }
982
983 pub fn compute_divs(self) -> Set {
985 let bset = self;
986 let mut bset = bset;
987 bset.do_not_free_on_drop();
988 let bset = bset.ptr;
989 let isl_rs_result = unsafe { isl_basic_set_compute_divs(bset) };
990 let isl_rs_result = Set { ptr: isl_rs_result,
991 should_free_on_drop: true };
992 isl_rs_result
993 }
994
995 pub fn gist(self, context: BasicSet) -> BasicSet {
997 let bset = self;
998 let mut bset = bset;
999 bset.do_not_free_on_drop();
1000 let bset = bset.ptr;
1001 let mut context = context;
1002 context.do_not_free_on_drop();
1003 let context = context.ptr;
1004 let isl_rs_result = unsafe { isl_basic_set_gist(bset, context) };
1005 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1006 should_free_on_drop: true };
1007 isl_rs_result
1008 }
1009
1010 pub fn from_point(pnt: Point) -> BasicSet {
1012 let mut pnt = pnt;
1013 pnt.do_not_free_on_drop();
1014 let pnt = pnt.ptr;
1015 let isl_rs_result = unsafe { isl_basic_set_from_point(pnt) };
1016 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1017 should_free_on_drop: true };
1018 isl_rs_result
1019 }
1020
1021 pub fn box_from_points(pnt1: Point, pnt2: Point) -> BasicSet {
1023 let mut pnt1 = pnt1;
1024 pnt1.do_not_free_on_drop();
1025 let pnt1 = pnt1.ptr;
1026 let mut pnt2 = pnt2;
1027 pnt2.do_not_free_on_drop();
1028 let pnt2 = pnt2.ptr;
1029 let isl_rs_result = unsafe { isl_basic_set_box_from_points(pnt1, pnt2) };
1030 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1031 should_free_on_drop: true };
1032 isl_rs_result
1033 }
1034
1035 pub fn lift(self) -> BasicSet {
1037 let bset = self;
1038 let mut bset = bset;
1039 bset.do_not_free_on_drop();
1040 let bset = bset.ptr;
1041 let isl_rs_result = unsafe { isl_basic_set_lift(bset) };
1042 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1043 should_free_on_drop: true };
1044 isl_rs_result
1045 }
1046
1047 pub fn align_params(self, model: Space) -> BasicSet {
1049 let bset = self;
1050 let mut bset = bset;
1051 bset.do_not_free_on_drop();
1052 let bset = bset.ptr;
1053 let mut model = model;
1054 model.do_not_free_on_drop();
1055 let model = model.ptr;
1056 let isl_rs_result = unsafe { isl_basic_set_align_params(bset, model) };
1057 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1058 should_free_on_drop: true };
1059 isl_rs_result
1060 }
1061
1062 pub fn drop_unused_params(self) -> BasicSet {
1064 let bset = self;
1065 let mut bset = bset;
1066 bset.do_not_free_on_drop();
1067 let bset = bset.ptr;
1068 let isl_rs_result = unsafe { isl_basic_set_drop_unused_params(bset) };
1069 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1070 should_free_on_drop: true };
1071 isl_rs_result
1072 }
1073
1074 pub fn equalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType) -> Mat {
1076 let bset = self;
1077 let bset = bset.ptr;
1078 let isl_rs_result = unsafe { isl_basic_set_equalities_matrix(bset, c1, c2, c3, c4) };
1079 let isl_rs_result = Mat { ptr: isl_rs_result,
1080 should_free_on_drop: true };
1081 isl_rs_result
1082 }
1083
1084 pub fn inequalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType) -> Mat {
1086 let bset = self;
1087 let bset = bset.ptr;
1088 let isl_rs_result = unsafe { isl_basic_set_inequalities_matrix(bset, c1, c2, c3, c4) };
1089 let isl_rs_result = Mat { ptr: isl_rs_result,
1090 should_free_on_drop: true };
1091 isl_rs_result
1092 }
1093
1094 pub fn from_constraint_matrices(space: Space, eq: Mat, ineq: Mat, c1: DimType, c2: DimType,
1096 c3: DimType, c4: DimType)
1097 -> BasicSet {
1098 let mut space = space;
1099 space.do_not_free_on_drop();
1100 let space = space.ptr;
1101 let mut eq = eq;
1102 eq.do_not_free_on_drop();
1103 let eq = eq.ptr;
1104 let mut ineq = ineq;
1105 ineq.do_not_free_on_drop();
1106 let ineq = ineq.ptr;
1107 let isl_rs_result =
1108 unsafe { isl_basic_set_from_constraint_matrices(space, eq, ineq, c1, c2, c3, c4) };
1109 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1110 should_free_on_drop: true };
1111 isl_rs_result
1112 }
1113
1114 pub fn reduced_basis(&self) -> Mat {
1116 let bset = self;
1117 let bset = bset.ptr;
1118 let isl_rs_result = unsafe { isl_basic_set_reduced_basis(bset) };
1119 let isl_rs_result = Mat { ptr: isl_rs_result,
1120 should_free_on_drop: true };
1121 isl_rs_result
1122 }
1123
1124 pub fn coefficients(self) -> BasicSet {
1126 let bset = self;
1127 let mut bset = bset;
1128 bset.do_not_free_on_drop();
1129 let bset = bset.ptr;
1130 let isl_rs_result = unsafe { isl_basic_set_coefficients(bset) };
1131 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1132 should_free_on_drop: true };
1133 isl_rs_result
1134 }
1135
1136 pub fn solutions(self) -> BasicSet {
1138 let bset = self;
1139 let mut bset = bset;
1140 bset.do_not_free_on_drop();
1141 let bset = bset.ptr;
1142 let isl_rs_result = unsafe { isl_basic_set_solutions(bset) };
1143 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1144 should_free_on_drop: true };
1145 isl_rs_result
1146 }
1147
1148 pub fn to_str(&self) -> &str {
1150 let bset = self;
1151 let bset = bset.ptr;
1152 let isl_rs_result = unsafe { isl_basic_set_to_str(bset) };
1153 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1154 let isl_rs_result = isl_rs_result.to_str().unwrap();
1155 isl_rs_result
1156 }
1157
1158 pub fn do_not_free_on_drop(&mut self) {
1160 self.should_free_on_drop = false;
1161 }
1162}
1163
1164impl Drop for BasicSet {
1165 fn drop(&mut self) {
1166 if self.should_free_on_drop {
1167 unsafe {
1168 isl_basic_set_free(self.ptr);
1169 }
1170 }
1171 }
1172}