isl_rs/bindings/
basic_map.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Aff, AffList, BasicMapList, BasicSet, Constraint, ConstraintList, Context, DimType, Error, Id,
6    LibISLError, LocalSpace, Map, Mat, MultiAff, PwMultiAff, QPolynomial, Space, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12/// Wraps `isl_basic_map`.
13pub struct BasicMap {
14    pub ptr: uintptr_t,
15    pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20    fn isl_basic_map_add_constraint(bmap: uintptr_t, constraint: uintptr_t) -> uintptr_t;
21
22    fn isl_basic_map_add_dims(bmap: uintptr_t, type_: i32, n: u32) -> uintptr_t;
23
24    fn isl_basic_map_affine_hull(bmap: uintptr_t) -> uintptr_t;
25
26    fn isl_basic_map_align_params(bmap: uintptr_t, model: uintptr_t) -> uintptr_t;
27
28    fn isl_basic_map_apply_domain(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
29
30    fn isl_basic_map_apply_range(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
31
32    fn isl_basic_map_can_curry(bmap: uintptr_t) -> i32;
33
34    fn isl_basic_map_can_uncurry(bmap: uintptr_t) -> i32;
35
36    fn isl_basic_map_can_zip(bmap: uintptr_t) -> i32;
37
38    fn isl_basic_map_compute_divs(bmap: uintptr_t) -> uintptr_t;
39
40    fn isl_basic_map_copy(bmap: uintptr_t) -> uintptr_t;
41
42    fn isl_basic_map_curry(bmap: uintptr_t) -> uintptr_t;
43
44    fn isl_basic_map_deltas(bmap: uintptr_t) -> uintptr_t;
45
46    fn isl_basic_map_deltas_map(bmap: uintptr_t) -> uintptr_t;
47
48    fn isl_basic_map_detect_equalities(bmap: uintptr_t) -> uintptr_t;
49
50    fn isl_basic_map_dim(bmap: uintptr_t, type_: i32) -> i32;
51
52    fn isl_basic_map_domain(bmap: uintptr_t) -> uintptr_t;
53
54    fn isl_basic_map_domain_map(bmap: uintptr_t) -> uintptr_t;
55
56    fn isl_basic_map_domain_product(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
57
58    fn isl_basic_map_drop_constraints_involving_dims(bmap: uintptr_t, type_: i32, first: u32,
59                                                     n: u32)
60                                                     -> uintptr_t;
61
62    fn isl_basic_map_drop_constraints_not_involving_dims(bmap: uintptr_t, type_: i32, first: u32,
63                                                         n: u32)
64                                                         -> uintptr_t;
65
66    fn isl_basic_map_drop_unused_params(bmap: uintptr_t) -> uintptr_t;
67
68    fn isl_basic_map_dump(bmap: uintptr_t) -> ();
69
70    fn isl_basic_map_eliminate(bmap: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
71
72    fn isl_basic_map_empty(space: uintptr_t) -> uintptr_t;
73
74    fn isl_basic_map_equal(space: uintptr_t, n_equal: u32) -> uintptr_t;
75
76    fn isl_basic_map_equalities_matrix(bmap: uintptr_t, c1: i32, c2: i32, c3: i32, c4: i32,
77                                       c5: i32)
78                                       -> uintptr_t;
79
80    fn isl_basic_map_equate(bmap: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32)
81                            -> uintptr_t;
82
83    fn isl_basic_map_find_dim_by_name(bmap: uintptr_t, type_: i32, name: *const c_char) -> i32;
84
85    fn isl_basic_map_fix_si(bmap: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
86
87    fn isl_basic_map_fix_val(bmap: uintptr_t, type_: i32, pos: u32, v: uintptr_t) -> uintptr_t;
88
89    fn isl_basic_map_flat_product(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
90
91    fn isl_basic_map_flat_range_product(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
92
93    fn isl_basic_map_flatten(bmap: uintptr_t) -> uintptr_t;
94
95    fn isl_basic_map_flatten_domain(bmap: uintptr_t) -> uintptr_t;
96
97    fn isl_basic_map_flatten_range(bmap: uintptr_t) -> uintptr_t;
98
99    fn isl_basic_map_free(bmap: uintptr_t) -> uintptr_t;
100
101    fn isl_basic_map_from_aff(aff: uintptr_t) -> uintptr_t;
102
103    fn isl_basic_map_from_aff_list(domain_space: uintptr_t, list: uintptr_t) -> uintptr_t;
104
105    fn isl_basic_map_from_constraint(constraint: uintptr_t) -> uintptr_t;
106
107    fn isl_basic_map_from_constraint_matrices(space: uintptr_t, eq: uintptr_t, ineq: uintptr_t,
108                                              c1: i32, c2: i32, c3: i32, c4: i32, c5: i32)
109                                              -> uintptr_t;
110
111    fn isl_basic_map_from_domain(bset: uintptr_t) -> uintptr_t;
112
113    fn isl_basic_map_from_domain_and_range(domain: uintptr_t, range: uintptr_t) -> uintptr_t;
114
115    fn isl_basic_map_from_multi_aff(maff: uintptr_t) -> uintptr_t;
116
117    fn isl_basic_map_from_qpolynomial(qp: uintptr_t) -> uintptr_t;
118
119    fn isl_basic_map_from_range(bset: uintptr_t) -> uintptr_t;
120
121    fn isl_basic_map_get_constraint_list(bmap: uintptr_t) -> uintptr_t;
122
123    fn isl_basic_map_get_ctx(bmap: uintptr_t) -> uintptr_t;
124
125    fn isl_basic_map_get_dim_name(bmap: uintptr_t, type_: i32, pos: u32) -> *const c_char;
126
127    fn isl_basic_map_get_div(bmap: uintptr_t, pos: i32) -> uintptr_t;
128
129    fn isl_basic_map_get_local_space(bmap: uintptr_t) -> uintptr_t;
130
131    fn isl_basic_map_get_space(bmap: uintptr_t) -> uintptr_t;
132
133    fn isl_basic_map_get_tuple_name(bmap: uintptr_t, type_: i32) -> *const c_char;
134
135    fn isl_basic_map_gist(bmap: uintptr_t, context: uintptr_t) -> uintptr_t;
136
137    fn isl_basic_map_gist_domain(bmap: uintptr_t, context: uintptr_t) -> uintptr_t;
138
139    fn isl_basic_map_has_dim_id(bmap: uintptr_t, type_: i32, pos: u32) -> i32;
140
141    fn isl_basic_map_identity(space: uintptr_t) -> uintptr_t;
142
143    fn isl_basic_map_image_is_bounded(bmap: uintptr_t) -> i32;
144
145    fn isl_basic_map_inequalities_matrix(bmap: uintptr_t, c1: i32, c2: i32, c3: i32, c4: i32,
146                                         c5: i32)
147                                         -> uintptr_t;
148
149    fn isl_basic_map_insert_dims(bmap: uintptr_t, type_: i32, pos: u32, n: u32) -> uintptr_t;
150
151    fn isl_basic_map_intersect(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
152
153    fn isl_basic_map_intersect_domain(bmap: uintptr_t, bset: uintptr_t) -> uintptr_t;
154
155    fn isl_basic_map_intersect_params(bmap: uintptr_t, bset: uintptr_t) -> uintptr_t;
156
157    fn isl_basic_map_intersect_range(bmap: uintptr_t, bset: uintptr_t) -> uintptr_t;
158
159    fn isl_basic_map_involves_dims(bmap: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
160
161    fn isl_basic_map_is_disjoint(bmap1: uintptr_t, bmap2: uintptr_t) -> i32;
162
163    fn isl_basic_map_is_empty(bmap: uintptr_t) -> i32;
164
165    fn isl_basic_map_is_equal(bmap1: uintptr_t, bmap2: uintptr_t) -> i32;
166
167    fn isl_basic_map_is_rational(bmap: uintptr_t) -> i32;
168
169    fn isl_basic_map_is_single_valued(bmap: uintptr_t) -> i32;
170
171    fn isl_basic_map_is_strict_subset(bmap1: uintptr_t, bmap2: uintptr_t) -> i32;
172
173    fn isl_basic_map_is_subset(bmap1: uintptr_t, bmap2: uintptr_t) -> i32;
174
175    fn isl_basic_map_is_universe(bmap: uintptr_t) -> i32;
176
177    fn isl_basic_map_less_at(space: uintptr_t, pos: u32) -> uintptr_t;
178
179    fn isl_basic_map_lexmax(bmap: uintptr_t) -> uintptr_t;
180
181    fn isl_basic_map_lexmin(bmap: uintptr_t) -> uintptr_t;
182
183    fn isl_basic_map_lexmin_pw_multi_aff(bmap: uintptr_t) -> uintptr_t;
184
185    fn isl_basic_map_lower_bound_si(bmap: uintptr_t, type_: i32, pos: u32, value: i32)
186                                    -> uintptr_t;
187
188    fn isl_basic_map_more_at(space: uintptr_t, pos: u32) -> uintptr_t;
189
190    fn isl_basic_map_move_dims(bmap: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32,
191                               src_pos: u32, n: u32)
192                               -> uintptr_t;
193
194    fn isl_basic_map_n_constraint(bmap: uintptr_t) -> i32;
195
196    fn isl_basic_map_nat_universe(space: uintptr_t) -> uintptr_t;
197
198    fn isl_basic_map_neg(bmap: uintptr_t) -> uintptr_t;
199
200    fn isl_basic_map_order_ge(bmap: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32)
201                              -> uintptr_t;
202
203    fn isl_basic_map_order_gt(bmap: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32)
204                              -> uintptr_t;
205
206    fn isl_basic_map_plain_get_val_if_fixed(bmap: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
207
208    fn isl_basic_map_plain_is_empty(bmap: uintptr_t) -> i32;
209
210    fn isl_basic_map_plain_is_universe(bmap: uintptr_t) -> i32;
211
212    fn isl_basic_map_preimage_domain_multi_aff(bmap: uintptr_t, ma: uintptr_t) -> uintptr_t;
213
214    fn isl_basic_map_preimage_range_multi_aff(bmap: uintptr_t, ma: uintptr_t) -> uintptr_t;
215
216    fn isl_basic_map_product(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
217
218    fn isl_basic_map_project_out(bmap: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
219
220    fn isl_basic_map_range(bmap: uintptr_t) -> uintptr_t;
221
222    fn isl_basic_map_range_map(bmap: uintptr_t) -> uintptr_t;
223
224    fn isl_basic_map_range_product(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
225
226    fn isl_basic_map_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
227
228    fn isl_basic_map_remove_dims(bmap: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
229
230    fn isl_basic_map_remove_divs(bmap: uintptr_t) -> uintptr_t;
231
232    fn isl_basic_map_remove_divs_involving_dims(bmap: uintptr_t, type_: i32, first: u32, n: u32)
233                                                -> uintptr_t;
234
235    fn isl_basic_map_remove_redundancies(bmap: uintptr_t) -> uintptr_t;
236
237    fn isl_basic_map_reverse(bmap: uintptr_t) -> uintptr_t;
238
239    fn isl_basic_map_sample(bmap: uintptr_t) -> uintptr_t;
240
241    fn isl_basic_map_set_dim_name(bmap: uintptr_t, type_: i32, pos: u32, s: *const c_char)
242                                  -> uintptr_t;
243
244    fn isl_basic_map_set_tuple_id(bmap: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
245
246    fn isl_basic_map_set_tuple_name(bmap: uintptr_t, type_: i32, s: *const c_char) -> uintptr_t;
247
248    fn isl_basic_map_sum(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
249
250    fn isl_basic_map_to_list(el: uintptr_t) -> uintptr_t;
251
252    fn isl_basic_map_to_str(bmap: uintptr_t) -> *const c_char;
253
254    fn isl_basic_map_total_dim(bmap: uintptr_t) -> i32;
255
256    fn isl_basic_map_uncurry(bmap: uintptr_t) -> uintptr_t;
257
258    fn isl_basic_map_union(bmap1: uintptr_t, bmap2: uintptr_t) -> uintptr_t;
259
260    fn isl_basic_map_universe(space: uintptr_t) -> uintptr_t;
261
262    fn isl_basic_map_upper_bound_si(bmap: uintptr_t, type_: i32, pos: u32, value: i32)
263                                    -> uintptr_t;
264
265    fn isl_basic_map_wrap(bmap: uintptr_t) -> uintptr_t;
266
267    fn isl_basic_map_zip(bmap: uintptr_t) -> uintptr_t;
268
269}
270
271impl BasicMap {
272    /// Wraps `isl_basic_map_add_constraint`.
273    pub fn add_constraint(self, constraint: Constraint) -> Result<BasicMap, LibISLError> {
274        let bmap = self;
275        let isl_rs_ctx = bmap.get_ctx();
276        let mut bmap = bmap;
277        bmap.do_not_free_on_drop();
278        let bmap = bmap.ptr;
279        let mut constraint = constraint;
280        constraint.do_not_free_on_drop();
281        let constraint = constraint.ptr;
282        let isl_rs_result = unsafe { isl_basic_map_add_constraint(bmap, constraint) };
283        let isl_rs_result = BasicMap { ptr: isl_rs_result,
284                                       should_free_on_drop: true };
285        let err = isl_rs_ctx.last_error();
286        if err != Error::None_ {
287            let err_msg = isl_rs_ctx.last_error_msg();
288            isl_rs_ctx.reset_error();
289            return Err(LibISLError::new(err, err_msg));
290        }
291        Ok(isl_rs_result)
292    }
293
294    /// Wraps `isl_basic_map_add_dims`.
295    pub fn add_dims(self, type_: DimType, n: u32) -> Result<BasicMap, LibISLError> {
296        let bmap = self;
297        let isl_rs_ctx = bmap.get_ctx();
298        let mut bmap = bmap;
299        bmap.do_not_free_on_drop();
300        let bmap = bmap.ptr;
301        let type_ = type_.to_i32();
302        let isl_rs_result = unsafe { isl_basic_map_add_dims(bmap, type_, n) };
303        let isl_rs_result = BasicMap { ptr: isl_rs_result,
304                                       should_free_on_drop: true };
305        let err = isl_rs_ctx.last_error();
306        if err != Error::None_ {
307            let err_msg = isl_rs_ctx.last_error_msg();
308            isl_rs_ctx.reset_error();
309            return Err(LibISLError::new(err, err_msg));
310        }
311        Ok(isl_rs_result)
312    }
313
314    /// Wraps `isl_basic_map_affine_hull`.
315    pub fn affine_hull(self) -> Result<BasicMap, LibISLError> {
316        let bmap = self;
317        let isl_rs_ctx = bmap.get_ctx();
318        let mut bmap = bmap;
319        bmap.do_not_free_on_drop();
320        let bmap = bmap.ptr;
321        let isl_rs_result = unsafe { isl_basic_map_affine_hull(bmap) };
322        let isl_rs_result = BasicMap { ptr: isl_rs_result,
323                                       should_free_on_drop: true };
324        let err = isl_rs_ctx.last_error();
325        if err != Error::None_ {
326            let err_msg = isl_rs_ctx.last_error_msg();
327            isl_rs_ctx.reset_error();
328            return Err(LibISLError::new(err, err_msg));
329        }
330        Ok(isl_rs_result)
331    }
332
333    /// Wraps `isl_basic_map_align_params`.
334    pub fn align_params(self, model: Space) -> Result<BasicMap, LibISLError> {
335        let bmap = self;
336        let isl_rs_ctx = bmap.get_ctx();
337        let mut bmap = bmap;
338        bmap.do_not_free_on_drop();
339        let bmap = bmap.ptr;
340        let mut model = model;
341        model.do_not_free_on_drop();
342        let model = model.ptr;
343        let isl_rs_result = unsafe { isl_basic_map_align_params(bmap, model) };
344        let isl_rs_result = BasicMap { ptr: isl_rs_result,
345                                       should_free_on_drop: true };
346        let err = isl_rs_ctx.last_error();
347        if err != Error::None_ {
348            let err_msg = isl_rs_ctx.last_error_msg();
349            isl_rs_ctx.reset_error();
350            return Err(LibISLError::new(err, err_msg));
351        }
352        Ok(isl_rs_result)
353    }
354
355    /// Wraps `isl_basic_map_apply_domain`.
356    pub fn apply_domain(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
357        let bmap1 = self;
358        let isl_rs_ctx = bmap1.get_ctx();
359        let mut bmap1 = bmap1;
360        bmap1.do_not_free_on_drop();
361        let bmap1 = bmap1.ptr;
362        let mut bmap2 = bmap2;
363        bmap2.do_not_free_on_drop();
364        let bmap2 = bmap2.ptr;
365        let isl_rs_result = unsafe { isl_basic_map_apply_domain(bmap1, bmap2) };
366        let isl_rs_result = BasicMap { ptr: isl_rs_result,
367                                       should_free_on_drop: true };
368        let err = isl_rs_ctx.last_error();
369        if err != Error::None_ {
370            let err_msg = isl_rs_ctx.last_error_msg();
371            isl_rs_ctx.reset_error();
372            return Err(LibISLError::new(err, err_msg));
373        }
374        Ok(isl_rs_result)
375    }
376
377    /// Wraps `isl_basic_map_apply_range`.
378    pub fn apply_range(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
379        let bmap1 = self;
380        let isl_rs_ctx = bmap1.get_ctx();
381        let mut bmap1 = bmap1;
382        bmap1.do_not_free_on_drop();
383        let bmap1 = bmap1.ptr;
384        let mut bmap2 = bmap2;
385        bmap2.do_not_free_on_drop();
386        let bmap2 = bmap2.ptr;
387        let isl_rs_result = unsafe { isl_basic_map_apply_range(bmap1, bmap2) };
388        let isl_rs_result = BasicMap { ptr: isl_rs_result,
389                                       should_free_on_drop: true };
390        let err = isl_rs_ctx.last_error();
391        if err != Error::None_ {
392            let err_msg = isl_rs_ctx.last_error_msg();
393            isl_rs_ctx.reset_error();
394            return Err(LibISLError::new(err, err_msg));
395        }
396        Ok(isl_rs_result)
397    }
398
399    /// Wraps `isl_basic_map_can_curry`.
400    pub fn can_curry(&self) -> Result<bool, LibISLError> {
401        let bmap = self;
402        let isl_rs_ctx = bmap.get_ctx();
403        let bmap = bmap.ptr;
404        let isl_rs_result = unsafe { isl_basic_map_can_curry(bmap) };
405        let isl_rs_result = match isl_rs_result {
406            0 => false,
407            1 => true,
408            _ => {
409                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
410            }
411        };
412        let err = isl_rs_ctx.last_error();
413        if err != Error::None_ {
414            let err_msg = isl_rs_ctx.last_error_msg();
415            isl_rs_ctx.reset_error();
416            return Err(LibISLError::new(err, err_msg));
417        }
418        Ok(isl_rs_result)
419    }
420
421    /// Wraps `isl_basic_map_can_uncurry`.
422    pub fn can_uncurry(&self) -> Result<bool, LibISLError> {
423        let bmap = self;
424        let isl_rs_ctx = bmap.get_ctx();
425        let bmap = bmap.ptr;
426        let isl_rs_result = unsafe { isl_basic_map_can_uncurry(bmap) };
427        let isl_rs_result = match isl_rs_result {
428            0 => false,
429            1 => true,
430            _ => {
431                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
432            }
433        };
434        let err = isl_rs_ctx.last_error();
435        if err != Error::None_ {
436            let err_msg = isl_rs_ctx.last_error_msg();
437            isl_rs_ctx.reset_error();
438            return Err(LibISLError::new(err, err_msg));
439        }
440        Ok(isl_rs_result)
441    }
442
443    /// Wraps `isl_basic_map_can_zip`.
444    pub fn can_zip(&self) -> Result<bool, LibISLError> {
445        let bmap = self;
446        let isl_rs_ctx = bmap.get_ctx();
447        let bmap = bmap.ptr;
448        let isl_rs_result = unsafe { isl_basic_map_can_zip(bmap) };
449        let isl_rs_result = match isl_rs_result {
450            0 => false,
451            1 => true,
452            _ => {
453                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
454            }
455        };
456        let err = isl_rs_ctx.last_error();
457        if err != Error::None_ {
458            let err_msg = isl_rs_ctx.last_error_msg();
459            isl_rs_ctx.reset_error();
460            return Err(LibISLError::new(err, err_msg));
461        }
462        Ok(isl_rs_result)
463    }
464
465    /// Wraps `isl_basic_map_compute_divs`.
466    pub fn compute_divs(self) -> Result<Map, LibISLError> {
467        let bmap = self;
468        let isl_rs_ctx = bmap.get_ctx();
469        let mut bmap = bmap;
470        bmap.do_not_free_on_drop();
471        let bmap = bmap.ptr;
472        let isl_rs_result = unsafe { isl_basic_map_compute_divs(bmap) };
473        let isl_rs_result = Map { ptr: isl_rs_result,
474                                  should_free_on_drop: true };
475        let err = isl_rs_ctx.last_error();
476        if err != Error::None_ {
477            let err_msg = isl_rs_ctx.last_error_msg();
478            isl_rs_ctx.reset_error();
479            return Err(LibISLError::new(err, err_msg));
480        }
481        Ok(isl_rs_result)
482    }
483
484    /// Wraps `isl_basic_map_copy`.
485    pub fn copy(&self) -> Result<BasicMap, LibISLError> {
486        let bmap = self;
487        let isl_rs_ctx = bmap.get_ctx();
488        let bmap = bmap.ptr;
489        let isl_rs_result = unsafe { isl_basic_map_copy(bmap) };
490        let isl_rs_result = BasicMap { ptr: isl_rs_result,
491                                       should_free_on_drop: true };
492        let err = isl_rs_ctx.last_error();
493        if err != Error::None_ {
494            let err_msg = isl_rs_ctx.last_error_msg();
495            isl_rs_ctx.reset_error();
496            return Err(LibISLError::new(err, err_msg));
497        }
498        Ok(isl_rs_result)
499    }
500
501    /// Wraps `isl_basic_map_curry`.
502    pub fn curry(self) -> Result<BasicMap, LibISLError> {
503        let bmap = self;
504        let isl_rs_ctx = bmap.get_ctx();
505        let mut bmap = bmap;
506        bmap.do_not_free_on_drop();
507        let bmap = bmap.ptr;
508        let isl_rs_result = unsafe { isl_basic_map_curry(bmap) };
509        let isl_rs_result = BasicMap { ptr: isl_rs_result,
510                                       should_free_on_drop: true };
511        let err = isl_rs_ctx.last_error();
512        if err != Error::None_ {
513            let err_msg = isl_rs_ctx.last_error_msg();
514            isl_rs_ctx.reset_error();
515            return Err(LibISLError::new(err, err_msg));
516        }
517        Ok(isl_rs_result)
518    }
519
520    /// Wraps `isl_basic_map_deltas`.
521    pub fn deltas(self) -> Result<BasicSet, LibISLError> {
522        let bmap = self;
523        let isl_rs_ctx = bmap.get_ctx();
524        let mut bmap = bmap;
525        bmap.do_not_free_on_drop();
526        let bmap = bmap.ptr;
527        let isl_rs_result = unsafe { isl_basic_map_deltas(bmap) };
528        let isl_rs_result = BasicSet { ptr: isl_rs_result,
529                                       should_free_on_drop: true };
530        let err = isl_rs_ctx.last_error();
531        if err != Error::None_ {
532            let err_msg = isl_rs_ctx.last_error_msg();
533            isl_rs_ctx.reset_error();
534            return Err(LibISLError::new(err, err_msg));
535        }
536        Ok(isl_rs_result)
537    }
538
539    /// Wraps `isl_basic_map_deltas_map`.
540    pub fn deltas_map(self) -> Result<BasicMap, LibISLError> {
541        let bmap = self;
542        let isl_rs_ctx = bmap.get_ctx();
543        let mut bmap = bmap;
544        bmap.do_not_free_on_drop();
545        let bmap = bmap.ptr;
546        let isl_rs_result = unsafe { isl_basic_map_deltas_map(bmap) };
547        let isl_rs_result = BasicMap { ptr: isl_rs_result,
548                                       should_free_on_drop: true };
549        let err = isl_rs_ctx.last_error();
550        if err != Error::None_ {
551            let err_msg = isl_rs_ctx.last_error_msg();
552            isl_rs_ctx.reset_error();
553            return Err(LibISLError::new(err, err_msg));
554        }
555        Ok(isl_rs_result)
556    }
557
558    /// Wraps `isl_basic_map_detect_equalities`.
559    pub fn detect_equalities(self) -> Result<BasicMap, LibISLError> {
560        let bmap = self;
561        let isl_rs_ctx = bmap.get_ctx();
562        let mut bmap = bmap;
563        bmap.do_not_free_on_drop();
564        let bmap = bmap.ptr;
565        let isl_rs_result = unsafe { isl_basic_map_detect_equalities(bmap) };
566        let isl_rs_result = BasicMap { ptr: isl_rs_result,
567                                       should_free_on_drop: true };
568        let err = isl_rs_ctx.last_error();
569        if err != Error::None_ {
570            let err_msg = isl_rs_ctx.last_error_msg();
571            isl_rs_ctx.reset_error();
572            return Err(LibISLError::new(err, err_msg));
573        }
574        Ok(isl_rs_result)
575    }
576
577    /// Wraps `isl_basic_map_dim`.
578    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
579        let bmap = self;
580        let isl_rs_ctx = bmap.get_ctx();
581        let bmap = bmap.ptr;
582        let type_ = type_.to_i32();
583        let isl_rs_result = unsafe { isl_basic_map_dim(bmap, type_) };
584        let err = isl_rs_ctx.last_error();
585        if err != Error::None_ {
586            let err_msg = isl_rs_ctx.last_error_msg();
587            isl_rs_ctx.reset_error();
588            return Err(LibISLError::new(err, err_msg));
589        }
590        Ok(isl_rs_result)
591    }
592
593    /// Wraps `isl_basic_map_domain`.
594    pub fn domain(self) -> Result<BasicSet, LibISLError> {
595        let bmap = self;
596        let isl_rs_ctx = bmap.get_ctx();
597        let mut bmap = bmap;
598        bmap.do_not_free_on_drop();
599        let bmap = bmap.ptr;
600        let isl_rs_result = unsafe { isl_basic_map_domain(bmap) };
601        let isl_rs_result = BasicSet { ptr: isl_rs_result,
602                                       should_free_on_drop: true };
603        let err = isl_rs_ctx.last_error();
604        if err != Error::None_ {
605            let err_msg = isl_rs_ctx.last_error_msg();
606            isl_rs_ctx.reset_error();
607            return Err(LibISLError::new(err, err_msg));
608        }
609        Ok(isl_rs_result)
610    }
611
612    /// Wraps `isl_basic_map_domain_map`.
613    pub fn domain_map(self) -> Result<BasicMap, LibISLError> {
614        let bmap = self;
615        let isl_rs_ctx = bmap.get_ctx();
616        let mut bmap = bmap;
617        bmap.do_not_free_on_drop();
618        let bmap = bmap.ptr;
619        let isl_rs_result = unsafe { isl_basic_map_domain_map(bmap) };
620        let isl_rs_result = BasicMap { 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_map_domain_product`.
632    pub fn domain_product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
633        let bmap1 = self;
634        let isl_rs_ctx = bmap1.get_ctx();
635        let mut bmap1 = bmap1;
636        bmap1.do_not_free_on_drop();
637        let bmap1 = bmap1.ptr;
638        let mut bmap2 = bmap2;
639        bmap2.do_not_free_on_drop();
640        let bmap2 = bmap2.ptr;
641        let isl_rs_result = unsafe { isl_basic_map_domain_product(bmap1, bmap2) };
642        let isl_rs_result = BasicMap { ptr: isl_rs_result,
643                                       should_free_on_drop: true };
644        let err = isl_rs_ctx.last_error();
645        if err != Error::None_ {
646            let err_msg = isl_rs_ctx.last_error_msg();
647            isl_rs_ctx.reset_error();
648            return Err(LibISLError::new(err, err_msg));
649        }
650        Ok(isl_rs_result)
651    }
652
653    /// Wraps `isl_basic_map_drop_constraints_involving_dims`.
654    pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32)
655                                           -> Result<BasicMap, LibISLError> {
656        let bmap = self;
657        let isl_rs_ctx = bmap.get_ctx();
658        let mut bmap = bmap;
659        bmap.do_not_free_on_drop();
660        let bmap = bmap.ptr;
661        let type_ = type_.to_i32();
662        let isl_rs_result =
663            unsafe { isl_basic_map_drop_constraints_involving_dims(bmap, type_, first, n) };
664        let isl_rs_result = BasicMap { ptr: isl_rs_result,
665                                       should_free_on_drop: true };
666        let err = isl_rs_ctx.last_error();
667        if err != Error::None_ {
668            let err_msg = isl_rs_ctx.last_error_msg();
669            isl_rs_ctx.reset_error();
670            return Err(LibISLError::new(err, err_msg));
671        }
672        Ok(isl_rs_result)
673    }
674
675    /// Wraps `isl_basic_map_drop_constraints_not_involving_dims`.
676    pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32)
677                                               -> Result<BasicMap, LibISLError> {
678        let bmap = self;
679        let isl_rs_ctx = bmap.get_ctx();
680        let mut bmap = bmap;
681        bmap.do_not_free_on_drop();
682        let bmap = bmap.ptr;
683        let type_ = type_.to_i32();
684        let isl_rs_result =
685            unsafe { isl_basic_map_drop_constraints_not_involving_dims(bmap, type_, first, n) };
686        let isl_rs_result = BasicMap { ptr: isl_rs_result,
687                                       should_free_on_drop: true };
688        let err = isl_rs_ctx.last_error();
689        if err != Error::None_ {
690            let err_msg = isl_rs_ctx.last_error_msg();
691            isl_rs_ctx.reset_error();
692            return Err(LibISLError::new(err, err_msg));
693        }
694        Ok(isl_rs_result)
695    }
696
697    /// Wraps `isl_basic_map_drop_unused_params`.
698    pub fn drop_unused_params(self) -> Result<BasicMap, LibISLError> {
699        let bmap = self;
700        let isl_rs_ctx = bmap.get_ctx();
701        let mut bmap = bmap;
702        bmap.do_not_free_on_drop();
703        let bmap = bmap.ptr;
704        let isl_rs_result = unsafe { isl_basic_map_drop_unused_params(bmap) };
705        let isl_rs_result = BasicMap { ptr: isl_rs_result,
706                                       should_free_on_drop: true };
707        let err = isl_rs_ctx.last_error();
708        if err != Error::None_ {
709            let err_msg = isl_rs_ctx.last_error_msg();
710            isl_rs_ctx.reset_error();
711            return Err(LibISLError::new(err, err_msg));
712        }
713        Ok(isl_rs_result)
714    }
715
716    /// Wraps `isl_basic_map_dump`.
717    pub fn dump(&self) -> Result<(), LibISLError> {
718        let bmap = self;
719        let isl_rs_ctx = bmap.get_ctx();
720        let bmap = bmap.ptr;
721        let isl_rs_result = unsafe { isl_basic_map_dump(bmap) };
722        let err = isl_rs_ctx.last_error();
723        if err != Error::None_ {
724            let err_msg = isl_rs_ctx.last_error_msg();
725            isl_rs_ctx.reset_error();
726            return Err(LibISLError::new(err, err_msg));
727        }
728        Ok(isl_rs_result)
729    }
730
731    /// Wraps `isl_basic_map_eliminate`.
732    pub fn eliminate(self, type_: DimType, first: u32, n: u32) -> Result<BasicMap, LibISLError> {
733        let bmap = self;
734        let isl_rs_ctx = bmap.get_ctx();
735        let mut bmap = bmap;
736        bmap.do_not_free_on_drop();
737        let bmap = bmap.ptr;
738        let type_ = type_.to_i32();
739        let isl_rs_result = unsafe { isl_basic_map_eliminate(bmap, type_, first, n) };
740        let isl_rs_result = BasicMap { ptr: isl_rs_result,
741                                       should_free_on_drop: true };
742        let err = isl_rs_ctx.last_error();
743        if err != Error::None_ {
744            let err_msg = isl_rs_ctx.last_error_msg();
745            isl_rs_ctx.reset_error();
746            return Err(LibISLError::new(err, err_msg));
747        }
748        Ok(isl_rs_result)
749    }
750
751    /// Wraps `isl_basic_map_empty`.
752    pub fn empty(space: Space) -> Result<BasicMap, LibISLError> {
753        let isl_rs_ctx = space.get_ctx();
754        let mut space = space;
755        space.do_not_free_on_drop();
756        let space = space.ptr;
757        let isl_rs_result = unsafe { isl_basic_map_empty(space) };
758        let isl_rs_result = BasicMap { ptr: isl_rs_result,
759                                       should_free_on_drop: true };
760        let err = isl_rs_ctx.last_error();
761        if err != Error::None_ {
762            let err_msg = isl_rs_ctx.last_error_msg();
763            isl_rs_ctx.reset_error();
764            return Err(LibISLError::new(err, err_msg));
765        }
766        Ok(isl_rs_result)
767    }
768
769    /// Wraps `isl_basic_map_equal`.
770    pub fn equal(space: Space, n_equal: u32) -> Result<BasicMap, LibISLError> {
771        let isl_rs_ctx = space.get_ctx();
772        let mut space = space;
773        space.do_not_free_on_drop();
774        let space = space.ptr;
775        let isl_rs_result = unsafe { isl_basic_map_equal(space, n_equal) };
776        let isl_rs_result = BasicMap { ptr: isl_rs_result,
777                                       should_free_on_drop: true };
778        let err = isl_rs_ctx.last_error();
779        if err != Error::None_ {
780            let err_msg = isl_rs_ctx.last_error_msg();
781            isl_rs_ctx.reset_error();
782            return Err(LibISLError::new(err, err_msg));
783        }
784        Ok(isl_rs_result)
785    }
786
787    /// Wraps `isl_basic_map_equalities_matrix`.
788    pub fn equalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType,
789                             c5: DimType)
790                             -> Result<Mat, LibISLError> {
791        let bmap = self;
792        let isl_rs_ctx = bmap.get_ctx();
793        let bmap = bmap.ptr;
794        let c1 = c1.to_i32();
795        let c2 = c2.to_i32();
796        let c3 = c3.to_i32();
797        let c4 = c4.to_i32();
798        let c5 = c5.to_i32();
799        let isl_rs_result = unsafe { isl_basic_map_equalities_matrix(bmap, c1, c2, c3, c4, c5) };
800        let isl_rs_result = Mat { ptr: isl_rs_result,
801                                  should_free_on_drop: true };
802        let err = isl_rs_ctx.last_error();
803        if err != Error::None_ {
804            let err_msg = isl_rs_ctx.last_error_msg();
805            isl_rs_ctx.reset_error();
806            return Err(LibISLError::new(err, err_msg));
807        }
808        Ok(isl_rs_result)
809    }
810
811    /// Wraps `isl_basic_map_equate`.
812    pub fn equate(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
813                  -> Result<BasicMap, LibISLError> {
814        let bmap = self;
815        let isl_rs_ctx = bmap.get_ctx();
816        let mut bmap = bmap;
817        bmap.do_not_free_on_drop();
818        let bmap = bmap.ptr;
819        let type1 = type1.to_i32();
820        let type2 = type2.to_i32();
821        let isl_rs_result = unsafe { isl_basic_map_equate(bmap, type1, pos1, type2, pos2) };
822        let isl_rs_result = BasicMap { ptr: isl_rs_result,
823                                       should_free_on_drop: true };
824        let err = isl_rs_ctx.last_error();
825        if err != Error::None_ {
826            let err_msg = isl_rs_ctx.last_error_msg();
827            isl_rs_ctx.reset_error();
828            return Err(LibISLError::new(err, err_msg));
829        }
830        Ok(isl_rs_result)
831    }
832
833    /// Wraps `isl_basic_map_find_dim_by_name`.
834    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
835        let bmap = self;
836        let isl_rs_ctx = bmap.get_ctx();
837        let bmap = bmap.ptr;
838        let type_ = type_.to_i32();
839        let name = CString::new(name).unwrap();
840        let name = name.as_ptr();
841        let isl_rs_result = unsafe { isl_basic_map_find_dim_by_name(bmap, type_, name) };
842        let err = isl_rs_ctx.last_error();
843        if err != Error::None_ {
844            let err_msg = isl_rs_ctx.last_error_msg();
845            isl_rs_ctx.reset_error();
846            return Err(LibISLError::new(err, err_msg));
847        }
848        Ok(isl_rs_result)
849    }
850
851    /// Wraps `isl_basic_map_fix_si`.
852    pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<BasicMap, LibISLError> {
853        let bmap = self;
854        let isl_rs_ctx = bmap.get_ctx();
855        let mut bmap = bmap;
856        bmap.do_not_free_on_drop();
857        let bmap = bmap.ptr;
858        let type_ = type_.to_i32();
859        let isl_rs_result = unsafe { isl_basic_map_fix_si(bmap, type_, pos, value) };
860        let isl_rs_result = BasicMap { ptr: isl_rs_result,
861                                       should_free_on_drop: true };
862        let err = isl_rs_ctx.last_error();
863        if err != Error::None_ {
864            let err_msg = isl_rs_ctx.last_error_msg();
865            isl_rs_ctx.reset_error();
866            return Err(LibISLError::new(err, err_msg));
867        }
868        Ok(isl_rs_result)
869    }
870
871    /// Wraps `isl_basic_map_fix_val`.
872    pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> Result<BasicMap, LibISLError> {
873        let bmap = self;
874        let isl_rs_ctx = bmap.get_ctx();
875        let mut bmap = bmap;
876        bmap.do_not_free_on_drop();
877        let bmap = bmap.ptr;
878        let type_ = type_.to_i32();
879        let mut v = v;
880        v.do_not_free_on_drop();
881        let v = v.ptr;
882        let isl_rs_result = unsafe { isl_basic_map_fix_val(bmap, type_, pos, v) };
883        let isl_rs_result = BasicMap { ptr: isl_rs_result,
884                                       should_free_on_drop: true };
885        let err = isl_rs_ctx.last_error();
886        if err != Error::None_ {
887            let err_msg = isl_rs_ctx.last_error_msg();
888            isl_rs_ctx.reset_error();
889            return Err(LibISLError::new(err, err_msg));
890        }
891        Ok(isl_rs_result)
892    }
893
894    /// Wraps `isl_basic_map_flat_product`.
895    pub fn flat_product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
896        let bmap1 = self;
897        let isl_rs_ctx = bmap1.get_ctx();
898        let mut bmap1 = bmap1;
899        bmap1.do_not_free_on_drop();
900        let bmap1 = bmap1.ptr;
901        let mut bmap2 = bmap2;
902        bmap2.do_not_free_on_drop();
903        let bmap2 = bmap2.ptr;
904        let isl_rs_result = unsafe { isl_basic_map_flat_product(bmap1, bmap2) };
905        let isl_rs_result = BasicMap { ptr: isl_rs_result,
906                                       should_free_on_drop: true };
907        let err = isl_rs_ctx.last_error();
908        if err != Error::None_ {
909            let err_msg = isl_rs_ctx.last_error_msg();
910            isl_rs_ctx.reset_error();
911            return Err(LibISLError::new(err, err_msg));
912        }
913        Ok(isl_rs_result)
914    }
915
916    /// Wraps `isl_basic_map_flat_range_product`.
917    pub fn flat_range_product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
918        let bmap1 = self;
919        let isl_rs_ctx = bmap1.get_ctx();
920        let mut bmap1 = bmap1;
921        bmap1.do_not_free_on_drop();
922        let bmap1 = bmap1.ptr;
923        let mut bmap2 = bmap2;
924        bmap2.do_not_free_on_drop();
925        let bmap2 = bmap2.ptr;
926        let isl_rs_result = unsafe { isl_basic_map_flat_range_product(bmap1, bmap2) };
927        let isl_rs_result = BasicMap { ptr: isl_rs_result,
928                                       should_free_on_drop: true };
929        let err = isl_rs_ctx.last_error();
930        if err != Error::None_ {
931            let err_msg = isl_rs_ctx.last_error_msg();
932            isl_rs_ctx.reset_error();
933            return Err(LibISLError::new(err, err_msg));
934        }
935        Ok(isl_rs_result)
936    }
937
938    /// Wraps `isl_basic_map_flatten`.
939    pub fn flatten(self) -> Result<BasicMap, LibISLError> {
940        let bmap = self;
941        let isl_rs_ctx = bmap.get_ctx();
942        let mut bmap = bmap;
943        bmap.do_not_free_on_drop();
944        let bmap = bmap.ptr;
945        let isl_rs_result = unsafe { isl_basic_map_flatten(bmap) };
946        let isl_rs_result = BasicMap { ptr: isl_rs_result,
947                                       should_free_on_drop: true };
948        let err = isl_rs_ctx.last_error();
949        if err != Error::None_ {
950            let err_msg = isl_rs_ctx.last_error_msg();
951            isl_rs_ctx.reset_error();
952            return Err(LibISLError::new(err, err_msg));
953        }
954        Ok(isl_rs_result)
955    }
956
957    /// Wraps `isl_basic_map_flatten_domain`.
958    pub fn flatten_domain(self) -> Result<BasicMap, LibISLError> {
959        let bmap = self;
960        let isl_rs_ctx = bmap.get_ctx();
961        let mut bmap = bmap;
962        bmap.do_not_free_on_drop();
963        let bmap = bmap.ptr;
964        let isl_rs_result = unsafe { isl_basic_map_flatten_domain(bmap) };
965        let isl_rs_result = BasicMap { ptr: isl_rs_result,
966                                       should_free_on_drop: true };
967        let err = isl_rs_ctx.last_error();
968        if err != Error::None_ {
969            let err_msg = isl_rs_ctx.last_error_msg();
970            isl_rs_ctx.reset_error();
971            return Err(LibISLError::new(err, err_msg));
972        }
973        Ok(isl_rs_result)
974    }
975
976    /// Wraps `isl_basic_map_flatten_range`.
977    pub fn flatten_range(self) -> Result<BasicMap, LibISLError> {
978        let bmap = self;
979        let isl_rs_ctx = bmap.get_ctx();
980        let mut bmap = bmap;
981        bmap.do_not_free_on_drop();
982        let bmap = bmap.ptr;
983        let isl_rs_result = unsafe { isl_basic_map_flatten_range(bmap) };
984        let isl_rs_result = BasicMap { ptr: isl_rs_result,
985                                       should_free_on_drop: true };
986        let err = isl_rs_ctx.last_error();
987        if err != Error::None_ {
988            let err_msg = isl_rs_ctx.last_error_msg();
989            isl_rs_ctx.reset_error();
990            return Err(LibISLError::new(err, err_msg));
991        }
992        Ok(isl_rs_result)
993    }
994
995    /// Wraps `isl_basic_map_free`.
996    pub fn free(self) -> Result<BasicMap, LibISLError> {
997        let bmap = self;
998        let isl_rs_ctx = bmap.get_ctx();
999        let mut bmap = bmap;
1000        bmap.do_not_free_on_drop();
1001        let bmap = bmap.ptr;
1002        let isl_rs_result = unsafe { isl_basic_map_free(bmap) };
1003        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1004                                       should_free_on_drop: true };
1005        let err = isl_rs_ctx.last_error();
1006        if err != Error::None_ {
1007            let err_msg = isl_rs_ctx.last_error_msg();
1008            isl_rs_ctx.reset_error();
1009            return Err(LibISLError::new(err, err_msg));
1010        }
1011        Ok(isl_rs_result)
1012    }
1013
1014    /// Wraps `isl_basic_map_from_aff`.
1015    pub fn from_aff(aff: Aff) -> Result<BasicMap, LibISLError> {
1016        let isl_rs_ctx = aff.get_ctx();
1017        let mut aff = aff;
1018        aff.do_not_free_on_drop();
1019        let aff = aff.ptr;
1020        let isl_rs_result = unsafe { isl_basic_map_from_aff(aff) };
1021        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1022                                       should_free_on_drop: true };
1023        let err = isl_rs_ctx.last_error();
1024        if err != Error::None_ {
1025            let err_msg = isl_rs_ctx.last_error_msg();
1026            isl_rs_ctx.reset_error();
1027            return Err(LibISLError::new(err, err_msg));
1028        }
1029        Ok(isl_rs_result)
1030    }
1031
1032    /// Wraps `isl_basic_map_from_aff_list`.
1033    pub fn from_aff_list(domain_space: Space, list: AffList) -> Result<BasicMap, LibISLError> {
1034        let isl_rs_ctx = domain_space.get_ctx();
1035        let mut domain_space = domain_space;
1036        domain_space.do_not_free_on_drop();
1037        let domain_space = domain_space.ptr;
1038        let mut list = list;
1039        list.do_not_free_on_drop();
1040        let list = list.ptr;
1041        let isl_rs_result = unsafe { isl_basic_map_from_aff_list(domain_space, list) };
1042        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1043                                       should_free_on_drop: true };
1044        let err = isl_rs_ctx.last_error();
1045        if err != Error::None_ {
1046            let err_msg = isl_rs_ctx.last_error_msg();
1047            isl_rs_ctx.reset_error();
1048            return Err(LibISLError::new(err, err_msg));
1049        }
1050        Ok(isl_rs_result)
1051    }
1052
1053    /// Wraps `isl_basic_map_from_constraint`.
1054    pub fn from_constraint(constraint: Constraint) -> Result<BasicMap, LibISLError> {
1055        let isl_rs_ctx = constraint.get_ctx();
1056        let mut constraint = constraint;
1057        constraint.do_not_free_on_drop();
1058        let constraint = constraint.ptr;
1059        let isl_rs_result = unsafe { isl_basic_map_from_constraint(constraint) };
1060        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1061                                       should_free_on_drop: true };
1062        let err = isl_rs_ctx.last_error();
1063        if err != Error::None_ {
1064            let err_msg = isl_rs_ctx.last_error_msg();
1065            isl_rs_ctx.reset_error();
1066            return Err(LibISLError::new(err, err_msg));
1067        }
1068        Ok(isl_rs_result)
1069    }
1070
1071    /// Wraps `isl_basic_map_from_constraint_matrices`.
1072    pub fn from_constraint_matrices(space: Space, eq: Mat, ineq: Mat, c1: DimType, c2: DimType,
1073                                    c3: DimType, c4: DimType, c5: DimType)
1074                                    -> Result<BasicMap, LibISLError> {
1075        let isl_rs_ctx = space.get_ctx();
1076        let mut space = space;
1077        space.do_not_free_on_drop();
1078        let space = space.ptr;
1079        let mut eq = eq;
1080        eq.do_not_free_on_drop();
1081        let eq = eq.ptr;
1082        let mut ineq = ineq;
1083        ineq.do_not_free_on_drop();
1084        let ineq = ineq.ptr;
1085        let c1 = c1.to_i32();
1086        let c2 = c2.to_i32();
1087        let c3 = c3.to_i32();
1088        let c4 = c4.to_i32();
1089        let c5 = c5.to_i32();
1090        let isl_rs_result =
1091            unsafe { isl_basic_map_from_constraint_matrices(space, eq, ineq, c1, c2, c3, c4, c5) };
1092        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1093                                       should_free_on_drop: true };
1094        let err = isl_rs_ctx.last_error();
1095        if err != Error::None_ {
1096            let err_msg = isl_rs_ctx.last_error_msg();
1097            isl_rs_ctx.reset_error();
1098            return Err(LibISLError::new(err, err_msg));
1099        }
1100        Ok(isl_rs_result)
1101    }
1102
1103    /// Wraps `isl_basic_map_from_domain`.
1104    pub fn from_domain(bset: BasicSet) -> Result<BasicMap, LibISLError> {
1105        let isl_rs_ctx = bset.get_ctx();
1106        let mut bset = bset;
1107        bset.do_not_free_on_drop();
1108        let bset = bset.ptr;
1109        let isl_rs_result = unsafe { isl_basic_map_from_domain(bset) };
1110        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1111                                       should_free_on_drop: true };
1112        let err = isl_rs_ctx.last_error();
1113        if err != Error::None_ {
1114            let err_msg = isl_rs_ctx.last_error_msg();
1115            isl_rs_ctx.reset_error();
1116            return Err(LibISLError::new(err, err_msg));
1117        }
1118        Ok(isl_rs_result)
1119    }
1120
1121    /// Wraps `isl_basic_map_from_domain_and_range`.
1122    pub fn from_domain_and_range(domain: BasicSet, range: BasicSet)
1123                                 -> Result<BasicMap, LibISLError> {
1124        let isl_rs_ctx = domain.get_ctx();
1125        let mut domain = domain;
1126        domain.do_not_free_on_drop();
1127        let domain = domain.ptr;
1128        let mut range = range;
1129        range.do_not_free_on_drop();
1130        let range = range.ptr;
1131        let isl_rs_result = unsafe { isl_basic_map_from_domain_and_range(domain, range) };
1132        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1133                                       should_free_on_drop: true };
1134        let err = isl_rs_ctx.last_error();
1135        if err != Error::None_ {
1136            let err_msg = isl_rs_ctx.last_error_msg();
1137            isl_rs_ctx.reset_error();
1138            return Err(LibISLError::new(err, err_msg));
1139        }
1140        Ok(isl_rs_result)
1141    }
1142
1143    /// Wraps `isl_basic_map_from_multi_aff`.
1144    pub fn from_multi_aff(maff: MultiAff) -> Result<BasicMap, LibISLError> {
1145        let isl_rs_ctx = maff.get_ctx();
1146        let mut maff = maff;
1147        maff.do_not_free_on_drop();
1148        let maff = maff.ptr;
1149        let isl_rs_result = unsafe { isl_basic_map_from_multi_aff(maff) };
1150        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1151                                       should_free_on_drop: true };
1152        let err = isl_rs_ctx.last_error();
1153        if err != Error::None_ {
1154            let err_msg = isl_rs_ctx.last_error_msg();
1155            isl_rs_ctx.reset_error();
1156            return Err(LibISLError::new(err, err_msg));
1157        }
1158        Ok(isl_rs_result)
1159    }
1160
1161    /// Wraps `isl_basic_map_from_qpolynomial`.
1162    pub fn from_qpolynomial(qp: QPolynomial) -> Result<BasicMap, LibISLError> {
1163        let isl_rs_ctx = qp.get_ctx();
1164        let mut qp = qp;
1165        qp.do_not_free_on_drop();
1166        let qp = qp.ptr;
1167        let isl_rs_result = unsafe { isl_basic_map_from_qpolynomial(qp) };
1168        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1169                                       should_free_on_drop: true };
1170        let err = isl_rs_ctx.last_error();
1171        if err != Error::None_ {
1172            let err_msg = isl_rs_ctx.last_error_msg();
1173            isl_rs_ctx.reset_error();
1174            return Err(LibISLError::new(err, err_msg));
1175        }
1176        Ok(isl_rs_result)
1177    }
1178
1179    /// Wraps `isl_basic_map_from_range`.
1180    pub fn from_range(bset: BasicSet) -> Result<BasicMap, LibISLError> {
1181        let isl_rs_ctx = bset.get_ctx();
1182        let mut bset = bset;
1183        bset.do_not_free_on_drop();
1184        let bset = bset.ptr;
1185        let isl_rs_result = unsafe { isl_basic_map_from_range(bset) };
1186        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1187                                       should_free_on_drop: true };
1188        let err = isl_rs_ctx.last_error();
1189        if err != Error::None_ {
1190            let err_msg = isl_rs_ctx.last_error_msg();
1191            isl_rs_ctx.reset_error();
1192            return Err(LibISLError::new(err, err_msg));
1193        }
1194        Ok(isl_rs_result)
1195    }
1196
1197    /// Wraps `isl_basic_map_get_constraint_list`.
1198    pub fn get_constraint_list(&self) -> Result<ConstraintList, LibISLError> {
1199        let bmap = self;
1200        let isl_rs_ctx = bmap.get_ctx();
1201        let bmap = bmap.ptr;
1202        let isl_rs_result = unsafe { isl_basic_map_get_constraint_list(bmap) };
1203        let isl_rs_result = ConstraintList { ptr: isl_rs_result,
1204                                             should_free_on_drop: true };
1205        let err = isl_rs_ctx.last_error();
1206        if err != Error::None_ {
1207            let err_msg = isl_rs_ctx.last_error_msg();
1208            isl_rs_ctx.reset_error();
1209            return Err(LibISLError::new(err, err_msg));
1210        }
1211        Ok(isl_rs_result)
1212    }
1213
1214    /// Wraps `isl_basic_map_get_ctx`.
1215    pub fn get_ctx(&self) -> Context {
1216        let bmap = self;
1217        let bmap = bmap.ptr;
1218        let isl_rs_result = unsafe { isl_basic_map_get_ctx(bmap) };
1219        let isl_rs_result = Context { ptr: isl_rs_result,
1220                                      should_free_on_drop: false };
1221        isl_rs_result
1222    }
1223
1224    /// Wraps `isl_basic_map_get_dim_name`.
1225    pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
1226        let bmap = self;
1227        let isl_rs_ctx = bmap.get_ctx();
1228        let bmap = bmap.ptr;
1229        let type_ = type_.to_i32();
1230        let isl_rs_result = unsafe { isl_basic_map_get_dim_name(bmap, type_, pos) };
1231        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1232        let isl_rs_result = isl_rs_result.to_str().unwrap();
1233        let err = isl_rs_ctx.last_error();
1234        if err != Error::None_ {
1235            let err_msg = isl_rs_ctx.last_error_msg();
1236            isl_rs_ctx.reset_error();
1237            return Err(LibISLError::new(err, err_msg));
1238        }
1239        Ok(isl_rs_result)
1240    }
1241
1242    /// Wraps `isl_basic_map_get_div`.
1243    pub fn get_div(&self, pos: i32) -> Result<Aff, LibISLError> {
1244        let bmap = self;
1245        let isl_rs_ctx = bmap.get_ctx();
1246        let bmap = bmap.ptr;
1247        let isl_rs_result = unsafe { isl_basic_map_get_div(bmap, pos) };
1248        let isl_rs_result = Aff { ptr: isl_rs_result,
1249                                  should_free_on_drop: true };
1250        let err = isl_rs_ctx.last_error();
1251        if err != Error::None_ {
1252            let err_msg = isl_rs_ctx.last_error_msg();
1253            isl_rs_ctx.reset_error();
1254            return Err(LibISLError::new(err, err_msg));
1255        }
1256        Ok(isl_rs_result)
1257    }
1258
1259    /// Wraps `isl_basic_map_get_local_space`.
1260    pub fn get_local_space(&self) -> Result<LocalSpace, LibISLError> {
1261        let bmap = self;
1262        let isl_rs_ctx = bmap.get_ctx();
1263        let bmap = bmap.ptr;
1264        let isl_rs_result = unsafe { isl_basic_map_get_local_space(bmap) };
1265        let isl_rs_result = LocalSpace { ptr: isl_rs_result,
1266                                         should_free_on_drop: true };
1267        let err = isl_rs_ctx.last_error();
1268        if err != Error::None_ {
1269            let err_msg = isl_rs_ctx.last_error_msg();
1270            isl_rs_ctx.reset_error();
1271            return Err(LibISLError::new(err, err_msg));
1272        }
1273        Ok(isl_rs_result)
1274    }
1275
1276    /// Wraps `isl_basic_map_get_space`.
1277    pub fn get_space(&self) -> Result<Space, LibISLError> {
1278        let bmap = self;
1279        let isl_rs_ctx = bmap.get_ctx();
1280        let bmap = bmap.ptr;
1281        let isl_rs_result = unsafe { isl_basic_map_get_space(bmap) };
1282        let isl_rs_result = Space { ptr: isl_rs_result,
1283                                    should_free_on_drop: true };
1284        let err = isl_rs_ctx.last_error();
1285        if err != Error::None_ {
1286            let err_msg = isl_rs_ctx.last_error_msg();
1287            isl_rs_ctx.reset_error();
1288            return Err(LibISLError::new(err, err_msg));
1289        }
1290        Ok(isl_rs_result)
1291    }
1292
1293    /// Wraps `isl_basic_map_get_tuple_name`.
1294    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
1295        let bmap = self;
1296        let isl_rs_ctx = bmap.get_ctx();
1297        let bmap = bmap.ptr;
1298        let type_ = type_.to_i32();
1299        let isl_rs_result = unsafe { isl_basic_map_get_tuple_name(bmap, type_) };
1300        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1301        let isl_rs_result = isl_rs_result.to_str().unwrap();
1302        let err = isl_rs_ctx.last_error();
1303        if err != Error::None_ {
1304            let err_msg = isl_rs_ctx.last_error_msg();
1305            isl_rs_ctx.reset_error();
1306            return Err(LibISLError::new(err, err_msg));
1307        }
1308        Ok(isl_rs_result)
1309    }
1310
1311    /// Wraps `isl_basic_map_gist`.
1312    pub fn gist(self, context: BasicMap) -> Result<BasicMap, LibISLError> {
1313        let bmap = self;
1314        let isl_rs_ctx = bmap.get_ctx();
1315        let mut bmap = bmap;
1316        bmap.do_not_free_on_drop();
1317        let bmap = bmap.ptr;
1318        let mut context = context;
1319        context.do_not_free_on_drop();
1320        let context = context.ptr;
1321        let isl_rs_result = unsafe { isl_basic_map_gist(bmap, context) };
1322        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1323                                       should_free_on_drop: true };
1324        let err = isl_rs_ctx.last_error();
1325        if err != Error::None_ {
1326            let err_msg = isl_rs_ctx.last_error_msg();
1327            isl_rs_ctx.reset_error();
1328            return Err(LibISLError::new(err, err_msg));
1329        }
1330        Ok(isl_rs_result)
1331    }
1332
1333    /// Wraps `isl_basic_map_gist_domain`.
1334    pub fn gist_domain(self, context: BasicSet) -> Result<BasicMap, LibISLError> {
1335        let bmap = self;
1336        let isl_rs_ctx = bmap.get_ctx();
1337        let mut bmap = bmap;
1338        bmap.do_not_free_on_drop();
1339        let bmap = bmap.ptr;
1340        let mut context = context;
1341        context.do_not_free_on_drop();
1342        let context = context.ptr;
1343        let isl_rs_result = unsafe { isl_basic_map_gist_domain(bmap, context) };
1344        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1345                                       should_free_on_drop: true };
1346        let err = isl_rs_ctx.last_error();
1347        if err != Error::None_ {
1348            let err_msg = isl_rs_ctx.last_error_msg();
1349            isl_rs_ctx.reset_error();
1350            return Err(LibISLError::new(err, err_msg));
1351        }
1352        Ok(isl_rs_result)
1353    }
1354
1355    /// Wraps `isl_basic_map_has_dim_id`.
1356    pub fn has_dim_id(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1357        let bmap = self;
1358        let isl_rs_ctx = bmap.get_ctx();
1359        let bmap = bmap.ptr;
1360        let type_ = type_.to_i32();
1361        let isl_rs_result = unsafe { isl_basic_map_has_dim_id(bmap, type_, pos) };
1362        let isl_rs_result = match isl_rs_result {
1363            0 => false,
1364            1 => true,
1365            _ => {
1366                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1367            }
1368        };
1369        let err = isl_rs_ctx.last_error();
1370        if err != Error::None_ {
1371            let err_msg = isl_rs_ctx.last_error_msg();
1372            isl_rs_ctx.reset_error();
1373            return Err(LibISLError::new(err, err_msg));
1374        }
1375        Ok(isl_rs_result)
1376    }
1377
1378    /// Wraps `isl_basic_map_identity`.
1379    pub fn identity(space: Space) -> Result<BasicMap, LibISLError> {
1380        let isl_rs_ctx = space.get_ctx();
1381        let mut space = space;
1382        space.do_not_free_on_drop();
1383        let space = space.ptr;
1384        let isl_rs_result = unsafe { isl_basic_map_identity(space) };
1385        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1386                                       should_free_on_drop: true };
1387        let err = isl_rs_ctx.last_error();
1388        if err != Error::None_ {
1389            let err_msg = isl_rs_ctx.last_error_msg();
1390            isl_rs_ctx.reset_error();
1391            return Err(LibISLError::new(err, err_msg));
1392        }
1393        Ok(isl_rs_result)
1394    }
1395
1396    /// Wraps `isl_basic_map_image_is_bounded`.
1397    pub fn image_is_bounded(&self) -> Result<bool, LibISLError> {
1398        let bmap = self;
1399        let isl_rs_ctx = bmap.get_ctx();
1400        let bmap = bmap.ptr;
1401        let isl_rs_result = unsafe { isl_basic_map_image_is_bounded(bmap) };
1402        let isl_rs_result = match isl_rs_result {
1403            0 => false,
1404            1 => true,
1405            _ => {
1406                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1407            }
1408        };
1409        let err = isl_rs_ctx.last_error();
1410        if err != Error::None_ {
1411            let err_msg = isl_rs_ctx.last_error_msg();
1412            isl_rs_ctx.reset_error();
1413            return Err(LibISLError::new(err, err_msg));
1414        }
1415        Ok(isl_rs_result)
1416    }
1417
1418    /// Wraps `isl_basic_map_inequalities_matrix`.
1419    pub fn inequalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType,
1420                               c5: DimType)
1421                               -> Result<Mat, LibISLError> {
1422        let bmap = self;
1423        let isl_rs_ctx = bmap.get_ctx();
1424        let bmap = bmap.ptr;
1425        let c1 = c1.to_i32();
1426        let c2 = c2.to_i32();
1427        let c3 = c3.to_i32();
1428        let c4 = c4.to_i32();
1429        let c5 = c5.to_i32();
1430        let isl_rs_result = unsafe { isl_basic_map_inequalities_matrix(bmap, c1, c2, c3, c4, c5) };
1431        let isl_rs_result = Mat { ptr: isl_rs_result,
1432                                  should_free_on_drop: true };
1433        let err = isl_rs_ctx.last_error();
1434        if err != Error::None_ {
1435            let err_msg = isl_rs_ctx.last_error_msg();
1436            isl_rs_ctx.reset_error();
1437            return Err(LibISLError::new(err, err_msg));
1438        }
1439        Ok(isl_rs_result)
1440    }
1441
1442    /// Wraps `isl_basic_map_insert_dims`.
1443    pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> Result<BasicMap, LibISLError> {
1444        let bmap = self;
1445        let isl_rs_ctx = bmap.get_ctx();
1446        let mut bmap = bmap;
1447        bmap.do_not_free_on_drop();
1448        let bmap = bmap.ptr;
1449        let type_ = type_.to_i32();
1450        let isl_rs_result = unsafe { isl_basic_map_insert_dims(bmap, type_, pos, n) };
1451        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1452                                       should_free_on_drop: true };
1453        let err = isl_rs_ctx.last_error();
1454        if err != Error::None_ {
1455            let err_msg = isl_rs_ctx.last_error_msg();
1456            isl_rs_ctx.reset_error();
1457            return Err(LibISLError::new(err, err_msg));
1458        }
1459        Ok(isl_rs_result)
1460    }
1461
1462    /// Wraps `isl_basic_map_intersect`.
1463    pub fn intersect(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
1464        let bmap1 = self;
1465        let isl_rs_ctx = bmap1.get_ctx();
1466        let mut bmap1 = bmap1;
1467        bmap1.do_not_free_on_drop();
1468        let bmap1 = bmap1.ptr;
1469        let mut bmap2 = bmap2;
1470        bmap2.do_not_free_on_drop();
1471        let bmap2 = bmap2.ptr;
1472        let isl_rs_result = unsafe { isl_basic_map_intersect(bmap1, bmap2) };
1473        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1474                                       should_free_on_drop: true };
1475        let err = isl_rs_ctx.last_error();
1476        if err != Error::None_ {
1477            let err_msg = isl_rs_ctx.last_error_msg();
1478            isl_rs_ctx.reset_error();
1479            return Err(LibISLError::new(err, err_msg));
1480        }
1481        Ok(isl_rs_result)
1482    }
1483
1484    /// Wraps `isl_basic_map_intersect_domain`.
1485    pub fn intersect_domain(self, bset: BasicSet) -> Result<BasicMap, LibISLError> {
1486        let bmap = self;
1487        let isl_rs_ctx = bmap.get_ctx();
1488        let mut bmap = bmap;
1489        bmap.do_not_free_on_drop();
1490        let bmap = bmap.ptr;
1491        let mut bset = bset;
1492        bset.do_not_free_on_drop();
1493        let bset = bset.ptr;
1494        let isl_rs_result = unsafe { isl_basic_map_intersect_domain(bmap, bset) };
1495        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1496                                       should_free_on_drop: true };
1497        let err = isl_rs_ctx.last_error();
1498        if err != Error::None_ {
1499            let err_msg = isl_rs_ctx.last_error_msg();
1500            isl_rs_ctx.reset_error();
1501            return Err(LibISLError::new(err, err_msg));
1502        }
1503        Ok(isl_rs_result)
1504    }
1505
1506    /// Wraps `isl_basic_map_intersect_params`.
1507    pub fn intersect_params(self, bset: BasicSet) -> Result<BasicMap, LibISLError> {
1508        let bmap = self;
1509        let isl_rs_ctx = bmap.get_ctx();
1510        let mut bmap = bmap;
1511        bmap.do_not_free_on_drop();
1512        let bmap = bmap.ptr;
1513        let mut bset = bset;
1514        bset.do_not_free_on_drop();
1515        let bset = bset.ptr;
1516        let isl_rs_result = unsafe { isl_basic_map_intersect_params(bmap, bset) };
1517        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1518                                       should_free_on_drop: true };
1519        let err = isl_rs_ctx.last_error();
1520        if err != Error::None_ {
1521            let err_msg = isl_rs_ctx.last_error_msg();
1522            isl_rs_ctx.reset_error();
1523            return Err(LibISLError::new(err, err_msg));
1524        }
1525        Ok(isl_rs_result)
1526    }
1527
1528    /// Wraps `isl_basic_map_intersect_range`.
1529    pub fn intersect_range(self, bset: BasicSet) -> Result<BasicMap, LibISLError> {
1530        let bmap = self;
1531        let isl_rs_ctx = bmap.get_ctx();
1532        let mut bmap = bmap;
1533        bmap.do_not_free_on_drop();
1534        let bmap = bmap.ptr;
1535        let mut bset = bset;
1536        bset.do_not_free_on_drop();
1537        let bset = bset.ptr;
1538        let isl_rs_result = unsafe { isl_basic_map_intersect_range(bmap, bset) };
1539        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1540                                       should_free_on_drop: true };
1541        let err = isl_rs_ctx.last_error();
1542        if err != Error::None_ {
1543            let err_msg = isl_rs_ctx.last_error_msg();
1544            isl_rs_ctx.reset_error();
1545            return Err(LibISLError::new(err, err_msg));
1546        }
1547        Ok(isl_rs_result)
1548    }
1549
1550    /// Wraps `isl_basic_map_involves_dims`.
1551    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1552        let bmap = self;
1553        let isl_rs_ctx = bmap.get_ctx();
1554        let bmap = bmap.ptr;
1555        let type_ = type_.to_i32();
1556        let isl_rs_result = unsafe { isl_basic_map_involves_dims(bmap, type_, first, n) };
1557        let isl_rs_result = match isl_rs_result {
1558            0 => false,
1559            1 => true,
1560            _ => {
1561                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1562            }
1563        };
1564        let err = isl_rs_ctx.last_error();
1565        if err != Error::None_ {
1566            let err_msg = isl_rs_ctx.last_error_msg();
1567            isl_rs_ctx.reset_error();
1568            return Err(LibISLError::new(err, err_msg));
1569        }
1570        Ok(isl_rs_result)
1571    }
1572
1573    /// Wraps `isl_basic_map_is_disjoint`.
1574    pub fn is_disjoint(&self, bmap2: &BasicMap) -> Result<bool, LibISLError> {
1575        let bmap1 = self;
1576        let isl_rs_ctx = bmap1.get_ctx();
1577        let bmap1 = bmap1.ptr;
1578        let bmap2 = bmap2.ptr;
1579        let isl_rs_result = unsafe { isl_basic_map_is_disjoint(bmap1, bmap2) };
1580        let isl_rs_result = match isl_rs_result {
1581            0 => false,
1582            1 => true,
1583            _ => {
1584                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1585            }
1586        };
1587        let err = isl_rs_ctx.last_error();
1588        if err != Error::None_ {
1589            let err_msg = isl_rs_ctx.last_error_msg();
1590            isl_rs_ctx.reset_error();
1591            return Err(LibISLError::new(err, err_msg));
1592        }
1593        Ok(isl_rs_result)
1594    }
1595
1596    /// Wraps `isl_basic_map_is_empty`.
1597    pub fn is_empty(&self) -> Result<bool, LibISLError> {
1598        let bmap = self;
1599        let isl_rs_ctx = bmap.get_ctx();
1600        let bmap = bmap.ptr;
1601        let isl_rs_result = unsafe { isl_basic_map_is_empty(bmap) };
1602        let isl_rs_result = match isl_rs_result {
1603            0 => false,
1604            1 => true,
1605            _ => {
1606                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1607            }
1608        };
1609        let err = isl_rs_ctx.last_error();
1610        if err != Error::None_ {
1611            let err_msg = isl_rs_ctx.last_error_msg();
1612            isl_rs_ctx.reset_error();
1613            return Err(LibISLError::new(err, err_msg));
1614        }
1615        Ok(isl_rs_result)
1616    }
1617
1618    /// Wraps `isl_basic_map_is_equal`.
1619    pub fn is_equal(&self, bmap2: &BasicMap) -> Result<bool, LibISLError> {
1620        let bmap1 = self;
1621        let isl_rs_ctx = bmap1.get_ctx();
1622        let bmap1 = bmap1.ptr;
1623        let bmap2 = bmap2.ptr;
1624        let isl_rs_result = unsafe { isl_basic_map_is_equal(bmap1, bmap2) };
1625        let isl_rs_result = match isl_rs_result {
1626            0 => false,
1627            1 => true,
1628            _ => {
1629                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1630            }
1631        };
1632        let err = isl_rs_ctx.last_error();
1633        if err != Error::None_ {
1634            let err_msg = isl_rs_ctx.last_error_msg();
1635            isl_rs_ctx.reset_error();
1636            return Err(LibISLError::new(err, err_msg));
1637        }
1638        Ok(isl_rs_result)
1639    }
1640
1641    /// Wraps `isl_basic_map_is_rational`.
1642    pub fn is_rational(&self) -> Result<bool, LibISLError> {
1643        let bmap = self;
1644        let isl_rs_ctx = bmap.get_ctx();
1645        let bmap = bmap.ptr;
1646        let isl_rs_result = unsafe { isl_basic_map_is_rational(bmap) };
1647        let isl_rs_result = match isl_rs_result {
1648            0 => false,
1649            1 => true,
1650            _ => {
1651                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1652            }
1653        };
1654        let err = isl_rs_ctx.last_error();
1655        if err != Error::None_ {
1656            let err_msg = isl_rs_ctx.last_error_msg();
1657            isl_rs_ctx.reset_error();
1658            return Err(LibISLError::new(err, err_msg));
1659        }
1660        Ok(isl_rs_result)
1661    }
1662
1663    /// Wraps `isl_basic_map_is_single_valued`.
1664    pub fn is_single_valued(&self) -> Result<bool, LibISLError> {
1665        let bmap = self;
1666        let isl_rs_ctx = bmap.get_ctx();
1667        let bmap = bmap.ptr;
1668        let isl_rs_result = unsafe { isl_basic_map_is_single_valued(bmap) };
1669        let isl_rs_result = match isl_rs_result {
1670            0 => false,
1671            1 => true,
1672            _ => {
1673                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1674            }
1675        };
1676        let err = isl_rs_ctx.last_error();
1677        if err != Error::None_ {
1678            let err_msg = isl_rs_ctx.last_error_msg();
1679            isl_rs_ctx.reset_error();
1680            return Err(LibISLError::new(err, err_msg));
1681        }
1682        Ok(isl_rs_result)
1683    }
1684
1685    /// Wraps `isl_basic_map_is_strict_subset`.
1686    pub fn is_strict_subset(&self, bmap2: &BasicMap) -> Result<bool, LibISLError> {
1687        let bmap1 = self;
1688        let isl_rs_ctx = bmap1.get_ctx();
1689        let bmap1 = bmap1.ptr;
1690        let bmap2 = bmap2.ptr;
1691        let isl_rs_result = unsafe { isl_basic_map_is_strict_subset(bmap1, bmap2) };
1692        let isl_rs_result = match isl_rs_result {
1693            0 => false,
1694            1 => true,
1695            _ => {
1696                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1697            }
1698        };
1699        let err = isl_rs_ctx.last_error();
1700        if err != Error::None_ {
1701            let err_msg = isl_rs_ctx.last_error_msg();
1702            isl_rs_ctx.reset_error();
1703            return Err(LibISLError::new(err, err_msg));
1704        }
1705        Ok(isl_rs_result)
1706    }
1707
1708    /// Wraps `isl_basic_map_is_subset`.
1709    pub fn is_subset(&self, bmap2: &BasicMap) -> Result<bool, LibISLError> {
1710        let bmap1 = self;
1711        let isl_rs_ctx = bmap1.get_ctx();
1712        let bmap1 = bmap1.ptr;
1713        let bmap2 = bmap2.ptr;
1714        let isl_rs_result = unsafe { isl_basic_map_is_subset(bmap1, bmap2) };
1715        let isl_rs_result = match isl_rs_result {
1716            0 => false,
1717            1 => true,
1718            _ => {
1719                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1720            }
1721        };
1722        let err = isl_rs_ctx.last_error();
1723        if err != Error::None_ {
1724            let err_msg = isl_rs_ctx.last_error_msg();
1725            isl_rs_ctx.reset_error();
1726            return Err(LibISLError::new(err, err_msg));
1727        }
1728        Ok(isl_rs_result)
1729    }
1730
1731    /// Wraps `isl_basic_map_is_universe`.
1732    pub fn is_universe(&self) -> Result<bool, LibISLError> {
1733        let bmap = self;
1734        let isl_rs_ctx = bmap.get_ctx();
1735        let bmap = bmap.ptr;
1736        let isl_rs_result = unsafe { isl_basic_map_is_universe(bmap) };
1737        let isl_rs_result = match isl_rs_result {
1738            0 => false,
1739            1 => true,
1740            _ => {
1741                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1742            }
1743        };
1744        let err = isl_rs_ctx.last_error();
1745        if err != Error::None_ {
1746            let err_msg = isl_rs_ctx.last_error_msg();
1747            isl_rs_ctx.reset_error();
1748            return Err(LibISLError::new(err, err_msg));
1749        }
1750        Ok(isl_rs_result)
1751    }
1752
1753    /// Wraps `isl_basic_map_less_at`.
1754    pub fn less_at(space: Space, pos: u32) -> Result<BasicMap, LibISLError> {
1755        let isl_rs_ctx = space.get_ctx();
1756        let mut space = space;
1757        space.do_not_free_on_drop();
1758        let space = space.ptr;
1759        let isl_rs_result = unsafe { isl_basic_map_less_at(space, pos) };
1760        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1761                                       should_free_on_drop: true };
1762        let err = isl_rs_ctx.last_error();
1763        if err != Error::None_ {
1764            let err_msg = isl_rs_ctx.last_error_msg();
1765            isl_rs_ctx.reset_error();
1766            return Err(LibISLError::new(err, err_msg));
1767        }
1768        Ok(isl_rs_result)
1769    }
1770
1771    /// Wraps `isl_basic_map_lexmax`.
1772    pub fn lexmax(self) -> Result<Map, LibISLError> {
1773        let bmap = self;
1774        let isl_rs_ctx = bmap.get_ctx();
1775        let mut bmap = bmap;
1776        bmap.do_not_free_on_drop();
1777        let bmap = bmap.ptr;
1778        let isl_rs_result = unsafe { isl_basic_map_lexmax(bmap) };
1779        let isl_rs_result = Map { ptr: isl_rs_result,
1780                                  should_free_on_drop: true };
1781        let err = isl_rs_ctx.last_error();
1782        if err != Error::None_ {
1783            let err_msg = isl_rs_ctx.last_error_msg();
1784            isl_rs_ctx.reset_error();
1785            return Err(LibISLError::new(err, err_msg));
1786        }
1787        Ok(isl_rs_result)
1788    }
1789
1790    /// Wraps `isl_basic_map_lexmin`.
1791    pub fn lexmin(self) -> Result<Map, LibISLError> {
1792        let bmap = self;
1793        let isl_rs_ctx = bmap.get_ctx();
1794        let mut bmap = bmap;
1795        bmap.do_not_free_on_drop();
1796        let bmap = bmap.ptr;
1797        let isl_rs_result = unsafe { isl_basic_map_lexmin(bmap) };
1798        let isl_rs_result = Map { ptr: isl_rs_result,
1799                                  should_free_on_drop: true };
1800        let err = isl_rs_ctx.last_error();
1801        if err != Error::None_ {
1802            let err_msg = isl_rs_ctx.last_error_msg();
1803            isl_rs_ctx.reset_error();
1804            return Err(LibISLError::new(err, err_msg));
1805        }
1806        Ok(isl_rs_result)
1807    }
1808
1809    /// Wraps `isl_basic_map_lexmin_pw_multi_aff`.
1810    pub fn lexmin_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
1811        let bmap = self;
1812        let isl_rs_ctx = bmap.get_ctx();
1813        let mut bmap = bmap;
1814        bmap.do_not_free_on_drop();
1815        let bmap = bmap.ptr;
1816        let isl_rs_result = unsafe { isl_basic_map_lexmin_pw_multi_aff(bmap) };
1817        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1818                                         should_free_on_drop: true };
1819        let err = isl_rs_ctx.last_error();
1820        if err != Error::None_ {
1821            let err_msg = isl_rs_ctx.last_error_msg();
1822            isl_rs_ctx.reset_error();
1823            return Err(LibISLError::new(err, err_msg));
1824        }
1825        Ok(isl_rs_result)
1826    }
1827
1828    /// Wraps `isl_basic_map_lower_bound_si`.
1829    pub fn lower_bound_si(self, type_: DimType, pos: u32, value: i32)
1830                          -> Result<BasicMap, LibISLError> {
1831        let bmap = self;
1832        let isl_rs_ctx = bmap.get_ctx();
1833        let mut bmap = bmap;
1834        bmap.do_not_free_on_drop();
1835        let bmap = bmap.ptr;
1836        let type_ = type_.to_i32();
1837        let isl_rs_result = unsafe { isl_basic_map_lower_bound_si(bmap, type_, pos, value) };
1838        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1839                                       should_free_on_drop: true };
1840        let err = isl_rs_ctx.last_error();
1841        if err != Error::None_ {
1842            let err_msg = isl_rs_ctx.last_error_msg();
1843            isl_rs_ctx.reset_error();
1844            return Err(LibISLError::new(err, err_msg));
1845        }
1846        Ok(isl_rs_result)
1847    }
1848
1849    /// Wraps `isl_basic_map_more_at`.
1850    pub fn more_at(space: Space, pos: u32) -> Result<BasicMap, LibISLError> {
1851        let isl_rs_ctx = space.get_ctx();
1852        let mut space = space;
1853        space.do_not_free_on_drop();
1854        let space = space.ptr;
1855        let isl_rs_result = unsafe { isl_basic_map_more_at(space, pos) };
1856        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1857                                       should_free_on_drop: true };
1858        let err = isl_rs_ctx.last_error();
1859        if err != Error::None_ {
1860            let err_msg = isl_rs_ctx.last_error_msg();
1861            isl_rs_ctx.reset_error();
1862            return Err(LibISLError::new(err, err_msg));
1863        }
1864        Ok(isl_rs_result)
1865    }
1866
1867    /// Wraps `isl_basic_map_move_dims`.
1868    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1869                     n: u32)
1870                     -> Result<BasicMap, LibISLError> {
1871        let bmap = self;
1872        let isl_rs_ctx = bmap.get_ctx();
1873        let mut bmap = bmap;
1874        bmap.do_not_free_on_drop();
1875        let bmap = bmap.ptr;
1876        let dst_type = dst_type.to_i32();
1877        let src_type = src_type.to_i32();
1878        let isl_rs_result =
1879            unsafe { isl_basic_map_move_dims(bmap, dst_type, dst_pos, src_type, src_pos, n) };
1880        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1881                                       should_free_on_drop: true };
1882        let err = isl_rs_ctx.last_error();
1883        if err != Error::None_ {
1884            let err_msg = isl_rs_ctx.last_error_msg();
1885            isl_rs_ctx.reset_error();
1886            return Err(LibISLError::new(err, err_msg));
1887        }
1888        Ok(isl_rs_result)
1889    }
1890
1891    /// Wraps `isl_basic_map_n_constraint`.
1892    pub fn n_constraint(&self) -> Result<i32, LibISLError> {
1893        let bmap = self;
1894        let isl_rs_ctx = bmap.get_ctx();
1895        let bmap = bmap.ptr;
1896        let isl_rs_result = unsafe { isl_basic_map_n_constraint(bmap) };
1897        let err = isl_rs_ctx.last_error();
1898        if err != Error::None_ {
1899            let err_msg = isl_rs_ctx.last_error_msg();
1900            isl_rs_ctx.reset_error();
1901            return Err(LibISLError::new(err, err_msg));
1902        }
1903        Ok(isl_rs_result)
1904    }
1905
1906    /// Wraps `isl_basic_map_nat_universe`.
1907    pub fn nat_universe(space: Space) -> Result<BasicMap, LibISLError> {
1908        let isl_rs_ctx = space.get_ctx();
1909        let mut space = space;
1910        space.do_not_free_on_drop();
1911        let space = space.ptr;
1912        let isl_rs_result = unsafe { isl_basic_map_nat_universe(space) };
1913        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1914                                       should_free_on_drop: true };
1915        let err = isl_rs_ctx.last_error();
1916        if err != Error::None_ {
1917            let err_msg = isl_rs_ctx.last_error_msg();
1918            isl_rs_ctx.reset_error();
1919            return Err(LibISLError::new(err, err_msg));
1920        }
1921        Ok(isl_rs_result)
1922    }
1923
1924    /// Wraps `isl_basic_map_neg`.
1925    pub fn neg(self) -> Result<BasicMap, LibISLError> {
1926        let bmap = self;
1927        let isl_rs_ctx = bmap.get_ctx();
1928        let mut bmap = bmap;
1929        bmap.do_not_free_on_drop();
1930        let bmap = bmap.ptr;
1931        let isl_rs_result = unsafe { isl_basic_map_neg(bmap) };
1932        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1933                                       should_free_on_drop: true };
1934        let err = isl_rs_ctx.last_error();
1935        if err != Error::None_ {
1936            let err_msg = isl_rs_ctx.last_error_msg();
1937            isl_rs_ctx.reset_error();
1938            return Err(LibISLError::new(err, err_msg));
1939        }
1940        Ok(isl_rs_result)
1941    }
1942
1943    /// Wraps `isl_basic_map_order_ge`.
1944    pub fn order_ge(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
1945                    -> Result<BasicMap, LibISLError> {
1946        let bmap = self;
1947        let isl_rs_ctx = bmap.get_ctx();
1948        let mut bmap = bmap;
1949        bmap.do_not_free_on_drop();
1950        let bmap = bmap.ptr;
1951        let type1 = type1.to_i32();
1952        let type2 = type2.to_i32();
1953        let isl_rs_result = unsafe { isl_basic_map_order_ge(bmap, type1, pos1, type2, pos2) };
1954        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1955                                       should_free_on_drop: true };
1956        let err = isl_rs_ctx.last_error();
1957        if err != Error::None_ {
1958            let err_msg = isl_rs_ctx.last_error_msg();
1959            isl_rs_ctx.reset_error();
1960            return Err(LibISLError::new(err, err_msg));
1961        }
1962        Ok(isl_rs_result)
1963    }
1964
1965    /// Wraps `isl_basic_map_order_gt`.
1966    pub fn order_gt(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
1967                    -> Result<BasicMap, LibISLError> {
1968        let bmap = self;
1969        let isl_rs_ctx = bmap.get_ctx();
1970        let mut bmap = bmap;
1971        bmap.do_not_free_on_drop();
1972        let bmap = bmap.ptr;
1973        let type1 = type1.to_i32();
1974        let type2 = type2.to_i32();
1975        let isl_rs_result = unsafe { isl_basic_map_order_gt(bmap, type1, pos1, type2, pos2) };
1976        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1977                                       should_free_on_drop: true };
1978        let err = isl_rs_ctx.last_error();
1979        if err != Error::None_ {
1980            let err_msg = isl_rs_ctx.last_error_msg();
1981            isl_rs_ctx.reset_error();
1982            return Err(LibISLError::new(err, err_msg));
1983        }
1984        Ok(isl_rs_result)
1985    }
1986
1987    /// Wraps `isl_basic_map_plain_get_val_if_fixed`.
1988    pub fn plain_get_val_if_fixed(&self, type_: DimType, pos: u32) -> Result<Val, LibISLError> {
1989        let bmap = self;
1990        let isl_rs_ctx = bmap.get_ctx();
1991        let bmap = bmap.ptr;
1992        let type_ = type_.to_i32();
1993        let isl_rs_result = unsafe { isl_basic_map_plain_get_val_if_fixed(bmap, type_, pos) };
1994        let isl_rs_result = Val { ptr: isl_rs_result,
1995                                  should_free_on_drop: true };
1996        let err = isl_rs_ctx.last_error();
1997        if err != Error::None_ {
1998            let err_msg = isl_rs_ctx.last_error_msg();
1999            isl_rs_ctx.reset_error();
2000            return Err(LibISLError::new(err, err_msg));
2001        }
2002        Ok(isl_rs_result)
2003    }
2004
2005    /// Wraps `isl_basic_map_plain_is_empty`.
2006    pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
2007        let bmap = self;
2008        let isl_rs_ctx = bmap.get_ctx();
2009        let bmap = bmap.ptr;
2010        let isl_rs_result = unsafe { isl_basic_map_plain_is_empty(bmap) };
2011        let isl_rs_result = match isl_rs_result {
2012            0 => false,
2013            1 => true,
2014            _ => {
2015                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2016            }
2017        };
2018        let err = isl_rs_ctx.last_error();
2019        if err != Error::None_ {
2020            let err_msg = isl_rs_ctx.last_error_msg();
2021            isl_rs_ctx.reset_error();
2022            return Err(LibISLError::new(err, err_msg));
2023        }
2024        Ok(isl_rs_result)
2025    }
2026
2027    /// Wraps `isl_basic_map_plain_is_universe`.
2028    pub fn plain_is_universe(&self) -> Result<bool, LibISLError> {
2029        let bmap = self;
2030        let isl_rs_ctx = bmap.get_ctx();
2031        let bmap = bmap.ptr;
2032        let isl_rs_result = unsafe { isl_basic_map_plain_is_universe(bmap) };
2033        let isl_rs_result = match isl_rs_result {
2034            0 => false,
2035            1 => true,
2036            _ => {
2037                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2038            }
2039        };
2040        let err = isl_rs_ctx.last_error();
2041        if err != Error::None_ {
2042            let err_msg = isl_rs_ctx.last_error_msg();
2043            isl_rs_ctx.reset_error();
2044            return Err(LibISLError::new(err, err_msg));
2045        }
2046        Ok(isl_rs_result)
2047    }
2048
2049    /// Wraps `isl_basic_map_preimage_domain_multi_aff`.
2050    pub fn preimage_domain_multi_aff(self, ma: MultiAff) -> Result<BasicMap, LibISLError> {
2051        let bmap = self;
2052        let isl_rs_ctx = bmap.get_ctx();
2053        let mut bmap = bmap;
2054        bmap.do_not_free_on_drop();
2055        let bmap = bmap.ptr;
2056        let mut ma = ma;
2057        ma.do_not_free_on_drop();
2058        let ma = ma.ptr;
2059        let isl_rs_result = unsafe { isl_basic_map_preimage_domain_multi_aff(bmap, ma) };
2060        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2061                                       should_free_on_drop: true };
2062        let err = isl_rs_ctx.last_error();
2063        if err != Error::None_ {
2064            let err_msg = isl_rs_ctx.last_error_msg();
2065            isl_rs_ctx.reset_error();
2066            return Err(LibISLError::new(err, err_msg));
2067        }
2068        Ok(isl_rs_result)
2069    }
2070
2071    /// Wraps `isl_basic_map_preimage_range_multi_aff`.
2072    pub fn preimage_range_multi_aff(self, ma: MultiAff) -> Result<BasicMap, LibISLError> {
2073        let bmap = self;
2074        let isl_rs_ctx = bmap.get_ctx();
2075        let mut bmap = bmap;
2076        bmap.do_not_free_on_drop();
2077        let bmap = bmap.ptr;
2078        let mut ma = ma;
2079        ma.do_not_free_on_drop();
2080        let ma = ma.ptr;
2081        let isl_rs_result = unsafe { isl_basic_map_preimage_range_multi_aff(bmap, ma) };
2082        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2083                                       should_free_on_drop: true };
2084        let err = isl_rs_ctx.last_error();
2085        if err != Error::None_ {
2086            let err_msg = isl_rs_ctx.last_error_msg();
2087            isl_rs_ctx.reset_error();
2088            return Err(LibISLError::new(err, err_msg));
2089        }
2090        Ok(isl_rs_result)
2091    }
2092
2093    /// Wraps `isl_basic_map_product`.
2094    pub fn product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
2095        let bmap1 = self;
2096        let isl_rs_ctx = bmap1.get_ctx();
2097        let mut bmap1 = bmap1;
2098        bmap1.do_not_free_on_drop();
2099        let bmap1 = bmap1.ptr;
2100        let mut bmap2 = bmap2;
2101        bmap2.do_not_free_on_drop();
2102        let bmap2 = bmap2.ptr;
2103        let isl_rs_result = unsafe { isl_basic_map_product(bmap1, bmap2) };
2104        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2105                                       should_free_on_drop: true };
2106        let err = isl_rs_ctx.last_error();
2107        if err != Error::None_ {
2108            let err_msg = isl_rs_ctx.last_error_msg();
2109            isl_rs_ctx.reset_error();
2110            return Err(LibISLError::new(err, err_msg));
2111        }
2112        Ok(isl_rs_result)
2113    }
2114
2115    /// Wraps `isl_basic_map_project_out`.
2116    pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<BasicMap, LibISLError> {
2117        let bmap = self;
2118        let isl_rs_ctx = bmap.get_ctx();
2119        let mut bmap = bmap;
2120        bmap.do_not_free_on_drop();
2121        let bmap = bmap.ptr;
2122        let type_ = type_.to_i32();
2123        let isl_rs_result = unsafe { isl_basic_map_project_out(bmap, type_, first, n) };
2124        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2125                                       should_free_on_drop: true };
2126        let err = isl_rs_ctx.last_error();
2127        if err != Error::None_ {
2128            let err_msg = isl_rs_ctx.last_error_msg();
2129            isl_rs_ctx.reset_error();
2130            return Err(LibISLError::new(err, err_msg));
2131        }
2132        Ok(isl_rs_result)
2133    }
2134
2135    /// Wraps `isl_basic_map_range`.
2136    pub fn range(self) -> Result<BasicSet, LibISLError> {
2137        let bmap = self;
2138        let isl_rs_ctx = bmap.get_ctx();
2139        let mut bmap = bmap;
2140        bmap.do_not_free_on_drop();
2141        let bmap = bmap.ptr;
2142        let isl_rs_result = unsafe { isl_basic_map_range(bmap) };
2143        let isl_rs_result = BasicSet { ptr: isl_rs_result,
2144                                       should_free_on_drop: true };
2145        let err = isl_rs_ctx.last_error();
2146        if err != Error::None_ {
2147            let err_msg = isl_rs_ctx.last_error_msg();
2148            isl_rs_ctx.reset_error();
2149            return Err(LibISLError::new(err, err_msg));
2150        }
2151        Ok(isl_rs_result)
2152    }
2153
2154    /// Wraps `isl_basic_map_range_map`.
2155    pub fn range_map(self) -> Result<BasicMap, LibISLError> {
2156        let bmap = self;
2157        let isl_rs_ctx = bmap.get_ctx();
2158        let mut bmap = bmap;
2159        bmap.do_not_free_on_drop();
2160        let bmap = bmap.ptr;
2161        let isl_rs_result = unsafe { isl_basic_map_range_map(bmap) };
2162        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2163                                       should_free_on_drop: true };
2164        let err = isl_rs_ctx.last_error();
2165        if err != Error::None_ {
2166            let err_msg = isl_rs_ctx.last_error_msg();
2167            isl_rs_ctx.reset_error();
2168            return Err(LibISLError::new(err, err_msg));
2169        }
2170        Ok(isl_rs_result)
2171    }
2172
2173    /// Wraps `isl_basic_map_range_product`.
2174    pub fn range_product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
2175        let bmap1 = self;
2176        let isl_rs_ctx = bmap1.get_ctx();
2177        let mut bmap1 = bmap1;
2178        bmap1.do_not_free_on_drop();
2179        let bmap1 = bmap1.ptr;
2180        let mut bmap2 = bmap2;
2181        bmap2.do_not_free_on_drop();
2182        let bmap2 = bmap2.ptr;
2183        let isl_rs_result = unsafe { isl_basic_map_range_product(bmap1, bmap2) };
2184        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2185                                       should_free_on_drop: true };
2186        let err = isl_rs_ctx.last_error();
2187        if err != Error::None_ {
2188            let err_msg = isl_rs_ctx.last_error_msg();
2189            isl_rs_ctx.reset_error();
2190            return Err(LibISLError::new(err, err_msg));
2191        }
2192        Ok(isl_rs_result)
2193    }
2194
2195    /// Wraps `isl_basic_map_read_from_str`.
2196    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<BasicMap, LibISLError> {
2197        let isl_rs_ctx = Context { ptr: ctx.ptr,
2198                                   should_free_on_drop: false };
2199        let ctx = ctx.ptr;
2200        let str_ = CString::new(str_).unwrap();
2201        let str_ = str_.as_ptr();
2202        let isl_rs_result = unsafe { isl_basic_map_read_from_str(ctx, str_) };
2203        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2204                                       should_free_on_drop: true };
2205        let err = isl_rs_ctx.last_error();
2206        if err != Error::None_ {
2207            let err_msg = isl_rs_ctx.last_error_msg();
2208            isl_rs_ctx.reset_error();
2209            return Err(LibISLError::new(err, err_msg));
2210        }
2211        Ok(isl_rs_result)
2212    }
2213
2214    /// Wraps `isl_basic_map_remove_dims`.
2215    pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> Result<BasicMap, LibISLError> {
2216        let bmap = self;
2217        let isl_rs_ctx = bmap.get_ctx();
2218        let mut bmap = bmap;
2219        bmap.do_not_free_on_drop();
2220        let bmap = bmap.ptr;
2221        let type_ = type_.to_i32();
2222        let isl_rs_result = unsafe { isl_basic_map_remove_dims(bmap, type_, first, n) };
2223        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2224                                       should_free_on_drop: true };
2225        let err = isl_rs_ctx.last_error();
2226        if err != Error::None_ {
2227            let err_msg = isl_rs_ctx.last_error_msg();
2228            isl_rs_ctx.reset_error();
2229            return Err(LibISLError::new(err, err_msg));
2230        }
2231        Ok(isl_rs_result)
2232    }
2233
2234    /// Wraps `isl_basic_map_remove_divs`.
2235    pub fn remove_divs(self) -> Result<BasicMap, LibISLError> {
2236        let bmap = self;
2237        let isl_rs_ctx = bmap.get_ctx();
2238        let mut bmap = bmap;
2239        bmap.do_not_free_on_drop();
2240        let bmap = bmap.ptr;
2241        let isl_rs_result = unsafe { isl_basic_map_remove_divs(bmap) };
2242        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2243                                       should_free_on_drop: true };
2244        let err = isl_rs_ctx.last_error();
2245        if err != Error::None_ {
2246            let err_msg = isl_rs_ctx.last_error_msg();
2247            isl_rs_ctx.reset_error();
2248            return Err(LibISLError::new(err, err_msg));
2249        }
2250        Ok(isl_rs_result)
2251    }
2252
2253    /// Wraps `isl_basic_map_remove_divs_involving_dims`.
2254    pub fn remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32)
2255                                      -> Result<BasicMap, LibISLError> {
2256        let bmap = self;
2257        let isl_rs_ctx = bmap.get_ctx();
2258        let mut bmap = bmap;
2259        bmap.do_not_free_on_drop();
2260        let bmap = bmap.ptr;
2261        let type_ = type_.to_i32();
2262        let isl_rs_result =
2263            unsafe { isl_basic_map_remove_divs_involving_dims(bmap, type_, first, n) };
2264        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2265                                       should_free_on_drop: true };
2266        let err = isl_rs_ctx.last_error();
2267        if err != Error::None_ {
2268            let err_msg = isl_rs_ctx.last_error_msg();
2269            isl_rs_ctx.reset_error();
2270            return Err(LibISLError::new(err, err_msg));
2271        }
2272        Ok(isl_rs_result)
2273    }
2274
2275    /// Wraps `isl_basic_map_remove_redundancies`.
2276    pub fn remove_redundancies(self) -> Result<BasicMap, LibISLError> {
2277        let bmap = self;
2278        let isl_rs_ctx = bmap.get_ctx();
2279        let mut bmap = bmap;
2280        bmap.do_not_free_on_drop();
2281        let bmap = bmap.ptr;
2282        let isl_rs_result = unsafe { isl_basic_map_remove_redundancies(bmap) };
2283        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2284                                       should_free_on_drop: true };
2285        let err = isl_rs_ctx.last_error();
2286        if err != Error::None_ {
2287            let err_msg = isl_rs_ctx.last_error_msg();
2288            isl_rs_ctx.reset_error();
2289            return Err(LibISLError::new(err, err_msg));
2290        }
2291        Ok(isl_rs_result)
2292    }
2293
2294    /// Wraps `isl_basic_map_reverse`.
2295    pub fn reverse(self) -> Result<BasicMap, LibISLError> {
2296        let bmap = self;
2297        let isl_rs_ctx = bmap.get_ctx();
2298        let mut bmap = bmap;
2299        bmap.do_not_free_on_drop();
2300        let bmap = bmap.ptr;
2301        let isl_rs_result = unsafe { isl_basic_map_reverse(bmap) };
2302        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2303                                       should_free_on_drop: true };
2304        let err = isl_rs_ctx.last_error();
2305        if err != Error::None_ {
2306            let err_msg = isl_rs_ctx.last_error_msg();
2307            isl_rs_ctx.reset_error();
2308            return Err(LibISLError::new(err, err_msg));
2309        }
2310        Ok(isl_rs_result)
2311    }
2312
2313    /// Wraps `isl_basic_map_sample`.
2314    pub fn sample(self) -> Result<BasicMap, LibISLError> {
2315        let bmap = self;
2316        let isl_rs_ctx = bmap.get_ctx();
2317        let mut bmap = bmap;
2318        bmap.do_not_free_on_drop();
2319        let bmap = bmap.ptr;
2320        let isl_rs_result = unsafe { isl_basic_map_sample(bmap) };
2321        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2322                                       should_free_on_drop: true };
2323        let err = isl_rs_ctx.last_error();
2324        if err != Error::None_ {
2325            let err_msg = isl_rs_ctx.last_error_msg();
2326            isl_rs_ctx.reset_error();
2327            return Err(LibISLError::new(err, err_msg));
2328        }
2329        Ok(isl_rs_result)
2330    }
2331
2332    /// Wraps `isl_basic_map_set_dim_name`.
2333    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<BasicMap, LibISLError> {
2334        let bmap = self;
2335        let isl_rs_ctx = bmap.get_ctx();
2336        let mut bmap = bmap;
2337        bmap.do_not_free_on_drop();
2338        let bmap = bmap.ptr;
2339        let type_ = type_.to_i32();
2340        let s = CString::new(s).unwrap();
2341        let s = s.as_ptr();
2342        let isl_rs_result = unsafe { isl_basic_map_set_dim_name(bmap, type_, pos, s) };
2343        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2344                                       should_free_on_drop: true };
2345        let err = isl_rs_ctx.last_error();
2346        if err != Error::None_ {
2347            let err_msg = isl_rs_ctx.last_error_msg();
2348            isl_rs_ctx.reset_error();
2349            return Err(LibISLError::new(err, err_msg));
2350        }
2351        Ok(isl_rs_result)
2352    }
2353
2354    /// Wraps `isl_basic_map_set_tuple_id`.
2355    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<BasicMap, LibISLError> {
2356        let bmap = self;
2357        let isl_rs_ctx = bmap.get_ctx();
2358        let mut bmap = bmap;
2359        bmap.do_not_free_on_drop();
2360        let bmap = bmap.ptr;
2361        let type_ = type_.to_i32();
2362        let mut id = id;
2363        id.do_not_free_on_drop();
2364        let id = id.ptr;
2365        let isl_rs_result = unsafe { isl_basic_map_set_tuple_id(bmap, type_, id) };
2366        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2367                                       should_free_on_drop: true };
2368        let err = isl_rs_ctx.last_error();
2369        if err != Error::None_ {
2370            let err_msg = isl_rs_ctx.last_error_msg();
2371            isl_rs_ctx.reset_error();
2372            return Err(LibISLError::new(err, err_msg));
2373        }
2374        Ok(isl_rs_result)
2375    }
2376
2377    /// Wraps `isl_basic_map_set_tuple_name`.
2378    pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<BasicMap, LibISLError> {
2379        let bmap = self;
2380        let isl_rs_ctx = bmap.get_ctx();
2381        let mut bmap = bmap;
2382        bmap.do_not_free_on_drop();
2383        let bmap = bmap.ptr;
2384        let type_ = type_.to_i32();
2385        let s = CString::new(s).unwrap();
2386        let s = s.as_ptr();
2387        let isl_rs_result = unsafe { isl_basic_map_set_tuple_name(bmap, type_, s) };
2388        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2389                                       should_free_on_drop: true };
2390        let err = isl_rs_ctx.last_error();
2391        if err != Error::None_ {
2392            let err_msg = isl_rs_ctx.last_error_msg();
2393            isl_rs_ctx.reset_error();
2394            return Err(LibISLError::new(err, err_msg));
2395        }
2396        Ok(isl_rs_result)
2397    }
2398
2399    /// Wraps `isl_basic_map_sum`.
2400    pub fn sum(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
2401        let bmap1 = self;
2402        let isl_rs_ctx = bmap1.get_ctx();
2403        let mut bmap1 = bmap1;
2404        bmap1.do_not_free_on_drop();
2405        let bmap1 = bmap1.ptr;
2406        let mut bmap2 = bmap2;
2407        bmap2.do_not_free_on_drop();
2408        let bmap2 = bmap2.ptr;
2409        let isl_rs_result = unsafe { isl_basic_map_sum(bmap1, bmap2) };
2410        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2411                                       should_free_on_drop: true };
2412        let err = isl_rs_ctx.last_error();
2413        if err != Error::None_ {
2414            let err_msg = isl_rs_ctx.last_error_msg();
2415            isl_rs_ctx.reset_error();
2416            return Err(LibISLError::new(err, err_msg));
2417        }
2418        Ok(isl_rs_result)
2419    }
2420
2421    /// Wraps `isl_basic_map_to_list`.
2422    pub fn to_list(self) -> Result<BasicMapList, LibISLError> {
2423        let el = self;
2424        let isl_rs_ctx = el.get_ctx();
2425        let mut el = el;
2426        el.do_not_free_on_drop();
2427        let el = el.ptr;
2428        let isl_rs_result = unsafe { isl_basic_map_to_list(el) };
2429        let isl_rs_result = BasicMapList { ptr: isl_rs_result,
2430                                           should_free_on_drop: true };
2431        let err = isl_rs_ctx.last_error();
2432        if err != Error::None_ {
2433            let err_msg = isl_rs_ctx.last_error_msg();
2434            isl_rs_ctx.reset_error();
2435            return Err(LibISLError::new(err, err_msg));
2436        }
2437        Ok(isl_rs_result)
2438    }
2439
2440    /// Wraps `isl_basic_map_to_str`.
2441    pub fn to_str(&self) -> Result<&str, LibISLError> {
2442        let bmap = self;
2443        let isl_rs_ctx = bmap.get_ctx();
2444        let bmap = bmap.ptr;
2445        let isl_rs_result = unsafe { isl_basic_map_to_str(bmap) };
2446        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2447        let isl_rs_result = isl_rs_result.to_str().unwrap();
2448        let err = isl_rs_ctx.last_error();
2449        if err != Error::None_ {
2450            let err_msg = isl_rs_ctx.last_error_msg();
2451            isl_rs_ctx.reset_error();
2452            return Err(LibISLError::new(err, err_msg));
2453        }
2454        Ok(isl_rs_result)
2455    }
2456
2457    /// Wraps `isl_basic_map_total_dim`.
2458    pub fn total_dim(&self) -> Result<i32, LibISLError> {
2459        let bmap = self;
2460        let isl_rs_ctx = bmap.get_ctx();
2461        let bmap = bmap.ptr;
2462        let isl_rs_result = unsafe { isl_basic_map_total_dim(bmap) };
2463        let err = isl_rs_ctx.last_error();
2464        if err != Error::None_ {
2465            let err_msg = isl_rs_ctx.last_error_msg();
2466            isl_rs_ctx.reset_error();
2467            return Err(LibISLError::new(err, err_msg));
2468        }
2469        Ok(isl_rs_result)
2470    }
2471
2472    /// Wraps `isl_basic_map_uncurry`.
2473    pub fn uncurry(self) -> Result<BasicMap, LibISLError> {
2474        let bmap = self;
2475        let isl_rs_ctx = bmap.get_ctx();
2476        let mut bmap = bmap;
2477        bmap.do_not_free_on_drop();
2478        let bmap = bmap.ptr;
2479        let isl_rs_result = unsafe { isl_basic_map_uncurry(bmap) };
2480        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2481                                       should_free_on_drop: true };
2482        let err = isl_rs_ctx.last_error();
2483        if err != Error::None_ {
2484            let err_msg = isl_rs_ctx.last_error_msg();
2485            isl_rs_ctx.reset_error();
2486            return Err(LibISLError::new(err, err_msg));
2487        }
2488        Ok(isl_rs_result)
2489    }
2490
2491    /// Wraps `isl_basic_map_union`.
2492    pub fn union(self, bmap2: BasicMap) -> Result<Map, LibISLError> {
2493        let bmap1 = self;
2494        let isl_rs_ctx = bmap1.get_ctx();
2495        let mut bmap1 = bmap1;
2496        bmap1.do_not_free_on_drop();
2497        let bmap1 = bmap1.ptr;
2498        let mut bmap2 = bmap2;
2499        bmap2.do_not_free_on_drop();
2500        let bmap2 = bmap2.ptr;
2501        let isl_rs_result = unsafe { isl_basic_map_union(bmap1, bmap2) };
2502        let isl_rs_result = Map { ptr: isl_rs_result,
2503                                  should_free_on_drop: true };
2504        let err = isl_rs_ctx.last_error();
2505        if err != Error::None_ {
2506            let err_msg = isl_rs_ctx.last_error_msg();
2507            isl_rs_ctx.reset_error();
2508            return Err(LibISLError::new(err, err_msg));
2509        }
2510        Ok(isl_rs_result)
2511    }
2512
2513    /// Wraps `isl_basic_map_universe`.
2514    pub fn universe(space: Space) -> Result<BasicMap, LibISLError> {
2515        let isl_rs_ctx = space.get_ctx();
2516        let mut space = space;
2517        space.do_not_free_on_drop();
2518        let space = space.ptr;
2519        let isl_rs_result = unsafe { isl_basic_map_universe(space) };
2520        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2521                                       should_free_on_drop: true };
2522        let err = isl_rs_ctx.last_error();
2523        if err != Error::None_ {
2524            let err_msg = isl_rs_ctx.last_error_msg();
2525            isl_rs_ctx.reset_error();
2526            return Err(LibISLError::new(err, err_msg));
2527        }
2528        Ok(isl_rs_result)
2529    }
2530
2531    /// Wraps `isl_basic_map_upper_bound_si`.
2532    pub fn upper_bound_si(self, type_: DimType, pos: u32, value: i32)
2533                          -> Result<BasicMap, LibISLError> {
2534        let bmap = self;
2535        let isl_rs_ctx = bmap.get_ctx();
2536        let mut bmap = bmap;
2537        bmap.do_not_free_on_drop();
2538        let bmap = bmap.ptr;
2539        let type_ = type_.to_i32();
2540        let isl_rs_result = unsafe { isl_basic_map_upper_bound_si(bmap, type_, pos, value) };
2541        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2542                                       should_free_on_drop: true };
2543        let err = isl_rs_ctx.last_error();
2544        if err != Error::None_ {
2545            let err_msg = isl_rs_ctx.last_error_msg();
2546            isl_rs_ctx.reset_error();
2547            return Err(LibISLError::new(err, err_msg));
2548        }
2549        Ok(isl_rs_result)
2550    }
2551
2552    /// Wraps `isl_basic_map_wrap`.
2553    pub fn wrap(self) -> Result<BasicSet, LibISLError> {
2554        let bmap = self;
2555        let isl_rs_ctx = bmap.get_ctx();
2556        let mut bmap = bmap;
2557        bmap.do_not_free_on_drop();
2558        let bmap = bmap.ptr;
2559        let isl_rs_result = unsafe { isl_basic_map_wrap(bmap) };
2560        let isl_rs_result = BasicSet { ptr: isl_rs_result,
2561                                       should_free_on_drop: true };
2562        let err = isl_rs_ctx.last_error();
2563        if err != Error::None_ {
2564            let err_msg = isl_rs_ctx.last_error_msg();
2565            isl_rs_ctx.reset_error();
2566            return Err(LibISLError::new(err, err_msg));
2567        }
2568        Ok(isl_rs_result)
2569    }
2570
2571    /// Wraps `isl_basic_map_zip`.
2572    pub fn zip(self) -> Result<BasicMap, LibISLError> {
2573        let bmap = self;
2574        let isl_rs_ctx = bmap.get_ctx();
2575        let mut bmap = bmap;
2576        bmap.do_not_free_on_drop();
2577        let bmap = bmap.ptr;
2578        let isl_rs_result = unsafe { isl_basic_map_zip(bmap) };
2579        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2580                                       should_free_on_drop: true };
2581        let err = isl_rs_ctx.last_error();
2582        if err != Error::None_ {
2583            let err_msg = isl_rs_ctx.last_error_msg();
2584            isl_rs_ctx.reset_error();
2585            return Err(LibISLError::new(err, err_msg));
2586        }
2587        Ok(isl_rs_result)
2588    }
2589
2590    /// Does not call isl_basic_map_free() on being dropped. (For internal use
2591    /// only.)
2592    pub fn do_not_free_on_drop(&mut self) {
2593        self.should_free_on_drop = false;
2594    }
2595}
2596
2597impl Drop for BasicMap {
2598    fn drop(&mut self) {
2599        if self.should_free_on_drop {
2600            unsafe {
2601                isl_basic_map_free(self.ptr);
2602            }
2603        }
2604    }
2605}