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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
288        }
289        Ok(isl_rs_result)
290    }
291
292    /// Wraps `isl_basic_map_add_dims`.
293    pub fn add_dims(self, type_: DimType, n: u32) -> Result<BasicMap, LibISLError> {
294        let bmap = self;
295        let isl_rs_ctx = bmap.get_ctx();
296        let mut bmap = bmap;
297        bmap.do_not_free_on_drop();
298        let bmap = bmap.ptr;
299        let type_ = type_.to_i32();
300        let isl_rs_result = unsafe { isl_basic_map_add_dims(bmap, type_, n) };
301        let isl_rs_result = BasicMap { ptr: isl_rs_result,
302                                       should_free_on_drop: true };
303        let err = isl_rs_ctx.last_error();
304        if err != Error::None_ {
305            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
306        }
307        Ok(isl_rs_result)
308    }
309
310    /// Wraps `isl_basic_map_affine_hull`.
311    pub fn affine_hull(self) -> Result<BasicMap, LibISLError> {
312        let bmap = self;
313        let isl_rs_ctx = bmap.get_ctx();
314        let mut bmap = bmap;
315        bmap.do_not_free_on_drop();
316        let bmap = bmap.ptr;
317        let isl_rs_result = unsafe { isl_basic_map_affine_hull(bmap) };
318        let isl_rs_result = BasicMap { ptr: isl_rs_result,
319                                       should_free_on_drop: true };
320        let err = isl_rs_ctx.last_error();
321        if err != Error::None_ {
322            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
323        }
324        Ok(isl_rs_result)
325    }
326
327    /// Wraps `isl_basic_map_align_params`.
328    pub fn align_params(self, model: Space) -> Result<BasicMap, LibISLError> {
329        let bmap = self;
330        let isl_rs_ctx = bmap.get_ctx();
331        let mut bmap = bmap;
332        bmap.do_not_free_on_drop();
333        let bmap = bmap.ptr;
334        let mut model = model;
335        model.do_not_free_on_drop();
336        let model = model.ptr;
337        let isl_rs_result = unsafe { isl_basic_map_align_params(bmap, model) };
338        let isl_rs_result = BasicMap { ptr: isl_rs_result,
339                                       should_free_on_drop: true };
340        let err = isl_rs_ctx.last_error();
341        if err != Error::None_ {
342            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
343        }
344        Ok(isl_rs_result)
345    }
346
347    /// Wraps `isl_basic_map_apply_domain`.
348    pub fn apply_domain(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
349        let bmap1 = self;
350        let isl_rs_ctx = bmap1.get_ctx();
351        let mut bmap1 = bmap1;
352        bmap1.do_not_free_on_drop();
353        let bmap1 = bmap1.ptr;
354        let mut bmap2 = bmap2;
355        bmap2.do_not_free_on_drop();
356        let bmap2 = bmap2.ptr;
357        let isl_rs_result = unsafe { isl_basic_map_apply_domain(bmap1, bmap2) };
358        let isl_rs_result = BasicMap { ptr: isl_rs_result,
359                                       should_free_on_drop: true };
360        let err = isl_rs_ctx.last_error();
361        if err != Error::None_ {
362            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
363        }
364        Ok(isl_rs_result)
365    }
366
367    /// Wraps `isl_basic_map_apply_range`.
368    pub fn apply_range(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
369        let bmap1 = self;
370        let isl_rs_ctx = bmap1.get_ctx();
371        let mut bmap1 = bmap1;
372        bmap1.do_not_free_on_drop();
373        let bmap1 = bmap1.ptr;
374        let mut bmap2 = bmap2;
375        bmap2.do_not_free_on_drop();
376        let bmap2 = bmap2.ptr;
377        let isl_rs_result = unsafe { isl_basic_map_apply_range(bmap1, bmap2) };
378        let isl_rs_result = BasicMap { ptr: isl_rs_result,
379                                       should_free_on_drop: true };
380        let err = isl_rs_ctx.last_error();
381        if err != Error::None_ {
382            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
383        }
384        Ok(isl_rs_result)
385    }
386
387    /// Wraps `isl_basic_map_can_curry`.
388    pub fn can_curry(&self) -> Result<bool, LibISLError> {
389        let bmap = self;
390        let isl_rs_ctx = bmap.get_ctx();
391        let bmap = bmap.ptr;
392        let isl_rs_result = unsafe { isl_basic_map_can_curry(bmap) };
393        let isl_rs_result = match isl_rs_result {
394            0 => false,
395            1 => true,
396            _ => panic!("Got isl_bool = -1"),
397        };
398        let err = isl_rs_ctx.last_error();
399        if err != Error::None_ {
400            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
401        }
402        Ok(isl_rs_result)
403    }
404
405    /// Wraps `isl_basic_map_can_uncurry`.
406    pub fn can_uncurry(&self) -> Result<bool, LibISLError> {
407        let bmap = self;
408        let isl_rs_ctx = bmap.get_ctx();
409        let bmap = bmap.ptr;
410        let isl_rs_result = unsafe { isl_basic_map_can_uncurry(bmap) };
411        let isl_rs_result = match isl_rs_result {
412            0 => false,
413            1 => true,
414            _ => panic!("Got isl_bool = -1"),
415        };
416        let err = isl_rs_ctx.last_error();
417        if err != Error::None_ {
418            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
419        }
420        Ok(isl_rs_result)
421    }
422
423    /// Wraps `isl_basic_map_can_zip`.
424    pub fn can_zip(&self) -> Result<bool, LibISLError> {
425        let bmap = self;
426        let isl_rs_ctx = bmap.get_ctx();
427        let bmap = bmap.ptr;
428        let isl_rs_result = unsafe { isl_basic_map_can_zip(bmap) };
429        let isl_rs_result = match isl_rs_result {
430            0 => false,
431            1 => true,
432            _ => panic!("Got isl_bool = -1"),
433        };
434        let err = isl_rs_ctx.last_error();
435        if err != Error::None_ {
436            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
437        }
438        Ok(isl_rs_result)
439    }
440
441    /// Wraps `isl_basic_map_compute_divs`.
442    pub fn compute_divs(self) -> Result<Map, LibISLError> {
443        let bmap = self;
444        let isl_rs_ctx = bmap.get_ctx();
445        let mut bmap = bmap;
446        bmap.do_not_free_on_drop();
447        let bmap = bmap.ptr;
448        let isl_rs_result = unsafe { isl_basic_map_compute_divs(bmap) };
449        let isl_rs_result = Map { ptr: isl_rs_result,
450                                  should_free_on_drop: true };
451        let err = isl_rs_ctx.last_error();
452        if err != Error::None_ {
453            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
454        }
455        Ok(isl_rs_result)
456    }
457
458    /// Wraps `isl_basic_map_copy`.
459    pub fn copy(&self) -> Result<BasicMap, LibISLError> {
460        let bmap = self;
461        let isl_rs_ctx = bmap.get_ctx();
462        let bmap = bmap.ptr;
463        let isl_rs_result = unsafe { isl_basic_map_copy(bmap) };
464        let isl_rs_result = BasicMap { ptr: isl_rs_result,
465                                       should_free_on_drop: true };
466        let err = isl_rs_ctx.last_error();
467        if err != Error::None_ {
468            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
469        }
470        Ok(isl_rs_result)
471    }
472
473    /// Wraps `isl_basic_map_curry`.
474    pub fn curry(self) -> Result<BasicMap, LibISLError> {
475        let bmap = self;
476        let isl_rs_ctx = bmap.get_ctx();
477        let mut bmap = bmap;
478        bmap.do_not_free_on_drop();
479        let bmap = bmap.ptr;
480        let isl_rs_result = unsafe { isl_basic_map_curry(bmap) };
481        let isl_rs_result = BasicMap { ptr: isl_rs_result,
482                                       should_free_on_drop: true };
483        let err = isl_rs_ctx.last_error();
484        if err != Error::None_ {
485            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
486        }
487        Ok(isl_rs_result)
488    }
489
490    /// Wraps `isl_basic_map_deltas`.
491    pub fn deltas(self) -> Result<BasicSet, LibISLError> {
492        let bmap = self;
493        let isl_rs_ctx = bmap.get_ctx();
494        let mut bmap = bmap;
495        bmap.do_not_free_on_drop();
496        let bmap = bmap.ptr;
497        let isl_rs_result = unsafe { isl_basic_map_deltas(bmap) };
498        let isl_rs_result = BasicSet { ptr: isl_rs_result,
499                                       should_free_on_drop: true };
500        let err = isl_rs_ctx.last_error();
501        if err != Error::None_ {
502            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
503        }
504        Ok(isl_rs_result)
505    }
506
507    /// Wraps `isl_basic_map_deltas_map`.
508    pub fn deltas_map(self) -> Result<BasicMap, LibISLError> {
509        let bmap = self;
510        let isl_rs_ctx = bmap.get_ctx();
511        let mut bmap = bmap;
512        bmap.do_not_free_on_drop();
513        let bmap = bmap.ptr;
514        let isl_rs_result = unsafe { isl_basic_map_deltas_map(bmap) };
515        let isl_rs_result = BasicMap { ptr: isl_rs_result,
516                                       should_free_on_drop: true };
517        let err = isl_rs_ctx.last_error();
518        if err != Error::None_ {
519            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
520        }
521        Ok(isl_rs_result)
522    }
523
524    /// Wraps `isl_basic_map_detect_equalities`.
525    pub fn detect_equalities(self) -> Result<BasicMap, LibISLError> {
526        let bmap = self;
527        let isl_rs_ctx = bmap.get_ctx();
528        let mut bmap = bmap;
529        bmap.do_not_free_on_drop();
530        let bmap = bmap.ptr;
531        let isl_rs_result = unsafe { isl_basic_map_detect_equalities(bmap) };
532        let isl_rs_result = BasicMap { ptr: isl_rs_result,
533                                       should_free_on_drop: true };
534        let err = isl_rs_ctx.last_error();
535        if err != Error::None_ {
536            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
537        }
538        Ok(isl_rs_result)
539    }
540
541    /// Wraps `isl_basic_map_dim`.
542    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
543        let bmap = self;
544        let isl_rs_ctx = bmap.get_ctx();
545        let bmap = bmap.ptr;
546        let type_ = type_.to_i32();
547        let isl_rs_result = unsafe { isl_basic_map_dim(bmap, type_) };
548        let err = isl_rs_ctx.last_error();
549        if err != Error::None_ {
550            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
551        }
552        Ok(isl_rs_result)
553    }
554
555    /// Wraps `isl_basic_map_domain`.
556    pub fn domain(self) -> Result<BasicSet, LibISLError> {
557        let bmap = self;
558        let isl_rs_ctx = bmap.get_ctx();
559        let mut bmap = bmap;
560        bmap.do_not_free_on_drop();
561        let bmap = bmap.ptr;
562        let isl_rs_result = unsafe { isl_basic_map_domain(bmap) };
563        let isl_rs_result = BasicSet { ptr: isl_rs_result,
564                                       should_free_on_drop: true };
565        let err = isl_rs_ctx.last_error();
566        if err != Error::None_ {
567            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
568        }
569        Ok(isl_rs_result)
570    }
571
572    /// Wraps `isl_basic_map_domain_map`.
573    pub fn domain_map(self) -> Result<BasicMap, LibISLError> {
574        let bmap = self;
575        let isl_rs_ctx = bmap.get_ctx();
576        let mut bmap = bmap;
577        bmap.do_not_free_on_drop();
578        let bmap = bmap.ptr;
579        let isl_rs_result = unsafe { isl_basic_map_domain_map(bmap) };
580        let isl_rs_result = BasicMap { ptr: isl_rs_result,
581                                       should_free_on_drop: true };
582        let err = isl_rs_ctx.last_error();
583        if err != Error::None_ {
584            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
585        }
586        Ok(isl_rs_result)
587    }
588
589    /// Wraps `isl_basic_map_domain_product`.
590    pub fn domain_product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
591        let bmap1 = self;
592        let isl_rs_ctx = bmap1.get_ctx();
593        let mut bmap1 = bmap1;
594        bmap1.do_not_free_on_drop();
595        let bmap1 = bmap1.ptr;
596        let mut bmap2 = bmap2;
597        bmap2.do_not_free_on_drop();
598        let bmap2 = bmap2.ptr;
599        let isl_rs_result = unsafe { isl_basic_map_domain_product(bmap1, bmap2) };
600        let isl_rs_result = BasicMap { ptr: isl_rs_result,
601                                       should_free_on_drop: true };
602        let err = isl_rs_ctx.last_error();
603        if err != Error::None_ {
604            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
605        }
606        Ok(isl_rs_result)
607    }
608
609    /// Wraps `isl_basic_map_drop_constraints_involving_dims`.
610    pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32)
611                                           -> Result<BasicMap, LibISLError> {
612        let bmap = self;
613        let isl_rs_ctx = bmap.get_ctx();
614        let mut bmap = bmap;
615        bmap.do_not_free_on_drop();
616        let bmap = bmap.ptr;
617        let type_ = type_.to_i32();
618        let isl_rs_result =
619            unsafe { isl_basic_map_drop_constraints_involving_dims(bmap, type_, first, n) };
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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
625        }
626        Ok(isl_rs_result)
627    }
628
629    /// Wraps `isl_basic_map_drop_constraints_not_involving_dims`.
630    pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32)
631                                               -> Result<BasicMap, LibISLError> {
632        let bmap = self;
633        let isl_rs_ctx = bmap.get_ctx();
634        let mut bmap = bmap;
635        bmap.do_not_free_on_drop();
636        let bmap = bmap.ptr;
637        let type_ = type_.to_i32();
638        let isl_rs_result =
639            unsafe { isl_basic_map_drop_constraints_not_involving_dims(bmap, type_, first, n) };
640        let isl_rs_result = BasicMap { ptr: isl_rs_result,
641                                       should_free_on_drop: true };
642        let err = isl_rs_ctx.last_error();
643        if err != Error::None_ {
644            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
645        }
646        Ok(isl_rs_result)
647    }
648
649    /// Wraps `isl_basic_map_drop_unused_params`.
650    pub fn drop_unused_params(self) -> Result<BasicMap, LibISLError> {
651        let bmap = self;
652        let isl_rs_ctx = bmap.get_ctx();
653        let mut bmap = bmap;
654        bmap.do_not_free_on_drop();
655        let bmap = bmap.ptr;
656        let isl_rs_result = unsafe { isl_basic_map_drop_unused_params(bmap) };
657        let isl_rs_result = BasicMap { ptr: isl_rs_result,
658                                       should_free_on_drop: true };
659        let err = isl_rs_ctx.last_error();
660        if err != Error::None_ {
661            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
662        }
663        Ok(isl_rs_result)
664    }
665
666    /// Wraps `isl_basic_map_dump`.
667    pub fn dump(&self) -> Result<(), LibISLError> {
668        let bmap = self;
669        let isl_rs_ctx = bmap.get_ctx();
670        let bmap = bmap.ptr;
671        let isl_rs_result = unsafe { isl_basic_map_dump(bmap) };
672        let err = isl_rs_ctx.last_error();
673        if err != Error::None_ {
674            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
675        }
676        Ok(isl_rs_result)
677    }
678
679    /// Wraps `isl_basic_map_eliminate`.
680    pub fn eliminate(self, type_: DimType, first: u32, n: u32) -> Result<BasicMap, LibISLError> {
681        let bmap = self;
682        let isl_rs_ctx = bmap.get_ctx();
683        let mut bmap = bmap;
684        bmap.do_not_free_on_drop();
685        let bmap = bmap.ptr;
686        let type_ = type_.to_i32();
687        let isl_rs_result = unsafe { isl_basic_map_eliminate(bmap, type_, first, n) };
688        let isl_rs_result = BasicMap { ptr: isl_rs_result,
689                                       should_free_on_drop: true };
690        let err = isl_rs_ctx.last_error();
691        if err != Error::None_ {
692            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
693        }
694        Ok(isl_rs_result)
695    }
696
697    /// Wraps `isl_basic_map_empty`.
698    pub fn empty(space: Space) -> Result<BasicMap, LibISLError> {
699        let isl_rs_ctx = space.get_ctx();
700        let mut space = space;
701        space.do_not_free_on_drop();
702        let space = space.ptr;
703        let isl_rs_result = unsafe { isl_basic_map_empty(space) };
704        let isl_rs_result = BasicMap { ptr: isl_rs_result,
705                                       should_free_on_drop: true };
706        let err = isl_rs_ctx.last_error();
707        if err != Error::None_ {
708            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
709        }
710        Ok(isl_rs_result)
711    }
712
713    /// Wraps `isl_basic_map_equal`.
714    pub fn equal(space: Space, n_equal: u32) -> Result<BasicMap, LibISLError> {
715        let isl_rs_ctx = space.get_ctx();
716        let mut space = space;
717        space.do_not_free_on_drop();
718        let space = space.ptr;
719        let isl_rs_result = unsafe { isl_basic_map_equal(space, n_equal) };
720        let isl_rs_result = BasicMap { ptr: isl_rs_result,
721                                       should_free_on_drop: true };
722        let err = isl_rs_ctx.last_error();
723        if err != Error::None_ {
724            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
725        }
726        Ok(isl_rs_result)
727    }
728
729    /// Wraps `isl_basic_map_equalities_matrix`.
730    pub fn equalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType,
731                             c5: DimType)
732                             -> Result<Mat, LibISLError> {
733        let bmap = self;
734        let isl_rs_ctx = bmap.get_ctx();
735        let bmap = bmap.ptr;
736        let c1 = c1.to_i32();
737        let c2 = c2.to_i32();
738        let c3 = c3.to_i32();
739        let c4 = c4.to_i32();
740        let c5 = c5.to_i32();
741        let isl_rs_result = unsafe { isl_basic_map_equalities_matrix(bmap, c1, c2, c3, c4, c5) };
742        let isl_rs_result = Mat { ptr: isl_rs_result,
743                                  should_free_on_drop: true };
744        let err = isl_rs_ctx.last_error();
745        if err != Error::None_ {
746            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
747        }
748        Ok(isl_rs_result)
749    }
750
751    /// Wraps `isl_basic_map_equate`.
752    pub fn equate(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
753                  -> Result<BasicMap, LibISLError> {
754        let bmap = self;
755        let isl_rs_ctx = bmap.get_ctx();
756        let mut bmap = bmap;
757        bmap.do_not_free_on_drop();
758        let bmap = bmap.ptr;
759        let type1 = type1.to_i32();
760        let type2 = type2.to_i32();
761        let isl_rs_result = unsafe { isl_basic_map_equate(bmap, type1, pos1, type2, pos2) };
762        let isl_rs_result = BasicMap { ptr: isl_rs_result,
763                                       should_free_on_drop: true };
764        let err = isl_rs_ctx.last_error();
765        if err != Error::None_ {
766            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
767        }
768        Ok(isl_rs_result)
769    }
770
771    /// Wraps `isl_basic_map_find_dim_by_name`.
772    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
773        let bmap = self;
774        let isl_rs_ctx = bmap.get_ctx();
775        let bmap = bmap.ptr;
776        let type_ = type_.to_i32();
777        let name = CString::new(name).unwrap();
778        let name = name.as_ptr();
779        let isl_rs_result = unsafe { isl_basic_map_find_dim_by_name(bmap, type_, name) };
780        let err = isl_rs_ctx.last_error();
781        if err != Error::None_ {
782            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
783        }
784        Ok(isl_rs_result)
785    }
786
787    /// Wraps `isl_basic_map_fix_si`.
788    pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<BasicMap, LibISLError> {
789        let bmap = self;
790        let isl_rs_ctx = bmap.get_ctx();
791        let mut bmap = bmap;
792        bmap.do_not_free_on_drop();
793        let bmap = bmap.ptr;
794        let type_ = type_.to_i32();
795        let isl_rs_result = unsafe { isl_basic_map_fix_si(bmap, type_, pos, value) };
796        let isl_rs_result = BasicMap { ptr: isl_rs_result,
797                                       should_free_on_drop: true };
798        let err = isl_rs_ctx.last_error();
799        if err != Error::None_ {
800            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
801        }
802        Ok(isl_rs_result)
803    }
804
805    /// Wraps `isl_basic_map_fix_val`.
806    pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> Result<BasicMap, LibISLError> {
807        let bmap = self;
808        let isl_rs_ctx = bmap.get_ctx();
809        let mut bmap = bmap;
810        bmap.do_not_free_on_drop();
811        let bmap = bmap.ptr;
812        let type_ = type_.to_i32();
813        let mut v = v;
814        v.do_not_free_on_drop();
815        let v = v.ptr;
816        let isl_rs_result = unsafe { isl_basic_map_fix_val(bmap, type_, pos, v) };
817        let isl_rs_result = BasicMap { ptr: isl_rs_result,
818                                       should_free_on_drop: true };
819        let err = isl_rs_ctx.last_error();
820        if err != Error::None_ {
821            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
822        }
823        Ok(isl_rs_result)
824    }
825
826    /// Wraps `isl_basic_map_flat_product`.
827    pub fn flat_product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
828        let bmap1 = self;
829        let isl_rs_ctx = bmap1.get_ctx();
830        let mut bmap1 = bmap1;
831        bmap1.do_not_free_on_drop();
832        let bmap1 = bmap1.ptr;
833        let mut bmap2 = bmap2;
834        bmap2.do_not_free_on_drop();
835        let bmap2 = bmap2.ptr;
836        let isl_rs_result = unsafe { isl_basic_map_flat_product(bmap1, bmap2) };
837        let isl_rs_result = BasicMap { ptr: isl_rs_result,
838                                       should_free_on_drop: true };
839        let err = isl_rs_ctx.last_error();
840        if err != Error::None_ {
841            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
842        }
843        Ok(isl_rs_result)
844    }
845
846    /// Wraps `isl_basic_map_flat_range_product`.
847    pub fn flat_range_product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
848        let bmap1 = self;
849        let isl_rs_ctx = bmap1.get_ctx();
850        let mut bmap1 = bmap1;
851        bmap1.do_not_free_on_drop();
852        let bmap1 = bmap1.ptr;
853        let mut bmap2 = bmap2;
854        bmap2.do_not_free_on_drop();
855        let bmap2 = bmap2.ptr;
856        let isl_rs_result = unsafe { isl_basic_map_flat_range_product(bmap1, bmap2) };
857        let isl_rs_result = BasicMap { ptr: isl_rs_result,
858                                       should_free_on_drop: true };
859        let err = isl_rs_ctx.last_error();
860        if err != Error::None_ {
861            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
862        }
863        Ok(isl_rs_result)
864    }
865
866    /// Wraps `isl_basic_map_flatten`.
867    pub fn flatten(self) -> Result<BasicMap, LibISLError> {
868        let bmap = self;
869        let isl_rs_ctx = bmap.get_ctx();
870        let mut bmap = bmap;
871        bmap.do_not_free_on_drop();
872        let bmap = bmap.ptr;
873        let isl_rs_result = unsafe { isl_basic_map_flatten(bmap) };
874        let isl_rs_result = BasicMap { ptr: isl_rs_result,
875                                       should_free_on_drop: true };
876        let err = isl_rs_ctx.last_error();
877        if err != Error::None_ {
878            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
879        }
880        Ok(isl_rs_result)
881    }
882
883    /// Wraps `isl_basic_map_flatten_domain`.
884    pub fn flatten_domain(self) -> Result<BasicMap, LibISLError> {
885        let bmap = self;
886        let isl_rs_ctx = bmap.get_ctx();
887        let mut bmap = bmap;
888        bmap.do_not_free_on_drop();
889        let bmap = bmap.ptr;
890        let isl_rs_result = unsafe { isl_basic_map_flatten_domain(bmap) };
891        let isl_rs_result = BasicMap { ptr: isl_rs_result,
892                                       should_free_on_drop: true };
893        let err = isl_rs_ctx.last_error();
894        if err != Error::None_ {
895            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
896        }
897        Ok(isl_rs_result)
898    }
899
900    /// Wraps `isl_basic_map_flatten_range`.
901    pub fn flatten_range(self) -> Result<BasicMap, LibISLError> {
902        let bmap = self;
903        let isl_rs_ctx = bmap.get_ctx();
904        let mut bmap = bmap;
905        bmap.do_not_free_on_drop();
906        let bmap = bmap.ptr;
907        let isl_rs_result = unsafe { isl_basic_map_flatten_range(bmap) };
908        let isl_rs_result = BasicMap { ptr: isl_rs_result,
909                                       should_free_on_drop: true };
910        let err = isl_rs_ctx.last_error();
911        if err != Error::None_ {
912            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
913        }
914        Ok(isl_rs_result)
915    }
916
917    /// Wraps `isl_basic_map_free`.
918    pub fn free(self) -> Result<BasicMap, LibISLError> {
919        let bmap = self;
920        let isl_rs_ctx = bmap.get_ctx();
921        let mut bmap = bmap;
922        bmap.do_not_free_on_drop();
923        let bmap = bmap.ptr;
924        let isl_rs_result = unsafe { isl_basic_map_free(bmap) };
925        let isl_rs_result = BasicMap { ptr: isl_rs_result,
926                                       should_free_on_drop: true };
927        let err = isl_rs_ctx.last_error();
928        if err != Error::None_ {
929            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
930        }
931        Ok(isl_rs_result)
932    }
933
934    /// Wraps `isl_basic_map_from_aff`.
935    pub fn from_aff(aff: Aff) -> Result<BasicMap, LibISLError> {
936        let isl_rs_ctx = aff.get_ctx();
937        let mut aff = aff;
938        aff.do_not_free_on_drop();
939        let aff = aff.ptr;
940        let isl_rs_result = unsafe { isl_basic_map_from_aff(aff) };
941        let isl_rs_result = BasicMap { ptr: isl_rs_result,
942                                       should_free_on_drop: true };
943        let err = isl_rs_ctx.last_error();
944        if err != Error::None_ {
945            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
946        }
947        Ok(isl_rs_result)
948    }
949
950    /// Wraps `isl_basic_map_from_aff_list`.
951    pub fn from_aff_list(domain_space: Space, list: AffList) -> Result<BasicMap, LibISLError> {
952        let isl_rs_ctx = domain_space.get_ctx();
953        let mut domain_space = domain_space;
954        domain_space.do_not_free_on_drop();
955        let domain_space = domain_space.ptr;
956        let mut list = list;
957        list.do_not_free_on_drop();
958        let list = list.ptr;
959        let isl_rs_result = unsafe { isl_basic_map_from_aff_list(domain_space, list) };
960        let isl_rs_result = BasicMap { ptr: isl_rs_result,
961                                       should_free_on_drop: true };
962        let err = isl_rs_ctx.last_error();
963        if err != Error::None_ {
964            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
965        }
966        Ok(isl_rs_result)
967    }
968
969    /// Wraps `isl_basic_map_from_constraint`.
970    pub fn from_constraint(constraint: Constraint) -> Result<BasicMap, LibISLError> {
971        let isl_rs_ctx = constraint.get_ctx();
972        let mut constraint = constraint;
973        constraint.do_not_free_on_drop();
974        let constraint = constraint.ptr;
975        let isl_rs_result = unsafe { isl_basic_map_from_constraint(constraint) };
976        let isl_rs_result = BasicMap { ptr: isl_rs_result,
977                                       should_free_on_drop: true };
978        let err = isl_rs_ctx.last_error();
979        if err != Error::None_ {
980            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
981        }
982        Ok(isl_rs_result)
983    }
984
985    /// Wraps `isl_basic_map_from_constraint_matrices`.
986    pub fn from_constraint_matrices(space: Space, eq: Mat, ineq: Mat, c1: DimType, c2: DimType,
987                                    c3: DimType, c4: DimType, c5: DimType)
988                                    -> Result<BasicMap, LibISLError> {
989        let isl_rs_ctx = space.get_ctx();
990        let mut space = space;
991        space.do_not_free_on_drop();
992        let space = space.ptr;
993        let mut eq = eq;
994        eq.do_not_free_on_drop();
995        let eq = eq.ptr;
996        let mut ineq = ineq;
997        ineq.do_not_free_on_drop();
998        let ineq = ineq.ptr;
999        let c1 = c1.to_i32();
1000        let c2 = c2.to_i32();
1001        let c3 = c3.to_i32();
1002        let c4 = c4.to_i32();
1003        let c5 = c5.to_i32();
1004        let isl_rs_result =
1005            unsafe { isl_basic_map_from_constraint_matrices(space, eq, ineq, c1, c2, c3, c4, c5) };
1006        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1007                                       should_free_on_drop: true };
1008        let err = isl_rs_ctx.last_error();
1009        if err != Error::None_ {
1010            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1011        }
1012        Ok(isl_rs_result)
1013    }
1014
1015    /// Wraps `isl_basic_map_from_domain`.
1016    pub fn from_domain(bset: BasicSet) -> Result<BasicMap, LibISLError> {
1017        let isl_rs_ctx = bset.get_ctx();
1018        let mut bset = bset;
1019        bset.do_not_free_on_drop();
1020        let bset = bset.ptr;
1021        let isl_rs_result = unsafe { isl_basic_map_from_domain(bset) };
1022        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1023                                       should_free_on_drop: true };
1024        let err = isl_rs_ctx.last_error();
1025        if err != Error::None_ {
1026            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1027        }
1028        Ok(isl_rs_result)
1029    }
1030
1031    /// Wraps `isl_basic_map_from_domain_and_range`.
1032    pub fn from_domain_and_range(domain: BasicSet, range: BasicSet)
1033                                 -> Result<BasicMap, LibISLError> {
1034        let isl_rs_ctx = domain.get_ctx();
1035        let mut domain = domain;
1036        domain.do_not_free_on_drop();
1037        let domain = domain.ptr;
1038        let mut range = range;
1039        range.do_not_free_on_drop();
1040        let range = range.ptr;
1041        let isl_rs_result = unsafe { isl_basic_map_from_domain_and_range(domain, range) };
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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1047        }
1048        Ok(isl_rs_result)
1049    }
1050
1051    /// Wraps `isl_basic_map_from_multi_aff`.
1052    pub fn from_multi_aff(maff: MultiAff) -> Result<BasicMap, LibISLError> {
1053        let isl_rs_ctx = maff.get_ctx();
1054        let mut maff = maff;
1055        maff.do_not_free_on_drop();
1056        let maff = maff.ptr;
1057        let isl_rs_result = unsafe { isl_basic_map_from_multi_aff(maff) };
1058        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1059                                       should_free_on_drop: true };
1060        let err = isl_rs_ctx.last_error();
1061        if err != Error::None_ {
1062            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1063        }
1064        Ok(isl_rs_result)
1065    }
1066
1067    /// Wraps `isl_basic_map_from_qpolynomial`.
1068    pub fn from_qpolynomial(qp: QPolynomial) -> Result<BasicMap, LibISLError> {
1069        let isl_rs_ctx = qp.get_ctx();
1070        let mut qp = qp;
1071        qp.do_not_free_on_drop();
1072        let qp = qp.ptr;
1073        let isl_rs_result = unsafe { isl_basic_map_from_qpolynomial(qp) };
1074        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1075                                       should_free_on_drop: true };
1076        let err = isl_rs_ctx.last_error();
1077        if err != Error::None_ {
1078            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1079        }
1080        Ok(isl_rs_result)
1081    }
1082
1083    /// Wraps `isl_basic_map_from_range`.
1084    pub fn from_range(bset: BasicSet) -> Result<BasicMap, LibISLError> {
1085        let isl_rs_ctx = bset.get_ctx();
1086        let mut bset = bset;
1087        bset.do_not_free_on_drop();
1088        let bset = bset.ptr;
1089        let isl_rs_result = unsafe { isl_basic_map_from_range(bset) };
1090        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1091                                       should_free_on_drop: true };
1092        let err = isl_rs_ctx.last_error();
1093        if err != Error::None_ {
1094            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1095        }
1096        Ok(isl_rs_result)
1097    }
1098
1099    /// Wraps `isl_basic_map_get_constraint_list`.
1100    pub fn get_constraint_list(&self) -> Result<ConstraintList, LibISLError> {
1101        let bmap = self;
1102        let isl_rs_ctx = bmap.get_ctx();
1103        let bmap = bmap.ptr;
1104        let isl_rs_result = unsafe { isl_basic_map_get_constraint_list(bmap) };
1105        let isl_rs_result = ConstraintList { ptr: isl_rs_result,
1106                                             should_free_on_drop: true };
1107        let err = isl_rs_ctx.last_error();
1108        if err != Error::None_ {
1109            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1110        }
1111        Ok(isl_rs_result)
1112    }
1113
1114    /// Wraps `isl_basic_map_get_ctx`.
1115    pub fn get_ctx(&self) -> Context {
1116        let bmap = self;
1117        let bmap = bmap.ptr;
1118        let isl_rs_result = unsafe { isl_basic_map_get_ctx(bmap) };
1119        let isl_rs_result = Context { ptr: isl_rs_result,
1120                                      should_free_on_drop: false };
1121        isl_rs_result
1122    }
1123
1124    /// Wraps `isl_basic_map_get_dim_name`.
1125    pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
1126        let bmap = self;
1127        let isl_rs_ctx = bmap.get_ctx();
1128        let bmap = bmap.ptr;
1129        let type_ = type_.to_i32();
1130        let isl_rs_result = unsafe { isl_basic_map_get_dim_name(bmap, type_, pos) };
1131        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1132        let isl_rs_result = isl_rs_result.to_str().unwrap();
1133        let err = isl_rs_ctx.last_error();
1134        if err != Error::None_ {
1135            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1136        }
1137        Ok(isl_rs_result)
1138    }
1139
1140    /// Wraps `isl_basic_map_get_div`.
1141    pub fn get_div(&self, pos: i32) -> Result<Aff, LibISLError> {
1142        let bmap = self;
1143        let isl_rs_ctx = bmap.get_ctx();
1144        let bmap = bmap.ptr;
1145        let isl_rs_result = unsafe { isl_basic_map_get_div(bmap, pos) };
1146        let isl_rs_result = Aff { ptr: isl_rs_result,
1147                                  should_free_on_drop: true };
1148        let err = isl_rs_ctx.last_error();
1149        if err != Error::None_ {
1150            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1151        }
1152        Ok(isl_rs_result)
1153    }
1154
1155    /// Wraps `isl_basic_map_get_local_space`.
1156    pub fn get_local_space(&self) -> Result<LocalSpace, LibISLError> {
1157        let bmap = self;
1158        let isl_rs_ctx = bmap.get_ctx();
1159        let bmap = bmap.ptr;
1160        let isl_rs_result = unsafe { isl_basic_map_get_local_space(bmap) };
1161        let isl_rs_result = LocalSpace { ptr: isl_rs_result,
1162                                         should_free_on_drop: true };
1163        let err = isl_rs_ctx.last_error();
1164        if err != Error::None_ {
1165            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1166        }
1167        Ok(isl_rs_result)
1168    }
1169
1170    /// Wraps `isl_basic_map_get_space`.
1171    pub fn get_space(&self) -> Result<Space, LibISLError> {
1172        let bmap = self;
1173        let isl_rs_ctx = bmap.get_ctx();
1174        let bmap = bmap.ptr;
1175        let isl_rs_result = unsafe { isl_basic_map_get_space(bmap) };
1176        let isl_rs_result = Space { ptr: isl_rs_result,
1177                                    should_free_on_drop: true };
1178        let err = isl_rs_ctx.last_error();
1179        if err != Error::None_ {
1180            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1181        }
1182        Ok(isl_rs_result)
1183    }
1184
1185    /// Wraps `isl_basic_map_get_tuple_name`.
1186    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
1187        let bmap = self;
1188        let isl_rs_ctx = bmap.get_ctx();
1189        let bmap = bmap.ptr;
1190        let type_ = type_.to_i32();
1191        let isl_rs_result = unsafe { isl_basic_map_get_tuple_name(bmap, type_) };
1192        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1193        let isl_rs_result = isl_rs_result.to_str().unwrap();
1194        let err = isl_rs_ctx.last_error();
1195        if err != Error::None_ {
1196            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1197        }
1198        Ok(isl_rs_result)
1199    }
1200
1201    /// Wraps `isl_basic_map_gist`.
1202    pub fn gist(self, context: BasicMap) -> Result<BasicMap, LibISLError> {
1203        let bmap = self;
1204        let isl_rs_ctx = bmap.get_ctx();
1205        let mut bmap = bmap;
1206        bmap.do_not_free_on_drop();
1207        let bmap = bmap.ptr;
1208        let mut context = context;
1209        context.do_not_free_on_drop();
1210        let context = context.ptr;
1211        let isl_rs_result = unsafe { isl_basic_map_gist(bmap, context) };
1212        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1213                                       should_free_on_drop: true };
1214        let err = isl_rs_ctx.last_error();
1215        if err != Error::None_ {
1216            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1217        }
1218        Ok(isl_rs_result)
1219    }
1220
1221    /// Wraps `isl_basic_map_gist_domain`.
1222    pub fn gist_domain(self, context: BasicSet) -> Result<BasicMap, LibISLError> {
1223        let bmap = self;
1224        let isl_rs_ctx = bmap.get_ctx();
1225        let mut bmap = bmap;
1226        bmap.do_not_free_on_drop();
1227        let bmap = bmap.ptr;
1228        let mut context = context;
1229        context.do_not_free_on_drop();
1230        let context = context.ptr;
1231        let isl_rs_result = unsafe { isl_basic_map_gist_domain(bmap, context) };
1232        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1233                                       should_free_on_drop: true };
1234        let err = isl_rs_ctx.last_error();
1235        if err != Error::None_ {
1236            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1237        }
1238        Ok(isl_rs_result)
1239    }
1240
1241    /// Wraps `isl_basic_map_has_dim_id`.
1242    pub fn has_dim_id(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1243        let bmap = self;
1244        let isl_rs_ctx = bmap.get_ctx();
1245        let bmap = bmap.ptr;
1246        let type_ = type_.to_i32();
1247        let isl_rs_result = unsafe { isl_basic_map_has_dim_id(bmap, type_, pos) };
1248        let isl_rs_result = match isl_rs_result {
1249            0 => false,
1250            1 => true,
1251            _ => panic!("Got isl_bool = -1"),
1252        };
1253        let err = isl_rs_ctx.last_error();
1254        if err != Error::None_ {
1255            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1256        }
1257        Ok(isl_rs_result)
1258    }
1259
1260    /// Wraps `isl_basic_map_identity`.
1261    pub fn identity(space: Space) -> Result<BasicMap, LibISLError> {
1262        let isl_rs_ctx = space.get_ctx();
1263        let mut space = space;
1264        space.do_not_free_on_drop();
1265        let space = space.ptr;
1266        let isl_rs_result = unsafe { isl_basic_map_identity(space) };
1267        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1268                                       should_free_on_drop: true };
1269        let err = isl_rs_ctx.last_error();
1270        if err != Error::None_ {
1271            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1272        }
1273        Ok(isl_rs_result)
1274    }
1275
1276    /// Wraps `isl_basic_map_image_is_bounded`.
1277    pub fn image_is_bounded(&self) -> Result<bool, 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_image_is_bounded(bmap) };
1282        let isl_rs_result = match isl_rs_result {
1283            0 => false,
1284            1 => true,
1285            _ => panic!("Got isl_bool = -1"),
1286        };
1287        let err = isl_rs_ctx.last_error();
1288        if err != Error::None_ {
1289            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1290        }
1291        Ok(isl_rs_result)
1292    }
1293
1294    /// Wraps `isl_basic_map_inequalities_matrix`.
1295    pub fn inequalities_matrix(&self, c1: DimType, c2: DimType, c3: DimType, c4: DimType,
1296                               c5: DimType)
1297                               -> Result<Mat, LibISLError> {
1298        let bmap = self;
1299        let isl_rs_ctx = bmap.get_ctx();
1300        let bmap = bmap.ptr;
1301        let c1 = c1.to_i32();
1302        let c2 = c2.to_i32();
1303        let c3 = c3.to_i32();
1304        let c4 = c4.to_i32();
1305        let c5 = c5.to_i32();
1306        let isl_rs_result = unsafe { isl_basic_map_inequalities_matrix(bmap, c1, c2, c3, c4, c5) };
1307        let isl_rs_result = Mat { ptr: isl_rs_result,
1308                                  should_free_on_drop: true };
1309        let err = isl_rs_ctx.last_error();
1310        if err != Error::None_ {
1311            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1312        }
1313        Ok(isl_rs_result)
1314    }
1315
1316    /// Wraps `isl_basic_map_insert_dims`.
1317    pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> Result<BasicMap, LibISLError> {
1318        let bmap = self;
1319        let isl_rs_ctx = bmap.get_ctx();
1320        let mut bmap = bmap;
1321        bmap.do_not_free_on_drop();
1322        let bmap = bmap.ptr;
1323        let type_ = type_.to_i32();
1324        let isl_rs_result = unsafe { isl_basic_map_insert_dims(bmap, type_, pos, n) };
1325        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1326                                       should_free_on_drop: true };
1327        let err = isl_rs_ctx.last_error();
1328        if err != Error::None_ {
1329            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1330        }
1331        Ok(isl_rs_result)
1332    }
1333
1334    /// Wraps `isl_basic_map_intersect`.
1335    pub fn intersect(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
1336        let bmap1 = self;
1337        let isl_rs_ctx = bmap1.get_ctx();
1338        let mut bmap1 = bmap1;
1339        bmap1.do_not_free_on_drop();
1340        let bmap1 = bmap1.ptr;
1341        let mut bmap2 = bmap2;
1342        bmap2.do_not_free_on_drop();
1343        let bmap2 = bmap2.ptr;
1344        let isl_rs_result = unsafe { isl_basic_map_intersect(bmap1, bmap2) };
1345        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1346                                       should_free_on_drop: true };
1347        let err = isl_rs_ctx.last_error();
1348        if err != Error::None_ {
1349            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1350        }
1351        Ok(isl_rs_result)
1352    }
1353
1354    /// Wraps `isl_basic_map_intersect_domain`.
1355    pub fn intersect_domain(self, bset: BasicSet) -> Result<BasicMap, LibISLError> {
1356        let bmap = self;
1357        let isl_rs_ctx = bmap.get_ctx();
1358        let mut bmap = bmap;
1359        bmap.do_not_free_on_drop();
1360        let bmap = bmap.ptr;
1361        let mut bset = bset;
1362        bset.do_not_free_on_drop();
1363        let bset = bset.ptr;
1364        let isl_rs_result = unsafe { isl_basic_map_intersect_domain(bmap, bset) };
1365        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1366                                       should_free_on_drop: true };
1367        let err = isl_rs_ctx.last_error();
1368        if err != Error::None_ {
1369            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1370        }
1371        Ok(isl_rs_result)
1372    }
1373
1374    /// Wraps `isl_basic_map_intersect_params`.
1375    pub fn intersect_params(self, bset: BasicSet) -> Result<BasicMap, LibISLError> {
1376        let bmap = self;
1377        let isl_rs_ctx = bmap.get_ctx();
1378        let mut bmap = bmap;
1379        bmap.do_not_free_on_drop();
1380        let bmap = bmap.ptr;
1381        let mut bset = bset;
1382        bset.do_not_free_on_drop();
1383        let bset = bset.ptr;
1384        let isl_rs_result = unsafe { isl_basic_map_intersect_params(bmap, bset) };
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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1390        }
1391        Ok(isl_rs_result)
1392    }
1393
1394    /// Wraps `isl_basic_map_intersect_range`.
1395    pub fn intersect_range(self, bset: BasicSet) -> Result<BasicMap, LibISLError> {
1396        let bmap = self;
1397        let isl_rs_ctx = bmap.get_ctx();
1398        let mut bmap = bmap;
1399        bmap.do_not_free_on_drop();
1400        let bmap = bmap.ptr;
1401        let mut bset = bset;
1402        bset.do_not_free_on_drop();
1403        let bset = bset.ptr;
1404        let isl_rs_result = unsafe { isl_basic_map_intersect_range(bmap, bset) };
1405        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1406                                       should_free_on_drop: true };
1407        let err = isl_rs_ctx.last_error();
1408        if err != Error::None_ {
1409            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1410        }
1411        Ok(isl_rs_result)
1412    }
1413
1414    /// Wraps `isl_basic_map_involves_dims`.
1415    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1416        let bmap = self;
1417        let isl_rs_ctx = bmap.get_ctx();
1418        let bmap = bmap.ptr;
1419        let type_ = type_.to_i32();
1420        let isl_rs_result = unsafe { isl_basic_map_involves_dims(bmap, type_, first, n) };
1421        let isl_rs_result = match isl_rs_result {
1422            0 => false,
1423            1 => true,
1424            _ => panic!("Got isl_bool = -1"),
1425        };
1426        let err = isl_rs_ctx.last_error();
1427        if err != Error::None_ {
1428            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1429        }
1430        Ok(isl_rs_result)
1431    }
1432
1433    /// Wraps `isl_basic_map_is_disjoint`.
1434    pub fn is_disjoint(&self, bmap2: &BasicMap) -> Result<bool, LibISLError> {
1435        let bmap1 = self;
1436        let isl_rs_ctx = bmap1.get_ctx();
1437        let bmap1 = bmap1.ptr;
1438        let bmap2 = bmap2.ptr;
1439        let isl_rs_result = unsafe { isl_basic_map_is_disjoint(bmap1, bmap2) };
1440        let isl_rs_result = match isl_rs_result {
1441            0 => false,
1442            1 => true,
1443            _ => panic!("Got isl_bool = -1"),
1444        };
1445        let err = isl_rs_ctx.last_error();
1446        if err != Error::None_ {
1447            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1448        }
1449        Ok(isl_rs_result)
1450    }
1451
1452    /// Wraps `isl_basic_map_is_empty`.
1453    pub fn is_empty(&self) -> Result<bool, LibISLError> {
1454        let bmap = self;
1455        let isl_rs_ctx = bmap.get_ctx();
1456        let bmap = bmap.ptr;
1457        let isl_rs_result = unsafe { isl_basic_map_is_empty(bmap) };
1458        let isl_rs_result = match isl_rs_result {
1459            0 => false,
1460            1 => true,
1461            _ => panic!("Got isl_bool = -1"),
1462        };
1463        let err = isl_rs_ctx.last_error();
1464        if err != Error::None_ {
1465            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1466        }
1467        Ok(isl_rs_result)
1468    }
1469
1470    /// Wraps `isl_basic_map_is_equal`.
1471    pub fn is_equal(&self, bmap2: &BasicMap) -> Result<bool, LibISLError> {
1472        let bmap1 = self;
1473        let isl_rs_ctx = bmap1.get_ctx();
1474        let bmap1 = bmap1.ptr;
1475        let bmap2 = bmap2.ptr;
1476        let isl_rs_result = unsafe { isl_basic_map_is_equal(bmap1, bmap2) };
1477        let isl_rs_result = match isl_rs_result {
1478            0 => false,
1479            1 => true,
1480            _ => panic!("Got isl_bool = -1"),
1481        };
1482        let err = isl_rs_ctx.last_error();
1483        if err != Error::None_ {
1484            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1485        }
1486        Ok(isl_rs_result)
1487    }
1488
1489    /// Wraps `isl_basic_map_is_rational`.
1490    pub fn is_rational(&self) -> Result<bool, LibISLError> {
1491        let bmap = self;
1492        let isl_rs_ctx = bmap.get_ctx();
1493        let bmap = bmap.ptr;
1494        let isl_rs_result = unsafe { isl_basic_map_is_rational(bmap) };
1495        let isl_rs_result = match isl_rs_result {
1496            0 => false,
1497            1 => true,
1498            _ => panic!("Got isl_bool = -1"),
1499        };
1500        let err = isl_rs_ctx.last_error();
1501        if err != Error::None_ {
1502            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1503        }
1504        Ok(isl_rs_result)
1505    }
1506
1507    /// Wraps `isl_basic_map_is_single_valued`.
1508    pub fn is_single_valued(&self) -> Result<bool, LibISLError> {
1509        let bmap = self;
1510        let isl_rs_ctx = bmap.get_ctx();
1511        let bmap = bmap.ptr;
1512        let isl_rs_result = unsafe { isl_basic_map_is_single_valued(bmap) };
1513        let isl_rs_result = match isl_rs_result {
1514            0 => false,
1515            1 => true,
1516            _ => panic!("Got isl_bool = -1"),
1517        };
1518        let err = isl_rs_ctx.last_error();
1519        if err != Error::None_ {
1520            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1521        }
1522        Ok(isl_rs_result)
1523    }
1524
1525    /// Wraps `isl_basic_map_is_strict_subset`.
1526    pub fn is_strict_subset(&self, bmap2: &BasicMap) -> Result<bool, LibISLError> {
1527        let bmap1 = self;
1528        let isl_rs_ctx = bmap1.get_ctx();
1529        let bmap1 = bmap1.ptr;
1530        let bmap2 = bmap2.ptr;
1531        let isl_rs_result = unsafe { isl_basic_map_is_strict_subset(bmap1, bmap2) };
1532        let isl_rs_result = match isl_rs_result {
1533            0 => false,
1534            1 => true,
1535            _ => panic!("Got isl_bool = -1"),
1536        };
1537        let err = isl_rs_ctx.last_error();
1538        if err != Error::None_ {
1539            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1540        }
1541        Ok(isl_rs_result)
1542    }
1543
1544    /// Wraps `isl_basic_map_is_subset`.
1545    pub fn is_subset(&self, bmap2: &BasicMap) -> Result<bool, LibISLError> {
1546        let bmap1 = self;
1547        let isl_rs_ctx = bmap1.get_ctx();
1548        let bmap1 = bmap1.ptr;
1549        let bmap2 = bmap2.ptr;
1550        let isl_rs_result = unsafe { isl_basic_map_is_subset(bmap1, bmap2) };
1551        let isl_rs_result = match isl_rs_result {
1552            0 => false,
1553            1 => true,
1554            _ => panic!("Got isl_bool = -1"),
1555        };
1556        let err = isl_rs_ctx.last_error();
1557        if err != Error::None_ {
1558            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1559        }
1560        Ok(isl_rs_result)
1561    }
1562
1563    /// Wraps `isl_basic_map_is_universe`.
1564    pub fn is_universe(&self) -> Result<bool, LibISLError> {
1565        let bmap = self;
1566        let isl_rs_ctx = bmap.get_ctx();
1567        let bmap = bmap.ptr;
1568        let isl_rs_result = unsafe { isl_basic_map_is_universe(bmap) };
1569        let isl_rs_result = match isl_rs_result {
1570            0 => false,
1571            1 => true,
1572            _ => panic!("Got isl_bool = -1"),
1573        };
1574        let err = isl_rs_ctx.last_error();
1575        if err != Error::None_ {
1576            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1577        }
1578        Ok(isl_rs_result)
1579    }
1580
1581    /// Wraps `isl_basic_map_less_at`.
1582    pub fn less_at(space: Space, pos: u32) -> Result<BasicMap, LibISLError> {
1583        let isl_rs_ctx = space.get_ctx();
1584        let mut space = space;
1585        space.do_not_free_on_drop();
1586        let space = space.ptr;
1587        let isl_rs_result = unsafe { isl_basic_map_less_at(space, pos) };
1588        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1589                                       should_free_on_drop: true };
1590        let err = isl_rs_ctx.last_error();
1591        if err != Error::None_ {
1592            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1593        }
1594        Ok(isl_rs_result)
1595    }
1596
1597    /// Wraps `isl_basic_map_lexmax`.
1598    pub fn lexmax(self) -> Result<Map, LibISLError> {
1599        let bmap = self;
1600        let isl_rs_ctx = bmap.get_ctx();
1601        let mut bmap = bmap;
1602        bmap.do_not_free_on_drop();
1603        let bmap = bmap.ptr;
1604        let isl_rs_result = unsafe { isl_basic_map_lexmax(bmap) };
1605        let isl_rs_result = Map { ptr: isl_rs_result,
1606                                  should_free_on_drop: true };
1607        let err = isl_rs_ctx.last_error();
1608        if err != Error::None_ {
1609            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1610        }
1611        Ok(isl_rs_result)
1612    }
1613
1614    /// Wraps `isl_basic_map_lexmin`.
1615    pub fn lexmin(self) -> Result<Map, LibISLError> {
1616        let bmap = self;
1617        let isl_rs_ctx = bmap.get_ctx();
1618        let mut bmap = bmap;
1619        bmap.do_not_free_on_drop();
1620        let bmap = bmap.ptr;
1621        let isl_rs_result = unsafe { isl_basic_map_lexmin(bmap) };
1622        let isl_rs_result = Map { ptr: isl_rs_result,
1623                                  should_free_on_drop: true };
1624        let err = isl_rs_ctx.last_error();
1625        if err != Error::None_ {
1626            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1627        }
1628        Ok(isl_rs_result)
1629    }
1630
1631    /// Wraps `isl_basic_map_lexmin_pw_multi_aff`.
1632    pub fn lexmin_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
1633        let bmap = self;
1634        let isl_rs_ctx = bmap.get_ctx();
1635        let mut bmap = bmap;
1636        bmap.do_not_free_on_drop();
1637        let bmap = bmap.ptr;
1638        let isl_rs_result = unsafe { isl_basic_map_lexmin_pw_multi_aff(bmap) };
1639        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1640                                         should_free_on_drop: true };
1641        let err = isl_rs_ctx.last_error();
1642        if err != Error::None_ {
1643            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1644        }
1645        Ok(isl_rs_result)
1646    }
1647
1648    /// Wraps `isl_basic_map_lower_bound_si`.
1649    pub fn lower_bound_si(self, type_: DimType, pos: u32, value: i32)
1650                          -> Result<BasicMap, LibISLError> {
1651        let bmap = self;
1652        let isl_rs_ctx = bmap.get_ctx();
1653        let mut bmap = bmap;
1654        bmap.do_not_free_on_drop();
1655        let bmap = bmap.ptr;
1656        let type_ = type_.to_i32();
1657        let isl_rs_result = unsafe { isl_basic_map_lower_bound_si(bmap, type_, pos, value) };
1658        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1659                                       should_free_on_drop: true };
1660        let err = isl_rs_ctx.last_error();
1661        if err != Error::None_ {
1662            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1663        }
1664        Ok(isl_rs_result)
1665    }
1666
1667    /// Wraps `isl_basic_map_more_at`.
1668    pub fn more_at(space: Space, pos: u32) -> Result<BasicMap, LibISLError> {
1669        let isl_rs_ctx = space.get_ctx();
1670        let mut space = space;
1671        space.do_not_free_on_drop();
1672        let space = space.ptr;
1673        let isl_rs_result = unsafe { isl_basic_map_more_at(space, pos) };
1674        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1675                                       should_free_on_drop: true };
1676        let err = isl_rs_ctx.last_error();
1677        if err != Error::None_ {
1678            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1679        }
1680        Ok(isl_rs_result)
1681    }
1682
1683    /// Wraps `isl_basic_map_move_dims`.
1684    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1685                     n: u32)
1686                     -> Result<BasicMap, LibISLError> {
1687        let bmap = self;
1688        let isl_rs_ctx = bmap.get_ctx();
1689        let mut bmap = bmap;
1690        bmap.do_not_free_on_drop();
1691        let bmap = bmap.ptr;
1692        let dst_type = dst_type.to_i32();
1693        let src_type = src_type.to_i32();
1694        let isl_rs_result =
1695            unsafe { isl_basic_map_move_dims(bmap, dst_type, dst_pos, src_type, src_pos, n) };
1696        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1697                                       should_free_on_drop: true };
1698        let err = isl_rs_ctx.last_error();
1699        if err != Error::None_ {
1700            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1701        }
1702        Ok(isl_rs_result)
1703    }
1704
1705    /// Wraps `isl_basic_map_n_constraint`.
1706    pub fn n_constraint(&self) -> Result<i32, LibISLError> {
1707        let bmap = self;
1708        let isl_rs_ctx = bmap.get_ctx();
1709        let bmap = bmap.ptr;
1710        let isl_rs_result = unsafe { isl_basic_map_n_constraint(bmap) };
1711        let err = isl_rs_ctx.last_error();
1712        if err != Error::None_ {
1713            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1714        }
1715        Ok(isl_rs_result)
1716    }
1717
1718    /// Wraps `isl_basic_map_nat_universe`.
1719    pub fn nat_universe(space: Space) -> Result<BasicMap, LibISLError> {
1720        let isl_rs_ctx = space.get_ctx();
1721        let mut space = space;
1722        space.do_not_free_on_drop();
1723        let space = space.ptr;
1724        let isl_rs_result = unsafe { isl_basic_map_nat_universe(space) };
1725        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1726                                       should_free_on_drop: true };
1727        let err = isl_rs_ctx.last_error();
1728        if err != Error::None_ {
1729            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1730        }
1731        Ok(isl_rs_result)
1732    }
1733
1734    /// Wraps `isl_basic_map_neg`.
1735    pub fn neg(self) -> Result<BasicMap, LibISLError> {
1736        let bmap = self;
1737        let isl_rs_ctx = bmap.get_ctx();
1738        let mut bmap = bmap;
1739        bmap.do_not_free_on_drop();
1740        let bmap = bmap.ptr;
1741        let isl_rs_result = unsafe { isl_basic_map_neg(bmap) };
1742        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1743                                       should_free_on_drop: true };
1744        let err = isl_rs_ctx.last_error();
1745        if err != Error::None_ {
1746            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1747        }
1748        Ok(isl_rs_result)
1749    }
1750
1751    /// Wraps `isl_basic_map_order_ge`.
1752    pub fn order_ge(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
1753                    -> Result<BasicMap, LibISLError> {
1754        let bmap = self;
1755        let isl_rs_ctx = bmap.get_ctx();
1756        let mut bmap = bmap;
1757        bmap.do_not_free_on_drop();
1758        let bmap = bmap.ptr;
1759        let type1 = type1.to_i32();
1760        let type2 = type2.to_i32();
1761        let isl_rs_result = unsafe { isl_basic_map_order_ge(bmap, type1, pos1, type2, pos2) };
1762        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1763                                       should_free_on_drop: true };
1764        let err = isl_rs_ctx.last_error();
1765        if err != Error::None_ {
1766            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1767        }
1768        Ok(isl_rs_result)
1769    }
1770
1771    /// Wraps `isl_basic_map_order_gt`.
1772    pub fn order_gt(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
1773                    -> Result<BasicMap, LibISLError> {
1774        let bmap = self;
1775        let isl_rs_ctx = bmap.get_ctx();
1776        let mut bmap = bmap;
1777        bmap.do_not_free_on_drop();
1778        let bmap = bmap.ptr;
1779        let type1 = type1.to_i32();
1780        let type2 = type2.to_i32();
1781        let isl_rs_result = unsafe { isl_basic_map_order_gt(bmap, type1, pos1, type2, pos2) };
1782        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1783                                       should_free_on_drop: true };
1784        let err = isl_rs_ctx.last_error();
1785        if err != Error::None_ {
1786            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1787        }
1788        Ok(isl_rs_result)
1789    }
1790
1791    /// Wraps `isl_basic_map_plain_get_val_if_fixed`.
1792    pub fn plain_get_val_if_fixed(&self, type_: DimType, pos: u32) -> Result<Val, LibISLError> {
1793        let bmap = self;
1794        let isl_rs_ctx = bmap.get_ctx();
1795        let bmap = bmap.ptr;
1796        let type_ = type_.to_i32();
1797        let isl_rs_result = unsafe { isl_basic_map_plain_get_val_if_fixed(bmap, type_, pos) };
1798        let isl_rs_result = Val { ptr: isl_rs_result,
1799                                  should_free_on_drop: true };
1800        let err = isl_rs_ctx.last_error();
1801        if err != Error::None_ {
1802            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1803        }
1804        Ok(isl_rs_result)
1805    }
1806
1807    /// Wraps `isl_basic_map_plain_is_empty`.
1808    pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
1809        let bmap = self;
1810        let isl_rs_ctx = bmap.get_ctx();
1811        let bmap = bmap.ptr;
1812        let isl_rs_result = unsafe { isl_basic_map_plain_is_empty(bmap) };
1813        let isl_rs_result = match isl_rs_result {
1814            0 => false,
1815            1 => true,
1816            _ => panic!("Got isl_bool = -1"),
1817        };
1818        let err = isl_rs_ctx.last_error();
1819        if err != Error::None_ {
1820            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1821        }
1822        Ok(isl_rs_result)
1823    }
1824
1825    /// Wraps `isl_basic_map_plain_is_universe`.
1826    pub fn plain_is_universe(&self) -> Result<bool, LibISLError> {
1827        let bmap = self;
1828        let isl_rs_ctx = bmap.get_ctx();
1829        let bmap = bmap.ptr;
1830        let isl_rs_result = unsafe { isl_basic_map_plain_is_universe(bmap) };
1831        let isl_rs_result = match isl_rs_result {
1832            0 => false,
1833            1 => true,
1834            _ => panic!("Got isl_bool = -1"),
1835        };
1836        let err = isl_rs_ctx.last_error();
1837        if err != Error::None_ {
1838            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1839        }
1840        Ok(isl_rs_result)
1841    }
1842
1843    /// Wraps `isl_basic_map_preimage_domain_multi_aff`.
1844    pub fn preimage_domain_multi_aff(self, ma: MultiAff) -> Result<BasicMap, LibISLError> {
1845        let bmap = self;
1846        let isl_rs_ctx = bmap.get_ctx();
1847        let mut bmap = bmap;
1848        bmap.do_not_free_on_drop();
1849        let bmap = bmap.ptr;
1850        let mut ma = ma;
1851        ma.do_not_free_on_drop();
1852        let ma = ma.ptr;
1853        let isl_rs_result = unsafe { isl_basic_map_preimage_domain_multi_aff(bmap, ma) };
1854        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1855                                       should_free_on_drop: true };
1856        let err = isl_rs_ctx.last_error();
1857        if err != Error::None_ {
1858            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1859        }
1860        Ok(isl_rs_result)
1861    }
1862
1863    /// Wraps `isl_basic_map_preimage_range_multi_aff`.
1864    pub fn preimage_range_multi_aff(self, ma: MultiAff) -> Result<BasicMap, LibISLError> {
1865        let bmap = self;
1866        let isl_rs_ctx = bmap.get_ctx();
1867        let mut bmap = bmap;
1868        bmap.do_not_free_on_drop();
1869        let bmap = bmap.ptr;
1870        let mut ma = ma;
1871        ma.do_not_free_on_drop();
1872        let ma = ma.ptr;
1873        let isl_rs_result = unsafe { isl_basic_map_preimage_range_multi_aff(bmap, ma) };
1874        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1875                                       should_free_on_drop: true };
1876        let err = isl_rs_ctx.last_error();
1877        if err != Error::None_ {
1878            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1879        }
1880        Ok(isl_rs_result)
1881    }
1882
1883    /// Wraps `isl_basic_map_product`.
1884    pub fn product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
1885        let bmap1 = self;
1886        let isl_rs_ctx = bmap1.get_ctx();
1887        let mut bmap1 = bmap1;
1888        bmap1.do_not_free_on_drop();
1889        let bmap1 = bmap1.ptr;
1890        let mut bmap2 = bmap2;
1891        bmap2.do_not_free_on_drop();
1892        let bmap2 = bmap2.ptr;
1893        let isl_rs_result = unsafe { isl_basic_map_product(bmap1, bmap2) };
1894        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1895                                       should_free_on_drop: true };
1896        let err = isl_rs_ctx.last_error();
1897        if err != Error::None_ {
1898            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1899        }
1900        Ok(isl_rs_result)
1901    }
1902
1903    /// Wraps `isl_basic_map_project_out`.
1904    pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<BasicMap, LibISLError> {
1905        let bmap = self;
1906        let isl_rs_ctx = bmap.get_ctx();
1907        let mut bmap = bmap;
1908        bmap.do_not_free_on_drop();
1909        let bmap = bmap.ptr;
1910        let type_ = type_.to_i32();
1911        let isl_rs_result = unsafe { isl_basic_map_project_out(bmap, type_, first, n) };
1912        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1913                                       should_free_on_drop: true };
1914        let err = isl_rs_ctx.last_error();
1915        if err != Error::None_ {
1916            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1917        }
1918        Ok(isl_rs_result)
1919    }
1920
1921    /// Wraps `isl_basic_map_range`.
1922    pub fn range(self) -> Result<BasicSet, LibISLError> {
1923        let bmap = self;
1924        let isl_rs_ctx = bmap.get_ctx();
1925        let mut bmap = bmap;
1926        bmap.do_not_free_on_drop();
1927        let bmap = bmap.ptr;
1928        let isl_rs_result = unsafe { isl_basic_map_range(bmap) };
1929        let isl_rs_result = BasicSet { ptr: isl_rs_result,
1930                                       should_free_on_drop: true };
1931        let err = isl_rs_ctx.last_error();
1932        if err != Error::None_ {
1933            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1934        }
1935        Ok(isl_rs_result)
1936    }
1937
1938    /// Wraps `isl_basic_map_range_map`.
1939    pub fn range_map(self) -> Result<BasicMap, LibISLError> {
1940        let bmap = self;
1941        let isl_rs_ctx = bmap.get_ctx();
1942        let mut bmap = bmap;
1943        bmap.do_not_free_on_drop();
1944        let bmap = bmap.ptr;
1945        let isl_rs_result = unsafe { isl_basic_map_range_map(bmap) };
1946        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1947                                       should_free_on_drop: true };
1948        let err = isl_rs_ctx.last_error();
1949        if err != Error::None_ {
1950            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1951        }
1952        Ok(isl_rs_result)
1953    }
1954
1955    /// Wraps `isl_basic_map_range_product`.
1956    pub fn range_product(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
1957        let bmap1 = self;
1958        let isl_rs_ctx = bmap1.get_ctx();
1959        let mut bmap1 = bmap1;
1960        bmap1.do_not_free_on_drop();
1961        let bmap1 = bmap1.ptr;
1962        let mut bmap2 = bmap2;
1963        bmap2.do_not_free_on_drop();
1964        let bmap2 = bmap2.ptr;
1965        let isl_rs_result = unsafe { isl_basic_map_range_product(bmap1, bmap2) };
1966        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1967                                       should_free_on_drop: true };
1968        let err = isl_rs_ctx.last_error();
1969        if err != Error::None_ {
1970            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1971        }
1972        Ok(isl_rs_result)
1973    }
1974
1975    /// Wraps `isl_basic_map_read_from_str`.
1976    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<BasicMap, LibISLError> {
1977        let isl_rs_ctx = Context { ptr: ctx.ptr,
1978                                   should_free_on_drop: false };
1979        let ctx = ctx.ptr;
1980        let str_ = CString::new(str_).unwrap();
1981        let str_ = str_.as_ptr();
1982        let isl_rs_result = unsafe { isl_basic_map_read_from_str(ctx, str_) };
1983        let isl_rs_result = BasicMap { ptr: isl_rs_result,
1984                                       should_free_on_drop: true };
1985        let err = isl_rs_ctx.last_error();
1986        if err != Error::None_ {
1987            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1988        }
1989        Ok(isl_rs_result)
1990    }
1991
1992    /// Wraps `isl_basic_map_remove_dims`.
1993    pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> Result<BasicMap, LibISLError> {
1994        let bmap = self;
1995        let isl_rs_ctx = bmap.get_ctx();
1996        let mut bmap = bmap;
1997        bmap.do_not_free_on_drop();
1998        let bmap = bmap.ptr;
1999        let type_ = type_.to_i32();
2000        let isl_rs_result = unsafe { isl_basic_map_remove_dims(bmap, type_, first, n) };
2001        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2002                                       should_free_on_drop: true };
2003        let err = isl_rs_ctx.last_error();
2004        if err != Error::None_ {
2005            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2006        }
2007        Ok(isl_rs_result)
2008    }
2009
2010    /// Wraps `isl_basic_map_remove_divs`.
2011    pub fn remove_divs(self) -> Result<BasicMap, LibISLError> {
2012        let bmap = self;
2013        let isl_rs_ctx = bmap.get_ctx();
2014        let mut bmap = bmap;
2015        bmap.do_not_free_on_drop();
2016        let bmap = bmap.ptr;
2017        let isl_rs_result = unsafe { isl_basic_map_remove_divs(bmap) };
2018        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2019                                       should_free_on_drop: true };
2020        let err = isl_rs_ctx.last_error();
2021        if err != Error::None_ {
2022            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2023        }
2024        Ok(isl_rs_result)
2025    }
2026
2027    /// Wraps `isl_basic_map_remove_divs_involving_dims`.
2028    pub fn remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32)
2029                                      -> Result<BasicMap, LibISLError> {
2030        let bmap = self;
2031        let isl_rs_ctx = bmap.get_ctx();
2032        let mut bmap = bmap;
2033        bmap.do_not_free_on_drop();
2034        let bmap = bmap.ptr;
2035        let type_ = type_.to_i32();
2036        let isl_rs_result =
2037            unsafe { isl_basic_map_remove_divs_involving_dims(bmap, type_, first, n) };
2038        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2039                                       should_free_on_drop: true };
2040        let err = isl_rs_ctx.last_error();
2041        if err != Error::None_ {
2042            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2043        }
2044        Ok(isl_rs_result)
2045    }
2046
2047    /// Wraps `isl_basic_map_remove_redundancies`.
2048    pub fn remove_redundancies(self) -> Result<BasicMap, LibISLError> {
2049        let bmap = self;
2050        let isl_rs_ctx = bmap.get_ctx();
2051        let mut bmap = bmap;
2052        bmap.do_not_free_on_drop();
2053        let bmap = bmap.ptr;
2054        let isl_rs_result = unsafe { isl_basic_map_remove_redundancies(bmap) };
2055        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2056                                       should_free_on_drop: true };
2057        let err = isl_rs_ctx.last_error();
2058        if err != Error::None_ {
2059            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2060        }
2061        Ok(isl_rs_result)
2062    }
2063
2064    /// Wraps `isl_basic_map_reverse`.
2065    pub fn reverse(self) -> Result<BasicMap, LibISLError> {
2066        let bmap = self;
2067        let isl_rs_ctx = bmap.get_ctx();
2068        let mut bmap = bmap;
2069        bmap.do_not_free_on_drop();
2070        let bmap = bmap.ptr;
2071        let isl_rs_result = unsafe { isl_basic_map_reverse(bmap) };
2072        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2073                                       should_free_on_drop: true };
2074        let err = isl_rs_ctx.last_error();
2075        if err != Error::None_ {
2076            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2077        }
2078        Ok(isl_rs_result)
2079    }
2080
2081    /// Wraps `isl_basic_map_sample`.
2082    pub fn sample(self) -> Result<BasicMap, LibISLError> {
2083        let bmap = self;
2084        let isl_rs_ctx = bmap.get_ctx();
2085        let mut bmap = bmap;
2086        bmap.do_not_free_on_drop();
2087        let bmap = bmap.ptr;
2088        let isl_rs_result = unsafe { isl_basic_map_sample(bmap) };
2089        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2090                                       should_free_on_drop: true };
2091        let err = isl_rs_ctx.last_error();
2092        if err != Error::None_ {
2093            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2094        }
2095        Ok(isl_rs_result)
2096    }
2097
2098    /// Wraps `isl_basic_map_set_dim_name`.
2099    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<BasicMap, LibISLError> {
2100        let bmap = self;
2101        let isl_rs_ctx = bmap.get_ctx();
2102        let mut bmap = bmap;
2103        bmap.do_not_free_on_drop();
2104        let bmap = bmap.ptr;
2105        let type_ = type_.to_i32();
2106        let s = CString::new(s).unwrap();
2107        let s = s.as_ptr();
2108        let isl_rs_result = unsafe { isl_basic_map_set_dim_name(bmap, type_, pos, s) };
2109        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2110                                       should_free_on_drop: true };
2111        let err = isl_rs_ctx.last_error();
2112        if err != Error::None_ {
2113            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2114        }
2115        Ok(isl_rs_result)
2116    }
2117
2118    /// Wraps `isl_basic_map_set_tuple_id`.
2119    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<BasicMap, LibISLError> {
2120        let bmap = self;
2121        let isl_rs_ctx = bmap.get_ctx();
2122        let mut bmap = bmap;
2123        bmap.do_not_free_on_drop();
2124        let bmap = bmap.ptr;
2125        let type_ = type_.to_i32();
2126        let mut id = id;
2127        id.do_not_free_on_drop();
2128        let id = id.ptr;
2129        let isl_rs_result = unsafe { isl_basic_map_set_tuple_id(bmap, type_, id) };
2130        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2131                                       should_free_on_drop: true };
2132        let err = isl_rs_ctx.last_error();
2133        if err != Error::None_ {
2134            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2135        }
2136        Ok(isl_rs_result)
2137    }
2138
2139    /// Wraps `isl_basic_map_set_tuple_name`.
2140    pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<BasicMap, LibISLError> {
2141        let bmap = self;
2142        let isl_rs_ctx = bmap.get_ctx();
2143        let mut bmap = bmap;
2144        bmap.do_not_free_on_drop();
2145        let bmap = bmap.ptr;
2146        let type_ = type_.to_i32();
2147        let s = CString::new(s).unwrap();
2148        let s = s.as_ptr();
2149        let isl_rs_result = unsafe { isl_basic_map_set_tuple_name(bmap, type_, s) };
2150        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2151                                       should_free_on_drop: true };
2152        let err = isl_rs_ctx.last_error();
2153        if err != Error::None_ {
2154            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2155        }
2156        Ok(isl_rs_result)
2157    }
2158
2159    /// Wraps `isl_basic_map_sum`.
2160    pub fn sum(self, bmap2: BasicMap) -> Result<BasicMap, LibISLError> {
2161        let bmap1 = self;
2162        let isl_rs_ctx = bmap1.get_ctx();
2163        let mut bmap1 = bmap1;
2164        bmap1.do_not_free_on_drop();
2165        let bmap1 = bmap1.ptr;
2166        let mut bmap2 = bmap2;
2167        bmap2.do_not_free_on_drop();
2168        let bmap2 = bmap2.ptr;
2169        let isl_rs_result = unsafe { isl_basic_map_sum(bmap1, bmap2) };
2170        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2171                                       should_free_on_drop: true };
2172        let err = isl_rs_ctx.last_error();
2173        if err != Error::None_ {
2174            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2175        }
2176        Ok(isl_rs_result)
2177    }
2178
2179    /// Wraps `isl_basic_map_to_list`.
2180    pub fn to_list(self) -> Result<BasicMapList, LibISLError> {
2181        let el = self;
2182        let isl_rs_ctx = el.get_ctx();
2183        let mut el = el;
2184        el.do_not_free_on_drop();
2185        let el = el.ptr;
2186        let isl_rs_result = unsafe { isl_basic_map_to_list(el) };
2187        let isl_rs_result = BasicMapList { ptr: isl_rs_result,
2188                                           should_free_on_drop: true };
2189        let err = isl_rs_ctx.last_error();
2190        if err != Error::None_ {
2191            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2192        }
2193        Ok(isl_rs_result)
2194    }
2195
2196    /// Wraps `isl_basic_map_to_str`.
2197    pub fn to_str(&self) -> Result<&str, LibISLError> {
2198        let bmap = self;
2199        let isl_rs_ctx = bmap.get_ctx();
2200        let bmap = bmap.ptr;
2201        let isl_rs_result = unsafe { isl_basic_map_to_str(bmap) };
2202        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2203        let isl_rs_result = isl_rs_result.to_str().unwrap();
2204        let err = isl_rs_ctx.last_error();
2205        if err != Error::None_ {
2206            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2207        }
2208        Ok(isl_rs_result)
2209    }
2210
2211    /// Wraps `isl_basic_map_total_dim`.
2212    pub fn total_dim(&self) -> Result<i32, LibISLError> {
2213        let bmap = self;
2214        let isl_rs_ctx = bmap.get_ctx();
2215        let bmap = bmap.ptr;
2216        let isl_rs_result = unsafe { isl_basic_map_total_dim(bmap) };
2217        let err = isl_rs_ctx.last_error();
2218        if err != Error::None_ {
2219            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2220        }
2221        Ok(isl_rs_result)
2222    }
2223
2224    /// Wraps `isl_basic_map_uncurry`.
2225    pub fn uncurry(self) -> Result<BasicMap, LibISLError> {
2226        let bmap = self;
2227        let isl_rs_ctx = bmap.get_ctx();
2228        let mut bmap = bmap;
2229        bmap.do_not_free_on_drop();
2230        let bmap = bmap.ptr;
2231        let isl_rs_result = unsafe { isl_basic_map_uncurry(bmap) };
2232        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2233                                       should_free_on_drop: true };
2234        let err = isl_rs_ctx.last_error();
2235        if err != Error::None_ {
2236            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2237        }
2238        Ok(isl_rs_result)
2239    }
2240
2241    /// Wraps `isl_basic_map_union`.
2242    pub fn union(self, bmap2: BasicMap) -> Result<Map, LibISLError> {
2243        let bmap1 = self;
2244        let isl_rs_ctx = bmap1.get_ctx();
2245        let mut bmap1 = bmap1;
2246        bmap1.do_not_free_on_drop();
2247        let bmap1 = bmap1.ptr;
2248        let mut bmap2 = bmap2;
2249        bmap2.do_not_free_on_drop();
2250        let bmap2 = bmap2.ptr;
2251        let isl_rs_result = unsafe { isl_basic_map_union(bmap1, bmap2) };
2252        let isl_rs_result = Map { ptr: isl_rs_result,
2253                                  should_free_on_drop: true };
2254        let err = isl_rs_ctx.last_error();
2255        if err != Error::None_ {
2256            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2257        }
2258        Ok(isl_rs_result)
2259    }
2260
2261    /// Wraps `isl_basic_map_universe`.
2262    pub fn universe(space: Space) -> Result<BasicMap, LibISLError> {
2263        let isl_rs_ctx = space.get_ctx();
2264        let mut space = space;
2265        space.do_not_free_on_drop();
2266        let space = space.ptr;
2267        let isl_rs_result = unsafe { isl_basic_map_universe(space) };
2268        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2269                                       should_free_on_drop: true };
2270        let err = isl_rs_ctx.last_error();
2271        if err != Error::None_ {
2272            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2273        }
2274        Ok(isl_rs_result)
2275    }
2276
2277    /// Wraps `isl_basic_map_upper_bound_si`.
2278    pub fn upper_bound_si(self, type_: DimType, pos: u32, value: i32)
2279                          -> Result<BasicMap, LibISLError> {
2280        let bmap = self;
2281        let isl_rs_ctx = bmap.get_ctx();
2282        let mut bmap = bmap;
2283        bmap.do_not_free_on_drop();
2284        let bmap = bmap.ptr;
2285        let type_ = type_.to_i32();
2286        let isl_rs_result = unsafe { isl_basic_map_upper_bound_si(bmap, type_, pos, value) };
2287        let isl_rs_result = BasicMap { ptr: isl_rs_result,
2288                                       should_free_on_drop: true };
2289        let err = isl_rs_ctx.last_error();
2290        if err != Error::None_ {
2291            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2292        }
2293        Ok(isl_rs_result)
2294    }
2295
2296    /// Wraps `isl_basic_map_wrap`.
2297    pub fn wrap(self) -> Result<BasicSet, LibISLError> {
2298        let bmap = self;
2299        let isl_rs_ctx = bmap.get_ctx();
2300        let mut bmap = bmap;
2301        bmap.do_not_free_on_drop();
2302        let bmap = bmap.ptr;
2303        let isl_rs_result = unsafe { isl_basic_map_wrap(bmap) };
2304        let isl_rs_result = BasicSet { ptr: isl_rs_result,
2305                                       should_free_on_drop: true };
2306        let err = isl_rs_ctx.last_error();
2307        if err != Error::None_ {
2308            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2309        }
2310        Ok(isl_rs_result)
2311    }
2312
2313    /// Wraps `isl_basic_map_zip`.
2314    pub fn zip(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_zip(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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2326        }
2327        Ok(isl_rs_result)
2328    }
2329
2330    /// Does not call isl_basic_map_free() on being dropped. (For internal use
2331    /// only.)
2332    pub fn do_not_free_on_drop(&mut self) {
2333        self.should_free_on_drop = false;
2334    }
2335}
2336
2337impl Drop for BasicMap {
2338    fn drop(&mut self) {
2339        if self.should_free_on_drop {
2340            unsafe {
2341                isl_basic_map_free(self.ptr);
2342            }
2343        }
2344    }
2345}