isl_rs/bindings/
space.rs

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