1use super::{
5 Aff, BasicMap, BasicSetList, Constraint, ConstraintList, Context, DimType, Error, Id,
6 LibISLError, LocalSpace, Mat, MultiAff, Point, Set, Space, Val, Vertices,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct BasicSet {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_basic_set_add_constraint(bset: uintptr_t, constraint: uintptr_t) -> uintptr_t;
21
22 fn isl_basic_set_add_dims(bset: uintptr_t, type_: i32, n: u32) -> uintptr_t;
23
24 fn isl_basic_set_affine_hull(bset: uintptr_t) -> uintptr_t;
25
26 fn isl_basic_set_align_params(bset: uintptr_t, model: uintptr_t) -> uintptr_t;
27
28 fn isl_basic_set_apply(bset: uintptr_t, bmap: uintptr_t) -> uintptr_t;
29
30 fn isl_basic_set_box_from_points(pnt1: uintptr_t, pnt2: uintptr_t) -> uintptr_t;
31
32 fn isl_basic_set_coefficients(bset: uintptr_t) -> uintptr_t;
33
34 fn isl_basic_set_compare_at(bset1: uintptr_t, bset2: uintptr_t, pos: i32) -> i32;
35
36 fn isl_basic_set_compute_divs(bset: uintptr_t) -> uintptr_t;
37
38 fn isl_basic_set_compute_vertices(bset: uintptr_t) -> uintptr_t;
39
40 fn isl_basic_set_copy(bset: uintptr_t) -> uintptr_t;
41
42 fn isl_basic_set_detect_equalities(bset: uintptr_t) -> uintptr_t;
43
44 fn isl_basic_set_dim(bset: uintptr_t, type_: i32) -> i32;
45
46 fn isl_basic_set_dim_max_val(bset: uintptr_t, pos: i32) -> uintptr_t;
47
48 fn isl_basic_set_drop_constraints_involving_dims(bset: uintptr_t, type_: i32, first: u32,
49 n: u32)
50 -> uintptr_t;
51
52 fn isl_basic_set_drop_constraints_not_involving_dims(bset: uintptr_t, type_: i32, first: u32,
53 n: u32)
54 -> uintptr_t;
55
56 fn isl_basic_set_drop_unused_params(bset: uintptr_t) -> uintptr_t;
57
58 fn isl_basic_set_dump(bset: uintptr_t) -> ();
59
60 fn isl_basic_set_eliminate(bset: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
61
62 fn isl_basic_set_empty(space: uintptr_t) -> uintptr_t;
63
64 fn isl_basic_set_equalities_matrix(bset: uintptr_t, c1: i32, c2: i32, c3: i32, c4: i32)
65 -> uintptr_t;
66
67 fn isl_basic_set_fix_si(bset: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
68
69 fn isl_basic_set_fix_val(bset: uintptr_t, type_: i32, pos: u32, v: uintptr_t) -> uintptr_t;
70
71 fn isl_basic_set_flat_product(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
72
73 fn isl_basic_set_flatten(bset: uintptr_t) -> uintptr_t;
74
75 fn isl_basic_set_free(bset: uintptr_t) -> uintptr_t;
76
77 fn isl_basic_set_from_constraint(constraint: uintptr_t) -> uintptr_t;
78
79 fn isl_basic_set_from_constraint_matrices(space: uintptr_t, eq: uintptr_t, ineq: uintptr_t,
80 c1: i32, c2: i32, c3: i32, c4: i32)
81 -> uintptr_t;
82
83 fn isl_basic_set_from_multi_aff(ma: uintptr_t) -> uintptr_t;
84
85 fn isl_basic_set_from_params(bset: uintptr_t) -> uintptr_t;
86
87 fn isl_basic_set_from_point(pnt: uintptr_t) -> uintptr_t;
88
89 fn isl_basic_set_get_constraint_list(bset: uintptr_t) -> uintptr_t;
90
91 fn isl_basic_set_get_ctx(bset: uintptr_t) -> uintptr_t;
92
93 fn isl_basic_set_get_dim_id(bset: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
94
95 fn isl_basic_set_get_dim_name(bset: uintptr_t, type_: i32, pos: u32) -> *const c_char;
96
97 fn isl_basic_set_get_div(bset: uintptr_t, pos: i32) -> uintptr_t;
98
99 fn isl_basic_set_get_local_space(bset: uintptr_t) -> uintptr_t;
100
101 fn isl_basic_set_get_space(bset: uintptr_t) -> uintptr_t;
102
103 fn isl_basic_set_get_tuple_name(bset: uintptr_t) -> *const c_char;
104
105 fn isl_basic_set_gist(bset: uintptr_t, context: uintptr_t) -> uintptr_t;
106
107 fn isl_basic_set_inequalities_matrix(bset: uintptr_t, c1: i32, c2: i32, c3: i32, c4: i32)
108 -> uintptr_t;
109
110 fn isl_basic_set_insert_dims(bset: uintptr_t, type_: i32, pos: u32, n: u32) -> uintptr_t;
111
112 fn isl_basic_set_intersect(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
113
114 fn isl_basic_set_intersect_params(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
115
116 fn isl_basic_set_involves_dims(bset: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
117
118 fn isl_basic_set_is_bounded(bset: uintptr_t) -> i32;
119
120 fn isl_basic_set_is_disjoint(bset1: uintptr_t, bset2: uintptr_t) -> i32;
121
122 fn isl_basic_set_is_empty(bset: uintptr_t) -> i32;
123
124 fn isl_basic_set_is_equal(bset1: uintptr_t, bset2: uintptr_t) -> i32;
125
126 fn isl_basic_set_is_rational(bset: uintptr_t) -> i32;
127
128 fn isl_basic_set_is_subset(bset1: uintptr_t, bset2: uintptr_t) -> i32;
129
130 fn isl_basic_set_is_universe(bset: uintptr_t) -> i32;
131
132 fn isl_basic_set_is_wrapping(bset: uintptr_t) -> i32;
133
134 fn isl_basic_set_lexmax(bset: uintptr_t) -> uintptr_t;
135
136 fn isl_basic_set_lexmin(bset: uintptr_t) -> uintptr_t;
137
138 fn isl_basic_set_lift(bset: uintptr_t) -> uintptr_t;
139
140 fn isl_basic_set_lower_bound_val(bset: uintptr_t, type_: i32, pos: u32, value: uintptr_t)
141 -> uintptr_t;
142
143 fn isl_basic_set_max_lp_val(bset: uintptr_t, obj: uintptr_t) -> uintptr_t;
144
145 fn isl_basic_set_max_val(bset: uintptr_t, obj: uintptr_t) -> uintptr_t;
146
147 fn isl_basic_set_min_lp_val(bset: uintptr_t, obj: uintptr_t) -> uintptr_t;
148
149 fn isl_basic_set_move_dims(bset: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32,
150 src_pos: u32, n: u32)
151 -> uintptr_t;
152
153 fn isl_basic_set_n_constraint(bset: uintptr_t) -> i32;
154
155 fn isl_basic_set_n_dim(bset: uintptr_t) -> i32;
156
157 fn isl_basic_set_n_param(bset: uintptr_t) -> i32;
158
159 fn isl_basic_set_nat_universe(space: uintptr_t) -> uintptr_t;
160
161 fn isl_basic_set_neg(bset: uintptr_t) -> uintptr_t;
162
163 fn isl_basic_set_params(bset: uintptr_t) -> uintptr_t;
164
165 fn isl_basic_set_plain_is_empty(bset: uintptr_t) -> i32;
166
167 fn isl_basic_set_plain_is_equal(bset1: uintptr_t, bset2: uintptr_t) -> i32;
168
169 fn isl_basic_set_plain_is_universe(bset: uintptr_t) -> i32;
170
171 fn isl_basic_set_positive_orthant(space: uintptr_t) -> uintptr_t;
172
173 fn isl_basic_set_preimage_multi_aff(bset: uintptr_t, ma: uintptr_t) -> uintptr_t;
174
175 fn isl_basic_set_project_out(bset: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
176
177 fn isl_basic_set_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
178
179 fn isl_basic_set_reduced_basis(bset: uintptr_t) -> uintptr_t;
180
181 fn isl_basic_set_remove_dims(bset: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
182
183 fn isl_basic_set_remove_divs(bset: uintptr_t) -> uintptr_t;
184
185 fn isl_basic_set_remove_divs_involving_dims(bset: uintptr_t, type_: i32, first: u32, n: u32)
186 -> uintptr_t;
187
188 fn isl_basic_set_remove_redundancies(bset: uintptr_t) -> uintptr_t;
189
190 fn isl_basic_set_remove_unknown_divs(bset: uintptr_t) -> uintptr_t;
191
192 fn isl_basic_set_sample(bset: uintptr_t) -> uintptr_t;
193
194 fn isl_basic_set_sample_point(bset: uintptr_t) -> uintptr_t;
195
196 fn isl_basic_set_set_dim_name(bset: uintptr_t, type_: i32, pos: u32, s: *const c_char)
197 -> uintptr_t;
198
199 fn isl_basic_set_set_tuple_id(bset: uintptr_t, id: uintptr_t) -> uintptr_t;
200
201 fn isl_basic_set_set_tuple_name(set: uintptr_t, s: *const c_char) -> uintptr_t;
202
203 fn isl_basic_set_solutions(bset: uintptr_t) -> uintptr_t;
204
205 fn isl_basic_set_to_list(el: uintptr_t) -> uintptr_t;
206
207 fn isl_basic_set_to_set(bset: uintptr_t) -> uintptr_t;
208
209 fn isl_basic_set_to_str(bset: uintptr_t) -> *const c_char;
210
211 fn isl_basic_set_total_dim(bset: uintptr_t) -> i32;
212
213 fn isl_basic_set_union(bset1: uintptr_t, bset2: uintptr_t) -> uintptr_t;
214
215 fn isl_basic_set_universe(space: uintptr_t) -> uintptr_t;
216
217 fn isl_basic_set_unwrap(bset: uintptr_t) -> uintptr_t;
218
219 fn isl_basic_set_upper_bound_val(bset: uintptr_t, type_: i32, pos: u32, value: uintptr_t)
220 -> uintptr_t;
221
222}
223
224impl BasicSet {
225 pub fn add_constraint(self, constraint: Constraint) -> Result<BasicSet, LibISLError> {
227 let bset = self;
228 let isl_rs_ctx = bset.get_ctx();
229 let mut bset = bset;
230 bset.do_not_free_on_drop();
231 let bset = bset.ptr;
232 let mut constraint = constraint;
233 constraint.do_not_free_on_drop();
234 let constraint = constraint.ptr;
235 let isl_rs_result = unsafe { isl_basic_set_add_constraint(bset, constraint) };
236 let isl_rs_result = BasicSet { ptr: isl_rs_result,
237 should_free_on_drop: true };
238 let err = isl_rs_ctx.last_error();
239 if err != Error::None_ {
240 let err_msg = isl_rs_ctx.last_error_msg();
241 isl_rs_ctx.reset_error();
242 return Err(LibISLError::new(err, err_msg));
243 }
244 Ok(isl_rs_result)
245 }
246
247 pub fn add_dims(self, type_: DimType, n: u32) -> Result<BasicSet, LibISLError> {
249 let bset = self;
250 let isl_rs_ctx = bset.get_ctx();
251 let mut bset = bset;
252 bset.do_not_free_on_drop();
253 let bset = bset.ptr;
254 let type_ = type_.to_i32();
255 let isl_rs_result = unsafe { isl_basic_set_add_dims(bset, type_, n) };
256 let isl_rs_result = BasicSet { ptr: isl_rs_result,
257 should_free_on_drop: true };
258 let err = isl_rs_ctx.last_error();
259 if err != Error::None_ {
260 let err_msg = isl_rs_ctx.last_error_msg();
261 isl_rs_ctx.reset_error();
262 return Err(LibISLError::new(err, err_msg));
263 }
264 Ok(isl_rs_result)
265 }
266
267 pub fn affine_hull(self) -> Result<BasicSet, LibISLError> {
269 let bset = self;
270 let isl_rs_ctx = bset.get_ctx();
271 let mut bset = bset;
272 bset.do_not_free_on_drop();
273 let bset = bset.ptr;
274 let isl_rs_result = unsafe { isl_basic_set_affine_hull(bset) };
275 let isl_rs_result = BasicSet { ptr: isl_rs_result,
276 should_free_on_drop: true };
277 let err = isl_rs_ctx.last_error();
278 if err != Error::None_ {
279 let err_msg = isl_rs_ctx.last_error_msg();
280 isl_rs_ctx.reset_error();
281 return Err(LibISLError::new(err, err_msg));
282 }
283 Ok(isl_rs_result)
284 }
285
286 pub fn align_params(self, model: Space) -> Result<BasicSet, LibISLError> {
288 let bset = self;
289 let isl_rs_ctx = bset.get_ctx();
290 let mut bset = bset;
291 bset.do_not_free_on_drop();
292 let bset = bset.ptr;
293 let mut model = model;
294 model.do_not_free_on_drop();
295 let model = model.ptr;
296 let isl_rs_result = unsafe { isl_basic_set_align_params(bset, model) };
297 let isl_rs_result = BasicSet { ptr: isl_rs_result,
298 should_free_on_drop: true };
299 let err = isl_rs_ctx.last_error();
300 if err != Error::None_ {
301 let err_msg = isl_rs_ctx.last_error_msg();
302 isl_rs_ctx.reset_error();
303 return Err(LibISLError::new(err, err_msg));
304 }
305 Ok(isl_rs_result)
306 }
307
308 pub fn apply(self, bmap: BasicMap) -> Result<BasicSet, LibISLError> {
310 let bset = self;
311 let isl_rs_ctx = bset.get_ctx();
312 let mut bset = bset;
313 bset.do_not_free_on_drop();
314 let bset = bset.ptr;
315 let mut bmap = bmap;
316 bmap.do_not_free_on_drop();
317 let bmap = bmap.ptr;
318 let isl_rs_result = unsafe { isl_basic_set_apply(bset, bmap) };
319 let isl_rs_result = BasicSet { ptr: isl_rs_result,
320 should_free_on_drop: true };
321 let err = isl_rs_ctx.last_error();
322 if err != Error::None_ {
323 let err_msg = isl_rs_ctx.last_error_msg();
324 isl_rs_ctx.reset_error();
325 return Err(LibISLError::new(err, err_msg));
326 }
327 Ok(isl_rs_result)
328 }
329
330 pub fn box_from_points(pnt1: Point, pnt2: Point) -> Result<BasicSet, LibISLError> {
332 let isl_rs_ctx = pnt1.get_ctx();
333 let mut pnt1 = pnt1;
334 pnt1.do_not_free_on_drop();
335 let pnt1 = pnt1.ptr;
336 let mut pnt2 = pnt2;
337 pnt2.do_not_free_on_drop();
338 let pnt2 = pnt2.ptr;
339 let isl_rs_result = unsafe { isl_basic_set_box_from_points(pnt1, pnt2) };
340 let isl_rs_result = BasicSet { ptr: isl_rs_result,
341 should_free_on_drop: true };
342 let err = isl_rs_ctx.last_error();
343 if err != Error::None_ {
344 let err_msg = isl_rs_ctx.last_error_msg();
345 isl_rs_ctx.reset_error();
346 return Err(LibISLError::new(err, err_msg));
347 }
348 Ok(isl_rs_result)
349 }
350
351 pub fn coefficients(self) -> Result<BasicSet, LibISLError> {
353 let bset = self;
354 let isl_rs_ctx = bset.get_ctx();
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_coefficients(bset) };
359 let isl_rs_result = BasicSet { ptr: isl_rs_result,
360 should_free_on_drop: true };
361 let err = isl_rs_ctx.last_error();
362 if err != Error::None_ {
363 let err_msg = isl_rs_ctx.last_error_msg();
364 isl_rs_ctx.reset_error();
365 return Err(LibISLError::new(err, err_msg));
366 }
367 Ok(isl_rs_result)
368 }
369
370 pub fn compare_at(&self, bset2: &BasicSet, pos: i32) -> Result<i32, LibISLError> {
372 let bset1 = self;
373 let isl_rs_ctx = bset1.get_ctx();
374 let bset1 = bset1.ptr;
375 let bset2 = bset2.ptr;
376 let isl_rs_result = unsafe { isl_basic_set_compare_at(bset1, bset2, pos) };
377 let err = isl_rs_ctx.last_error();
378 if err != Error::None_ {
379 let err_msg = isl_rs_ctx.last_error_msg();
380 isl_rs_ctx.reset_error();
381 return Err(LibISLError::new(err, err_msg));
382 }
383 Ok(isl_rs_result)
384 }
385
386 pub fn compute_divs(self) -> Result<Set, LibISLError> {
388 let bset = self;
389 let isl_rs_ctx = bset.get_ctx();
390 let mut bset = bset;
391 bset.do_not_free_on_drop();
392 let bset = bset.ptr;
393 let isl_rs_result = unsafe { isl_basic_set_compute_divs(bset) };
394 let isl_rs_result = Set { ptr: isl_rs_result,
395 should_free_on_drop: true };
396 let err = isl_rs_ctx.last_error();
397 if err != Error::None_ {
398 let err_msg = isl_rs_ctx.last_error_msg();
399 isl_rs_ctx.reset_error();
400 return Err(LibISLError::new(err, err_msg));
401 }
402 Ok(isl_rs_result)
403 }
404
405 pub fn compute_vertices(&self) -> Result<Vertices, LibISLError> {
407 let bset = self;
408 let isl_rs_ctx = bset.get_ctx();
409 let bset = bset.ptr;
410 let isl_rs_result = unsafe { isl_basic_set_compute_vertices(bset) };
411 let isl_rs_result = Vertices { ptr: isl_rs_result,
412 should_free_on_drop: true };
413 let err = isl_rs_ctx.last_error();
414 if err != Error::None_ {
415 let err_msg = isl_rs_ctx.last_error_msg();
416 isl_rs_ctx.reset_error();
417 return Err(LibISLError::new(err, err_msg));
418 }
419 Ok(isl_rs_result)
420 }
421
422 pub fn copy(&self) -> Result<BasicSet, LibISLError> {
424 let bset = self;
425 let isl_rs_ctx = bset.get_ctx();
426 let bset = bset.ptr;
427 let isl_rs_result = unsafe { isl_basic_set_copy(bset) };
428 let isl_rs_result = BasicSet { ptr: isl_rs_result,
429 should_free_on_drop: true };
430 let err = isl_rs_ctx.last_error();
431 if err != Error::None_ {
432 let err_msg = isl_rs_ctx.last_error_msg();
433 isl_rs_ctx.reset_error();
434 return Err(LibISLError::new(err, err_msg));
435 }
436 Ok(isl_rs_result)
437 }
438
439 pub fn detect_equalities(self) -> Result<BasicSet, LibISLError> {
441 let bset = self;
442 let isl_rs_ctx = bset.get_ctx();
443 let mut bset = bset;
444 bset.do_not_free_on_drop();
445 let bset = bset.ptr;
446 let isl_rs_result = unsafe { isl_basic_set_detect_equalities(bset) };
447 let isl_rs_result = BasicSet { ptr: isl_rs_result,
448 should_free_on_drop: true };
449 let err = isl_rs_ctx.last_error();
450 if err != Error::None_ {
451 let err_msg = isl_rs_ctx.last_error_msg();
452 isl_rs_ctx.reset_error();
453 return Err(LibISLError::new(err, err_msg));
454 }
455 Ok(isl_rs_result)
456 }
457
458 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
460 let bset = self;
461 let isl_rs_ctx = bset.get_ctx();
462 let bset = bset.ptr;
463 let type_ = type_.to_i32();
464 let isl_rs_result = unsafe { isl_basic_set_dim(bset, type_) };
465 let err = isl_rs_ctx.last_error();
466 if err != Error::None_ {
467 let err_msg = isl_rs_ctx.last_error_msg();
468 isl_rs_ctx.reset_error();
469 return Err(LibISLError::new(err, err_msg));
470 }
471 Ok(isl_rs_result)
472 }
473
474 pub fn dim_max_val(self, pos: i32) -> Result<Val, LibISLError> {
476 let bset = self;
477 let isl_rs_ctx = bset.get_ctx();
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_dim_max_val(bset, pos) };
482 let isl_rs_result = Val { ptr: isl_rs_result,
483 should_free_on_drop: true };
484 let err = isl_rs_ctx.last_error();
485 if err != Error::None_ {
486 let err_msg = isl_rs_ctx.last_error_msg();
487 isl_rs_ctx.reset_error();
488 return Err(LibISLError::new(err, err_msg));
489 }
490 Ok(isl_rs_result)
491 }
492
493 pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32)
495 -> Result<BasicSet, LibISLError> {
496 let bset = self;
497 let isl_rs_ctx = bset.get_ctx();
498 let mut bset = bset;
499 bset.do_not_free_on_drop();
500 let bset = bset.ptr;
501 let type_ = type_.to_i32();
502 let isl_rs_result =
503 unsafe { isl_basic_set_drop_constraints_involving_dims(bset, type_, first, n) };
504 let isl_rs_result = BasicSet { ptr: isl_rs_result,
505 should_free_on_drop: true };
506 let err = isl_rs_ctx.last_error();
507 if err != Error::None_ {
508 let err_msg = isl_rs_ctx.last_error_msg();
509 isl_rs_ctx.reset_error();
510 return Err(LibISLError::new(err, err_msg));
511 }
512 Ok(isl_rs_result)
513 }
514
515 pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32)
517 -> Result<BasicSet, LibISLError> {
518 let bset = self;
519 let isl_rs_ctx = bset.get_ctx();
520 let mut bset = bset;
521 bset.do_not_free_on_drop();
522 let bset = bset.ptr;
523 let type_ = type_.to_i32();
524 let isl_rs_result =
525 unsafe { isl_basic_set_drop_constraints_not_involving_dims(bset, type_, first, n) };
526 let isl_rs_result = BasicSet { ptr: isl_rs_result,
527 should_free_on_drop: true };
528 let err = isl_rs_ctx.last_error();
529 if err != Error::None_ {
530 let err_msg = isl_rs_ctx.last_error_msg();
531 isl_rs_ctx.reset_error();
532 return Err(LibISLError::new(err, err_msg));
533 }
534 Ok(isl_rs_result)
535 }
536
537 pub fn drop_unused_params(self) -> Result<BasicSet, LibISLError> {
539 let bset = self;
540 let isl_rs_ctx = bset.get_ctx();
541 let mut bset = bset;
542 bset.do_not_free_on_drop();
543 let bset = bset.ptr;
544 let isl_rs_result = unsafe { isl_basic_set_drop_unused_params(bset) };
545 let isl_rs_result = BasicSet { ptr: isl_rs_result,
546 should_free_on_drop: true };
547 let err = isl_rs_ctx.last_error();
548 if err != Error::None_ {
549 let err_msg = isl_rs_ctx.last_error_msg();
550 isl_rs_ctx.reset_error();
551 return Err(LibISLError::new(err, err_msg));
552 }
553 Ok(isl_rs_result)
554 }
555
556 pub fn dump(&self) -> Result<(), LibISLError> {
558 let bset = self;
559 let isl_rs_ctx = bset.get_ctx();
560 let bset = bset.ptr;
561 let isl_rs_result = unsafe { isl_basic_set_dump(bset) };
562 let err = isl_rs_ctx.last_error();
563 if err != Error::None_ {
564 let err_msg = isl_rs_ctx.last_error_msg();
565 isl_rs_ctx.reset_error();
566 return Err(LibISLError::new(err, err_msg));
567 }
568 Ok(isl_rs_result)
569 }
570
571 pub fn eliminate(self, type_: DimType, first: u32, n: u32) -> Result<BasicSet, LibISLError> {
573 let bset = self;
574 let isl_rs_ctx = bset.get_ctx();
575 let mut bset = bset;
576 bset.do_not_free_on_drop();
577 let bset = bset.ptr;
578 let type_ = type_.to_i32();
579 let isl_rs_result = unsafe { isl_basic_set_eliminate(bset, type_, first, n) };
580 let isl_rs_result = BasicSet { ptr: isl_rs_result,
581 should_free_on_drop: true };
582 let err = isl_rs_ctx.last_error();
583 if err != Error::None_ {
584 let err_msg = isl_rs_ctx.last_error_msg();
585 isl_rs_ctx.reset_error();
586 return Err(LibISLError::new(err, err_msg));
587 }
588 Ok(isl_rs_result)
589 }
590
591 pub fn empty(space: Space) -> Result<BasicSet, LibISLError> {
593 let isl_rs_ctx = space.get_ctx();
594 let mut space = space;
595 space.do_not_free_on_drop();
596 let space = space.ptr;
597 let isl_rs_result = unsafe { isl_basic_set_empty(space) };
598 let isl_rs_result = BasicSet { ptr: isl_rs_result,
599 should_free_on_drop: true };
600 let err = isl_rs_ctx.last_error();
601 if err != Error::None_ {
602 let err_msg = isl_rs_ctx.last_error_msg();
603 isl_rs_ctx.reset_error();
604 return Err(LibISLError::new(err, err_msg));
605 }
606 Ok(isl_rs_result)
607 }
608
609 pub fn equalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType)
611 -> Result<Mat, LibISLError> {
612 let bset = self;
613 let isl_rs_ctx = bset.get_ctx();
614 let bset = bset.ptr;
615 let c1 = c1.to_i32();
616 let c2 = c2.to_i32();
617 let c3 = c3.to_i32();
618 let c4 = c4.to_i32();
619 let isl_rs_result = unsafe { isl_basic_set_equalities_matrix(bset, c1, c2, c3, c4) };
620 let isl_rs_result = Mat { ptr: isl_rs_result,
621 should_free_on_drop: true };
622 let err = isl_rs_ctx.last_error();
623 if err != Error::None_ {
624 let err_msg = isl_rs_ctx.last_error_msg();
625 isl_rs_ctx.reset_error();
626 return Err(LibISLError::new(err, err_msg));
627 }
628 Ok(isl_rs_result)
629 }
630
631 pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<BasicSet, LibISLError> {
633 let bset = self;
634 let isl_rs_ctx = bset.get_ctx();
635 let mut bset = bset;
636 bset.do_not_free_on_drop();
637 let bset = bset.ptr;
638 let type_ = type_.to_i32();
639 let isl_rs_result = unsafe { isl_basic_set_fix_si(bset, type_, pos, value) };
640 let isl_rs_result = BasicSet { ptr: isl_rs_result,
641 should_free_on_drop: true };
642 let err = isl_rs_ctx.last_error();
643 if err != Error::None_ {
644 let err_msg = isl_rs_ctx.last_error_msg();
645 isl_rs_ctx.reset_error();
646 return Err(LibISLError::new(err, err_msg));
647 }
648 Ok(isl_rs_result)
649 }
650
651 pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> Result<BasicSet, LibISLError> {
653 let bset = self;
654 let isl_rs_ctx = bset.get_ctx();
655 let mut bset = bset;
656 bset.do_not_free_on_drop();
657 let bset = bset.ptr;
658 let type_ = type_.to_i32();
659 let mut v = v;
660 v.do_not_free_on_drop();
661 let v = v.ptr;
662 let isl_rs_result = unsafe { isl_basic_set_fix_val(bset, type_, pos, v) };
663 let isl_rs_result = BasicSet { ptr: isl_rs_result,
664 should_free_on_drop: true };
665 let err = isl_rs_ctx.last_error();
666 if err != Error::None_ {
667 let err_msg = isl_rs_ctx.last_error_msg();
668 isl_rs_ctx.reset_error();
669 return Err(LibISLError::new(err, err_msg));
670 }
671 Ok(isl_rs_result)
672 }
673
674 pub fn flat_product(self, bset2: BasicSet) -> Result<BasicSet, LibISLError> {
676 let bset1 = self;
677 let isl_rs_ctx = bset1.get_ctx();
678 let mut bset1 = bset1;
679 bset1.do_not_free_on_drop();
680 let bset1 = bset1.ptr;
681 let mut bset2 = bset2;
682 bset2.do_not_free_on_drop();
683 let bset2 = bset2.ptr;
684 let isl_rs_result = unsafe { isl_basic_set_flat_product(bset1, bset2) };
685 let isl_rs_result = BasicSet { ptr: isl_rs_result,
686 should_free_on_drop: true };
687 let err = isl_rs_ctx.last_error();
688 if err != Error::None_ {
689 let err_msg = isl_rs_ctx.last_error_msg();
690 isl_rs_ctx.reset_error();
691 return Err(LibISLError::new(err, err_msg));
692 }
693 Ok(isl_rs_result)
694 }
695
696 pub fn flatten(self) -> Result<BasicSet, LibISLError> {
698 let bset = self;
699 let isl_rs_ctx = bset.get_ctx();
700 let mut bset = bset;
701 bset.do_not_free_on_drop();
702 let bset = bset.ptr;
703 let isl_rs_result = unsafe { isl_basic_set_flatten(bset) };
704 let isl_rs_result = BasicSet { ptr: isl_rs_result,
705 should_free_on_drop: true };
706 let err = isl_rs_ctx.last_error();
707 if err != Error::None_ {
708 let err_msg = isl_rs_ctx.last_error_msg();
709 isl_rs_ctx.reset_error();
710 return Err(LibISLError::new(err, err_msg));
711 }
712 Ok(isl_rs_result)
713 }
714
715 pub fn free(self) -> Result<BasicSet, LibISLError> {
717 let bset = self;
718 let isl_rs_ctx = bset.get_ctx();
719 let mut bset = bset;
720 bset.do_not_free_on_drop();
721 let bset = bset.ptr;
722 let isl_rs_result = unsafe { isl_basic_set_free(bset) };
723 let isl_rs_result = BasicSet { ptr: isl_rs_result,
724 should_free_on_drop: true };
725 let err = isl_rs_ctx.last_error();
726 if err != Error::None_ {
727 let err_msg = isl_rs_ctx.last_error_msg();
728 isl_rs_ctx.reset_error();
729 return Err(LibISLError::new(err, err_msg));
730 }
731 Ok(isl_rs_result)
732 }
733
734 pub fn from_constraint(constraint: Constraint) -> Result<BasicSet, LibISLError> {
736 let isl_rs_ctx = constraint.get_ctx();
737 let mut constraint = constraint;
738 constraint.do_not_free_on_drop();
739 let constraint = constraint.ptr;
740 let isl_rs_result = unsafe { isl_basic_set_from_constraint(constraint) };
741 let isl_rs_result = BasicSet { ptr: isl_rs_result,
742 should_free_on_drop: true };
743 let err = isl_rs_ctx.last_error();
744 if err != Error::None_ {
745 let err_msg = isl_rs_ctx.last_error_msg();
746 isl_rs_ctx.reset_error();
747 return Err(LibISLError::new(err, err_msg));
748 }
749 Ok(isl_rs_result)
750 }
751
752 pub fn from_constraint_matrices(space: Space, eq: Mat, ineq: Mat, c1: DimType, c2: DimType,
754 c3: DimType, c4: DimType)
755 -> Result<BasicSet, LibISLError> {
756 let isl_rs_ctx = space.get_ctx();
757 let mut space = space;
758 space.do_not_free_on_drop();
759 let space = space.ptr;
760 let mut eq = eq;
761 eq.do_not_free_on_drop();
762 let eq = eq.ptr;
763 let mut ineq = ineq;
764 ineq.do_not_free_on_drop();
765 let ineq = ineq.ptr;
766 let c1 = c1.to_i32();
767 let c2 = c2.to_i32();
768 let c3 = c3.to_i32();
769 let c4 = c4.to_i32();
770 let isl_rs_result =
771 unsafe { isl_basic_set_from_constraint_matrices(space, eq, ineq, c1, c2, c3, c4) };
772 let isl_rs_result = BasicSet { ptr: isl_rs_result,
773 should_free_on_drop: true };
774 let err = isl_rs_ctx.last_error();
775 if err != Error::None_ {
776 let err_msg = isl_rs_ctx.last_error_msg();
777 isl_rs_ctx.reset_error();
778 return Err(LibISLError::new(err, err_msg));
779 }
780 Ok(isl_rs_result)
781 }
782
783 pub fn from_multi_aff(ma: MultiAff) -> Result<BasicSet, LibISLError> {
785 let isl_rs_ctx = ma.get_ctx();
786 let mut ma = ma;
787 ma.do_not_free_on_drop();
788 let ma = ma.ptr;
789 let isl_rs_result = unsafe { isl_basic_set_from_multi_aff(ma) };
790 let isl_rs_result = BasicSet { ptr: isl_rs_result,
791 should_free_on_drop: true };
792 let err = isl_rs_ctx.last_error();
793 if err != Error::None_ {
794 let err_msg = isl_rs_ctx.last_error_msg();
795 isl_rs_ctx.reset_error();
796 return Err(LibISLError::new(err, err_msg));
797 }
798 Ok(isl_rs_result)
799 }
800
801 pub fn from_params(self) -> Result<BasicSet, LibISLError> {
803 let bset = self;
804 let isl_rs_ctx = bset.get_ctx();
805 let mut bset = bset;
806 bset.do_not_free_on_drop();
807 let bset = bset.ptr;
808 let isl_rs_result = unsafe { isl_basic_set_from_params(bset) };
809 let isl_rs_result = BasicSet { ptr: isl_rs_result,
810 should_free_on_drop: true };
811 let err = isl_rs_ctx.last_error();
812 if err != Error::None_ {
813 let err_msg = isl_rs_ctx.last_error_msg();
814 isl_rs_ctx.reset_error();
815 return Err(LibISLError::new(err, err_msg));
816 }
817 Ok(isl_rs_result)
818 }
819
820 pub fn from_point(pnt: Point) -> Result<BasicSet, LibISLError> {
822 let isl_rs_ctx = pnt.get_ctx();
823 let mut pnt = pnt;
824 pnt.do_not_free_on_drop();
825 let pnt = pnt.ptr;
826 let isl_rs_result = unsafe { isl_basic_set_from_point(pnt) };
827 let isl_rs_result = BasicSet { ptr: isl_rs_result,
828 should_free_on_drop: true };
829 let err = isl_rs_ctx.last_error();
830 if err != Error::None_ {
831 let err_msg = isl_rs_ctx.last_error_msg();
832 isl_rs_ctx.reset_error();
833 return Err(LibISLError::new(err, err_msg));
834 }
835 Ok(isl_rs_result)
836 }
837
838 pub fn get_constraint_list(&self) -> Result<ConstraintList, LibISLError> {
840 let bset = self;
841 let isl_rs_ctx = bset.get_ctx();
842 let bset = bset.ptr;
843 let isl_rs_result = unsafe { isl_basic_set_get_constraint_list(bset) };
844 let isl_rs_result = ConstraintList { ptr: isl_rs_result,
845 should_free_on_drop: true };
846 let err = isl_rs_ctx.last_error();
847 if err != Error::None_ {
848 let err_msg = isl_rs_ctx.last_error_msg();
849 isl_rs_ctx.reset_error();
850 return Err(LibISLError::new(err, err_msg));
851 }
852 Ok(isl_rs_result)
853 }
854
855 pub fn get_ctx(&self) -> Context {
857 let bset = self;
858 let bset = bset.ptr;
859 let isl_rs_result = unsafe { isl_basic_set_get_ctx(bset) };
860 let isl_rs_result = Context { ptr: isl_rs_result,
861 should_free_on_drop: false };
862 isl_rs_result
863 }
864
865 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
867 let bset = self;
868 let isl_rs_ctx = bset.get_ctx();
869 let bset = bset.ptr;
870 let type_ = type_.to_i32();
871 let isl_rs_result = unsafe { isl_basic_set_get_dim_id(bset, type_, pos) };
872 let isl_rs_result = Id { ptr: isl_rs_result,
873 should_free_on_drop: true };
874 let err = isl_rs_ctx.last_error();
875 if err != Error::None_ {
876 let err_msg = isl_rs_ctx.last_error_msg();
877 isl_rs_ctx.reset_error();
878 return Err(LibISLError::new(err, err_msg));
879 }
880 Ok(isl_rs_result)
881 }
882
883 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
885 let bset = self;
886 let isl_rs_ctx = bset.get_ctx();
887 let bset = bset.ptr;
888 let type_ = type_.to_i32();
889 let isl_rs_result = unsafe { isl_basic_set_get_dim_name(bset, type_, pos) };
890 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
891 let isl_rs_result = isl_rs_result.to_str().unwrap();
892 let err = isl_rs_ctx.last_error();
893 if err != Error::None_ {
894 let err_msg = isl_rs_ctx.last_error_msg();
895 isl_rs_ctx.reset_error();
896 return Err(LibISLError::new(err, err_msg));
897 }
898 Ok(isl_rs_result)
899 }
900
901 pub fn get_div(&self, pos: i32) -> Result<Aff, LibISLError> {
903 let bset = self;
904 let isl_rs_ctx = bset.get_ctx();
905 let bset = bset.ptr;
906 let isl_rs_result = unsafe { isl_basic_set_get_div(bset, pos) };
907 let isl_rs_result = Aff { ptr: isl_rs_result,
908 should_free_on_drop: true };
909 let err = isl_rs_ctx.last_error();
910 if err != Error::None_ {
911 let err_msg = isl_rs_ctx.last_error_msg();
912 isl_rs_ctx.reset_error();
913 return Err(LibISLError::new(err, err_msg));
914 }
915 Ok(isl_rs_result)
916 }
917
918 pub fn get_local_space(&self) -> Result<LocalSpace, LibISLError> {
920 let bset = self;
921 let isl_rs_ctx = bset.get_ctx();
922 let bset = bset.ptr;
923 let isl_rs_result = unsafe { isl_basic_set_get_local_space(bset) };
924 let isl_rs_result = LocalSpace { ptr: isl_rs_result,
925 should_free_on_drop: true };
926 let err = isl_rs_ctx.last_error();
927 if err != Error::None_ {
928 let err_msg = isl_rs_ctx.last_error_msg();
929 isl_rs_ctx.reset_error();
930 return Err(LibISLError::new(err, err_msg));
931 }
932 Ok(isl_rs_result)
933 }
934
935 pub fn get_space(&self) -> Result<Space, LibISLError> {
937 let bset = self;
938 let isl_rs_ctx = bset.get_ctx();
939 let bset = bset.ptr;
940 let isl_rs_result = unsafe { isl_basic_set_get_space(bset) };
941 let isl_rs_result = Space { ptr: isl_rs_result,
942 should_free_on_drop: true };
943 let err = isl_rs_ctx.last_error();
944 if err != Error::None_ {
945 let err_msg = isl_rs_ctx.last_error_msg();
946 isl_rs_ctx.reset_error();
947 return Err(LibISLError::new(err, err_msg));
948 }
949 Ok(isl_rs_result)
950 }
951
952 pub fn get_tuple_name(&self) -> Result<&str, LibISLError> {
954 let bset = self;
955 let isl_rs_ctx = bset.get_ctx();
956 let bset = bset.ptr;
957 let isl_rs_result = unsafe { isl_basic_set_get_tuple_name(bset) };
958 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
959 let isl_rs_result = isl_rs_result.to_str().unwrap();
960 let err = isl_rs_ctx.last_error();
961 if err != Error::None_ {
962 let err_msg = isl_rs_ctx.last_error_msg();
963 isl_rs_ctx.reset_error();
964 return Err(LibISLError::new(err, err_msg));
965 }
966 Ok(isl_rs_result)
967 }
968
969 pub fn gist(self, context: BasicSet) -> Result<BasicSet, LibISLError> {
971 let bset = self;
972 let isl_rs_ctx = bset.get_ctx();
973 let mut bset = bset;
974 bset.do_not_free_on_drop();
975 let bset = bset.ptr;
976 let mut context = context;
977 context.do_not_free_on_drop();
978 let context = context.ptr;
979 let isl_rs_result = unsafe { isl_basic_set_gist(bset, context) };
980 let isl_rs_result = BasicSet { ptr: isl_rs_result,
981 should_free_on_drop: true };
982 let err = isl_rs_ctx.last_error();
983 if err != Error::None_ {
984 let err_msg = isl_rs_ctx.last_error_msg();
985 isl_rs_ctx.reset_error();
986 return Err(LibISLError::new(err, err_msg));
987 }
988 Ok(isl_rs_result)
989 }
990
991 pub fn inequalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType)
993 -> Result<Mat, LibISLError> {
994 let bset = self;
995 let isl_rs_ctx = bset.get_ctx();
996 let bset = bset.ptr;
997 let c1 = c1.to_i32();
998 let c2 = c2.to_i32();
999 let c3 = c3.to_i32();
1000 let c4 = c4.to_i32();
1001 let isl_rs_result = unsafe { isl_basic_set_inequalities_matrix(bset, c1, c2, c3, c4) };
1002 let isl_rs_result = Mat { ptr: isl_rs_result,
1003 should_free_on_drop: true };
1004 let err = isl_rs_ctx.last_error();
1005 if err != Error::None_ {
1006 let err_msg = isl_rs_ctx.last_error_msg();
1007 isl_rs_ctx.reset_error();
1008 return Err(LibISLError::new(err, err_msg));
1009 }
1010 Ok(isl_rs_result)
1011 }
1012
1013 pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> Result<BasicSet, LibISLError> {
1015 let bset = self;
1016 let isl_rs_ctx = bset.get_ctx();
1017 let mut bset = bset;
1018 bset.do_not_free_on_drop();
1019 let bset = bset.ptr;
1020 let type_ = type_.to_i32();
1021 let isl_rs_result = unsafe { isl_basic_set_insert_dims(bset, type_, pos, n) };
1022 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1023 should_free_on_drop: true };
1024 let err = isl_rs_ctx.last_error();
1025 if err != Error::None_ {
1026 let err_msg = isl_rs_ctx.last_error_msg();
1027 isl_rs_ctx.reset_error();
1028 return Err(LibISLError::new(err, err_msg));
1029 }
1030 Ok(isl_rs_result)
1031 }
1032
1033 pub fn intersect(self, bset2: BasicSet) -> Result<BasicSet, LibISLError> {
1035 let bset1 = self;
1036 let isl_rs_ctx = bset1.get_ctx();
1037 let mut bset1 = bset1;
1038 bset1.do_not_free_on_drop();
1039 let bset1 = bset1.ptr;
1040 let mut bset2 = bset2;
1041 bset2.do_not_free_on_drop();
1042 let bset2 = bset2.ptr;
1043 let isl_rs_result = unsafe { isl_basic_set_intersect(bset1, bset2) };
1044 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1045 should_free_on_drop: true };
1046 let err = isl_rs_ctx.last_error();
1047 if err != Error::None_ {
1048 let err_msg = isl_rs_ctx.last_error_msg();
1049 isl_rs_ctx.reset_error();
1050 return Err(LibISLError::new(err, err_msg));
1051 }
1052 Ok(isl_rs_result)
1053 }
1054
1055 pub fn intersect_params(self, bset2: BasicSet) -> Result<BasicSet, LibISLError> {
1057 let bset1 = self;
1058 let isl_rs_ctx = bset1.get_ctx();
1059 let mut bset1 = bset1;
1060 bset1.do_not_free_on_drop();
1061 let bset1 = bset1.ptr;
1062 let mut bset2 = bset2;
1063 bset2.do_not_free_on_drop();
1064 let bset2 = bset2.ptr;
1065 let isl_rs_result = unsafe { isl_basic_set_intersect_params(bset1, bset2) };
1066 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1067 should_free_on_drop: true };
1068 let err = isl_rs_ctx.last_error();
1069 if err != Error::None_ {
1070 let err_msg = isl_rs_ctx.last_error_msg();
1071 isl_rs_ctx.reset_error();
1072 return Err(LibISLError::new(err, err_msg));
1073 }
1074 Ok(isl_rs_result)
1075 }
1076
1077 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1079 let bset = self;
1080 let isl_rs_ctx = bset.get_ctx();
1081 let bset = bset.ptr;
1082 let type_ = type_.to_i32();
1083 let isl_rs_result = unsafe { isl_basic_set_involves_dims(bset, type_, first, n) };
1084 let isl_rs_result = match isl_rs_result {
1085 0 => false,
1086 1 => true,
1087 _ => {
1088 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1089 }
1090 };
1091 let err = isl_rs_ctx.last_error();
1092 if err != Error::None_ {
1093 let err_msg = isl_rs_ctx.last_error_msg();
1094 isl_rs_ctx.reset_error();
1095 return Err(LibISLError::new(err, err_msg));
1096 }
1097 Ok(isl_rs_result)
1098 }
1099
1100 pub fn is_bounded(&self) -> Result<bool, LibISLError> {
1102 let bset = self;
1103 let isl_rs_ctx = bset.get_ctx();
1104 let bset = bset.ptr;
1105 let isl_rs_result = unsafe { isl_basic_set_is_bounded(bset) };
1106 let isl_rs_result = match isl_rs_result {
1107 0 => false,
1108 1 => true,
1109 _ => {
1110 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1111 }
1112 };
1113 let err = isl_rs_ctx.last_error();
1114 if err != Error::None_ {
1115 let err_msg = isl_rs_ctx.last_error_msg();
1116 isl_rs_ctx.reset_error();
1117 return Err(LibISLError::new(err, err_msg));
1118 }
1119 Ok(isl_rs_result)
1120 }
1121
1122 pub fn is_disjoint(&self, bset2: &BasicSet) -> Result<bool, LibISLError> {
1124 let bset1 = self;
1125 let isl_rs_ctx = bset1.get_ctx();
1126 let bset1 = bset1.ptr;
1127 let bset2 = bset2.ptr;
1128 let isl_rs_result = unsafe { isl_basic_set_is_disjoint(bset1, bset2) };
1129 let isl_rs_result = match isl_rs_result {
1130 0 => false,
1131 1 => true,
1132 _ => {
1133 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1134 }
1135 };
1136 let err = isl_rs_ctx.last_error();
1137 if err != Error::None_ {
1138 let err_msg = isl_rs_ctx.last_error_msg();
1139 isl_rs_ctx.reset_error();
1140 return Err(LibISLError::new(err, err_msg));
1141 }
1142 Ok(isl_rs_result)
1143 }
1144
1145 pub fn is_empty(&self) -> Result<bool, LibISLError> {
1147 let bset = self;
1148 let isl_rs_ctx = bset.get_ctx();
1149 let bset = bset.ptr;
1150 let isl_rs_result = unsafe { isl_basic_set_is_empty(bset) };
1151 let isl_rs_result = match isl_rs_result {
1152 0 => false,
1153 1 => true,
1154 _ => {
1155 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1156 }
1157 };
1158 let err = isl_rs_ctx.last_error();
1159 if err != Error::None_ {
1160 let err_msg = isl_rs_ctx.last_error_msg();
1161 isl_rs_ctx.reset_error();
1162 return Err(LibISLError::new(err, err_msg));
1163 }
1164 Ok(isl_rs_result)
1165 }
1166
1167 pub fn is_equal(&self, bset2: &BasicSet) -> Result<bool, LibISLError> {
1169 let bset1 = self;
1170 let isl_rs_ctx = bset1.get_ctx();
1171 let bset1 = bset1.ptr;
1172 let bset2 = bset2.ptr;
1173 let isl_rs_result = unsafe { isl_basic_set_is_equal(bset1, bset2) };
1174 let isl_rs_result = match isl_rs_result {
1175 0 => false,
1176 1 => true,
1177 _ => {
1178 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1179 }
1180 };
1181 let err = isl_rs_ctx.last_error();
1182 if err != Error::None_ {
1183 let err_msg = isl_rs_ctx.last_error_msg();
1184 isl_rs_ctx.reset_error();
1185 return Err(LibISLError::new(err, err_msg));
1186 }
1187 Ok(isl_rs_result)
1188 }
1189
1190 pub fn is_rational(&self) -> Result<i32, LibISLError> {
1192 let bset = self;
1193 let isl_rs_ctx = bset.get_ctx();
1194 let bset = bset.ptr;
1195 let isl_rs_result = unsafe { isl_basic_set_is_rational(bset) };
1196 let err = isl_rs_ctx.last_error();
1197 if err != Error::None_ {
1198 let err_msg = isl_rs_ctx.last_error_msg();
1199 isl_rs_ctx.reset_error();
1200 return Err(LibISLError::new(err, err_msg));
1201 }
1202 Ok(isl_rs_result)
1203 }
1204
1205 pub fn is_subset(&self, bset2: &BasicSet) -> Result<bool, LibISLError> {
1207 let bset1 = self;
1208 let isl_rs_ctx = bset1.get_ctx();
1209 let bset1 = bset1.ptr;
1210 let bset2 = bset2.ptr;
1211 let isl_rs_result = unsafe { isl_basic_set_is_subset(bset1, bset2) };
1212 let isl_rs_result = match isl_rs_result {
1213 0 => false,
1214 1 => true,
1215 _ => {
1216 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1217 }
1218 };
1219 let err = isl_rs_ctx.last_error();
1220 if err != Error::None_ {
1221 let err_msg = isl_rs_ctx.last_error_msg();
1222 isl_rs_ctx.reset_error();
1223 return Err(LibISLError::new(err, err_msg));
1224 }
1225 Ok(isl_rs_result)
1226 }
1227
1228 pub fn is_universe(&self) -> Result<bool, LibISLError> {
1230 let bset = self;
1231 let isl_rs_ctx = bset.get_ctx();
1232 let bset = bset.ptr;
1233 let isl_rs_result = unsafe { isl_basic_set_is_universe(bset) };
1234 let isl_rs_result = match isl_rs_result {
1235 0 => false,
1236 1 => true,
1237 _ => {
1238 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1239 }
1240 };
1241 let err = isl_rs_ctx.last_error();
1242 if err != Error::None_ {
1243 let err_msg = isl_rs_ctx.last_error_msg();
1244 isl_rs_ctx.reset_error();
1245 return Err(LibISLError::new(err, err_msg));
1246 }
1247 Ok(isl_rs_result)
1248 }
1249
1250 pub fn is_wrapping(&self) -> Result<bool, LibISLError> {
1252 let bset = self;
1253 let isl_rs_ctx = bset.get_ctx();
1254 let bset = bset.ptr;
1255 let isl_rs_result = unsafe { isl_basic_set_is_wrapping(bset) };
1256 let isl_rs_result = match isl_rs_result {
1257 0 => false,
1258 1 => true,
1259 _ => {
1260 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1261 }
1262 };
1263 let err = isl_rs_ctx.last_error();
1264 if err != Error::None_ {
1265 let err_msg = isl_rs_ctx.last_error_msg();
1266 isl_rs_ctx.reset_error();
1267 return Err(LibISLError::new(err, err_msg));
1268 }
1269 Ok(isl_rs_result)
1270 }
1271
1272 pub fn lexmax(self) -> Result<Set, LibISLError> {
1274 let bset = self;
1275 let isl_rs_ctx = bset.get_ctx();
1276 let mut bset = bset;
1277 bset.do_not_free_on_drop();
1278 let bset = bset.ptr;
1279 let isl_rs_result = unsafe { isl_basic_set_lexmax(bset) };
1280 let isl_rs_result = Set { ptr: isl_rs_result,
1281 should_free_on_drop: true };
1282 let err = isl_rs_ctx.last_error();
1283 if err != Error::None_ {
1284 let err_msg = isl_rs_ctx.last_error_msg();
1285 isl_rs_ctx.reset_error();
1286 return Err(LibISLError::new(err, err_msg));
1287 }
1288 Ok(isl_rs_result)
1289 }
1290
1291 pub fn lexmin(self) -> Result<Set, LibISLError> {
1293 let bset = self;
1294 let isl_rs_ctx = bset.get_ctx();
1295 let mut bset = bset;
1296 bset.do_not_free_on_drop();
1297 let bset = bset.ptr;
1298 let isl_rs_result = unsafe { isl_basic_set_lexmin(bset) };
1299 let isl_rs_result = Set { ptr: isl_rs_result,
1300 should_free_on_drop: true };
1301 let err = isl_rs_ctx.last_error();
1302 if err != Error::None_ {
1303 let err_msg = isl_rs_ctx.last_error_msg();
1304 isl_rs_ctx.reset_error();
1305 return Err(LibISLError::new(err, err_msg));
1306 }
1307 Ok(isl_rs_result)
1308 }
1309
1310 pub fn lift(self) -> Result<BasicSet, LibISLError> {
1312 let bset = self;
1313 let isl_rs_ctx = bset.get_ctx();
1314 let mut bset = bset;
1315 bset.do_not_free_on_drop();
1316 let bset = bset.ptr;
1317 let isl_rs_result = unsafe { isl_basic_set_lift(bset) };
1318 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1319 should_free_on_drop: true };
1320 let err = isl_rs_ctx.last_error();
1321 if err != Error::None_ {
1322 let err_msg = isl_rs_ctx.last_error_msg();
1323 isl_rs_ctx.reset_error();
1324 return Err(LibISLError::new(err, err_msg));
1325 }
1326 Ok(isl_rs_result)
1327 }
1328
1329 pub fn lower_bound_val(self, type_: DimType, pos: u32, value: Val)
1331 -> Result<BasicSet, LibISLError> {
1332 let bset = self;
1333 let isl_rs_ctx = bset.get_ctx();
1334 let mut bset = bset;
1335 bset.do_not_free_on_drop();
1336 let bset = bset.ptr;
1337 let type_ = type_.to_i32();
1338 let mut value = value;
1339 value.do_not_free_on_drop();
1340 let value = value.ptr;
1341 let isl_rs_result = unsafe { isl_basic_set_lower_bound_val(bset, type_, pos, value) };
1342 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1343 should_free_on_drop: true };
1344 let err = isl_rs_ctx.last_error();
1345 if err != Error::None_ {
1346 let err_msg = isl_rs_ctx.last_error_msg();
1347 isl_rs_ctx.reset_error();
1348 return Err(LibISLError::new(err, err_msg));
1349 }
1350 Ok(isl_rs_result)
1351 }
1352
1353 pub fn max_lp_val(&self, obj: &Aff) -> Result<Val, LibISLError> {
1355 let bset = self;
1356 let isl_rs_ctx = bset.get_ctx();
1357 let bset = bset.ptr;
1358 let obj = obj.ptr;
1359 let isl_rs_result = unsafe { isl_basic_set_max_lp_val(bset, obj) };
1360 let isl_rs_result = Val { ptr: isl_rs_result,
1361 should_free_on_drop: true };
1362 let err = isl_rs_ctx.last_error();
1363 if err != Error::None_ {
1364 let err_msg = isl_rs_ctx.last_error_msg();
1365 isl_rs_ctx.reset_error();
1366 return Err(LibISLError::new(err, err_msg));
1367 }
1368 Ok(isl_rs_result)
1369 }
1370
1371 pub fn max_val(&self, obj: &Aff) -> Result<Val, LibISLError> {
1373 let bset = self;
1374 let isl_rs_ctx = bset.get_ctx();
1375 let bset = bset.ptr;
1376 let obj = obj.ptr;
1377 let isl_rs_result = unsafe { isl_basic_set_max_val(bset, obj) };
1378 let isl_rs_result = Val { ptr: isl_rs_result,
1379 should_free_on_drop: true };
1380 let err = isl_rs_ctx.last_error();
1381 if err != Error::None_ {
1382 let err_msg = isl_rs_ctx.last_error_msg();
1383 isl_rs_ctx.reset_error();
1384 return Err(LibISLError::new(err, err_msg));
1385 }
1386 Ok(isl_rs_result)
1387 }
1388
1389 pub fn min_lp_val(&self, obj: &Aff) -> Result<Val, LibISLError> {
1391 let bset = self;
1392 let isl_rs_ctx = bset.get_ctx();
1393 let bset = bset.ptr;
1394 let obj = obj.ptr;
1395 let isl_rs_result = unsafe { isl_basic_set_min_lp_val(bset, obj) };
1396 let isl_rs_result = Val { ptr: isl_rs_result,
1397 should_free_on_drop: true };
1398 let err = isl_rs_ctx.last_error();
1399 if err != Error::None_ {
1400 let err_msg = isl_rs_ctx.last_error_msg();
1401 isl_rs_ctx.reset_error();
1402 return Err(LibISLError::new(err, err_msg));
1403 }
1404 Ok(isl_rs_result)
1405 }
1406
1407 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1409 n: u32)
1410 -> Result<BasicSet, LibISLError> {
1411 let bset = self;
1412 let isl_rs_ctx = bset.get_ctx();
1413 let mut bset = bset;
1414 bset.do_not_free_on_drop();
1415 let bset = bset.ptr;
1416 let dst_type = dst_type.to_i32();
1417 let src_type = src_type.to_i32();
1418 let isl_rs_result =
1419 unsafe { isl_basic_set_move_dims(bset, dst_type, dst_pos, src_type, src_pos, n) };
1420 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1421 should_free_on_drop: true };
1422 let err = isl_rs_ctx.last_error();
1423 if err != Error::None_ {
1424 let err_msg = isl_rs_ctx.last_error_msg();
1425 isl_rs_ctx.reset_error();
1426 return Err(LibISLError::new(err, err_msg));
1427 }
1428 Ok(isl_rs_result)
1429 }
1430
1431 pub fn n_constraint(&self) -> Result<i32, LibISLError> {
1433 let bset = self;
1434 let isl_rs_ctx = bset.get_ctx();
1435 let bset = bset.ptr;
1436 let isl_rs_result = unsafe { isl_basic_set_n_constraint(bset) };
1437 let err = isl_rs_ctx.last_error();
1438 if err != Error::None_ {
1439 let err_msg = isl_rs_ctx.last_error_msg();
1440 isl_rs_ctx.reset_error();
1441 return Err(LibISLError::new(err, err_msg));
1442 }
1443 Ok(isl_rs_result)
1444 }
1445
1446 pub fn n_dim(&self) -> Result<i32, LibISLError> {
1448 let bset = self;
1449 let isl_rs_ctx = bset.get_ctx();
1450 let bset = bset.ptr;
1451 let isl_rs_result = unsafe { isl_basic_set_n_dim(bset) };
1452 let err = isl_rs_ctx.last_error();
1453 if err != Error::None_ {
1454 let err_msg = isl_rs_ctx.last_error_msg();
1455 isl_rs_ctx.reset_error();
1456 return Err(LibISLError::new(err, err_msg));
1457 }
1458 Ok(isl_rs_result)
1459 }
1460
1461 pub fn n_param(&self) -> Result<i32, LibISLError> {
1463 let bset = self;
1464 let isl_rs_ctx = bset.get_ctx();
1465 let bset = bset.ptr;
1466 let isl_rs_result = unsafe { isl_basic_set_n_param(bset) };
1467 let err = isl_rs_ctx.last_error();
1468 if err != Error::None_ {
1469 let err_msg = isl_rs_ctx.last_error_msg();
1470 isl_rs_ctx.reset_error();
1471 return Err(LibISLError::new(err, err_msg));
1472 }
1473 Ok(isl_rs_result)
1474 }
1475
1476 pub fn nat_universe(space: Space) -> Result<BasicSet, LibISLError> {
1478 let isl_rs_ctx = space.get_ctx();
1479 let mut space = space;
1480 space.do_not_free_on_drop();
1481 let space = space.ptr;
1482 let isl_rs_result = unsafe { isl_basic_set_nat_universe(space) };
1483 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1484 should_free_on_drop: true };
1485 let err = isl_rs_ctx.last_error();
1486 if err != Error::None_ {
1487 let err_msg = isl_rs_ctx.last_error_msg();
1488 isl_rs_ctx.reset_error();
1489 return Err(LibISLError::new(err, err_msg));
1490 }
1491 Ok(isl_rs_result)
1492 }
1493
1494 pub fn neg(self) -> Result<BasicSet, LibISLError> {
1496 let bset = self;
1497 let isl_rs_ctx = bset.get_ctx();
1498 let mut bset = bset;
1499 bset.do_not_free_on_drop();
1500 let bset = bset.ptr;
1501 let isl_rs_result = unsafe { isl_basic_set_neg(bset) };
1502 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1503 should_free_on_drop: true };
1504 let err = isl_rs_ctx.last_error();
1505 if err != Error::None_ {
1506 let err_msg = isl_rs_ctx.last_error_msg();
1507 isl_rs_ctx.reset_error();
1508 return Err(LibISLError::new(err, err_msg));
1509 }
1510 Ok(isl_rs_result)
1511 }
1512
1513 pub fn params(self) -> Result<BasicSet, LibISLError> {
1515 let bset = self;
1516 let isl_rs_ctx = bset.get_ctx();
1517 let mut bset = bset;
1518 bset.do_not_free_on_drop();
1519 let bset = bset.ptr;
1520 let isl_rs_result = unsafe { isl_basic_set_params(bset) };
1521 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1522 should_free_on_drop: true };
1523 let err = isl_rs_ctx.last_error();
1524 if err != Error::None_ {
1525 let err_msg = isl_rs_ctx.last_error_msg();
1526 isl_rs_ctx.reset_error();
1527 return Err(LibISLError::new(err, err_msg));
1528 }
1529 Ok(isl_rs_result)
1530 }
1531
1532 pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
1534 let bset = self;
1535 let isl_rs_ctx = bset.get_ctx();
1536 let bset = bset.ptr;
1537 let isl_rs_result = unsafe { isl_basic_set_plain_is_empty(bset) };
1538 let isl_rs_result = match isl_rs_result {
1539 0 => false,
1540 1 => true,
1541 _ => {
1542 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1543 }
1544 };
1545 let err = isl_rs_ctx.last_error();
1546 if err != Error::None_ {
1547 let err_msg = isl_rs_ctx.last_error_msg();
1548 isl_rs_ctx.reset_error();
1549 return Err(LibISLError::new(err, err_msg));
1550 }
1551 Ok(isl_rs_result)
1552 }
1553
1554 pub fn plain_is_equal(&self, bset2: &BasicSet) -> Result<bool, LibISLError> {
1556 let bset1 = self;
1557 let isl_rs_ctx = bset1.get_ctx();
1558 let bset1 = bset1.ptr;
1559 let bset2 = bset2.ptr;
1560 let isl_rs_result = unsafe { isl_basic_set_plain_is_equal(bset1, bset2) };
1561 let isl_rs_result = match isl_rs_result {
1562 0 => false,
1563 1 => true,
1564 _ => {
1565 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1566 }
1567 };
1568 let err = isl_rs_ctx.last_error();
1569 if err != Error::None_ {
1570 let err_msg = isl_rs_ctx.last_error_msg();
1571 isl_rs_ctx.reset_error();
1572 return Err(LibISLError::new(err, err_msg));
1573 }
1574 Ok(isl_rs_result)
1575 }
1576
1577 pub fn plain_is_universe(&self) -> Result<bool, LibISLError> {
1579 let bset = self;
1580 let isl_rs_ctx = bset.get_ctx();
1581 let bset = bset.ptr;
1582 let isl_rs_result = unsafe { isl_basic_set_plain_is_universe(bset) };
1583 let isl_rs_result = match isl_rs_result {
1584 0 => false,
1585 1 => true,
1586 _ => {
1587 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1588 }
1589 };
1590 let err = isl_rs_ctx.last_error();
1591 if err != Error::None_ {
1592 let err_msg = isl_rs_ctx.last_error_msg();
1593 isl_rs_ctx.reset_error();
1594 return Err(LibISLError::new(err, err_msg));
1595 }
1596 Ok(isl_rs_result)
1597 }
1598
1599 pub fn positive_orthant(space: Space) -> Result<BasicSet, LibISLError> {
1601 let isl_rs_ctx = space.get_ctx();
1602 let mut space = space;
1603 space.do_not_free_on_drop();
1604 let space = space.ptr;
1605 let isl_rs_result = unsafe { isl_basic_set_positive_orthant(space) };
1606 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1607 should_free_on_drop: true };
1608 let err = isl_rs_ctx.last_error();
1609 if err != Error::None_ {
1610 let err_msg = isl_rs_ctx.last_error_msg();
1611 isl_rs_ctx.reset_error();
1612 return Err(LibISLError::new(err, err_msg));
1613 }
1614 Ok(isl_rs_result)
1615 }
1616
1617 pub fn preimage_multi_aff(self, ma: MultiAff) -> Result<BasicSet, LibISLError> {
1619 let bset = self;
1620 let isl_rs_ctx = bset.get_ctx();
1621 let mut bset = bset;
1622 bset.do_not_free_on_drop();
1623 let bset = bset.ptr;
1624 let mut ma = ma;
1625 ma.do_not_free_on_drop();
1626 let ma = ma.ptr;
1627 let isl_rs_result = unsafe { isl_basic_set_preimage_multi_aff(bset, ma) };
1628 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1629 should_free_on_drop: true };
1630 let err = isl_rs_ctx.last_error();
1631 if err != Error::None_ {
1632 let err_msg = isl_rs_ctx.last_error_msg();
1633 isl_rs_ctx.reset_error();
1634 return Err(LibISLError::new(err, err_msg));
1635 }
1636 Ok(isl_rs_result)
1637 }
1638
1639 pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<BasicSet, LibISLError> {
1641 let bset = self;
1642 let isl_rs_ctx = bset.get_ctx();
1643 let mut bset = bset;
1644 bset.do_not_free_on_drop();
1645 let bset = bset.ptr;
1646 let type_ = type_.to_i32();
1647 let isl_rs_result = unsafe { isl_basic_set_project_out(bset, type_, first, n) };
1648 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1649 should_free_on_drop: true };
1650 let err = isl_rs_ctx.last_error();
1651 if err != Error::None_ {
1652 let err_msg = isl_rs_ctx.last_error_msg();
1653 isl_rs_ctx.reset_error();
1654 return Err(LibISLError::new(err, err_msg));
1655 }
1656 Ok(isl_rs_result)
1657 }
1658
1659 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<BasicSet, LibISLError> {
1661 let isl_rs_ctx = Context { ptr: ctx.ptr,
1662 should_free_on_drop: false };
1663 let ctx = ctx.ptr;
1664 let str_ = CString::new(str_).unwrap();
1665 let str_ = str_.as_ptr();
1666 let isl_rs_result = unsafe { isl_basic_set_read_from_str(ctx, str_) };
1667 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1668 should_free_on_drop: true };
1669 let err = isl_rs_ctx.last_error();
1670 if err != Error::None_ {
1671 let err_msg = isl_rs_ctx.last_error_msg();
1672 isl_rs_ctx.reset_error();
1673 return Err(LibISLError::new(err, err_msg));
1674 }
1675 Ok(isl_rs_result)
1676 }
1677
1678 pub fn reduced_basis(&self) -> Result<Mat, LibISLError> {
1680 let bset = self;
1681 let isl_rs_ctx = bset.get_ctx();
1682 let bset = bset.ptr;
1683 let isl_rs_result = unsafe { isl_basic_set_reduced_basis(bset) };
1684 let isl_rs_result = Mat { ptr: isl_rs_result,
1685 should_free_on_drop: true };
1686 let err = isl_rs_ctx.last_error();
1687 if err != Error::None_ {
1688 let err_msg = isl_rs_ctx.last_error_msg();
1689 isl_rs_ctx.reset_error();
1690 return Err(LibISLError::new(err, err_msg));
1691 }
1692 Ok(isl_rs_result)
1693 }
1694
1695 pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> Result<BasicSet, LibISLError> {
1697 let bset = self;
1698 let isl_rs_ctx = bset.get_ctx();
1699 let mut bset = bset;
1700 bset.do_not_free_on_drop();
1701 let bset = bset.ptr;
1702 let type_ = type_.to_i32();
1703 let isl_rs_result = unsafe { isl_basic_set_remove_dims(bset, type_, first, n) };
1704 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1705 should_free_on_drop: true };
1706 let err = isl_rs_ctx.last_error();
1707 if err != Error::None_ {
1708 let err_msg = isl_rs_ctx.last_error_msg();
1709 isl_rs_ctx.reset_error();
1710 return Err(LibISLError::new(err, err_msg));
1711 }
1712 Ok(isl_rs_result)
1713 }
1714
1715 pub fn remove_divs(self) -> Result<BasicSet, LibISLError> {
1717 let bset = self;
1718 let isl_rs_ctx = bset.get_ctx();
1719 let mut bset = bset;
1720 bset.do_not_free_on_drop();
1721 let bset = bset.ptr;
1722 let isl_rs_result = unsafe { isl_basic_set_remove_divs(bset) };
1723 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1724 should_free_on_drop: true };
1725 let err = isl_rs_ctx.last_error();
1726 if err != Error::None_ {
1727 let err_msg = isl_rs_ctx.last_error_msg();
1728 isl_rs_ctx.reset_error();
1729 return Err(LibISLError::new(err, err_msg));
1730 }
1731 Ok(isl_rs_result)
1732 }
1733
1734 pub fn remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32)
1736 -> Result<BasicSet, LibISLError> {
1737 let bset = self;
1738 let isl_rs_ctx = bset.get_ctx();
1739 let mut bset = bset;
1740 bset.do_not_free_on_drop();
1741 let bset = bset.ptr;
1742 let type_ = type_.to_i32();
1743 let isl_rs_result =
1744 unsafe { isl_basic_set_remove_divs_involving_dims(bset, type_, first, n) };
1745 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1746 should_free_on_drop: true };
1747 let err = isl_rs_ctx.last_error();
1748 if err != Error::None_ {
1749 let err_msg = isl_rs_ctx.last_error_msg();
1750 isl_rs_ctx.reset_error();
1751 return Err(LibISLError::new(err, err_msg));
1752 }
1753 Ok(isl_rs_result)
1754 }
1755
1756 pub fn remove_redundancies(self) -> Result<BasicSet, LibISLError> {
1758 let bset = self;
1759 let isl_rs_ctx = bset.get_ctx();
1760 let mut bset = bset;
1761 bset.do_not_free_on_drop();
1762 let bset = bset.ptr;
1763 let isl_rs_result = unsafe { isl_basic_set_remove_redundancies(bset) };
1764 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1765 should_free_on_drop: true };
1766 let err = isl_rs_ctx.last_error();
1767 if err != Error::None_ {
1768 let err_msg = isl_rs_ctx.last_error_msg();
1769 isl_rs_ctx.reset_error();
1770 return Err(LibISLError::new(err, err_msg));
1771 }
1772 Ok(isl_rs_result)
1773 }
1774
1775 pub fn remove_unknown_divs(self) -> Result<BasicSet, LibISLError> {
1777 let bset = self;
1778 let isl_rs_ctx = bset.get_ctx();
1779 let mut bset = bset;
1780 bset.do_not_free_on_drop();
1781 let bset = bset.ptr;
1782 let isl_rs_result = unsafe { isl_basic_set_remove_unknown_divs(bset) };
1783 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1784 should_free_on_drop: true };
1785 let err = isl_rs_ctx.last_error();
1786 if err != Error::None_ {
1787 let err_msg = isl_rs_ctx.last_error_msg();
1788 isl_rs_ctx.reset_error();
1789 return Err(LibISLError::new(err, err_msg));
1790 }
1791 Ok(isl_rs_result)
1792 }
1793
1794 pub fn sample(self) -> Result<BasicSet, LibISLError> {
1796 let bset = self;
1797 let isl_rs_ctx = bset.get_ctx();
1798 let mut bset = bset;
1799 bset.do_not_free_on_drop();
1800 let bset = bset.ptr;
1801 let isl_rs_result = unsafe { isl_basic_set_sample(bset) };
1802 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1803 should_free_on_drop: true };
1804 let err = isl_rs_ctx.last_error();
1805 if err != Error::None_ {
1806 let err_msg = isl_rs_ctx.last_error_msg();
1807 isl_rs_ctx.reset_error();
1808 return Err(LibISLError::new(err, err_msg));
1809 }
1810 Ok(isl_rs_result)
1811 }
1812
1813 pub fn sample_point(self) -> Result<Point, LibISLError> {
1815 let bset = self;
1816 let isl_rs_ctx = bset.get_ctx();
1817 let mut bset = bset;
1818 bset.do_not_free_on_drop();
1819 let bset = bset.ptr;
1820 let isl_rs_result = unsafe { isl_basic_set_sample_point(bset) };
1821 let isl_rs_result = Point { ptr: isl_rs_result,
1822 should_free_on_drop: true };
1823 let err = isl_rs_ctx.last_error();
1824 if err != Error::None_ {
1825 let err_msg = isl_rs_ctx.last_error_msg();
1826 isl_rs_ctx.reset_error();
1827 return Err(LibISLError::new(err, err_msg));
1828 }
1829 Ok(isl_rs_result)
1830 }
1831
1832 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<BasicSet, LibISLError> {
1834 let bset = self;
1835 let isl_rs_ctx = bset.get_ctx();
1836 let mut bset = bset;
1837 bset.do_not_free_on_drop();
1838 let bset = bset.ptr;
1839 let type_ = type_.to_i32();
1840 let s = CString::new(s).unwrap();
1841 let s = s.as_ptr();
1842 let isl_rs_result = unsafe { isl_basic_set_set_dim_name(bset, type_, pos, s) };
1843 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1844 should_free_on_drop: true };
1845 let err = isl_rs_ctx.last_error();
1846 if err != Error::None_ {
1847 let err_msg = isl_rs_ctx.last_error_msg();
1848 isl_rs_ctx.reset_error();
1849 return Err(LibISLError::new(err, err_msg));
1850 }
1851 Ok(isl_rs_result)
1852 }
1853
1854 pub fn set_tuple_id(self, id: Id) -> Result<BasicSet, LibISLError> {
1856 let bset = self;
1857 let isl_rs_ctx = bset.get_ctx();
1858 let mut bset = bset;
1859 bset.do_not_free_on_drop();
1860 let bset = bset.ptr;
1861 let mut id = id;
1862 id.do_not_free_on_drop();
1863 let id = id.ptr;
1864 let isl_rs_result = unsafe { isl_basic_set_set_tuple_id(bset, id) };
1865 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1866 should_free_on_drop: true };
1867 let err = isl_rs_ctx.last_error();
1868 if err != Error::None_ {
1869 let err_msg = isl_rs_ctx.last_error_msg();
1870 isl_rs_ctx.reset_error();
1871 return Err(LibISLError::new(err, err_msg));
1872 }
1873 Ok(isl_rs_result)
1874 }
1875
1876 pub fn set_tuple_name(self, s: &str) -> Result<BasicSet, LibISLError> {
1878 let set = self;
1879 let isl_rs_ctx = set.get_ctx();
1880 let mut set = set;
1881 set.do_not_free_on_drop();
1882 let set = set.ptr;
1883 let s = CString::new(s).unwrap();
1884 let s = s.as_ptr();
1885 let isl_rs_result = unsafe { isl_basic_set_set_tuple_name(set, s) };
1886 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1887 should_free_on_drop: true };
1888 let err = isl_rs_ctx.last_error();
1889 if err != Error::None_ {
1890 let err_msg = isl_rs_ctx.last_error_msg();
1891 isl_rs_ctx.reset_error();
1892 return Err(LibISLError::new(err, err_msg));
1893 }
1894 Ok(isl_rs_result)
1895 }
1896
1897 pub fn solutions(self) -> Result<BasicSet, LibISLError> {
1899 let bset = self;
1900 let isl_rs_ctx = bset.get_ctx();
1901 let mut bset = bset;
1902 bset.do_not_free_on_drop();
1903 let bset = bset.ptr;
1904 let isl_rs_result = unsafe { isl_basic_set_solutions(bset) };
1905 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1906 should_free_on_drop: true };
1907 let err = isl_rs_ctx.last_error();
1908 if err != Error::None_ {
1909 let err_msg = isl_rs_ctx.last_error_msg();
1910 isl_rs_ctx.reset_error();
1911 return Err(LibISLError::new(err, err_msg));
1912 }
1913 Ok(isl_rs_result)
1914 }
1915
1916 pub fn to_list(self) -> Result<BasicSetList, LibISLError> {
1918 let el = self;
1919 let isl_rs_ctx = el.get_ctx();
1920 let mut el = el;
1921 el.do_not_free_on_drop();
1922 let el = el.ptr;
1923 let isl_rs_result = unsafe { isl_basic_set_to_list(el) };
1924 let isl_rs_result = BasicSetList { ptr: isl_rs_result,
1925 should_free_on_drop: true };
1926 let err = isl_rs_ctx.last_error();
1927 if err != Error::None_ {
1928 let err_msg = isl_rs_ctx.last_error_msg();
1929 isl_rs_ctx.reset_error();
1930 return Err(LibISLError::new(err, err_msg));
1931 }
1932 Ok(isl_rs_result)
1933 }
1934
1935 pub fn to_set(self) -> Result<Set, LibISLError> {
1937 let bset = self;
1938 let isl_rs_ctx = bset.get_ctx();
1939 let mut bset = bset;
1940 bset.do_not_free_on_drop();
1941 let bset = bset.ptr;
1942 let isl_rs_result = unsafe { isl_basic_set_to_set(bset) };
1943 let isl_rs_result = Set { ptr: isl_rs_result,
1944 should_free_on_drop: true };
1945 let err = isl_rs_ctx.last_error();
1946 if err != Error::None_ {
1947 let err_msg = isl_rs_ctx.last_error_msg();
1948 isl_rs_ctx.reset_error();
1949 return Err(LibISLError::new(err, err_msg));
1950 }
1951 Ok(isl_rs_result)
1952 }
1953
1954 pub fn to_str(&self) -> Result<&str, LibISLError> {
1956 let bset = self;
1957 let isl_rs_ctx = bset.get_ctx();
1958 let bset = bset.ptr;
1959 let isl_rs_result = unsafe { isl_basic_set_to_str(bset) };
1960 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1961 let isl_rs_result = isl_rs_result.to_str().unwrap();
1962 let err = isl_rs_ctx.last_error();
1963 if err != Error::None_ {
1964 let err_msg = isl_rs_ctx.last_error_msg();
1965 isl_rs_ctx.reset_error();
1966 return Err(LibISLError::new(err, err_msg));
1967 }
1968 Ok(isl_rs_result)
1969 }
1970
1971 pub fn total_dim(&self) -> Result<i32, LibISLError> {
1973 let bset = self;
1974 let isl_rs_ctx = bset.get_ctx();
1975 let bset = bset.ptr;
1976 let isl_rs_result = unsafe { isl_basic_set_total_dim(bset) };
1977 let err = isl_rs_ctx.last_error();
1978 if err != Error::None_ {
1979 let err_msg = isl_rs_ctx.last_error_msg();
1980 isl_rs_ctx.reset_error();
1981 return Err(LibISLError::new(err, err_msg));
1982 }
1983 Ok(isl_rs_result)
1984 }
1985
1986 pub fn union(self, bset2: BasicSet) -> Result<Set, LibISLError> {
1988 let bset1 = self;
1989 let isl_rs_ctx = bset1.get_ctx();
1990 let mut bset1 = bset1;
1991 bset1.do_not_free_on_drop();
1992 let bset1 = bset1.ptr;
1993 let mut bset2 = bset2;
1994 bset2.do_not_free_on_drop();
1995 let bset2 = bset2.ptr;
1996 let isl_rs_result = unsafe { isl_basic_set_union(bset1, bset2) };
1997 let isl_rs_result = Set { ptr: isl_rs_result,
1998 should_free_on_drop: true };
1999 let err = isl_rs_ctx.last_error();
2000 if err != Error::None_ {
2001 let err_msg = isl_rs_ctx.last_error_msg();
2002 isl_rs_ctx.reset_error();
2003 return Err(LibISLError::new(err, err_msg));
2004 }
2005 Ok(isl_rs_result)
2006 }
2007
2008 pub fn universe(space: Space) -> Result<BasicSet, LibISLError> {
2010 let isl_rs_ctx = space.get_ctx();
2011 let mut space = space;
2012 space.do_not_free_on_drop();
2013 let space = space.ptr;
2014 let isl_rs_result = unsafe { isl_basic_set_universe(space) };
2015 let isl_rs_result = BasicSet { ptr: isl_rs_result,
2016 should_free_on_drop: true };
2017 let err = isl_rs_ctx.last_error();
2018 if err != Error::None_ {
2019 let err_msg = isl_rs_ctx.last_error_msg();
2020 isl_rs_ctx.reset_error();
2021 return Err(LibISLError::new(err, err_msg));
2022 }
2023 Ok(isl_rs_result)
2024 }
2025
2026 pub fn unwrap(self) -> Result<BasicMap, LibISLError> {
2028 let bset = self;
2029 let isl_rs_ctx = bset.get_ctx();
2030 let mut bset = bset;
2031 bset.do_not_free_on_drop();
2032 let bset = bset.ptr;
2033 let isl_rs_result = unsafe { isl_basic_set_unwrap(bset) };
2034 let isl_rs_result = BasicMap { ptr: isl_rs_result,
2035 should_free_on_drop: true };
2036 let err = isl_rs_ctx.last_error();
2037 if err != Error::None_ {
2038 let err_msg = isl_rs_ctx.last_error_msg();
2039 isl_rs_ctx.reset_error();
2040 return Err(LibISLError::new(err, err_msg));
2041 }
2042 Ok(isl_rs_result)
2043 }
2044
2045 pub fn upper_bound_val(self, type_: DimType, pos: u32, value: Val)
2047 -> Result<BasicSet, LibISLError> {
2048 let bset = self;
2049 let isl_rs_ctx = bset.get_ctx();
2050 let mut bset = bset;
2051 bset.do_not_free_on_drop();
2052 let bset = bset.ptr;
2053 let type_ = type_.to_i32();
2054 let mut value = value;
2055 value.do_not_free_on_drop();
2056 let value = value.ptr;
2057 let isl_rs_result = unsafe { isl_basic_set_upper_bound_val(bset, type_, pos, value) };
2058 let isl_rs_result = BasicSet { ptr: isl_rs_result,
2059 should_free_on_drop: true };
2060 let err = isl_rs_ctx.last_error();
2061 if err != Error::None_ {
2062 let err_msg = isl_rs_ctx.last_error_msg();
2063 isl_rs_ctx.reset_error();
2064 return Err(LibISLError::new(err, err_msg));
2065 }
2066 Ok(isl_rs_result)
2067 }
2068
2069 pub fn do_not_free_on_drop(&mut self) {
2072 self.should_free_on_drop = false;
2073 }
2074}
2075
2076impl Drop for BasicSet {
2077 fn drop(&mut self) {
2078 if self.should_free_on_drop {
2079 unsafe {
2080 isl_basic_set_free(self.ptr);
2081 }
2082 }
2083 }
2084}