isl_rs/bindings/
basic_set.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use 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
12/// Wraps `isl_basic_set`.
13pub 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    /// Wraps `isl_basic_set_add_constraint`.
226    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    /// Wraps `isl_basic_set_add_dims`.
248    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    /// Wraps `isl_basic_set_affine_hull`.
268    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    /// Wraps `isl_basic_set_align_params`.
287    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    /// Wraps `isl_basic_set_apply`.
309    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    /// Wraps `isl_basic_set_box_from_points`.
331    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    /// Wraps `isl_basic_set_coefficients`.
352    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    /// Wraps `isl_basic_set_compare_at`.
371    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    /// Wraps `isl_basic_set_compute_divs`.
387    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    /// Wraps `isl_basic_set_compute_vertices`.
406    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    /// Wraps `isl_basic_set_copy`.
423    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    /// Wraps `isl_basic_set_detect_equalities`.
440    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    /// Wraps `isl_basic_set_dim`.
459    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    /// Wraps `isl_basic_set_dim_max_val`.
475    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    /// Wraps `isl_basic_set_drop_constraints_involving_dims`.
494    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    /// Wraps `isl_basic_set_drop_constraints_not_involving_dims`.
516    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    /// Wraps `isl_basic_set_drop_unused_params`.
538    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    /// Wraps `isl_basic_set_dump`.
557    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    /// Wraps `isl_basic_set_eliminate`.
572    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    /// Wraps `isl_basic_set_empty`.
592    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    /// Wraps `isl_basic_set_equalities_matrix`.
610    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    /// Wraps `isl_basic_set_fix_si`.
632    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    /// Wraps `isl_basic_set_fix_val`.
652    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    /// Wraps `isl_basic_set_flat_product`.
675    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    /// Wraps `isl_basic_set_flatten`.
697    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    /// Wraps `isl_basic_set_free`.
716    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    /// Wraps `isl_basic_set_from_constraint`.
735    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    /// Wraps `isl_basic_set_from_constraint_matrices`.
753    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    /// Wraps `isl_basic_set_from_multi_aff`.
784    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    /// Wraps `isl_basic_set_from_params`.
802    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    /// Wraps `isl_basic_set_from_point`.
821    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    /// Wraps `isl_basic_set_get_constraint_list`.
839    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    /// Wraps `isl_basic_set_get_ctx`.
856    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    /// Wraps `isl_basic_set_get_dim_id`.
866    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    /// Wraps `isl_basic_set_get_dim_name`.
884    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    /// Wraps `isl_basic_set_get_div`.
902    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    /// Wraps `isl_basic_set_get_local_space`.
919    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    /// Wraps `isl_basic_set_get_space`.
936    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    /// Wraps `isl_basic_set_get_tuple_name`.
953    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    /// Wraps `isl_basic_set_gist`.
970    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    /// Wraps `isl_basic_set_inequalities_matrix`.
992    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    /// Wraps `isl_basic_set_insert_dims`.
1014    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    /// Wraps `isl_basic_set_intersect`.
1034    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    /// Wraps `isl_basic_set_intersect_params`.
1056    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    /// Wraps `isl_basic_set_involves_dims`.
1078    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    /// Wraps `isl_basic_set_is_bounded`.
1101    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    /// Wraps `isl_basic_set_is_disjoint`.
1123    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    /// Wraps `isl_basic_set_is_empty`.
1146    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    /// Wraps `isl_basic_set_is_equal`.
1168    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    /// Wraps `isl_basic_set_is_rational`.
1191    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    /// Wraps `isl_basic_set_is_subset`.
1206    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    /// Wraps `isl_basic_set_is_universe`.
1229    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    /// Wraps `isl_basic_set_is_wrapping`.
1251    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    /// Wraps `isl_basic_set_lexmax`.
1273    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    /// Wraps `isl_basic_set_lexmin`.
1292    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    /// Wraps `isl_basic_set_lift`.
1311    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    /// Wraps `isl_basic_set_lower_bound_val`.
1330    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    /// Wraps `isl_basic_set_max_lp_val`.
1354    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    /// Wraps `isl_basic_set_max_val`.
1372    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    /// Wraps `isl_basic_set_min_lp_val`.
1390    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    /// Wraps `isl_basic_set_move_dims`.
1408    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    /// Wraps `isl_basic_set_n_constraint`.
1432    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    /// Wraps `isl_basic_set_n_dim`.
1447    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    /// Wraps `isl_basic_set_n_param`.
1462    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    /// Wraps `isl_basic_set_nat_universe`.
1477    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    /// Wraps `isl_basic_set_neg`.
1495    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    /// Wraps `isl_basic_set_params`.
1514    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    /// Wraps `isl_basic_set_plain_is_empty`.
1533    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    /// Wraps `isl_basic_set_plain_is_equal`.
1555    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    /// Wraps `isl_basic_set_plain_is_universe`.
1578    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    /// Wraps `isl_basic_set_positive_orthant`.
1600    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    /// Wraps `isl_basic_set_preimage_multi_aff`.
1618    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    /// Wraps `isl_basic_set_project_out`.
1640    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    /// Wraps `isl_basic_set_read_from_str`.
1660    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    /// Wraps `isl_basic_set_reduced_basis`.
1679    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    /// Wraps `isl_basic_set_remove_dims`.
1696    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    /// Wraps `isl_basic_set_remove_divs`.
1716    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    /// Wraps `isl_basic_set_remove_divs_involving_dims`.
1735    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    /// Wraps `isl_basic_set_remove_redundancies`.
1757    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    /// Wraps `isl_basic_set_remove_unknown_divs`.
1776    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    /// Wraps `isl_basic_set_sample`.
1795    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    /// Wraps `isl_basic_set_sample_point`.
1814    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    /// Wraps `isl_basic_set_set_dim_name`.
1833    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    /// Wraps `isl_basic_set_set_tuple_id`.
1855    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    /// Wraps `isl_basic_set_set_tuple_name`.
1877    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    /// Wraps `isl_basic_set_solutions`.
1898    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    /// Wraps `isl_basic_set_to_list`.
1917    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    /// Wraps `isl_basic_set_to_set`.
1936    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    /// Wraps `isl_basic_set_to_str`.
1955    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    /// Wraps `isl_basic_set_total_dim`.
1972    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    /// Wraps `isl_basic_set_union`.
1987    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    /// Wraps `isl_basic_set_universe`.
2009    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    /// Wraps `isl_basic_set_unwrap`.
2027    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    /// Wraps `isl_basic_set_upper_bound_val`.
2046    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    /// Does not call isl_basic_set_free() on being dropped. (For internal use
2070    /// only.)
2071    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}