isl_rs/bindings/
map.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{
5    Aff, BasicMap, BasicMapList, Constraint, Context, DimType, Error, FixedBox, Id, IdList,
6    LibISLError, MapList, MultiAff, MultiId, MultiPwAff, PwAff, PwMultiAff, Set, Space, StrideInfo,
7    UnionMap, Val,
8};
9use libc::uintptr_t;
10use std::ffi::{CStr, CString};
11use std::os::raw::c_char;
12
13/// Wraps `isl_map`.
14pub struct Map {
15    pub ptr: uintptr_t,
16    pub should_free_on_drop: bool,
17}
18
19extern "C" {
20
21    fn isl_map_add_constraint(map: uintptr_t, constraint: uintptr_t) -> uintptr_t;
22
23    fn isl_map_add_dims(map: uintptr_t, type_: i32, n: u32) -> uintptr_t;
24
25    fn isl_map_affine_hull(map: uintptr_t) -> uintptr_t;
26
27    fn isl_map_align_divs(map: uintptr_t) -> uintptr_t;
28
29    fn isl_map_align_params(map: uintptr_t, model: uintptr_t) -> uintptr_t;
30
31    fn isl_map_apply_domain(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
32
33    fn isl_map_apply_range(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
34
35    fn isl_map_as_pw_multi_aff(map: uintptr_t) -> uintptr_t;
36
37    fn isl_map_bind_domain(map: uintptr_t, tuple: uintptr_t) -> uintptr_t;
38
39    fn isl_map_bind_range(map: uintptr_t, tuple: uintptr_t) -> uintptr_t;
40
41    fn isl_map_can_curry(map: uintptr_t) -> i32;
42
43    fn isl_map_can_range_curry(map: uintptr_t) -> i32;
44
45    fn isl_map_can_uncurry(map: uintptr_t) -> i32;
46
47    fn isl_map_can_zip(map: uintptr_t) -> i32;
48
49    fn isl_map_coalesce(map: uintptr_t) -> uintptr_t;
50
51    fn isl_map_complement(map: uintptr_t) -> uintptr_t;
52
53    fn isl_map_compute_divs(map: uintptr_t) -> uintptr_t;
54
55    fn isl_map_convex_hull(map: uintptr_t) -> uintptr_t;
56
57    fn isl_map_copy(map: uintptr_t) -> uintptr_t;
58
59    fn isl_map_curry(map: uintptr_t) -> uintptr_t;
60
61    fn isl_map_deltas(map: uintptr_t) -> uintptr_t;
62
63    fn isl_map_deltas_map(map: uintptr_t) -> uintptr_t;
64
65    fn isl_map_detect_equalities(map: uintptr_t) -> uintptr_t;
66
67    fn isl_map_dim(map: uintptr_t, type_: i32) -> i32;
68
69    fn isl_map_dim_max(map: uintptr_t, pos: i32) -> uintptr_t;
70
71    fn isl_map_dim_min(map: uintptr_t, pos: i32) -> uintptr_t;
72
73    fn isl_map_domain(bmap: uintptr_t) -> uintptr_t;
74
75    fn isl_map_domain_factor_domain(map: uintptr_t) -> uintptr_t;
76
77    fn isl_map_domain_factor_range(map: uintptr_t) -> uintptr_t;
78
79    fn isl_map_domain_is_wrapping(map: uintptr_t) -> i32;
80
81    fn isl_map_domain_map(map: uintptr_t) -> uintptr_t;
82
83    fn isl_map_domain_product(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
84
85    fn isl_map_domain_reverse(map: uintptr_t) -> uintptr_t;
86
87    fn isl_map_domain_tuple_dim(map: uintptr_t) -> i32;
88
89    fn isl_map_drop_constraints_involving_dims(map: uintptr_t, type_: i32, first: u32, n: u32)
90                                               -> uintptr_t;
91
92    fn isl_map_drop_constraints_not_involving_dims(map: uintptr_t, type_: i32, first: u32, n: u32)
93                                                   -> uintptr_t;
94
95    fn isl_map_drop_unused_params(map: uintptr_t) -> uintptr_t;
96
97    fn isl_map_dump(map: uintptr_t) -> ();
98
99    fn isl_map_eliminate(map: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
100
101    fn isl_map_empty(space: uintptr_t) -> uintptr_t;
102
103    fn isl_map_eq_at_multi_pw_aff(map: uintptr_t, mpa: uintptr_t) -> uintptr_t;
104
105    fn isl_map_equate(map: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32) -> uintptr_t;
106
107    fn isl_map_factor_domain(map: uintptr_t) -> uintptr_t;
108
109    fn isl_map_factor_range(map: uintptr_t) -> uintptr_t;
110
111    fn isl_map_find_dim_by_id(map: uintptr_t, type_: i32, id: uintptr_t) -> i32;
112
113    fn isl_map_find_dim_by_name(map: uintptr_t, type_: i32, name: *const c_char) -> i32;
114
115    fn isl_map_fix_input_si(map: uintptr_t, input: u32, value: i32) -> uintptr_t;
116
117    fn isl_map_fix_si(map: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
118
119    fn isl_map_fix_val(map: uintptr_t, type_: i32, pos: u32, v: uintptr_t) -> uintptr_t;
120
121    fn isl_map_fixed_power_val(map: uintptr_t, exp: uintptr_t) -> uintptr_t;
122
123    fn isl_map_flat_domain_product(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
124
125    fn isl_map_flat_product(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
126
127    fn isl_map_flat_range_product(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
128
129    fn isl_map_flatten(map: uintptr_t) -> uintptr_t;
130
131    fn isl_map_flatten_domain(map: uintptr_t) -> uintptr_t;
132
133    fn isl_map_flatten_range(map: uintptr_t) -> uintptr_t;
134
135    fn isl_map_floordiv_val(map: uintptr_t, d: uintptr_t) -> uintptr_t;
136
137    fn isl_map_free(map: uintptr_t) -> uintptr_t;
138
139    fn isl_map_from_aff(aff: uintptr_t) -> uintptr_t;
140
141    fn isl_map_from_basic_map(bmap: uintptr_t) -> uintptr_t;
142
143    fn isl_map_from_domain(set: uintptr_t) -> uintptr_t;
144
145    fn isl_map_from_domain_and_range(domain: uintptr_t, range: uintptr_t) -> uintptr_t;
146
147    fn isl_map_from_multi_aff(maff: uintptr_t) -> uintptr_t;
148
149    fn isl_map_from_multi_pw_aff(mpa: uintptr_t) -> uintptr_t;
150
151    fn isl_map_from_pw_aff(pwaff: uintptr_t) -> uintptr_t;
152
153    fn isl_map_from_pw_multi_aff(pma: uintptr_t) -> uintptr_t;
154
155    fn isl_map_from_range(set: uintptr_t) -> uintptr_t;
156
157    fn isl_map_from_union_map(umap: uintptr_t) -> uintptr_t;
158
159    fn isl_map_get_basic_map_list(map: uintptr_t) -> uintptr_t;
160
161    fn isl_map_get_ctx(map: uintptr_t) -> uintptr_t;
162
163    fn isl_map_get_dim_id(map: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
164
165    fn isl_map_get_dim_name(map: uintptr_t, type_: i32, pos: u32) -> *const c_char;
166
167    fn isl_map_get_domain_tuple_id(map: uintptr_t) -> uintptr_t;
168
169    fn isl_map_get_hash(map: uintptr_t) -> u32;
170
171    fn isl_map_get_range_lattice_tile(map: uintptr_t) -> uintptr_t;
172
173    fn isl_map_get_range_simple_fixed_box_hull(map: uintptr_t) -> uintptr_t;
174
175    fn isl_map_get_range_stride_info(map: uintptr_t, pos: i32) -> uintptr_t;
176
177    fn isl_map_get_range_tuple_id(map: uintptr_t) -> uintptr_t;
178
179    fn isl_map_get_space(map: uintptr_t) -> uintptr_t;
180
181    fn isl_map_get_tuple_id(map: uintptr_t, type_: i32) -> uintptr_t;
182
183    fn isl_map_get_tuple_name(map: uintptr_t, type_: i32) -> *const c_char;
184
185    fn isl_map_gist(map: uintptr_t, context: uintptr_t) -> uintptr_t;
186
187    fn isl_map_gist_basic_map(map: uintptr_t, context: uintptr_t) -> uintptr_t;
188
189    fn isl_map_gist_domain(map: uintptr_t, context: uintptr_t) -> uintptr_t;
190
191    fn isl_map_gist_params(map: uintptr_t, context: uintptr_t) -> uintptr_t;
192
193    fn isl_map_gist_range(map: uintptr_t, context: uintptr_t) -> uintptr_t;
194
195    fn isl_map_has_dim_id(map: uintptr_t, type_: i32, pos: u32) -> i32;
196
197    fn isl_map_has_dim_name(map: uintptr_t, type_: i32, pos: u32) -> i32;
198
199    fn isl_map_has_domain_tuple_id(map: uintptr_t) -> i32;
200
201    fn isl_map_has_equal_space(map1: uintptr_t, map2: uintptr_t) -> i32;
202
203    fn isl_map_has_range_tuple_id(map: uintptr_t) -> i32;
204
205    fn isl_map_has_tuple_id(map: uintptr_t, type_: i32) -> i32;
206
207    fn isl_map_has_tuple_name(map: uintptr_t, type_: i32) -> i32;
208
209    fn isl_map_identity(space: uintptr_t) -> uintptr_t;
210
211    fn isl_map_insert_dims(map: uintptr_t, type_: i32, pos: u32, n: u32) -> uintptr_t;
212
213    fn isl_map_intersect(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
214
215    fn isl_map_intersect_domain(map: uintptr_t, set: uintptr_t) -> uintptr_t;
216
217    fn isl_map_intersect_domain_factor_domain(map: uintptr_t, factor: uintptr_t) -> uintptr_t;
218
219    fn isl_map_intersect_domain_factor_range(map: uintptr_t, factor: uintptr_t) -> uintptr_t;
220
221    fn isl_map_intersect_domain_wrapped_domain(map: uintptr_t, domain: uintptr_t) -> uintptr_t;
222
223    fn isl_map_intersect_params(map: uintptr_t, params: uintptr_t) -> uintptr_t;
224
225    fn isl_map_intersect_range(map: uintptr_t, set: uintptr_t) -> uintptr_t;
226
227    fn isl_map_intersect_range_factor_domain(map: uintptr_t, factor: uintptr_t) -> uintptr_t;
228
229    fn isl_map_intersect_range_factor_range(map: uintptr_t, factor: uintptr_t) -> uintptr_t;
230
231    fn isl_map_intersect_range_wrapped_domain(map: uintptr_t, domain: uintptr_t) -> uintptr_t;
232
233    fn isl_map_involves_dims(map: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
234
235    fn isl_map_is_bijective(map: uintptr_t) -> i32;
236
237    fn isl_map_is_disjoint(map1: uintptr_t, map2: uintptr_t) -> i32;
238
239    fn isl_map_is_empty(map: uintptr_t) -> i32;
240
241    fn isl_map_is_equal(map1: uintptr_t, map2: uintptr_t) -> i32;
242
243    fn isl_map_is_identity(map: uintptr_t) -> i32;
244
245    fn isl_map_is_injective(map: uintptr_t) -> i32;
246
247    fn isl_map_is_product(map: uintptr_t) -> i32;
248
249    fn isl_map_is_single_valued(map: uintptr_t) -> i32;
250
251    fn isl_map_is_strict_subset(map1: uintptr_t, map2: uintptr_t) -> i32;
252
253    fn isl_map_is_subset(map1: uintptr_t, map2: uintptr_t) -> i32;
254
255    fn isl_map_is_translation(map: uintptr_t) -> i32;
256
257    fn isl_map_lex_ge(set_space: uintptr_t) -> uintptr_t;
258
259    fn isl_map_lex_ge_at_multi_pw_aff(map: uintptr_t, mpa: uintptr_t) -> uintptr_t;
260
261    fn isl_map_lex_ge_first(space: uintptr_t, n: u32) -> uintptr_t;
262
263    fn isl_map_lex_ge_map(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
264
265    fn isl_map_lex_gt(set_space: uintptr_t) -> uintptr_t;
266
267    fn isl_map_lex_gt_at_multi_pw_aff(map: uintptr_t, mpa: uintptr_t) -> uintptr_t;
268
269    fn isl_map_lex_gt_first(space: uintptr_t, n: u32) -> uintptr_t;
270
271    fn isl_map_lex_gt_map(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
272
273    fn isl_map_lex_le(set_space: uintptr_t) -> uintptr_t;
274
275    fn isl_map_lex_le_at_multi_pw_aff(map: uintptr_t, mpa: uintptr_t) -> uintptr_t;
276
277    fn isl_map_lex_le_first(space: uintptr_t, n: u32) -> uintptr_t;
278
279    fn isl_map_lex_le_map(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
280
281    fn isl_map_lex_lt(set_space: uintptr_t) -> uintptr_t;
282
283    fn isl_map_lex_lt_at_multi_pw_aff(map: uintptr_t, mpa: uintptr_t) -> uintptr_t;
284
285    fn isl_map_lex_lt_first(space: uintptr_t, n: u32) -> uintptr_t;
286
287    fn isl_map_lex_lt_map(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
288
289    fn isl_map_lexmax(map: uintptr_t) -> uintptr_t;
290
291    fn isl_map_lexmax_pw_multi_aff(map: uintptr_t) -> uintptr_t;
292
293    fn isl_map_lexmin(map: uintptr_t) -> uintptr_t;
294
295    fn isl_map_lexmin_pw_multi_aff(map: uintptr_t) -> uintptr_t;
296
297    fn isl_map_lower_bound_multi_pw_aff(map: uintptr_t, lower: uintptr_t) -> uintptr_t;
298
299    fn isl_map_lower_bound_si(map: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
300
301    fn isl_map_lower_bound_val(map: uintptr_t, type_: i32, pos: u32, value: uintptr_t)
302                               -> uintptr_t;
303
304    fn isl_map_make_disjoint(map: uintptr_t) -> uintptr_t;
305
306    fn isl_map_max_multi_pw_aff(map: uintptr_t) -> uintptr_t;
307
308    fn isl_map_min_multi_pw_aff(map: uintptr_t) -> uintptr_t;
309
310    fn isl_map_move_dims(map: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32, src_pos: u32,
311                         n: u32)
312                         -> uintptr_t;
313
314    fn isl_map_n_basic_map(map: uintptr_t) -> i32;
315
316    fn isl_map_nat_universe(space: uintptr_t) -> uintptr_t;
317
318    fn isl_map_neg(map: uintptr_t) -> uintptr_t;
319
320    fn isl_map_oppose(map: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32) -> uintptr_t;
321
322    fn isl_map_order_ge(map: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32) -> uintptr_t;
323
324    fn isl_map_order_gt(map: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32) -> uintptr_t;
325
326    fn isl_map_order_le(map: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32) -> uintptr_t;
327
328    fn isl_map_order_lt(map: uintptr_t, type1: i32, pos1: i32, type2: i32, pos2: i32) -> uintptr_t;
329
330    fn isl_map_params(map: uintptr_t) -> uintptr_t;
331
332    fn isl_map_plain_get_val_if_fixed(map: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
333
334    fn isl_map_plain_is_empty(map: uintptr_t) -> i32;
335
336    fn isl_map_plain_is_equal(map1: uintptr_t, map2: uintptr_t) -> i32;
337
338    fn isl_map_plain_is_injective(map: uintptr_t) -> i32;
339
340    fn isl_map_plain_is_single_valued(map: uintptr_t) -> i32;
341
342    fn isl_map_plain_is_universe(map: uintptr_t) -> i32;
343
344    fn isl_map_plain_unshifted_simple_hull(map: uintptr_t) -> uintptr_t;
345
346    fn isl_map_polyhedral_hull(map: uintptr_t) -> uintptr_t;
347
348    fn isl_map_preimage_domain_multi_aff(map: uintptr_t, ma: uintptr_t) -> uintptr_t;
349
350    fn isl_map_preimage_domain_multi_pw_aff(map: uintptr_t, mpa: uintptr_t) -> uintptr_t;
351
352    fn isl_map_preimage_domain_pw_multi_aff(map: uintptr_t, pma: uintptr_t) -> uintptr_t;
353
354    fn isl_map_preimage_range_multi_aff(map: uintptr_t, ma: uintptr_t) -> uintptr_t;
355
356    fn isl_map_preimage_range_pw_multi_aff(map: uintptr_t, pma: uintptr_t) -> uintptr_t;
357
358    fn isl_map_product(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
359
360    fn isl_map_project_out(map: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
361
362    fn isl_map_project_out_all_params(map: uintptr_t) -> uintptr_t;
363
364    fn isl_map_project_out_param_id(map: uintptr_t, id: uintptr_t) -> uintptr_t;
365
366    fn isl_map_project_out_param_id_list(map: uintptr_t, list: uintptr_t) -> uintptr_t;
367
368    fn isl_map_range(map: uintptr_t) -> uintptr_t;
369
370    fn isl_map_range_curry(map: uintptr_t) -> uintptr_t;
371
372    fn isl_map_range_factor_domain(map: uintptr_t) -> uintptr_t;
373
374    fn isl_map_range_factor_range(map: uintptr_t) -> uintptr_t;
375
376    fn isl_map_range_is_wrapping(map: uintptr_t) -> i32;
377
378    fn isl_map_range_map(map: uintptr_t) -> uintptr_t;
379
380    fn isl_map_range_product(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
381
382    fn isl_map_range_reverse(map: uintptr_t) -> uintptr_t;
383
384    fn isl_map_range_tuple_dim(map: uintptr_t) -> i32;
385
386    fn isl_map_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
387
388    fn isl_map_remove_dims(map: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
389
390    fn isl_map_remove_divs(map: uintptr_t) -> uintptr_t;
391
392    fn isl_map_remove_divs_involving_dims(map: uintptr_t, type_: i32, first: u32, n: u32)
393                                          -> uintptr_t;
394
395    fn isl_map_remove_inputs(map: uintptr_t, first: u32, n: u32) -> uintptr_t;
396
397    fn isl_map_remove_redundancies(map: uintptr_t) -> uintptr_t;
398
399    fn isl_map_remove_unknown_divs(map: uintptr_t) -> uintptr_t;
400
401    fn isl_map_reset_tuple_id(map: uintptr_t, type_: i32) -> uintptr_t;
402
403    fn isl_map_reset_user(map: uintptr_t) -> uintptr_t;
404
405    fn isl_map_reverse(map: uintptr_t) -> uintptr_t;
406
407    fn isl_map_sample(map: uintptr_t) -> uintptr_t;
408
409    fn isl_map_set_dim_id(map: uintptr_t, type_: i32, pos: u32, id: uintptr_t) -> uintptr_t;
410
411    fn isl_map_set_dim_name(map: uintptr_t, type_: i32, pos: u32, s: *const c_char) -> uintptr_t;
412
413    fn isl_map_set_domain_tuple_id(map: uintptr_t, id: uintptr_t) -> uintptr_t;
414
415    fn isl_map_set_range_tuple_id(map: uintptr_t, id: uintptr_t) -> uintptr_t;
416
417    fn isl_map_set_tuple_id(map: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
418
419    fn isl_map_set_tuple_name(map: uintptr_t, type_: i32, s: *const c_char) -> uintptr_t;
420
421    fn isl_map_simple_hull(map: uintptr_t) -> uintptr_t;
422
423    fn isl_map_subtract(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
424
425    fn isl_map_subtract_domain(map: uintptr_t, dom: uintptr_t) -> uintptr_t;
426
427    fn isl_map_subtract_range(map: uintptr_t, dom: uintptr_t) -> uintptr_t;
428
429    fn isl_map_sum(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
430
431    fn isl_map_to_list(el: uintptr_t) -> uintptr_t;
432
433    fn isl_map_to_str(map: uintptr_t) -> *const c_char;
434
435    fn isl_map_to_union_map(map: uintptr_t) -> uintptr_t;
436
437    fn isl_map_uncurry(map: uintptr_t) -> uintptr_t;
438
439    fn isl_map_union(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
440
441    fn isl_map_union_disjoint(map1: uintptr_t, map2: uintptr_t) -> uintptr_t;
442
443    fn isl_map_universe(space: uintptr_t) -> uintptr_t;
444
445    fn isl_map_unshifted_simple_hull(map: uintptr_t) -> uintptr_t;
446
447    fn isl_map_unshifted_simple_hull_from_map_list(map: uintptr_t, list: uintptr_t) -> uintptr_t;
448
449    fn isl_map_upper_bound_multi_pw_aff(map: uintptr_t, upper: uintptr_t) -> uintptr_t;
450
451    fn isl_map_upper_bound_si(map: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
452
453    fn isl_map_upper_bound_val(map: uintptr_t, type_: i32, pos: u32, value: uintptr_t)
454                               -> uintptr_t;
455
456    fn isl_map_wrap(map: uintptr_t) -> uintptr_t;
457
458    fn isl_map_zip(map: uintptr_t) -> uintptr_t;
459
460}
461
462impl Map {
463    /// Wraps `isl_map_add_constraint`.
464    pub fn add_constraint(self, constraint: Constraint) -> Result<Map, LibISLError> {
465        let map = self;
466        let isl_rs_ctx = map.get_ctx();
467        let mut map = map;
468        map.do_not_free_on_drop();
469        let map = map.ptr;
470        let mut constraint = constraint;
471        constraint.do_not_free_on_drop();
472        let constraint = constraint.ptr;
473        let isl_rs_result = unsafe { isl_map_add_constraint(map, constraint) };
474        let isl_rs_result = Map { ptr: isl_rs_result,
475                                  should_free_on_drop: true };
476        let err = isl_rs_ctx.last_error();
477        if err != Error::None_ {
478            let err_msg = isl_rs_ctx.last_error_msg();
479            isl_rs_ctx.reset_error();
480            return Err(LibISLError::new(err, err_msg));
481        }
482        Ok(isl_rs_result)
483    }
484
485    /// Wraps `isl_map_add_dims`.
486    pub fn add_dims(self, type_: DimType, n: u32) -> Result<Map, LibISLError> {
487        let map = self;
488        let isl_rs_ctx = map.get_ctx();
489        let mut map = map;
490        map.do_not_free_on_drop();
491        let map = map.ptr;
492        let type_ = type_.to_i32();
493        let isl_rs_result = unsafe { isl_map_add_dims(map, type_, n) };
494        let isl_rs_result = Map { ptr: isl_rs_result,
495                                  should_free_on_drop: true };
496        let err = isl_rs_ctx.last_error();
497        if err != Error::None_ {
498            let err_msg = isl_rs_ctx.last_error_msg();
499            isl_rs_ctx.reset_error();
500            return Err(LibISLError::new(err, err_msg));
501        }
502        Ok(isl_rs_result)
503    }
504
505    /// Wraps `isl_map_affine_hull`.
506    pub fn affine_hull(self) -> Result<BasicMap, LibISLError> {
507        let map = self;
508        let isl_rs_ctx = map.get_ctx();
509        let mut map = map;
510        map.do_not_free_on_drop();
511        let map = map.ptr;
512        let isl_rs_result = unsafe { isl_map_affine_hull(map) };
513        let isl_rs_result = BasicMap { ptr: isl_rs_result,
514                                       should_free_on_drop: true };
515        let err = isl_rs_ctx.last_error();
516        if err != Error::None_ {
517            let err_msg = isl_rs_ctx.last_error_msg();
518            isl_rs_ctx.reset_error();
519            return Err(LibISLError::new(err, err_msg));
520        }
521        Ok(isl_rs_result)
522    }
523
524    /// Wraps `isl_map_align_divs`.
525    pub fn align_divs(self) -> Result<Map, LibISLError> {
526        let map = self;
527        let isl_rs_ctx = map.get_ctx();
528        let mut map = map;
529        map.do_not_free_on_drop();
530        let map = map.ptr;
531        let isl_rs_result = unsafe { isl_map_align_divs(map) };
532        let isl_rs_result = Map { ptr: isl_rs_result,
533                                  should_free_on_drop: true };
534        let err = isl_rs_ctx.last_error();
535        if err != Error::None_ {
536            let err_msg = isl_rs_ctx.last_error_msg();
537            isl_rs_ctx.reset_error();
538            return Err(LibISLError::new(err, err_msg));
539        }
540        Ok(isl_rs_result)
541    }
542
543    /// Wraps `isl_map_align_params`.
544    pub fn align_params(self, model: Space) -> Result<Map, LibISLError> {
545        let map = self;
546        let isl_rs_ctx = map.get_ctx();
547        let mut map = map;
548        map.do_not_free_on_drop();
549        let map = map.ptr;
550        let mut model = model;
551        model.do_not_free_on_drop();
552        let model = model.ptr;
553        let isl_rs_result = unsafe { isl_map_align_params(map, model) };
554        let isl_rs_result = Map { ptr: isl_rs_result,
555                                  should_free_on_drop: true };
556        let err = isl_rs_ctx.last_error();
557        if err != Error::None_ {
558            let err_msg = isl_rs_ctx.last_error_msg();
559            isl_rs_ctx.reset_error();
560            return Err(LibISLError::new(err, err_msg));
561        }
562        Ok(isl_rs_result)
563    }
564
565    /// Wraps `isl_map_apply_domain`.
566    pub fn apply_domain(self, map2: Map) -> Result<Map, LibISLError> {
567        let map1 = self;
568        let isl_rs_ctx = map1.get_ctx();
569        let mut map1 = map1;
570        map1.do_not_free_on_drop();
571        let map1 = map1.ptr;
572        let mut map2 = map2;
573        map2.do_not_free_on_drop();
574        let map2 = map2.ptr;
575        let isl_rs_result = unsafe { isl_map_apply_domain(map1, map2) };
576        let isl_rs_result = Map { ptr: isl_rs_result,
577                                  should_free_on_drop: true };
578        let err = isl_rs_ctx.last_error();
579        if err != Error::None_ {
580            let err_msg = isl_rs_ctx.last_error_msg();
581            isl_rs_ctx.reset_error();
582            return Err(LibISLError::new(err, err_msg));
583        }
584        Ok(isl_rs_result)
585    }
586
587    /// Wraps `isl_map_apply_range`.
588    pub fn apply_range(self, map2: Map) -> Result<Map, LibISLError> {
589        let map1 = self;
590        let isl_rs_ctx = map1.get_ctx();
591        let mut map1 = map1;
592        map1.do_not_free_on_drop();
593        let map1 = map1.ptr;
594        let mut map2 = map2;
595        map2.do_not_free_on_drop();
596        let map2 = map2.ptr;
597        let isl_rs_result = unsafe { isl_map_apply_range(map1, map2) };
598        let isl_rs_result = Map { ptr: isl_rs_result,
599                                  should_free_on_drop: true };
600        let err = isl_rs_ctx.last_error();
601        if err != Error::None_ {
602            let err_msg = isl_rs_ctx.last_error_msg();
603            isl_rs_ctx.reset_error();
604            return Err(LibISLError::new(err, err_msg));
605        }
606        Ok(isl_rs_result)
607    }
608
609    /// Wraps `isl_map_as_pw_multi_aff`.
610    pub fn as_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
611        let map = self;
612        let isl_rs_ctx = map.get_ctx();
613        let mut map = map;
614        map.do_not_free_on_drop();
615        let map = map.ptr;
616        let isl_rs_result = unsafe { isl_map_as_pw_multi_aff(map) };
617        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
618                                         should_free_on_drop: true };
619        let err = isl_rs_ctx.last_error();
620        if err != Error::None_ {
621            let err_msg = isl_rs_ctx.last_error_msg();
622            isl_rs_ctx.reset_error();
623            return Err(LibISLError::new(err, err_msg));
624        }
625        Ok(isl_rs_result)
626    }
627
628    /// Wraps `isl_map_bind_domain`.
629    pub fn bind_domain(self, tuple: MultiId) -> Result<Set, LibISLError> {
630        let map = self;
631        let isl_rs_ctx = map.get_ctx();
632        let mut map = map;
633        map.do_not_free_on_drop();
634        let map = map.ptr;
635        let mut tuple = tuple;
636        tuple.do_not_free_on_drop();
637        let tuple = tuple.ptr;
638        let isl_rs_result = unsafe { isl_map_bind_domain(map, tuple) };
639        let isl_rs_result = Set { ptr: isl_rs_result,
640                                  should_free_on_drop: true };
641        let err = isl_rs_ctx.last_error();
642        if err != Error::None_ {
643            let err_msg = isl_rs_ctx.last_error_msg();
644            isl_rs_ctx.reset_error();
645            return Err(LibISLError::new(err, err_msg));
646        }
647        Ok(isl_rs_result)
648    }
649
650    /// Wraps `isl_map_bind_range`.
651    pub fn bind_range(self, tuple: MultiId) -> Result<Set, LibISLError> {
652        let map = self;
653        let isl_rs_ctx = map.get_ctx();
654        let mut map = map;
655        map.do_not_free_on_drop();
656        let map = map.ptr;
657        let mut tuple = tuple;
658        tuple.do_not_free_on_drop();
659        let tuple = tuple.ptr;
660        let isl_rs_result = unsafe { isl_map_bind_range(map, tuple) };
661        let isl_rs_result = Set { ptr: isl_rs_result,
662                                  should_free_on_drop: true };
663        let err = isl_rs_ctx.last_error();
664        if err != Error::None_ {
665            let err_msg = isl_rs_ctx.last_error_msg();
666            isl_rs_ctx.reset_error();
667            return Err(LibISLError::new(err, err_msg));
668        }
669        Ok(isl_rs_result)
670    }
671
672    /// Wraps `isl_map_can_curry`.
673    pub fn can_curry(&self) -> Result<bool, LibISLError> {
674        let map = self;
675        let isl_rs_ctx = map.get_ctx();
676        let map = map.ptr;
677        let isl_rs_result = unsafe { isl_map_can_curry(map) };
678        let isl_rs_result = match isl_rs_result {
679            0 => false,
680            1 => true,
681            _ => {
682                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
683            }
684        };
685        let err = isl_rs_ctx.last_error();
686        if err != Error::None_ {
687            let err_msg = isl_rs_ctx.last_error_msg();
688            isl_rs_ctx.reset_error();
689            return Err(LibISLError::new(err, err_msg));
690        }
691        Ok(isl_rs_result)
692    }
693
694    /// Wraps `isl_map_can_range_curry`.
695    pub fn can_range_curry(&self) -> Result<bool, LibISLError> {
696        let map = self;
697        let isl_rs_ctx = map.get_ctx();
698        let map = map.ptr;
699        let isl_rs_result = unsafe { isl_map_can_range_curry(map) };
700        let isl_rs_result = match isl_rs_result {
701            0 => false,
702            1 => true,
703            _ => {
704                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
705            }
706        };
707        let err = isl_rs_ctx.last_error();
708        if err != Error::None_ {
709            let err_msg = isl_rs_ctx.last_error_msg();
710            isl_rs_ctx.reset_error();
711            return Err(LibISLError::new(err, err_msg));
712        }
713        Ok(isl_rs_result)
714    }
715
716    /// Wraps `isl_map_can_uncurry`.
717    pub fn can_uncurry(&self) -> Result<bool, LibISLError> {
718        let map = self;
719        let isl_rs_ctx = map.get_ctx();
720        let map = map.ptr;
721        let isl_rs_result = unsafe { isl_map_can_uncurry(map) };
722        let isl_rs_result = match isl_rs_result {
723            0 => false,
724            1 => true,
725            _ => {
726                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
727            }
728        };
729        let err = isl_rs_ctx.last_error();
730        if err != Error::None_ {
731            let err_msg = isl_rs_ctx.last_error_msg();
732            isl_rs_ctx.reset_error();
733            return Err(LibISLError::new(err, err_msg));
734        }
735        Ok(isl_rs_result)
736    }
737
738    /// Wraps `isl_map_can_zip`.
739    pub fn can_zip(&self) -> Result<bool, LibISLError> {
740        let map = self;
741        let isl_rs_ctx = map.get_ctx();
742        let map = map.ptr;
743        let isl_rs_result = unsafe { isl_map_can_zip(map) };
744        let isl_rs_result = match isl_rs_result {
745            0 => false,
746            1 => true,
747            _ => {
748                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
749            }
750        };
751        let err = isl_rs_ctx.last_error();
752        if err != Error::None_ {
753            let err_msg = isl_rs_ctx.last_error_msg();
754            isl_rs_ctx.reset_error();
755            return Err(LibISLError::new(err, err_msg));
756        }
757        Ok(isl_rs_result)
758    }
759
760    /// Wraps `isl_map_coalesce`.
761    pub fn coalesce(self) -> Result<Map, LibISLError> {
762        let map = self;
763        let isl_rs_ctx = map.get_ctx();
764        let mut map = map;
765        map.do_not_free_on_drop();
766        let map = map.ptr;
767        let isl_rs_result = unsafe { isl_map_coalesce(map) };
768        let isl_rs_result = Map { ptr: isl_rs_result,
769                                  should_free_on_drop: true };
770        let err = isl_rs_ctx.last_error();
771        if err != Error::None_ {
772            let err_msg = isl_rs_ctx.last_error_msg();
773            isl_rs_ctx.reset_error();
774            return Err(LibISLError::new(err, err_msg));
775        }
776        Ok(isl_rs_result)
777    }
778
779    /// Wraps `isl_map_complement`.
780    pub fn complement(self) -> Result<Map, LibISLError> {
781        let map = self;
782        let isl_rs_ctx = map.get_ctx();
783        let mut map = map;
784        map.do_not_free_on_drop();
785        let map = map.ptr;
786        let isl_rs_result = unsafe { isl_map_complement(map) };
787        let isl_rs_result = Map { ptr: isl_rs_result,
788                                  should_free_on_drop: true };
789        let err = isl_rs_ctx.last_error();
790        if err != Error::None_ {
791            let err_msg = isl_rs_ctx.last_error_msg();
792            isl_rs_ctx.reset_error();
793            return Err(LibISLError::new(err, err_msg));
794        }
795        Ok(isl_rs_result)
796    }
797
798    /// Wraps `isl_map_compute_divs`.
799    pub fn compute_divs(self) -> Result<Map, LibISLError> {
800        let map = self;
801        let isl_rs_ctx = map.get_ctx();
802        let mut map = map;
803        map.do_not_free_on_drop();
804        let map = map.ptr;
805        let isl_rs_result = unsafe { isl_map_compute_divs(map) };
806        let isl_rs_result = Map { ptr: isl_rs_result,
807                                  should_free_on_drop: true };
808        let err = isl_rs_ctx.last_error();
809        if err != Error::None_ {
810            let err_msg = isl_rs_ctx.last_error_msg();
811            isl_rs_ctx.reset_error();
812            return Err(LibISLError::new(err, err_msg));
813        }
814        Ok(isl_rs_result)
815    }
816
817    /// Wraps `isl_map_convex_hull`.
818    pub fn convex_hull(self) -> Result<BasicMap, LibISLError> {
819        let map = self;
820        let isl_rs_ctx = map.get_ctx();
821        let mut map = map;
822        map.do_not_free_on_drop();
823        let map = map.ptr;
824        let isl_rs_result = unsafe { isl_map_convex_hull(map) };
825        let isl_rs_result = BasicMap { ptr: isl_rs_result,
826                                       should_free_on_drop: true };
827        let err = isl_rs_ctx.last_error();
828        if err != Error::None_ {
829            let err_msg = isl_rs_ctx.last_error_msg();
830            isl_rs_ctx.reset_error();
831            return Err(LibISLError::new(err, err_msg));
832        }
833        Ok(isl_rs_result)
834    }
835
836    /// Wraps `isl_map_copy`.
837    pub fn copy(&self) -> Result<Map, LibISLError> {
838        let map = self;
839        let isl_rs_ctx = map.get_ctx();
840        let map = map.ptr;
841        let isl_rs_result = unsafe { isl_map_copy(map) };
842        let isl_rs_result = Map { ptr: isl_rs_result,
843                                  should_free_on_drop: true };
844        let err = isl_rs_ctx.last_error();
845        if err != Error::None_ {
846            let err_msg = isl_rs_ctx.last_error_msg();
847            isl_rs_ctx.reset_error();
848            return Err(LibISLError::new(err, err_msg));
849        }
850        Ok(isl_rs_result)
851    }
852
853    /// Wraps `isl_map_curry`.
854    pub fn curry(self) -> Result<Map, LibISLError> {
855        let map = self;
856        let isl_rs_ctx = map.get_ctx();
857        let mut map = map;
858        map.do_not_free_on_drop();
859        let map = map.ptr;
860        let isl_rs_result = unsafe { isl_map_curry(map) };
861        let isl_rs_result = Map { ptr: isl_rs_result,
862                                  should_free_on_drop: true };
863        let err = isl_rs_ctx.last_error();
864        if err != Error::None_ {
865            let err_msg = isl_rs_ctx.last_error_msg();
866            isl_rs_ctx.reset_error();
867            return Err(LibISLError::new(err, err_msg));
868        }
869        Ok(isl_rs_result)
870    }
871
872    /// Wraps `isl_map_deltas`.
873    pub fn deltas(self) -> Result<Set, LibISLError> {
874        let map = self;
875        let isl_rs_ctx = map.get_ctx();
876        let mut map = map;
877        map.do_not_free_on_drop();
878        let map = map.ptr;
879        let isl_rs_result = unsafe { isl_map_deltas(map) };
880        let isl_rs_result = Set { ptr: isl_rs_result,
881                                  should_free_on_drop: true };
882        let err = isl_rs_ctx.last_error();
883        if err != Error::None_ {
884            let err_msg = isl_rs_ctx.last_error_msg();
885            isl_rs_ctx.reset_error();
886            return Err(LibISLError::new(err, err_msg));
887        }
888        Ok(isl_rs_result)
889    }
890
891    /// Wraps `isl_map_deltas_map`.
892    pub fn deltas_map(self) -> Result<Map, LibISLError> {
893        let map = self;
894        let isl_rs_ctx = map.get_ctx();
895        let mut map = map;
896        map.do_not_free_on_drop();
897        let map = map.ptr;
898        let isl_rs_result = unsafe { isl_map_deltas_map(map) };
899        let isl_rs_result = Map { ptr: isl_rs_result,
900                                  should_free_on_drop: true };
901        let err = isl_rs_ctx.last_error();
902        if err != Error::None_ {
903            let err_msg = isl_rs_ctx.last_error_msg();
904            isl_rs_ctx.reset_error();
905            return Err(LibISLError::new(err, err_msg));
906        }
907        Ok(isl_rs_result)
908    }
909
910    /// Wraps `isl_map_detect_equalities`.
911    pub fn detect_equalities(self) -> Result<Map, LibISLError> {
912        let map = self;
913        let isl_rs_ctx = map.get_ctx();
914        let mut map = map;
915        map.do_not_free_on_drop();
916        let map = map.ptr;
917        let isl_rs_result = unsafe { isl_map_detect_equalities(map) };
918        let isl_rs_result = Map { ptr: isl_rs_result,
919                                  should_free_on_drop: true };
920        let err = isl_rs_ctx.last_error();
921        if err != Error::None_ {
922            let err_msg = isl_rs_ctx.last_error_msg();
923            isl_rs_ctx.reset_error();
924            return Err(LibISLError::new(err, err_msg));
925        }
926        Ok(isl_rs_result)
927    }
928
929    /// Wraps `isl_map_dim`.
930    pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
931        let map = self;
932        let isl_rs_ctx = map.get_ctx();
933        let map = map.ptr;
934        let type_ = type_.to_i32();
935        let isl_rs_result = unsafe { isl_map_dim(map, type_) };
936        let err = isl_rs_ctx.last_error();
937        if err != Error::None_ {
938            let err_msg = isl_rs_ctx.last_error_msg();
939            isl_rs_ctx.reset_error();
940            return Err(LibISLError::new(err, err_msg));
941        }
942        Ok(isl_rs_result)
943    }
944
945    /// Wraps `isl_map_dim_max`.
946    pub fn dim_max(self, pos: i32) -> Result<PwAff, LibISLError> {
947        let map = self;
948        let isl_rs_ctx = map.get_ctx();
949        let mut map = map;
950        map.do_not_free_on_drop();
951        let map = map.ptr;
952        let isl_rs_result = unsafe { isl_map_dim_max(map, pos) };
953        let isl_rs_result = PwAff { ptr: isl_rs_result,
954                                    should_free_on_drop: true };
955        let err = isl_rs_ctx.last_error();
956        if err != Error::None_ {
957            let err_msg = isl_rs_ctx.last_error_msg();
958            isl_rs_ctx.reset_error();
959            return Err(LibISLError::new(err, err_msg));
960        }
961        Ok(isl_rs_result)
962    }
963
964    /// Wraps `isl_map_dim_min`.
965    pub fn dim_min(self, pos: i32) -> Result<PwAff, LibISLError> {
966        let map = self;
967        let isl_rs_ctx = map.get_ctx();
968        let mut map = map;
969        map.do_not_free_on_drop();
970        let map = map.ptr;
971        let isl_rs_result = unsafe { isl_map_dim_min(map, pos) };
972        let isl_rs_result = PwAff { ptr: isl_rs_result,
973                                    should_free_on_drop: true };
974        let err = isl_rs_ctx.last_error();
975        if err != Error::None_ {
976            let err_msg = isl_rs_ctx.last_error_msg();
977            isl_rs_ctx.reset_error();
978            return Err(LibISLError::new(err, err_msg));
979        }
980        Ok(isl_rs_result)
981    }
982
983    /// Wraps `isl_map_domain`.
984    pub fn domain(self) -> Result<Set, LibISLError> {
985        let bmap = self;
986        let isl_rs_ctx = bmap.get_ctx();
987        let mut bmap = bmap;
988        bmap.do_not_free_on_drop();
989        let bmap = bmap.ptr;
990        let isl_rs_result = unsafe { isl_map_domain(bmap) };
991        let isl_rs_result = Set { ptr: isl_rs_result,
992                                  should_free_on_drop: true };
993        let err = isl_rs_ctx.last_error();
994        if err != Error::None_ {
995            let err_msg = isl_rs_ctx.last_error_msg();
996            isl_rs_ctx.reset_error();
997            return Err(LibISLError::new(err, err_msg));
998        }
999        Ok(isl_rs_result)
1000    }
1001
1002    /// Wraps `isl_map_domain_factor_domain`.
1003    pub fn domain_factor_domain(self) -> Result<Map, LibISLError> {
1004        let map = self;
1005        let isl_rs_ctx = map.get_ctx();
1006        let mut map = map;
1007        map.do_not_free_on_drop();
1008        let map = map.ptr;
1009        let isl_rs_result = unsafe { isl_map_domain_factor_domain(map) };
1010        let isl_rs_result = Map { ptr: isl_rs_result,
1011                                  should_free_on_drop: true };
1012        let err = isl_rs_ctx.last_error();
1013        if err != Error::None_ {
1014            let err_msg = isl_rs_ctx.last_error_msg();
1015            isl_rs_ctx.reset_error();
1016            return Err(LibISLError::new(err, err_msg));
1017        }
1018        Ok(isl_rs_result)
1019    }
1020
1021    /// Wraps `isl_map_domain_factor_range`.
1022    pub fn domain_factor_range(self) -> Result<Map, LibISLError> {
1023        let map = self;
1024        let isl_rs_ctx = map.get_ctx();
1025        let mut map = map;
1026        map.do_not_free_on_drop();
1027        let map = map.ptr;
1028        let isl_rs_result = unsafe { isl_map_domain_factor_range(map) };
1029        let isl_rs_result = Map { ptr: isl_rs_result,
1030                                  should_free_on_drop: true };
1031        let err = isl_rs_ctx.last_error();
1032        if err != Error::None_ {
1033            let err_msg = isl_rs_ctx.last_error_msg();
1034            isl_rs_ctx.reset_error();
1035            return Err(LibISLError::new(err, err_msg));
1036        }
1037        Ok(isl_rs_result)
1038    }
1039
1040    /// Wraps `isl_map_domain_is_wrapping`.
1041    pub fn domain_is_wrapping(&self) -> Result<bool, LibISLError> {
1042        let map = self;
1043        let isl_rs_ctx = map.get_ctx();
1044        let map = map.ptr;
1045        let isl_rs_result = unsafe { isl_map_domain_is_wrapping(map) };
1046        let isl_rs_result = match isl_rs_result {
1047            0 => false,
1048            1 => true,
1049            _ => {
1050                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1051            }
1052        };
1053        let err = isl_rs_ctx.last_error();
1054        if err != Error::None_ {
1055            let err_msg = isl_rs_ctx.last_error_msg();
1056            isl_rs_ctx.reset_error();
1057            return Err(LibISLError::new(err, err_msg));
1058        }
1059        Ok(isl_rs_result)
1060    }
1061
1062    /// Wraps `isl_map_domain_map`.
1063    pub fn domain_map(self) -> Result<Map, LibISLError> {
1064        let map = self;
1065        let isl_rs_ctx = map.get_ctx();
1066        let mut map = map;
1067        map.do_not_free_on_drop();
1068        let map = map.ptr;
1069        let isl_rs_result = unsafe { isl_map_domain_map(map) };
1070        let isl_rs_result = Map { ptr: isl_rs_result,
1071                                  should_free_on_drop: true };
1072        let err = isl_rs_ctx.last_error();
1073        if err != Error::None_ {
1074            let err_msg = isl_rs_ctx.last_error_msg();
1075            isl_rs_ctx.reset_error();
1076            return Err(LibISLError::new(err, err_msg));
1077        }
1078        Ok(isl_rs_result)
1079    }
1080
1081    /// Wraps `isl_map_domain_product`.
1082    pub fn domain_product(self, map2: Map) -> Result<Map, LibISLError> {
1083        let map1 = self;
1084        let isl_rs_ctx = map1.get_ctx();
1085        let mut map1 = map1;
1086        map1.do_not_free_on_drop();
1087        let map1 = map1.ptr;
1088        let mut map2 = map2;
1089        map2.do_not_free_on_drop();
1090        let map2 = map2.ptr;
1091        let isl_rs_result = unsafe { isl_map_domain_product(map1, map2) };
1092        let isl_rs_result = Map { ptr: isl_rs_result,
1093                                  should_free_on_drop: true };
1094        let err = isl_rs_ctx.last_error();
1095        if err != Error::None_ {
1096            let err_msg = isl_rs_ctx.last_error_msg();
1097            isl_rs_ctx.reset_error();
1098            return Err(LibISLError::new(err, err_msg));
1099        }
1100        Ok(isl_rs_result)
1101    }
1102
1103    /// Wraps `isl_map_domain_reverse`.
1104    pub fn domain_reverse(self) -> Result<Map, LibISLError> {
1105        let map = self;
1106        let isl_rs_ctx = map.get_ctx();
1107        let mut map = map;
1108        map.do_not_free_on_drop();
1109        let map = map.ptr;
1110        let isl_rs_result = unsafe { isl_map_domain_reverse(map) };
1111        let isl_rs_result = Map { ptr: isl_rs_result,
1112                                  should_free_on_drop: true };
1113        let err = isl_rs_ctx.last_error();
1114        if err != Error::None_ {
1115            let err_msg = isl_rs_ctx.last_error_msg();
1116            isl_rs_ctx.reset_error();
1117            return Err(LibISLError::new(err, err_msg));
1118        }
1119        Ok(isl_rs_result)
1120    }
1121
1122    /// Wraps `isl_map_domain_tuple_dim`.
1123    pub fn domain_tuple_dim(&self) -> Result<i32, LibISLError> {
1124        let map = self;
1125        let isl_rs_ctx = map.get_ctx();
1126        let map = map.ptr;
1127        let isl_rs_result = unsafe { isl_map_domain_tuple_dim(map) };
1128        let err = isl_rs_ctx.last_error();
1129        if err != Error::None_ {
1130            let err_msg = isl_rs_ctx.last_error_msg();
1131            isl_rs_ctx.reset_error();
1132            return Err(LibISLError::new(err, err_msg));
1133        }
1134        Ok(isl_rs_result)
1135    }
1136
1137    /// Wraps `isl_map_drop_constraints_involving_dims`.
1138    pub fn drop_constraints_involving_dims(self, type_: DimType, first: u32, n: u32)
1139                                           -> Result<Map, LibISLError> {
1140        let map = self;
1141        let isl_rs_ctx = map.get_ctx();
1142        let mut map = map;
1143        map.do_not_free_on_drop();
1144        let map = map.ptr;
1145        let type_ = type_.to_i32();
1146        let isl_rs_result =
1147            unsafe { isl_map_drop_constraints_involving_dims(map, type_, first, n) };
1148        let isl_rs_result = Map { ptr: isl_rs_result,
1149                                  should_free_on_drop: true };
1150        let err = isl_rs_ctx.last_error();
1151        if err != Error::None_ {
1152            let err_msg = isl_rs_ctx.last_error_msg();
1153            isl_rs_ctx.reset_error();
1154            return Err(LibISLError::new(err, err_msg));
1155        }
1156        Ok(isl_rs_result)
1157    }
1158
1159    /// Wraps `isl_map_drop_constraints_not_involving_dims`.
1160    pub fn drop_constraints_not_involving_dims(self, type_: DimType, first: u32, n: u32)
1161                                               -> Result<Map, LibISLError> {
1162        let map = self;
1163        let isl_rs_ctx = map.get_ctx();
1164        let mut map = map;
1165        map.do_not_free_on_drop();
1166        let map = map.ptr;
1167        let type_ = type_.to_i32();
1168        let isl_rs_result =
1169            unsafe { isl_map_drop_constraints_not_involving_dims(map, type_, first, n) };
1170        let isl_rs_result = Map { ptr: isl_rs_result,
1171                                  should_free_on_drop: true };
1172        let err = isl_rs_ctx.last_error();
1173        if err != Error::None_ {
1174            let err_msg = isl_rs_ctx.last_error_msg();
1175            isl_rs_ctx.reset_error();
1176            return Err(LibISLError::new(err, err_msg));
1177        }
1178        Ok(isl_rs_result)
1179    }
1180
1181    /// Wraps `isl_map_drop_unused_params`.
1182    pub fn drop_unused_params(self) -> Result<Map, LibISLError> {
1183        let map = self;
1184        let isl_rs_ctx = map.get_ctx();
1185        let mut map = map;
1186        map.do_not_free_on_drop();
1187        let map = map.ptr;
1188        let isl_rs_result = unsafe { isl_map_drop_unused_params(map) };
1189        let isl_rs_result = Map { ptr: isl_rs_result,
1190                                  should_free_on_drop: true };
1191        let err = isl_rs_ctx.last_error();
1192        if err != Error::None_ {
1193            let err_msg = isl_rs_ctx.last_error_msg();
1194            isl_rs_ctx.reset_error();
1195            return Err(LibISLError::new(err, err_msg));
1196        }
1197        Ok(isl_rs_result)
1198    }
1199
1200    /// Wraps `isl_map_dump`.
1201    pub fn dump(&self) -> Result<(), LibISLError> {
1202        let map = self;
1203        let isl_rs_ctx = map.get_ctx();
1204        let map = map.ptr;
1205        let isl_rs_result = unsafe { isl_map_dump(map) };
1206        let err = isl_rs_ctx.last_error();
1207        if err != Error::None_ {
1208            let err_msg = isl_rs_ctx.last_error_msg();
1209            isl_rs_ctx.reset_error();
1210            return Err(LibISLError::new(err, err_msg));
1211        }
1212        Ok(isl_rs_result)
1213    }
1214
1215    /// Wraps `isl_map_eliminate`.
1216    pub fn eliminate(self, type_: DimType, first: u32, n: u32) -> Result<Map, LibISLError> {
1217        let map = self;
1218        let isl_rs_ctx = map.get_ctx();
1219        let mut map = map;
1220        map.do_not_free_on_drop();
1221        let map = map.ptr;
1222        let type_ = type_.to_i32();
1223        let isl_rs_result = unsafe { isl_map_eliminate(map, type_, first, n) };
1224        let isl_rs_result = Map { ptr: isl_rs_result,
1225                                  should_free_on_drop: true };
1226        let err = isl_rs_ctx.last_error();
1227        if err != Error::None_ {
1228            let err_msg = isl_rs_ctx.last_error_msg();
1229            isl_rs_ctx.reset_error();
1230            return Err(LibISLError::new(err, err_msg));
1231        }
1232        Ok(isl_rs_result)
1233    }
1234
1235    /// Wraps `isl_map_empty`.
1236    pub fn empty(space: Space) -> Result<Map, LibISLError> {
1237        let isl_rs_ctx = space.get_ctx();
1238        let mut space = space;
1239        space.do_not_free_on_drop();
1240        let space = space.ptr;
1241        let isl_rs_result = unsafe { isl_map_empty(space) };
1242        let isl_rs_result = Map { ptr: isl_rs_result,
1243                                  should_free_on_drop: true };
1244        let err = isl_rs_ctx.last_error();
1245        if err != Error::None_ {
1246            let err_msg = isl_rs_ctx.last_error_msg();
1247            isl_rs_ctx.reset_error();
1248            return Err(LibISLError::new(err, err_msg));
1249        }
1250        Ok(isl_rs_result)
1251    }
1252
1253    /// Wraps `isl_map_eq_at_multi_pw_aff`.
1254    pub fn eq_at_multi_pw_aff(self, mpa: MultiPwAff) -> Result<Map, LibISLError> {
1255        let map = self;
1256        let isl_rs_ctx = map.get_ctx();
1257        let mut map = map;
1258        map.do_not_free_on_drop();
1259        let map = map.ptr;
1260        let mut mpa = mpa;
1261        mpa.do_not_free_on_drop();
1262        let mpa = mpa.ptr;
1263        let isl_rs_result = unsafe { isl_map_eq_at_multi_pw_aff(map, mpa) };
1264        let isl_rs_result = Map { ptr: isl_rs_result,
1265                                  should_free_on_drop: true };
1266        let err = isl_rs_ctx.last_error();
1267        if err != Error::None_ {
1268            let err_msg = isl_rs_ctx.last_error_msg();
1269            isl_rs_ctx.reset_error();
1270            return Err(LibISLError::new(err, err_msg));
1271        }
1272        Ok(isl_rs_result)
1273    }
1274
1275    /// Wraps `isl_map_equate`.
1276    pub fn equate(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
1277                  -> Result<Map, LibISLError> {
1278        let map = self;
1279        let isl_rs_ctx = map.get_ctx();
1280        let mut map = map;
1281        map.do_not_free_on_drop();
1282        let map = map.ptr;
1283        let type1 = type1.to_i32();
1284        let type2 = type2.to_i32();
1285        let isl_rs_result = unsafe { isl_map_equate(map, type1, pos1, type2, pos2) };
1286        let isl_rs_result = Map { ptr: isl_rs_result,
1287                                  should_free_on_drop: true };
1288        let err = isl_rs_ctx.last_error();
1289        if err != Error::None_ {
1290            let err_msg = isl_rs_ctx.last_error_msg();
1291            isl_rs_ctx.reset_error();
1292            return Err(LibISLError::new(err, err_msg));
1293        }
1294        Ok(isl_rs_result)
1295    }
1296
1297    /// Wraps `isl_map_factor_domain`.
1298    pub fn factor_domain(self) -> Result<Map, LibISLError> {
1299        let map = self;
1300        let isl_rs_ctx = map.get_ctx();
1301        let mut map = map;
1302        map.do_not_free_on_drop();
1303        let map = map.ptr;
1304        let isl_rs_result = unsafe { isl_map_factor_domain(map) };
1305        let isl_rs_result = Map { ptr: isl_rs_result,
1306                                  should_free_on_drop: true };
1307        let err = isl_rs_ctx.last_error();
1308        if err != Error::None_ {
1309            let err_msg = isl_rs_ctx.last_error_msg();
1310            isl_rs_ctx.reset_error();
1311            return Err(LibISLError::new(err, err_msg));
1312        }
1313        Ok(isl_rs_result)
1314    }
1315
1316    /// Wraps `isl_map_factor_range`.
1317    pub fn factor_range(self) -> Result<Map, LibISLError> {
1318        let map = self;
1319        let isl_rs_ctx = map.get_ctx();
1320        let mut map = map;
1321        map.do_not_free_on_drop();
1322        let map = map.ptr;
1323        let isl_rs_result = unsafe { isl_map_factor_range(map) };
1324        let isl_rs_result = Map { ptr: isl_rs_result,
1325                                  should_free_on_drop: true };
1326        let err = isl_rs_ctx.last_error();
1327        if err != Error::None_ {
1328            let err_msg = isl_rs_ctx.last_error_msg();
1329            isl_rs_ctx.reset_error();
1330            return Err(LibISLError::new(err, err_msg));
1331        }
1332        Ok(isl_rs_result)
1333    }
1334
1335    /// Wraps `isl_map_find_dim_by_id`.
1336    pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
1337        let map = self;
1338        let isl_rs_ctx = map.get_ctx();
1339        let map = map.ptr;
1340        let type_ = type_.to_i32();
1341        let id = id.ptr;
1342        let isl_rs_result = unsafe { isl_map_find_dim_by_id(map, type_, id) };
1343        let err = isl_rs_ctx.last_error();
1344        if err != Error::None_ {
1345            let err_msg = isl_rs_ctx.last_error_msg();
1346            isl_rs_ctx.reset_error();
1347            return Err(LibISLError::new(err, err_msg));
1348        }
1349        Ok(isl_rs_result)
1350    }
1351
1352    /// Wraps `isl_map_find_dim_by_name`.
1353    pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
1354        let map = self;
1355        let isl_rs_ctx = map.get_ctx();
1356        let map = map.ptr;
1357        let type_ = type_.to_i32();
1358        let name = CString::new(name).unwrap();
1359        let name = name.as_ptr();
1360        let isl_rs_result = unsafe { isl_map_find_dim_by_name(map, type_, name) };
1361        let err = isl_rs_ctx.last_error();
1362        if err != Error::None_ {
1363            let err_msg = isl_rs_ctx.last_error_msg();
1364            isl_rs_ctx.reset_error();
1365            return Err(LibISLError::new(err, err_msg));
1366        }
1367        Ok(isl_rs_result)
1368    }
1369
1370    /// Wraps `isl_map_fix_input_si`.
1371    pub fn fix_input_si(self, input: u32, value: i32) -> Result<Map, LibISLError> {
1372        let map = self;
1373        let isl_rs_ctx = map.get_ctx();
1374        let mut map = map;
1375        map.do_not_free_on_drop();
1376        let map = map.ptr;
1377        let isl_rs_result = unsafe { isl_map_fix_input_si(map, input, value) };
1378        let isl_rs_result = Map { ptr: isl_rs_result,
1379                                  should_free_on_drop: true };
1380        let err = isl_rs_ctx.last_error();
1381        if err != Error::None_ {
1382            let err_msg = isl_rs_ctx.last_error_msg();
1383            isl_rs_ctx.reset_error();
1384            return Err(LibISLError::new(err, err_msg));
1385        }
1386        Ok(isl_rs_result)
1387    }
1388
1389    /// Wraps `isl_map_fix_si`.
1390    pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<Map, LibISLError> {
1391        let map = self;
1392        let isl_rs_ctx = map.get_ctx();
1393        let mut map = map;
1394        map.do_not_free_on_drop();
1395        let map = map.ptr;
1396        let type_ = type_.to_i32();
1397        let isl_rs_result = unsafe { isl_map_fix_si(map, type_, pos, value) };
1398        let isl_rs_result = Map { ptr: isl_rs_result,
1399                                  should_free_on_drop: true };
1400        let err = isl_rs_ctx.last_error();
1401        if err != Error::None_ {
1402            let err_msg = isl_rs_ctx.last_error_msg();
1403            isl_rs_ctx.reset_error();
1404            return Err(LibISLError::new(err, err_msg));
1405        }
1406        Ok(isl_rs_result)
1407    }
1408
1409    /// Wraps `isl_map_fix_val`.
1410    pub fn fix_val(self, type_: DimType, pos: u32, v: Val) -> Result<Map, LibISLError> {
1411        let map = self;
1412        let isl_rs_ctx = map.get_ctx();
1413        let mut map = map;
1414        map.do_not_free_on_drop();
1415        let map = map.ptr;
1416        let type_ = type_.to_i32();
1417        let mut v = v;
1418        v.do_not_free_on_drop();
1419        let v = v.ptr;
1420        let isl_rs_result = unsafe { isl_map_fix_val(map, type_, pos, v) };
1421        let isl_rs_result = Map { ptr: isl_rs_result,
1422                                  should_free_on_drop: true };
1423        let err = isl_rs_ctx.last_error();
1424        if err != Error::None_ {
1425            let err_msg = isl_rs_ctx.last_error_msg();
1426            isl_rs_ctx.reset_error();
1427            return Err(LibISLError::new(err, err_msg));
1428        }
1429        Ok(isl_rs_result)
1430    }
1431
1432    /// Wraps `isl_map_fixed_power_val`.
1433    pub fn fixed_power_val(self, exp: Val) -> Result<Map, LibISLError> {
1434        let map = self;
1435        let isl_rs_ctx = map.get_ctx();
1436        let mut map = map;
1437        map.do_not_free_on_drop();
1438        let map = map.ptr;
1439        let mut exp = exp;
1440        exp.do_not_free_on_drop();
1441        let exp = exp.ptr;
1442        let isl_rs_result = unsafe { isl_map_fixed_power_val(map, exp) };
1443        let isl_rs_result = Map { ptr: isl_rs_result,
1444                                  should_free_on_drop: true };
1445        let err = isl_rs_ctx.last_error();
1446        if err != Error::None_ {
1447            let err_msg = isl_rs_ctx.last_error_msg();
1448            isl_rs_ctx.reset_error();
1449            return Err(LibISLError::new(err, err_msg));
1450        }
1451        Ok(isl_rs_result)
1452    }
1453
1454    /// Wraps `isl_map_flat_domain_product`.
1455    pub fn flat_domain_product(self, map2: Map) -> Result<Map, LibISLError> {
1456        let map1 = self;
1457        let isl_rs_ctx = map1.get_ctx();
1458        let mut map1 = map1;
1459        map1.do_not_free_on_drop();
1460        let map1 = map1.ptr;
1461        let mut map2 = map2;
1462        map2.do_not_free_on_drop();
1463        let map2 = map2.ptr;
1464        let isl_rs_result = unsafe { isl_map_flat_domain_product(map1, map2) };
1465        let isl_rs_result = Map { ptr: isl_rs_result,
1466                                  should_free_on_drop: true };
1467        let err = isl_rs_ctx.last_error();
1468        if err != Error::None_ {
1469            let err_msg = isl_rs_ctx.last_error_msg();
1470            isl_rs_ctx.reset_error();
1471            return Err(LibISLError::new(err, err_msg));
1472        }
1473        Ok(isl_rs_result)
1474    }
1475
1476    /// Wraps `isl_map_flat_product`.
1477    pub fn flat_product(self, map2: Map) -> Result<Map, LibISLError> {
1478        let map1 = self;
1479        let isl_rs_ctx = map1.get_ctx();
1480        let mut map1 = map1;
1481        map1.do_not_free_on_drop();
1482        let map1 = map1.ptr;
1483        let mut map2 = map2;
1484        map2.do_not_free_on_drop();
1485        let map2 = map2.ptr;
1486        let isl_rs_result = unsafe { isl_map_flat_product(map1, map2) };
1487        let isl_rs_result = Map { ptr: isl_rs_result,
1488                                  should_free_on_drop: true };
1489        let err = isl_rs_ctx.last_error();
1490        if err != Error::None_ {
1491            let err_msg = isl_rs_ctx.last_error_msg();
1492            isl_rs_ctx.reset_error();
1493            return Err(LibISLError::new(err, err_msg));
1494        }
1495        Ok(isl_rs_result)
1496    }
1497
1498    /// Wraps `isl_map_flat_range_product`.
1499    pub fn flat_range_product(self, map2: Map) -> Result<Map, LibISLError> {
1500        let map1 = self;
1501        let isl_rs_ctx = map1.get_ctx();
1502        let mut map1 = map1;
1503        map1.do_not_free_on_drop();
1504        let map1 = map1.ptr;
1505        let mut map2 = map2;
1506        map2.do_not_free_on_drop();
1507        let map2 = map2.ptr;
1508        let isl_rs_result = unsafe { isl_map_flat_range_product(map1, map2) };
1509        let isl_rs_result = Map { ptr: isl_rs_result,
1510                                  should_free_on_drop: true };
1511        let err = isl_rs_ctx.last_error();
1512        if err != Error::None_ {
1513            let err_msg = isl_rs_ctx.last_error_msg();
1514            isl_rs_ctx.reset_error();
1515            return Err(LibISLError::new(err, err_msg));
1516        }
1517        Ok(isl_rs_result)
1518    }
1519
1520    /// Wraps `isl_map_flatten`.
1521    pub fn flatten(self) -> Result<Map, LibISLError> {
1522        let map = self;
1523        let isl_rs_ctx = map.get_ctx();
1524        let mut map = map;
1525        map.do_not_free_on_drop();
1526        let map = map.ptr;
1527        let isl_rs_result = unsafe { isl_map_flatten(map) };
1528        let isl_rs_result = Map { ptr: isl_rs_result,
1529                                  should_free_on_drop: true };
1530        let err = isl_rs_ctx.last_error();
1531        if err != Error::None_ {
1532            let err_msg = isl_rs_ctx.last_error_msg();
1533            isl_rs_ctx.reset_error();
1534            return Err(LibISLError::new(err, err_msg));
1535        }
1536        Ok(isl_rs_result)
1537    }
1538
1539    /// Wraps `isl_map_flatten_domain`.
1540    pub fn flatten_domain(self) -> Result<Map, LibISLError> {
1541        let map = self;
1542        let isl_rs_ctx = map.get_ctx();
1543        let mut map = map;
1544        map.do_not_free_on_drop();
1545        let map = map.ptr;
1546        let isl_rs_result = unsafe { isl_map_flatten_domain(map) };
1547        let isl_rs_result = Map { ptr: isl_rs_result,
1548                                  should_free_on_drop: true };
1549        let err = isl_rs_ctx.last_error();
1550        if err != Error::None_ {
1551            let err_msg = isl_rs_ctx.last_error_msg();
1552            isl_rs_ctx.reset_error();
1553            return Err(LibISLError::new(err, err_msg));
1554        }
1555        Ok(isl_rs_result)
1556    }
1557
1558    /// Wraps `isl_map_flatten_range`.
1559    pub fn flatten_range(self) -> Result<Map, LibISLError> {
1560        let map = self;
1561        let isl_rs_ctx = map.get_ctx();
1562        let mut map = map;
1563        map.do_not_free_on_drop();
1564        let map = map.ptr;
1565        let isl_rs_result = unsafe { isl_map_flatten_range(map) };
1566        let isl_rs_result = Map { ptr: isl_rs_result,
1567                                  should_free_on_drop: true };
1568        let err = isl_rs_ctx.last_error();
1569        if err != Error::None_ {
1570            let err_msg = isl_rs_ctx.last_error_msg();
1571            isl_rs_ctx.reset_error();
1572            return Err(LibISLError::new(err, err_msg));
1573        }
1574        Ok(isl_rs_result)
1575    }
1576
1577    /// Wraps `isl_map_floordiv_val`.
1578    pub fn floordiv_val(self, d: Val) -> Result<Map, LibISLError> {
1579        let map = self;
1580        let isl_rs_ctx = map.get_ctx();
1581        let mut map = map;
1582        map.do_not_free_on_drop();
1583        let map = map.ptr;
1584        let mut d = d;
1585        d.do_not_free_on_drop();
1586        let d = d.ptr;
1587        let isl_rs_result = unsafe { isl_map_floordiv_val(map, d) };
1588        let isl_rs_result = Map { ptr: isl_rs_result,
1589                                  should_free_on_drop: true };
1590        let err = isl_rs_ctx.last_error();
1591        if err != Error::None_ {
1592            let err_msg = isl_rs_ctx.last_error_msg();
1593            isl_rs_ctx.reset_error();
1594            return Err(LibISLError::new(err, err_msg));
1595        }
1596        Ok(isl_rs_result)
1597    }
1598
1599    /// Wraps `isl_map_free`.
1600    pub fn free(self) -> Result<Map, LibISLError> {
1601        let map = self;
1602        let isl_rs_ctx = map.get_ctx();
1603        let mut map = map;
1604        map.do_not_free_on_drop();
1605        let map = map.ptr;
1606        let isl_rs_result = unsafe { isl_map_free(map) };
1607        let isl_rs_result = Map { ptr: isl_rs_result,
1608                                  should_free_on_drop: true };
1609        let err = isl_rs_ctx.last_error();
1610        if err != Error::None_ {
1611            let err_msg = isl_rs_ctx.last_error_msg();
1612            isl_rs_ctx.reset_error();
1613            return Err(LibISLError::new(err, err_msg));
1614        }
1615        Ok(isl_rs_result)
1616    }
1617
1618    /// Wraps `isl_map_from_aff`.
1619    pub fn from_aff(aff: Aff) -> Result<Map, LibISLError> {
1620        let isl_rs_ctx = aff.get_ctx();
1621        let mut aff = aff;
1622        aff.do_not_free_on_drop();
1623        let aff = aff.ptr;
1624        let isl_rs_result = unsafe { isl_map_from_aff(aff) };
1625        let isl_rs_result = Map { ptr: isl_rs_result,
1626                                  should_free_on_drop: true };
1627        let err = isl_rs_ctx.last_error();
1628        if err != Error::None_ {
1629            let err_msg = isl_rs_ctx.last_error_msg();
1630            isl_rs_ctx.reset_error();
1631            return Err(LibISLError::new(err, err_msg));
1632        }
1633        Ok(isl_rs_result)
1634    }
1635
1636    /// Wraps `isl_map_from_basic_map`.
1637    pub fn from_basic_map(bmap: BasicMap) -> Result<Map, LibISLError> {
1638        let isl_rs_ctx = bmap.get_ctx();
1639        let mut bmap = bmap;
1640        bmap.do_not_free_on_drop();
1641        let bmap = bmap.ptr;
1642        let isl_rs_result = unsafe { isl_map_from_basic_map(bmap) };
1643        let isl_rs_result = Map { ptr: isl_rs_result,
1644                                  should_free_on_drop: true };
1645        let err = isl_rs_ctx.last_error();
1646        if err != Error::None_ {
1647            let err_msg = isl_rs_ctx.last_error_msg();
1648            isl_rs_ctx.reset_error();
1649            return Err(LibISLError::new(err, err_msg));
1650        }
1651        Ok(isl_rs_result)
1652    }
1653
1654    /// Wraps `isl_map_from_domain`.
1655    pub fn from_domain(set: Set) -> Result<Map, LibISLError> {
1656        let isl_rs_ctx = set.get_ctx();
1657        let mut set = set;
1658        set.do_not_free_on_drop();
1659        let set = set.ptr;
1660        let isl_rs_result = unsafe { isl_map_from_domain(set) };
1661        let isl_rs_result = Map { ptr: isl_rs_result,
1662                                  should_free_on_drop: true };
1663        let err = isl_rs_ctx.last_error();
1664        if err != Error::None_ {
1665            let err_msg = isl_rs_ctx.last_error_msg();
1666            isl_rs_ctx.reset_error();
1667            return Err(LibISLError::new(err, err_msg));
1668        }
1669        Ok(isl_rs_result)
1670    }
1671
1672    /// Wraps `isl_map_from_domain_and_range`.
1673    pub fn from_domain_and_range(domain: Set, range: Set) -> Result<Map, LibISLError> {
1674        let isl_rs_ctx = domain.get_ctx();
1675        let mut domain = domain;
1676        domain.do_not_free_on_drop();
1677        let domain = domain.ptr;
1678        let mut range = range;
1679        range.do_not_free_on_drop();
1680        let range = range.ptr;
1681        let isl_rs_result = unsafe { isl_map_from_domain_and_range(domain, range) };
1682        let isl_rs_result = Map { ptr: isl_rs_result,
1683                                  should_free_on_drop: true };
1684        let err = isl_rs_ctx.last_error();
1685        if err != Error::None_ {
1686            let err_msg = isl_rs_ctx.last_error_msg();
1687            isl_rs_ctx.reset_error();
1688            return Err(LibISLError::new(err, err_msg));
1689        }
1690        Ok(isl_rs_result)
1691    }
1692
1693    /// Wraps `isl_map_from_multi_aff`.
1694    pub fn from_multi_aff(maff: MultiAff) -> Result<Map, LibISLError> {
1695        let isl_rs_ctx = maff.get_ctx();
1696        let mut maff = maff;
1697        maff.do_not_free_on_drop();
1698        let maff = maff.ptr;
1699        let isl_rs_result = unsafe { isl_map_from_multi_aff(maff) };
1700        let isl_rs_result = Map { ptr: isl_rs_result,
1701                                  should_free_on_drop: true };
1702        let err = isl_rs_ctx.last_error();
1703        if err != Error::None_ {
1704            let err_msg = isl_rs_ctx.last_error_msg();
1705            isl_rs_ctx.reset_error();
1706            return Err(LibISLError::new(err, err_msg));
1707        }
1708        Ok(isl_rs_result)
1709    }
1710
1711    /// Wraps `isl_map_from_multi_pw_aff`.
1712    pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<Map, LibISLError> {
1713        let isl_rs_ctx = mpa.get_ctx();
1714        let mut mpa = mpa;
1715        mpa.do_not_free_on_drop();
1716        let mpa = mpa.ptr;
1717        let isl_rs_result = unsafe { isl_map_from_multi_pw_aff(mpa) };
1718        let isl_rs_result = Map { ptr: isl_rs_result,
1719                                  should_free_on_drop: true };
1720        let err = isl_rs_ctx.last_error();
1721        if err != Error::None_ {
1722            let err_msg = isl_rs_ctx.last_error_msg();
1723            isl_rs_ctx.reset_error();
1724            return Err(LibISLError::new(err, err_msg));
1725        }
1726        Ok(isl_rs_result)
1727    }
1728
1729    /// Wraps `isl_map_from_pw_aff`.
1730    pub fn from_pw_aff(pwaff: PwAff) -> Result<Map, LibISLError> {
1731        let isl_rs_ctx = pwaff.get_ctx();
1732        let mut pwaff = pwaff;
1733        pwaff.do_not_free_on_drop();
1734        let pwaff = pwaff.ptr;
1735        let isl_rs_result = unsafe { isl_map_from_pw_aff(pwaff) };
1736        let isl_rs_result = Map { ptr: isl_rs_result,
1737                                  should_free_on_drop: true };
1738        let err = isl_rs_ctx.last_error();
1739        if err != Error::None_ {
1740            let err_msg = isl_rs_ctx.last_error_msg();
1741            isl_rs_ctx.reset_error();
1742            return Err(LibISLError::new(err, err_msg));
1743        }
1744        Ok(isl_rs_result)
1745    }
1746
1747    /// Wraps `isl_map_from_pw_multi_aff`.
1748    pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<Map, LibISLError> {
1749        let isl_rs_ctx = pma.get_ctx();
1750        let mut pma = pma;
1751        pma.do_not_free_on_drop();
1752        let pma = pma.ptr;
1753        let isl_rs_result = unsafe { isl_map_from_pw_multi_aff(pma) };
1754        let isl_rs_result = Map { ptr: isl_rs_result,
1755                                  should_free_on_drop: true };
1756        let err = isl_rs_ctx.last_error();
1757        if err != Error::None_ {
1758            let err_msg = isl_rs_ctx.last_error_msg();
1759            isl_rs_ctx.reset_error();
1760            return Err(LibISLError::new(err, err_msg));
1761        }
1762        Ok(isl_rs_result)
1763    }
1764
1765    /// Wraps `isl_map_from_range`.
1766    pub fn from_range(set: Set) -> Result<Map, LibISLError> {
1767        let isl_rs_ctx = set.get_ctx();
1768        let mut set = set;
1769        set.do_not_free_on_drop();
1770        let set = set.ptr;
1771        let isl_rs_result = unsafe { isl_map_from_range(set) };
1772        let isl_rs_result = Map { ptr: isl_rs_result,
1773                                  should_free_on_drop: true };
1774        let err = isl_rs_ctx.last_error();
1775        if err != Error::None_ {
1776            let err_msg = isl_rs_ctx.last_error_msg();
1777            isl_rs_ctx.reset_error();
1778            return Err(LibISLError::new(err, err_msg));
1779        }
1780        Ok(isl_rs_result)
1781    }
1782
1783    /// Wraps `isl_map_from_union_map`.
1784    pub fn from_union_map(umap: UnionMap) -> Result<Map, LibISLError> {
1785        let isl_rs_ctx = umap.get_ctx();
1786        let mut umap = umap;
1787        umap.do_not_free_on_drop();
1788        let umap = umap.ptr;
1789        let isl_rs_result = unsafe { isl_map_from_union_map(umap) };
1790        let isl_rs_result = Map { ptr: isl_rs_result,
1791                                  should_free_on_drop: true };
1792        let err = isl_rs_ctx.last_error();
1793        if err != Error::None_ {
1794            let err_msg = isl_rs_ctx.last_error_msg();
1795            isl_rs_ctx.reset_error();
1796            return Err(LibISLError::new(err, err_msg));
1797        }
1798        Ok(isl_rs_result)
1799    }
1800
1801    /// Wraps `isl_map_get_basic_map_list`.
1802    pub fn get_basic_map_list(&self) -> Result<BasicMapList, LibISLError> {
1803        let map = self;
1804        let isl_rs_ctx = map.get_ctx();
1805        let map = map.ptr;
1806        let isl_rs_result = unsafe { isl_map_get_basic_map_list(map) };
1807        let isl_rs_result = BasicMapList { ptr: isl_rs_result,
1808                                           should_free_on_drop: true };
1809        let err = isl_rs_ctx.last_error();
1810        if err != Error::None_ {
1811            let err_msg = isl_rs_ctx.last_error_msg();
1812            isl_rs_ctx.reset_error();
1813            return Err(LibISLError::new(err, err_msg));
1814        }
1815        Ok(isl_rs_result)
1816    }
1817
1818    /// Wraps `isl_map_get_ctx`.
1819    pub fn get_ctx(&self) -> Context {
1820        let map = self;
1821        let map = map.ptr;
1822        let isl_rs_result = unsafe { isl_map_get_ctx(map) };
1823        let isl_rs_result = Context { ptr: isl_rs_result,
1824                                      should_free_on_drop: false };
1825        isl_rs_result
1826    }
1827
1828    /// Wraps `isl_map_get_dim_id`.
1829    pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
1830        let map = self;
1831        let isl_rs_ctx = map.get_ctx();
1832        let map = map.ptr;
1833        let type_ = type_.to_i32();
1834        let isl_rs_result = unsafe { isl_map_get_dim_id(map, type_, pos) };
1835        let isl_rs_result = Id { ptr: isl_rs_result,
1836                                 should_free_on_drop: true };
1837        let err = isl_rs_ctx.last_error();
1838        if err != Error::None_ {
1839            let err_msg = isl_rs_ctx.last_error_msg();
1840            isl_rs_ctx.reset_error();
1841            return Err(LibISLError::new(err, err_msg));
1842        }
1843        Ok(isl_rs_result)
1844    }
1845
1846    /// Wraps `isl_map_get_dim_name`.
1847    pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
1848        let map = self;
1849        let isl_rs_ctx = map.get_ctx();
1850        let map = map.ptr;
1851        let type_ = type_.to_i32();
1852        let isl_rs_result = unsafe { isl_map_get_dim_name(map, type_, pos) };
1853        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1854        let isl_rs_result = isl_rs_result.to_str().unwrap();
1855        let err = isl_rs_ctx.last_error();
1856        if err != Error::None_ {
1857            let err_msg = isl_rs_ctx.last_error_msg();
1858            isl_rs_ctx.reset_error();
1859            return Err(LibISLError::new(err, err_msg));
1860        }
1861        Ok(isl_rs_result)
1862    }
1863
1864    /// Wraps `isl_map_get_domain_tuple_id`.
1865    pub fn get_domain_tuple_id(&self) -> Result<Id, LibISLError> {
1866        let map = self;
1867        let isl_rs_ctx = map.get_ctx();
1868        let map = map.ptr;
1869        let isl_rs_result = unsafe { isl_map_get_domain_tuple_id(map) };
1870        let isl_rs_result = Id { ptr: isl_rs_result,
1871                                 should_free_on_drop: true };
1872        let err = isl_rs_ctx.last_error();
1873        if err != Error::None_ {
1874            let err_msg = isl_rs_ctx.last_error_msg();
1875            isl_rs_ctx.reset_error();
1876            return Err(LibISLError::new(err, err_msg));
1877        }
1878        Ok(isl_rs_result)
1879    }
1880
1881    /// Wraps `isl_map_get_hash`.
1882    pub fn get_hash(&self) -> Result<u32, LibISLError> {
1883        let map = self;
1884        let isl_rs_ctx = map.get_ctx();
1885        let map = map.ptr;
1886        let isl_rs_result = unsafe { isl_map_get_hash(map) };
1887        let err = isl_rs_ctx.last_error();
1888        if err != Error::None_ {
1889            let err_msg = isl_rs_ctx.last_error_msg();
1890            isl_rs_ctx.reset_error();
1891            return Err(LibISLError::new(err, err_msg));
1892        }
1893        Ok(isl_rs_result)
1894    }
1895
1896    /// Wraps `isl_map_get_range_lattice_tile`.
1897    pub fn get_range_lattice_tile(&self) -> Result<FixedBox, LibISLError> {
1898        let map = self;
1899        let isl_rs_ctx = map.get_ctx();
1900        let map = map.ptr;
1901        let isl_rs_result = unsafe { isl_map_get_range_lattice_tile(map) };
1902        let isl_rs_result = FixedBox { ptr: isl_rs_result,
1903                                       should_free_on_drop: true };
1904        let err = isl_rs_ctx.last_error();
1905        if err != Error::None_ {
1906            let err_msg = isl_rs_ctx.last_error_msg();
1907            isl_rs_ctx.reset_error();
1908            return Err(LibISLError::new(err, err_msg));
1909        }
1910        Ok(isl_rs_result)
1911    }
1912
1913    /// Wraps `isl_map_get_range_simple_fixed_box_hull`.
1914    pub fn get_range_simple_fixed_box_hull(&self) -> Result<FixedBox, LibISLError> {
1915        let map = self;
1916        let isl_rs_ctx = map.get_ctx();
1917        let map = map.ptr;
1918        let isl_rs_result = unsafe { isl_map_get_range_simple_fixed_box_hull(map) };
1919        let isl_rs_result = FixedBox { ptr: isl_rs_result,
1920                                       should_free_on_drop: true };
1921        let err = isl_rs_ctx.last_error();
1922        if err != Error::None_ {
1923            let err_msg = isl_rs_ctx.last_error_msg();
1924            isl_rs_ctx.reset_error();
1925            return Err(LibISLError::new(err, err_msg));
1926        }
1927        Ok(isl_rs_result)
1928    }
1929
1930    /// Wraps `isl_map_get_range_stride_info`.
1931    pub fn get_range_stride_info(&self, pos: i32) -> Result<StrideInfo, LibISLError> {
1932        let map = self;
1933        let isl_rs_ctx = map.get_ctx();
1934        let map = map.ptr;
1935        let isl_rs_result = unsafe { isl_map_get_range_stride_info(map, pos) };
1936        let isl_rs_result = StrideInfo { ptr: isl_rs_result,
1937                                         should_free_on_drop: true };
1938        let err = isl_rs_ctx.last_error();
1939        if err != Error::None_ {
1940            let err_msg = isl_rs_ctx.last_error_msg();
1941            isl_rs_ctx.reset_error();
1942            return Err(LibISLError::new(err, err_msg));
1943        }
1944        Ok(isl_rs_result)
1945    }
1946
1947    /// Wraps `isl_map_get_range_tuple_id`.
1948    pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
1949        let map = self;
1950        let isl_rs_ctx = map.get_ctx();
1951        let map = map.ptr;
1952        let isl_rs_result = unsafe { isl_map_get_range_tuple_id(map) };
1953        let isl_rs_result = Id { ptr: isl_rs_result,
1954                                 should_free_on_drop: true };
1955        let err = isl_rs_ctx.last_error();
1956        if err != Error::None_ {
1957            let err_msg = isl_rs_ctx.last_error_msg();
1958            isl_rs_ctx.reset_error();
1959            return Err(LibISLError::new(err, err_msg));
1960        }
1961        Ok(isl_rs_result)
1962    }
1963
1964    /// Wraps `isl_map_get_space`.
1965    pub fn get_space(&self) -> Result<Space, LibISLError> {
1966        let map = self;
1967        let isl_rs_ctx = map.get_ctx();
1968        let map = map.ptr;
1969        let isl_rs_result = unsafe { isl_map_get_space(map) };
1970        let isl_rs_result = Space { ptr: isl_rs_result,
1971                                    should_free_on_drop: true };
1972        let err = isl_rs_ctx.last_error();
1973        if err != Error::None_ {
1974            let err_msg = isl_rs_ctx.last_error_msg();
1975            isl_rs_ctx.reset_error();
1976            return Err(LibISLError::new(err, err_msg));
1977        }
1978        Ok(isl_rs_result)
1979    }
1980
1981    /// Wraps `isl_map_get_tuple_id`.
1982    pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
1983        let map = self;
1984        let isl_rs_ctx = map.get_ctx();
1985        let map = map.ptr;
1986        let type_ = type_.to_i32();
1987        let isl_rs_result = unsafe { isl_map_get_tuple_id(map, type_) };
1988        let isl_rs_result = Id { 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_map_get_tuple_name`.
2000    pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
2001        let map = self;
2002        let isl_rs_ctx = map.get_ctx();
2003        let map = map.ptr;
2004        let type_ = type_.to_i32();
2005        let isl_rs_result = unsafe { isl_map_get_tuple_name(map, type_) };
2006        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2007        let isl_rs_result = isl_rs_result.to_str().unwrap();
2008        let err = isl_rs_ctx.last_error();
2009        if err != Error::None_ {
2010            let err_msg = isl_rs_ctx.last_error_msg();
2011            isl_rs_ctx.reset_error();
2012            return Err(LibISLError::new(err, err_msg));
2013        }
2014        Ok(isl_rs_result)
2015    }
2016
2017    /// Wraps `isl_map_gist`.
2018    pub fn gist(self, context: Map) -> Result<Map, LibISLError> {
2019        let map = self;
2020        let isl_rs_ctx = map.get_ctx();
2021        let mut map = map;
2022        map.do_not_free_on_drop();
2023        let map = map.ptr;
2024        let mut context = context;
2025        context.do_not_free_on_drop();
2026        let context = context.ptr;
2027        let isl_rs_result = unsafe { isl_map_gist(map, context) };
2028        let isl_rs_result = Map { ptr: isl_rs_result,
2029                                  should_free_on_drop: true };
2030        let err = isl_rs_ctx.last_error();
2031        if err != Error::None_ {
2032            let err_msg = isl_rs_ctx.last_error_msg();
2033            isl_rs_ctx.reset_error();
2034            return Err(LibISLError::new(err, err_msg));
2035        }
2036        Ok(isl_rs_result)
2037    }
2038
2039    /// Wraps `isl_map_gist_basic_map`.
2040    pub fn gist_basic_map(self, context: BasicMap) -> Result<Map, LibISLError> {
2041        let map = self;
2042        let isl_rs_ctx = map.get_ctx();
2043        let mut map = map;
2044        map.do_not_free_on_drop();
2045        let map = map.ptr;
2046        let mut context = context;
2047        context.do_not_free_on_drop();
2048        let context = context.ptr;
2049        let isl_rs_result = unsafe { isl_map_gist_basic_map(map, context) };
2050        let isl_rs_result = Map { ptr: isl_rs_result,
2051                                  should_free_on_drop: true };
2052        let err = isl_rs_ctx.last_error();
2053        if err != Error::None_ {
2054            let err_msg = isl_rs_ctx.last_error_msg();
2055            isl_rs_ctx.reset_error();
2056            return Err(LibISLError::new(err, err_msg));
2057        }
2058        Ok(isl_rs_result)
2059    }
2060
2061    /// Wraps `isl_map_gist_domain`.
2062    pub fn gist_domain(self, context: Set) -> Result<Map, LibISLError> {
2063        let map = self;
2064        let isl_rs_ctx = map.get_ctx();
2065        let mut map = map;
2066        map.do_not_free_on_drop();
2067        let map = map.ptr;
2068        let mut context = context;
2069        context.do_not_free_on_drop();
2070        let context = context.ptr;
2071        let isl_rs_result = unsafe { isl_map_gist_domain(map, context) };
2072        let isl_rs_result = Map { ptr: isl_rs_result,
2073                                  should_free_on_drop: true };
2074        let err = isl_rs_ctx.last_error();
2075        if err != Error::None_ {
2076            let err_msg = isl_rs_ctx.last_error_msg();
2077            isl_rs_ctx.reset_error();
2078            return Err(LibISLError::new(err, err_msg));
2079        }
2080        Ok(isl_rs_result)
2081    }
2082
2083    /// Wraps `isl_map_gist_params`.
2084    pub fn gist_params(self, context: Set) -> Result<Map, LibISLError> {
2085        let map = self;
2086        let isl_rs_ctx = map.get_ctx();
2087        let mut map = map;
2088        map.do_not_free_on_drop();
2089        let map = map.ptr;
2090        let mut context = context;
2091        context.do_not_free_on_drop();
2092        let context = context.ptr;
2093        let isl_rs_result = unsafe { isl_map_gist_params(map, context) };
2094        let isl_rs_result = Map { ptr: isl_rs_result,
2095                                  should_free_on_drop: true };
2096        let err = isl_rs_ctx.last_error();
2097        if err != Error::None_ {
2098            let err_msg = isl_rs_ctx.last_error_msg();
2099            isl_rs_ctx.reset_error();
2100            return Err(LibISLError::new(err, err_msg));
2101        }
2102        Ok(isl_rs_result)
2103    }
2104
2105    /// Wraps `isl_map_gist_range`.
2106    pub fn gist_range(self, context: Set) -> Result<Map, LibISLError> {
2107        let map = self;
2108        let isl_rs_ctx = map.get_ctx();
2109        let mut map = map;
2110        map.do_not_free_on_drop();
2111        let map = map.ptr;
2112        let mut context = context;
2113        context.do_not_free_on_drop();
2114        let context = context.ptr;
2115        let isl_rs_result = unsafe { isl_map_gist_range(map, context) };
2116        let isl_rs_result = Map { ptr: isl_rs_result,
2117                                  should_free_on_drop: true };
2118        let err = isl_rs_ctx.last_error();
2119        if err != Error::None_ {
2120            let err_msg = isl_rs_ctx.last_error_msg();
2121            isl_rs_ctx.reset_error();
2122            return Err(LibISLError::new(err, err_msg));
2123        }
2124        Ok(isl_rs_result)
2125    }
2126
2127    /// Wraps `isl_map_has_dim_id`.
2128    pub fn has_dim_id(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
2129        let map = self;
2130        let isl_rs_ctx = map.get_ctx();
2131        let map = map.ptr;
2132        let type_ = type_.to_i32();
2133        let isl_rs_result = unsafe { isl_map_has_dim_id(map, type_, pos) };
2134        let isl_rs_result = match isl_rs_result {
2135            0 => false,
2136            1 => true,
2137            _ => {
2138                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2139            }
2140        };
2141        let err = isl_rs_ctx.last_error();
2142        if err != Error::None_ {
2143            let err_msg = isl_rs_ctx.last_error_msg();
2144            isl_rs_ctx.reset_error();
2145            return Err(LibISLError::new(err, err_msg));
2146        }
2147        Ok(isl_rs_result)
2148    }
2149
2150    /// Wraps `isl_map_has_dim_name`.
2151    pub fn has_dim_name(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
2152        let map = self;
2153        let isl_rs_ctx = map.get_ctx();
2154        let map = map.ptr;
2155        let type_ = type_.to_i32();
2156        let isl_rs_result = unsafe { isl_map_has_dim_name(map, type_, pos) };
2157        let isl_rs_result = match isl_rs_result {
2158            0 => false,
2159            1 => true,
2160            _ => {
2161                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2162            }
2163        };
2164        let err = isl_rs_ctx.last_error();
2165        if err != Error::None_ {
2166            let err_msg = isl_rs_ctx.last_error_msg();
2167            isl_rs_ctx.reset_error();
2168            return Err(LibISLError::new(err, err_msg));
2169        }
2170        Ok(isl_rs_result)
2171    }
2172
2173    /// Wraps `isl_map_has_domain_tuple_id`.
2174    pub fn has_domain_tuple_id(&self) -> Result<bool, LibISLError> {
2175        let map = self;
2176        let isl_rs_ctx = map.get_ctx();
2177        let map = map.ptr;
2178        let isl_rs_result = unsafe { isl_map_has_domain_tuple_id(map) };
2179        let isl_rs_result = match isl_rs_result {
2180            0 => false,
2181            1 => true,
2182            _ => {
2183                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2184            }
2185        };
2186        let err = isl_rs_ctx.last_error();
2187        if err != Error::None_ {
2188            let err_msg = isl_rs_ctx.last_error_msg();
2189            isl_rs_ctx.reset_error();
2190            return Err(LibISLError::new(err, err_msg));
2191        }
2192        Ok(isl_rs_result)
2193    }
2194
2195    /// Wraps `isl_map_has_equal_space`.
2196    pub fn has_equal_space(&self, map2: &Map) -> Result<bool, LibISLError> {
2197        let map1 = self;
2198        let isl_rs_ctx = map1.get_ctx();
2199        let map1 = map1.ptr;
2200        let map2 = map2.ptr;
2201        let isl_rs_result = unsafe { isl_map_has_equal_space(map1, map2) };
2202        let isl_rs_result = match isl_rs_result {
2203            0 => false,
2204            1 => true,
2205            _ => {
2206                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2207            }
2208        };
2209        let err = isl_rs_ctx.last_error();
2210        if err != Error::None_ {
2211            let err_msg = isl_rs_ctx.last_error_msg();
2212            isl_rs_ctx.reset_error();
2213            return Err(LibISLError::new(err, err_msg));
2214        }
2215        Ok(isl_rs_result)
2216    }
2217
2218    /// Wraps `isl_map_has_range_tuple_id`.
2219    pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
2220        let map = self;
2221        let isl_rs_ctx = map.get_ctx();
2222        let map = map.ptr;
2223        let isl_rs_result = unsafe { isl_map_has_range_tuple_id(map) };
2224        let isl_rs_result = match isl_rs_result {
2225            0 => false,
2226            1 => true,
2227            _ => {
2228                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2229            }
2230        };
2231        let err = isl_rs_ctx.last_error();
2232        if err != Error::None_ {
2233            let err_msg = isl_rs_ctx.last_error_msg();
2234            isl_rs_ctx.reset_error();
2235            return Err(LibISLError::new(err, err_msg));
2236        }
2237        Ok(isl_rs_result)
2238    }
2239
2240    /// Wraps `isl_map_has_tuple_id`.
2241    pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
2242        let map = self;
2243        let isl_rs_ctx = map.get_ctx();
2244        let map = map.ptr;
2245        let type_ = type_.to_i32();
2246        let isl_rs_result = unsafe { isl_map_has_tuple_id(map, type_) };
2247        let isl_rs_result = match isl_rs_result {
2248            0 => false,
2249            1 => true,
2250            _ => {
2251                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2252            }
2253        };
2254        let err = isl_rs_ctx.last_error();
2255        if err != Error::None_ {
2256            let err_msg = isl_rs_ctx.last_error_msg();
2257            isl_rs_ctx.reset_error();
2258            return Err(LibISLError::new(err, err_msg));
2259        }
2260        Ok(isl_rs_result)
2261    }
2262
2263    /// Wraps `isl_map_has_tuple_name`.
2264    pub fn has_tuple_name(&self, type_: DimType) -> Result<bool, LibISLError> {
2265        let map = self;
2266        let isl_rs_ctx = map.get_ctx();
2267        let map = map.ptr;
2268        let type_ = type_.to_i32();
2269        let isl_rs_result = unsafe { isl_map_has_tuple_name(map, type_) };
2270        let isl_rs_result = match isl_rs_result {
2271            0 => false,
2272            1 => true,
2273            _ => {
2274                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2275            }
2276        };
2277        let err = isl_rs_ctx.last_error();
2278        if err != Error::None_ {
2279            let err_msg = isl_rs_ctx.last_error_msg();
2280            isl_rs_ctx.reset_error();
2281            return Err(LibISLError::new(err, err_msg));
2282        }
2283        Ok(isl_rs_result)
2284    }
2285
2286    /// Wraps `isl_map_identity`.
2287    pub fn identity(space: Space) -> Result<Map, LibISLError> {
2288        let isl_rs_ctx = space.get_ctx();
2289        let mut space = space;
2290        space.do_not_free_on_drop();
2291        let space = space.ptr;
2292        let isl_rs_result = unsafe { isl_map_identity(space) };
2293        let isl_rs_result = Map { ptr: isl_rs_result,
2294                                  should_free_on_drop: true };
2295        let err = isl_rs_ctx.last_error();
2296        if err != Error::None_ {
2297            let err_msg = isl_rs_ctx.last_error_msg();
2298            isl_rs_ctx.reset_error();
2299            return Err(LibISLError::new(err, err_msg));
2300        }
2301        Ok(isl_rs_result)
2302    }
2303
2304    /// Wraps `isl_map_insert_dims`.
2305    pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> Result<Map, LibISLError> {
2306        let map = self;
2307        let isl_rs_ctx = map.get_ctx();
2308        let mut map = map;
2309        map.do_not_free_on_drop();
2310        let map = map.ptr;
2311        let type_ = type_.to_i32();
2312        let isl_rs_result = unsafe { isl_map_insert_dims(map, type_, pos, n) };
2313        let isl_rs_result = Map { ptr: isl_rs_result,
2314                                  should_free_on_drop: true };
2315        let err = isl_rs_ctx.last_error();
2316        if err != Error::None_ {
2317            let err_msg = isl_rs_ctx.last_error_msg();
2318            isl_rs_ctx.reset_error();
2319            return Err(LibISLError::new(err, err_msg));
2320        }
2321        Ok(isl_rs_result)
2322    }
2323
2324    /// Wraps `isl_map_intersect`.
2325    pub fn intersect(self, map2: Map) -> Result<Map, LibISLError> {
2326        let map1 = self;
2327        let isl_rs_ctx = map1.get_ctx();
2328        let mut map1 = map1;
2329        map1.do_not_free_on_drop();
2330        let map1 = map1.ptr;
2331        let mut map2 = map2;
2332        map2.do_not_free_on_drop();
2333        let map2 = map2.ptr;
2334        let isl_rs_result = unsafe { isl_map_intersect(map1, map2) };
2335        let isl_rs_result = Map { ptr: isl_rs_result,
2336                                  should_free_on_drop: true };
2337        let err = isl_rs_ctx.last_error();
2338        if err != Error::None_ {
2339            let err_msg = isl_rs_ctx.last_error_msg();
2340            isl_rs_ctx.reset_error();
2341            return Err(LibISLError::new(err, err_msg));
2342        }
2343        Ok(isl_rs_result)
2344    }
2345
2346    /// Wraps `isl_map_intersect_domain`.
2347    pub fn intersect_domain(self, set: Set) -> Result<Map, LibISLError> {
2348        let map = self;
2349        let isl_rs_ctx = map.get_ctx();
2350        let mut map = map;
2351        map.do_not_free_on_drop();
2352        let map = map.ptr;
2353        let mut set = set;
2354        set.do_not_free_on_drop();
2355        let set = set.ptr;
2356        let isl_rs_result = unsafe { isl_map_intersect_domain(map, set) };
2357        let isl_rs_result = Map { ptr: isl_rs_result,
2358                                  should_free_on_drop: true };
2359        let err = isl_rs_ctx.last_error();
2360        if err != Error::None_ {
2361            let err_msg = isl_rs_ctx.last_error_msg();
2362            isl_rs_ctx.reset_error();
2363            return Err(LibISLError::new(err, err_msg));
2364        }
2365        Ok(isl_rs_result)
2366    }
2367
2368    /// Wraps `isl_map_intersect_domain_factor_domain`.
2369    pub fn intersect_domain_factor_domain(self, factor: Map) -> Result<Map, LibISLError> {
2370        let map = self;
2371        let isl_rs_ctx = map.get_ctx();
2372        let mut map = map;
2373        map.do_not_free_on_drop();
2374        let map = map.ptr;
2375        let mut factor = factor;
2376        factor.do_not_free_on_drop();
2377        let factor = factor.ptr;
2378        let isl_rs_result = unsafe { isl_map_intersect_domain_factor_domain(map, factor) };
2379        let isl_rs_result = Map { ptr: isl_rs_result,
2380                                  should_free_on_drop: true };
2381        let err = isl_rs_ctx.last_error();
2382        if err != Error::None_ {
2383            let err_msg = isl_rs_ctx.last_error_msg();
2384            isl_rs_ctx.reset_error();
2385            return Err(LibISLError::new(err, err_msg));
2386        }
2387        Ok(isl_rs_result)
2388    }
2389
2390    /// Wraps `isl_map_intersect_domain_factor_range`.
2391    pub fn intersect_domain_factor_range(self, factor: Map) -> Result<Map, LibISLError> {
2392        let map = self;
2393        let isl_rs_ctx = map.get_ctx();
2394        let mut map = map;
2395        map.do_not_free_on_drop();
2396        let map = map.ptr;
2397        let mut factor = factor;
2398        factor.do_not_free_on_drop();
2399        let factor = factor.ptr;
2400        let isl_rs_result = unsafe { isl_map_intersect_domain_factor_range(map, factor) };
2401        let isl_rs_result = Map { ptr: isl_rs_result,
2402                                  should_free_on_drop: true };
2403        let err = isl_rs_ctx.last_error();
2404        if err != Error::None_ {
2405            let err_msg = isl_rs_ctx.last_error_msg();
2406            isl_rs_ctx.reset_error();
2407            return Err(LibISLError::new(err, err_msg));
2408        }
2409        Ok(isl_rs_result)
2410    }
2411
2412    /// Wraps `isl_map_intersect_domain_wrapped_domain`.
2413    pub fn intersect_domain_wrapped_domain(self, domain: Set) -> Result<Map, LibISLError> {
2414        let map = self;
2415        let isl_rs_ctx = map.get_ctx();
2416        let mut map = map;
2417        map.do_not_free_on_drop();
2418        let map = map.ptr;
2419        let mut domain = domain;
2420        domain.do_not_free_on_drop();
2421        let domain = domain.ptr;
2422        let isl_rs_result = unsafe { isl_map_intersect_domain_wrapped_domain(map, domain) };
2423        let isl_rs_result = Map { ptr: isl_rs_result,
2424                                  should_free_on_drop: true };
2425        let err = isl_rs_ctx.last_error();
2426        if err != Error::None_ {
2427            let err_msg = isl_rs_ctx.last_error_msg();
2428            isl_rs_ctx.reset_error();
2429            return Err(LibISLError::new(err, err_msg));
2430        }
2431        Ok(isl_rs_result)
2432    }
2433
2434    /// Wraps `isl_map_intersect_params`.
2435    pub fn intersect_params(self, params: Set) -> Result<Map, LibISLError> {
2436        let map = self;
2437        let isl_rs_ctx = map.get_ctx();
2438        let mut map = map;
2439        map.do_not_free_on_drop();
2440        let map = map.ptr;
2441        let mut params = params;
2442        params.do_not_free_on_drop();
2443        let params = params.ptr;
2444        let isl_rs_result = unsafe { isl_map_intersect_params(map, params) };
2445        let isl_rs_result = Map { ptr: isl_rs_result,
2446                                  should_free_on_drop: true };
2447        let err = isl_rs_ctx.last_error();
2448        if err != Error::None_ {
2449            let err_msg = isl_rs_ctx.last_error_msg();
2450            isl_rs_ctx.reset_error();
2451            return Err(LibISLError::new(err, err_msg));
2452        }
2453        Ok(isl_rs_result)
2454    }
2455
2456    /// Wraps `isl_map_intersect_range`.
2457    pub fn intersect_range(self, set: Set) -> Result<Map, LibISLError> {
2458        let map = self;
2459        let isl_rs_ctx = map.get_ctx();
2460        let mut map = map;
2461        map.do_not_free_on_drop();
2462        let map = map.ptr;
2463        let mut set = set;
2464        set.do_not_free_on_drop();
2465        let set = set.ptr;
2466        let isl_rs_result = unsafe { isl_map_intersect_range(map, set) };
2467        let isl_rs_result = Map { ptr: isl_rs_result,
2468                                  should_free_on_drop: true };
2469        let err = isl_rs_ctx.last_error();
2470        if err != Error::None_ {
2471            let err_msg = isl_rs_ctx.last_error_msg();
2472            isl_rs_ctx.reset_error();
2473            return Err(LibISLError::new(err, err_msg));
2474        }
2475        Ok(isl_rs_result)
2476    }
2477
2478    /// Wraps `isl_map_intersect_range_factor_domain`.
2479    pub fn intersect_range_factor_domain(self, factor: Map) -> Result<Map, LibISLError> {
2480        let map = self;
2481        let isl_rs_ctx = map.get_ctx();
2482        let mut map = map;
2483        map.do_not_free_on_drop();
2484        let map = map.ptr;
2485        let mut factor = factor;
2486        factor.do_not_free_on_drop();
2487        let factor = factor.ptr;
2488        let isl_rs_result = unsafe { isl_map_intersect_range_factor_domain(map, factor) };
2489        let isl_rs_result = Map { ptr: isl_rs_result,
2490                                  should_free_on_drop: true };
2491        let err = isl_rs_ctx.last_error();
2492        if err != Error::None_ {
2493            let err_msg = isl_rs_ctx.last_error_msg();
2494            isl_rs_ctx.reset_error();
2495            return Err(LibISLError::new(err, err_msg));
2496        }
2497        Ok(isl_rs_result)
2498    }
2499
2500    /// Wraps `isl_map_intersect_range_factor_range`.
2501    pub fn intersect_range_factor_range(self, factor: Map) -> Result<Map, LibISLError> {
2502        let map = self;
2503        let isl_rs_ctx = map.get_ctx();
2504        let mut map = map;
2505        map.do_not_free_on_drop();
2506        let map = map.ptr;
2507        let mut factor = factor;
2508        factor.do_not_free_on_drop();
2509        let factor = factor.ptr;
2510        let isl_rs_result = unsafe { isl_map_intersect_range_factor_range(map, factor) };
2511        let isl_rs_result = Map { ptr: isl_rs_result,
2512                                  should_free_on_drop: true };
2513        let err = isl_rs_ctx.last_error();
2514        if err != Error::None_ {
2515            let err_msg = isl_rs_ctx.last_error_msg();
2516            isl_rs_ctx.reset_error();
2517            return Err(LibISLError::new(err, err_msg));
2518        }
2519        Ok(isl_rs_result)
2520    }
2521
2522    /// Wraps `isl_map_intersect_range_wrapped_domain`.
2523    pub fn intersect_range_wrapped_domain(self, domain: Set) -> Result<Map, LibISLError> {
2524        let map = self;
2525        let isl_rs_ctx = map.get_ctx();
2526        let mut map = map;
2527        map.do_not_free_on_drop();
2528        let map = map.ptr;
2529        let mut domain = domain;
2530        domain.do_not_free_on_drop();
2531        let domain = domain.ptr;
2532        let isl_rs_result = unsafe { isl_map_intersect_range_wrapped_domain(map, domain) };
2533        let isl_rs_result = Map { ptr: isl_rs_result,
2534                                  should_free_on_drop: true };
2535        let err = isl_rs_ctx.last_error();
2536        if err != Error::None_ {
2537            let err_msg = isl_rs_ctx.last_error_msg();
2538            isl_rs_ctx.reset_error();
2539            return Err(LibISLError::new(err, err_msg));
2540        }
2541        Ok(isl_rs_result)
2542    }
2543
2544    /// Wraps `isl_map_involves_dims`.
2545    pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
2546        let map = self;
2547        let isl_rs_ctx = map.get_ctx();
2548        let map = map.ptr;
2549        let type_ = type_.to_i32();
2550        let isl_rs_result = unsafe { isl_map_involves_dims(map, type_, first, n) };
2551        let isl_rs_result = match isl_rs_result {
2552            0 => false,
2553            1 => true,
2554            _ => {
2555                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2556            }
2557        };
2558        let err = isl_rs_ctx.last_error();
2559        if err != Error::None_ {
2560            let err_msg = isl_rs_ctx.last_error_msg();
2561            isl_rs_ctx.reset_error();
2562            return Err(LibISLError::new(err, err_msg));
2563        }
2564        Ok(isl_rs_result)
2565    }
2566
2567    /// Wraps `isl_map_is_bijective`.
2568    pub fn is_bijective(&self) -> Result<bool, LibISLError> {
2569        let map = self;
2570        let isl_rs_ctx = map.get_ctx();
2571        let map = map.ptr;
2572        let isl_rs_result = unsafe { isl_map_is_bijective(map) };
2573        let isl_rs_result = match isl_rs_result {
2574            0 => false,
2575            1 => true,
2576            _ => {
2577                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2578            }
2579        };
2580        let err = isl_rs_ctx.last_error();
2581        if err != Error::None_ {
2582            let err_msg = isl_rs_ctx.last_error_msg();
2583            isl_rs_ctx.reset_error();
2584            return Err(LibISLError::new(err, err_msg));
2585        }
2586        Ok(isl_rs_result)
2587    }
2588
2589    /// Wraps `isl_map_is_disjoint`.
2590    pub fn is_disjoint(&self, map2: &Map) -> Result<bool, LibISLError> {
2591        let map1 = self;
2592        let isl_rs_ctx = map1.get_ctx();
2593        let map1 = map1.ptr;
2594        let map2 = map2.ptr;
2595        let isl_rs_result = unsafe { isl_map_is_disjoint(map1, map2) };
2596        let isl_rs_result = match isl_rs_result {
2597            0 => false,
2598            1 => true,
2599            _ => {
2600                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2601            }
2602        };
2603        let err = isl_rs_ctx.last_error();
2604        if err != Error::None_ {
2605            let err_msg = isl_rs_ctx.last_error_msg();
2606            isl_rs_ctx.reset_error();
2607            return Err(LibISLError::new(err, err_msg));
2608        }
2609        Ok(isl_rs_result)
2610    }
2611
2612    /// Wraps `isl_map_is_empty`.
2613    pub fn is_empty(&self) -> Result<bool, LibISLError> {
2614        let map = self;
2615        let isl_rs_ctx = map.get_ctx();
2616        let map = map.ptr;
2617        let isl_rs_result = unsafe { isl_map_is_empty(map) };
2618        let isl_rs_result = match isl_rs_result {
2619            0 => false,
2620            1 => true,
2621            _ => {
2622                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2623            }
2624        };
2625        let err = isl_rs_ctx.last_error();
2626        if err != Error::None_ {
2627            let err_msg = isl_rs_ctx.last_error_msg();
2628            isl_rs_ctx.reset_error();
2629            return Err(LibISLError::new(err, err_msg));
2630        }
2631        Ok(isl_rs_result)
2632    }
2633
2634    /// Wraps `isl_map_is_equal`.
2635    pub fn is_equal(&self, map2: &Map) -> Result<bool, LibISLError> {
2636        let map1 = self;
2637        let isl_rs_ctx = map1.get_ctx();
2638        let map1 = map1.ptr;
2639        let map2 = map2.ptr;
2640        let isl_rs_result = unsafe { isl_map_is_equal(map1, map2) };
2641        let isl_rs_result = match isl_rs_result {
2642            0 => false,
2643            1 => true,
2644            _ => {
2645                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2646            }
2647        };
2648        let err = isl_rs_ctx.last_error();
2649        if err != Error::None_ {
2650            let err_msg = isl_rs_ctx.last_error_msg();
2651            isl_rs_ctx.reset_error();
2652            return Err(LibISLError::new(err, err_msg));
2653        }
2654        Ok(isl_rs_result)
2655    }
2656
2657    /// Wraps `isl_map_is_identity`.
2658    pub fn is_identity(&self) -> Result<bool, LibISLError> {
2659        let map = self;
2660        let isl_rs_ctx = map.get_ctx();
2661        let map = map.ptr;
2662        let isl_rs_result = unsafe { isl_map_is_identity(map) };
2663        let isl_rs_result = match isl_rs_result {
2664            0 => false,
2665            1 => true,
2666            _ => {
2667                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2668            }
2669        };
2670        let err = isl_rs_ctx.last_error();
2671        if err != Error::None_ {
2672            let err_msg = isl_rs_ctx.last_error_msg();
2673            isl_rs_ctx.reset_error();
2674            return Err(LibISLError::new(err, err_msg));
2675        }
2676        Ok(isl_rs_result)
2677    }
2678
2679    /// Wraps `isl_map_is_injective`.
2680    pub fn is_injective(&self) -> Result<bool, LibISLError> {
2681        let map = self;
2682        let isl_rs_ctx = map.get_ctx();
2683        let map = map.ptr;
2684        let isl_rs_result = unsafe { isl_map_is_injective(map) };
2685        let isl_rs_result = match isl_rs_result {
2686            0 => false,
2687            1 => true,
2688            _ => {
2689                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2690            }
2691        };
2692        let err = isl_rs_ctx.last_error();
2693        if err != Error::None_ {
2694            let err_msg = isl_rs_ctx.last_error_msg();
2695            isl_rs_ctx.reset_error();
2696            return Err(LibISLError::new(err, err_msg));
2697        }
2698        Ok(isl_rs_result)
2699    }
2700
2701    /// Wraps `isl_map_is_product`.
2702    pub fn is_product(&self) -> Result<bool, LibISLError> {
2703        let map = self;
2704        let isl_rs_ctx = map.get_ctx();
2705        let map = map.ptr;
2706        let isl_rs_result = unsafe { isl_map_is_product(map) };
2707        let isl_rs_result = match isl_rs_result {
2708            0 => false,
2709            1 => true,
2710            _ => {
2711                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2712            }
2713        };
2714        let err = isl_rs_ctx.last_error();
2715        if err != Error::None_ {
2716            let err_msg = isl_rs_ctx.last_error_msg();
2717            isl_rs_ctx.reset_error();
2718            return Err(LibISLError::new(err, err_msg));
2719        }
2720        Ok(isl_rs_result)
2721    }
2722
2723    /// Wraps `isl_map_is_single_valued`.
2724    pub fn is_single_valued(&self) -> Result<bool, LibISLError> {
2725        let map = self;
2726        let isl_rs_ctx = map.get_ctx();
2727        let map = map.ptr;
2728        let isl_rs_result = unsafe { isl_map_is_single_valued(map) };
2729        let isl_rs_result = match isl_rs_result {
2730            0 => false,
2731            1 => true,
2732            _ => {
2733                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2734            }
2735        };
2736        let err = isl_rs_ctx.last_error();
2737        if err != Error::None_ {
2738            let err_msg = isl_rs_ctx.last_error_msg();
2739            isl_rs_ctx.reset_error();
2740            return Err(LibISLError::new(err, err_msg));
2741        }
2742        Ok(isl_rs_result)
2743    }
2744
2745    /// Wraps `isl_map_is_strict_subset`.
2746    pub fn is_strict_subset(&self, map2: &Map) -> Result<bool, LibISLError> {
2747        let map1 = self;
2748        let isl_rs_ctx = map1.get_ctx();
2749        let map1 = map1.ptr;
2750        let map2 = map2.ptr;
2751        let isl_rs_result = unsafe { isl_map_is_strict_subset(map1, map2) };
2752        let isl_rs_result = match isl_rs_result {
2753            0 => false,
2754            1 => true,
2755            _ => {
2756                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2757            }
2758        };
2759        let err = isl_rs_ctx.last_error();
2760        if err != Error::None_ {
2761            let err_msg = isl_rs_ctx.last_error_msg();
2762            isl_rs_ctx.reset_error();
2763            return Err(LibISLError::new(err, err_msg));
2764        }
2765        Ok(isl_rs_result)
2766    }
2767
2768    /// Wraps `isl_map_is_subset`.
2769    pub fn is_subset(&self, map2: &Map) -> Result<bool, LibISLError> {
2770        let map1 = self;
2771        let isl_rs_ctx = map1.get_ctx();
2772        let map1 = map1.ptr;
2773        let map2 = map2.ptr;
2774        let isl_rs_result = unsafe { isl_map_is_subset(map1, map2) };
2775        let isl_rs_result = match isl_rs_result {
2776            0 => false,
2777            1 => true,
2778            _ => {
2779                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2780            }
2781        };
2782        let err = isl_rs_ctx.last_error();
2783        if err != Error::None_ {
2784            let err_msg = isl_rs_ctx.last_error_msg();
2785            isl_rs_ctx.reset_error();
2786            return Err(LibISLError::new(err, err_msg));
2787        }
2788        Ok(isl_rs_result)
2789    }
2790
2791    /// Wraps `isl_map_is_translation`.
2792    pub fn is_translation(&self) -> Result<i32, LibISLError> {
2793        let map = self;
2794        let isl_rs_ctx = map.get_ctx();
2795        let map = map.ptr;
2796        let isl_rs_result = unsafe { isl_map_is_translation(map) };
2797        let err = isl_rs_ctx.last_error();
2798        if err != Error::None_ {
2799            let err_msg = isl_rs_ctx.last_error_msg();
2800            isl_rs_ctx.reset_error();
2801            return Err(LibISLError::new(err, err_msg));
2802        }
2803        Ok(isl_rs_result)
2804    }
2805
2806    /// Wraps `isl_map_lex_ge`.
2807    pub fn lex_ge(set_space: Space) -> Result<Map, LibISLError> {
2808        let isl_rs_ctx = set_space.get_ctx();
2809        let mut set_space = set_space;
2810        set_space.do_not_free_on_drop();
2811        let set_space = set_space.ptr;
2812        let isl_rs_result = unsafe { isl_map_lex_ge(set_space) };
2813        let isl_rs_result = Map { ptr: isl_rs_result,
2814                                  should_free_on_drop: true };
2815        let err = isl_rs_ctx.last_error();
2816        if err != Error::None_ {
2817            let err_msg = isl_rs_ctx.last_error_msg();
2818            isl_rs_ctx.reset_error();
2819            return Err(LibISLError::new(err, err_msg));
2820        }
2821        Ok(isl_rs_result)
2822    }
2823
2824    /// Wraps `isl_map_lex_ge_at_multi_pw_aff`.
2825    pub fn lex_ge_at_multi_pw_aff(self, mpa: MultiPwAff) -> Result<Map, LibISLError> {
2826        let map = self;
2827        let isl_rs_ctx = map.get_ctx();
2828        let mut map = map;
2829        map.do_not_free_on_drop();
2830        let map = map.ptr;
2831        let mut mpa = mpa;
2832        mpa.do_not_free_on_drop();
2833        let mpa = mpa.ptr;
2834        let isl_rs_result = unsafe { isl_map_lex_ge_at_multi_pw_aff(map, mpa) };
2835        let isl_rs_result = Map { ptr: isl_rs_result,
2836                                  should_free_on_drop: true };
2837        let err = isl_rs_ctx.last_error();
2838        if err != Error::None_ {
2839            let err_msg = isl_rs_ctx.last_error_msg();
2840            isl_rs_ctx.reset_error();
2841            return Err(LibISLError::new(err, err_msg));
2842        }
2843        Ok(isl_rs_result)
2844    }
2845
2846    /// Wraps `isl_map_lex_ge_first`.
2847    pub fn lex_ge_first(space: Space, n: u32) -> Result<Map, LibISLError> {
2848        let isl_rs_ctx = space.get_ctx();
2849        let mut space = space;
2850        space.do_not_free_on_drop();
2851        let space = space.ptr;
2852        let isl_rs_result = unsafe { isl_map_lex_ge_first(space, n) };
2853        let isl_rs_result = Map { ptr: isl_rs_result,
2854                                  should_free_on_drop: true };
2855        let err = isl_rs_ctx.last_error();
2856        if err != Error::None_ {
2857            let err_msg = isl_rs_ctx.last_error_msg();
2858            isl_rs_ctx.reset_error();
2859            return Err(LibISLError::new(err, err_msg));
2860        }
2861        Ok(isl_rs_result)
2862    }
2863
2864    /// Wraps `isl_map_lex_ge_map`.
2865    pub fn lex_ge_map(self, map2: Map) -> Result<Map, LibISLError> {
2866        let map1 = self;
2867        let isl_rs_ctx = map1.get_ctx();
2868        let mut map1 = map1;
2869        map1.do_not_free_on_drop();
2870        let map1 = map1.ptr;
2871        let mut map2 = map2;
2872        map2.do_not_free_on_drop();
2873        let map2 = map2.ptr;
2874        let isl_rs_result = unsafe { isl_map_lex_ge_map(map1, map2) };
2875        let isl_rs_result = Map { ptr: isl_rs_result,
2876                                  should_free_on_drop: true };
2877        let err = isl_rs_ctx.last_error();
2878        if err != Error::None_ {
2879            let err_msg = isl_rs_ctx.last_error_msg();
2880            isl_rs_ctx.reset_error();
2881            return Err(LibISLError::new(err, err_msg));
2882        }
2883        Ok(isl_rs_result)
2884    }
2885
2886    /// Wraps `isl_map_lex_gt`.
2887    pub fn lex_gt(set_space: Space) -> Result<Map, LibISLError> {
2888        let isl_rs_ctx = set_space.get_ctx();
2889        let mut set_space = set_space;
2890        set_space.do_not_free_on_drop();
2891        let set_space = set_space.ptr;
2892        let isl_rs_result = unsafe { isl_map_lex_gt(set_space) };
2893        let isl_rs_result = Map { ptr: isl_rs_result,
2894                                  should_free_on_drop: true };
2895        let err = isl_rs_ctx.last_error();
2896        if err != Error::None_ {
2897            let err_msg = isl_rs_ctx.last_error_msg();
2898            isl_rs_ctx.reset_error();
2899            return Err(LibISLError::new(err, err_msg));
2900        }
2901        Ok(isl_rs_result)
2902    }
2903
2904    /// Wraps `isl_map_lex_gt_at_multi_pw_aff`.
2905    pub fn lex_gt_at_multi_pw_aff(self, mpa: MultiPwAff) -> Result<Map, LibISLError> {
2906        let map = self;
2907        let isl_rs_ctx = map.get_ctx();
2908        let mut map = map;
2909        map.do_not_free_on_drop();
2910        let map = map.ptr;
2911        let mut mpa = mpa;
2912        mpa.do_not_free_on_drop();
2913        let mpa = mpa.ptr;
2914        let isl_rs_result = unsafe { isl_map_lex_gt_at_multi_pw_aff(map, mpa) };
2915        let isl_rs_result = Map { ptr: isl_rs_result,
2916                                  should_free_on_drop: true };
2917        let err = isl_rs_ctx.last_error();
2918        if err != Error::None_ {
2919            let err_msg = isl_rs_ctx.last_error_msg();
2920            isl_rs_ctx.reset_error();
2921            return Err(LibISLError::new(err, err_msg));
2922        }
2923        Ok(isl_rs_result)
2924    }
2925
2926    /// Wraps `isl_map_lex_gt_first`.
2927    pub fn lex_gt_first(space: Space, n: u32) -> Result<Map, LibISLError> {
2928        let isl_rs_ctx = space.get_ctx();
2929        let mut space = space;
2930        space.do_not_free_on_drop();
2931        let space = space.ptr;
2932        let isl_rs_result = unsafe { isl_map_lex_gt_first(space, n) };
2933        let isl_rs_result = Map { ptr: isl_rs_result,
2934                                  should_free_on_drop: true };
2935        let err = isl_rs_ctx.last_error();
2936        if err != Error::None_ {
2937            let err_msg = isl_rs_ctx.last_error_msg();
2938            isl_rs_ctx.reset_error();
2939            return Err(LibISLError::new(err, err_msg));
2940        }
2941        Ok(isl_rs_result)
2942    }
2943
2944    /// Wraps `isl_map_lex_gt_map`.
2945    pub fn lex_gt_map(self, map2: Map) -> Result<Map, LibISLError> {
2946        let map1 = self;
2947        let isl_rs_ctx = map1.get_ctx();
2948        let mut map1 = map1;
2949        map1.do_not_free_on_drop();
2950        let map1 = map1.ptr;
2951        let mut map2 = map2;
2952        map2.do_not_free_on_drop();
2953        let map2 = map2.ptr;
2954        let isl_rs_result = unsafe { isl_map_lex_gt_map(map1, map2) };
2955        let isl_rs_result = Map { ptr: isl_rs_result,
2956                                  should_free_on_drop: true };
2957        let err = isl_rs_ctx.last_error();
2958        if err != Error::None_ {
2959            let err_msg = isl_rs_ctx.last_error_msg();
2960            isl_rs_ctx.reset_error();
2961            return Err(LibISLError::new(err, err_msg));
2962        }
2963        Ok(isl_rs_result)
2964    }
2965
2966    /// Wraps `isl_map_lex_le`.
2967    pub fn lex_le(set_space: Space) -> Result<Map, LibISLError> {
2968        let isl_rs_ctx = set_space.get_ctx();
2969        let mut set_space = set_space;
2970        set_space.do_not_free_on_drop();
2971        let set_space = set_space.ptr;
2972        let isl_rs_result = unsafe { isl_map_lex_le(set_space) };
2973        let isl_rs_result = Map { ptr: isl_rs_result,
2974                                  should_free_on_drop: true };
2975        let err = isl_rs_ctx.last_error();
2976        if err != Error::None_ {
2977            let err_msg = isl_rs_ctx.last_error_msg();
2978            isl_rs_ctx.reset_error();
2979            return Err(LibISLError::new(err, err_msg));
2980        }
2981        Ok(isl_rs_result)
2982    }
2983
2984    /// Wraps `isl_map_lex_le_at_multi_pw_aff`.
2985    pub fn lex_le_at_multi_pw_aff(self, mpa: MultiPwAff) -> Result<Map, LibISLError> {
2986        let map = self;
2987        let isl_rs_ctx = map.get_ctx();
2988        let mut map = map;
2989        map.do_not_free_on_drop();
2990        let map = map.ptr;
2991        let mut mpa = mpa;
2992        mpa.do_not_free_on_drop();
2993        let mpa = mpa.ptr;
2994        let isl_rs_result = unsafe { isl_map_lex_le_at_multi_pw_aff(map, mpa) };
2995        let isl_rs_result = Map { ptr: isl_rs_result,
2996                                  should_free_on_drop: true };
2997        let err = isl_rs_ctx.last_error();
2998        if err != Error::None_ {
2999            let err_msg = isl_rs_ctx.last_error_msg();
3000            isl_rs_ctx.reset_error();
3001            return Err(LibISLError::new(err, err_msg));
3002        }
3003        Ok(isl_rs_result)
3004    }
3005
3006    /// Wraps `isl_map_lex_le_first`.
3007    pub fn lex_le_first(space: Space, n: u32) -> Result<Map, LibISLError> {
3008        let isl_rs_ctx = space.get_ctx();
3009        let mut space = space;
3010        space.do_not_free_on_drop();
3011        let space = space.ptr;
3012        let isl_rs_result = unsafe { isl_map_lex_le_first(space, n) };
3013        let isl_rs_result = Map { ptr: isl_rs_result,
3014                                  should_free_on_drop: true };
3015        let err = isl_rs_ctx.last_error();
3016        if err != Error::None_ {
3017            let err_msg = isl_rs_ctx.last_error_msg();
3018            isl_rs_ctx.reset_error();
3019            return Err(LibISLError::new(err, err_msg));
3020        }
3021        Ok(isl_rs_result)
3022    }
3023
3024    /// Wraps `isl_map_lex_le_map`.
3025    pub fn lex_le_map(self, map2: Map) -> Result<Map, LibISLError> {
3026        let map1 = self;
3027        let isl_rs_ctx = map1.get_ctx();
3028        let mut map1 = map1;
3029        map1.do_not_free_on_drop();
3030        let map1 = map1.ptr;
3031        let mut map2 = map2;
3032        map2.do_not_free_on_drop();
3033        let map2 = map2.ptr;
3034        let isl_rs_result = unsafe { isl_map_lex_le_map(map1, map2) };
3035        let isl_rs_result = Map { ptr: isl_rs_result,
3036                                  should_free_on_drop: true };
3037        let err = isl_rs_ctx.last_error();
3038        if err != Error::None_ {
3039            let err_msg = isl_rs_ctx.last_error_msg();
3040            isl_rs_ctx.reset_error();
3041            return Err(LibISLError::new(err, err_msg));
3042        }
3043        Ok(isl_rs_result)
3044    }
3045
3046    /// Wraps `isl_map_lex_lt`.
3047    pub fn lex_lt(set_space: Space) -> Result<Map, LibISLError> {
3048        let isl_rs_ctx = set_space.get_ctx();
3049        let mut set_space = set_space;
3050        set_space.do_not_free_on_drop();
3051        let set_space = set_space.ptr;
3052        let isl_rs_result = unsafe { isl_map_lex_lt(set_space) };
3053        let isl_rs_result = Map { ptr: isl_rs_result,
3054                                  should_free_on_drop: true };
3055        let err = isl_rs_ctx.last_error();
3056        if err != Error::None_ {
3057            let err_msg = isl_rs_ctx.last_error_msg();
3058            isl_rs_ctx.reset_error();
3059            return Err(LibISLError::new(err, err_msg));
3060        }
3061        Ok(isl_rs_result)
3062    }
3063
3064    /// Wraps `isl_map_lex_lt_at_multi_pw_aff`.
3065    pub fn lex_lt_at_multi_pw_aff(self, mpa: MultiPwAff) -> Result<Map, LibISLError> {
3066        let map = self;
3067        let isl_rs_ctx = map.get_ctx();
3068        let mut map = map;
3069        map.do_not_free_on_drop();
3070        let map = map.ptr;
3071        let mut mpa = mpa;
3072        mpa.do_not_free_on_drop();
3073        let mpa = mpa.ptr;
3074        let isl_rs_result = unsafe { isl_map_lex_lt_at_multi_pw_aff(map, mpa) };
3075        let isl_rs_result = Map { ptr: isl_rs_result,
3076                                  should_free_on_drop: true };
3077        let err = isl_rs_ctx.last_error();
3078        if err != Error::None_ {
3079            let err_msg = isl_rs_ctx.last_error_msg();
3080            isl_rs_ctx.reset_error();
3081            return Err(LibISLError::new(err, err_msg));
3082        }
3083        Ok(isl_rs_result)
3084    }
3085
3086    /// Wraps `isl_map_lex_lt_first`.
3087    pub fn lex_lt_first(space: Space, n: u32) -> Result<Map, LibISLError> {
3088        let isl_rs_ctx = space.get_ctx();
3089        let mut space = space;
3090        space.do_not_free_on_drop();
3091        let space = space.ptr;
3092        let isl_rs_result = unsafe { isl_map_lex_lt_first(space, n) };
3093        let isl_rs_result = Map { ptr: isl_rs_result,
3094                                  should_free_on_drop: true };
3095        let err = isl_rs_ctx.last_error();
3096        if err != Error::None_ {
3097            let err_msg = isl_rs_ctx.last_error_msg();
3098            isl_rs_ctx.reset_error();
3099            return Err(LibISLError::new(err, err_msg));
3100        }
3101        Ok(isl_rs_result)
3102    }
3103
3104    /// Wraps `isl_map_lex_lt_map`.
3105    pub fn lex_lt_map(self, map2: Map) -> Result<Map, LibISLError> {
3106        let map1 = self;
3107        let isl_rs_ctx = map1.get_ctx();
3108        let mut map1 = map1;
3109        map1.do_not_free_on_drop();
3110        let map1 = map1.ptr;
3111        let mut map2 = map2;
3112        map2.do_not_free_on_drop();
3113        let map2 = map2.ptr;
3114        let isl_rs_result = unsafe { isl_map_lex_lt_map(map1, map2) };
3115        let isl_rs_result = Map { ptr: isl_rs_result,
3116                                  should_free_on_drop: true };
3117        let err = isl_rs_ctx.last_error();
3118        if err != Error::None_ {
3119            let err_msg = isl_rs_ctx.last_error_msg();
3120            isl_rs_ctx.reset_error();
3121            return Err(LibISLError::new(err, err_msg));
3122        }
3123        Ok(isl_rs_result)
3124    }
3125
3126    /// Wraps `isl_map_lexmax`.
3127    pub fn lexmax(self) -> Result<Map, LibISLError> {
3128        let map = self;
3129        let isl_rs_ctx = map.get_ctx();
3130        let mut map = map;
3131        map.do_not_free_on_drop();
3132        let map = map.ptr;
3133        let isl_rs_result = unsafe { isl_map_lexmax(map) };
3134        let isl_rs_result = Map { ptr: isl_rs_result,
3135                                  should_free_on_drop: true };
3136        let err = isl_rs_ctx.last_error();
3137        if err != Error::None_ {
3138            let err_msg = isl_rs_ctx.last_error_msg();
3139            isl_rs_ctx.reset_error();
3140            return Err(LibISLError::new(err, err_msg));
3141        }
3142        Ok(isl_rs_result)
3143    }
3144
3145    /// Wraps `isl_map_lexmax_pw_multi_aff`.
3146    pub fn lexmax_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
3147        let map = self;
3148        let isl_rs_ctx = map.get_ctx();
3149        let mut map = map;
3150        map.do_not_free_on_drop();
3151        let map = map.ptr;
3152        let isl_rs_result = unsafe { isl_map_lexmax_pw_multi_aff(map) };
3153        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
3154                                         should_free_on_drop: true };
3155        let err = isl_rs_ctx.last_error();
3156        if err != Error::None_ {
3157            let err_msg = isl_rs_ctx.last_error_msg();
3158            isl_rs_ctx.reset_error();
3159            return Err(LibISLError::new(err, err_msg));
3160        }
3161        Ok(isl_rs_result)
3162    }
3163
3164    /// Wraps `isl_map_lexmin`.
3165    pub fn lexmin(self) -> Result<Map, LibISLError> {
3166        let map = self;
3167        let isl_rs_ctx = map.get_ctx();
3168        let mut map = map;
3169        map.do_not_free_on_drop();
3170        let map = map.ptr;
3171        let isl_rs_result = unsafe { isl_map_lexmin(map) };
3172        let isl_rs_result = Map { ptr: isl_rs_result,
3173                                  should_free_on_drop: true };
3174        let err = isl_rs_ctx.last_error();
3175        if err != Error::None_ {
3176            let err_msg = isl_rs_ctx.last_error_msg();
3177            isl_rs_ctx.reset_error();
3178            return Err(LibISLError::new(err, err_msg));
3179        }
3180        Ok(isl_rs_result)
3181    }
3182
3183    /// Wraps `isl_map_lexmin_pw_multi_aff`.
3184    pub fn lexmin_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
3185        let map = self;
3186        let isl_rs_ctx = map.get_ctx();
3187        let mut map = map;
3188        map.do_not_free_on_drop();
3189        let map = map.ptr;
3190        let isl_rs_result = unsafe { isl_map_lexmin_pw_multi_aff(map) };
3191        let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
3192                                         should_free_on_drop: true };
3193        let err = isl_rs_ctx.last_error();
3194        if err != Error::None_ {
3195            let err_msg = isl_rs_ctx.last_error_msg();
3196            isl_rs_ctx.reset_error();
3197            return Err(LibISLError::new(err, err_msg));
3198        }
3199        Ok(isl_rs_result)
3200    }
3201
3202    /// Wraps `isl_map_lower_bound_multi_pw_aff`.
3203    pub fn lower_bound_multi_pw_aff(self, lower: MultiPwAff) -> Result<Map, LibISLError> {
3204        let map = self;
3205        let isl_rs_ctx = map.get_ctx();
3206        let mut map = map;
3207        map.do_not_free_on_drop();
3208        let map = map.ptr;
3209        let mut lower = lower;
3210        lower.do_not_free_on_drop();
3211        let lower = lower.ptr;
3212        let isl_rs_result = unsafe { isl_map_lower_bound_multi_pw_aff(map, lower) };
3213        let isl_rs_result = Map { ptr: isl_rs_result,
3214                                  should_free_on_drop: true };
3215        let err = isl_rs_ctx.last_error();
3216        if err != Error::None_ {
3217            let err_msg = isl_rs_ctx.last_error_msg();
3218            isl_rs_ctx.reset_error();
3219            return Err(LibISLError::new(err, err_msg));
3220        }
3221        Ok(isl_rs_result)
3222    }
3223
3224    /// Wraps `isl_map_lower_bound_si`.
3225    pub fn lower_bound_si(self, type_: DimType, pos: u32, value: i32) -> Result<Map, LibISLError> {
3226        let map = self;
3227        let isl_rs_ctx = map.get_ctx();
3228        let mut map = map;
3229        map.do_not_free_on_drop();
3230        let map = map.ptr;
3231        let type_ = type_.to_i32();
3232        let isl_rs_result = unsafe { isl_map_lower_bound_si(map, type_, pos, value) };
3233        let isl_rs_result = Map { ptr: isl_rs_result,
3234                                  should_free_on_drop: true };
3235        let err = isl_rs_ctx.last_error();
3236        if err != Error::None_ {
3237            let err_msg = isl_rs_ctx.last_error_msg();
3238            isl_rs_ctx.reset_error();
3239            return Err(LibISLError::new(err, err_msg));
3240        }
3241        Ok(isl_rs_result)
3242    }
3243
3244    /// Wraps `isl_map_lower_bound_val`.
3245    pub fn lower_bound_val(self, type_: DimType, pos: u32, value: Val) -> Result<Map, LibISLError> {
3246        let map = self;
3247        let isl_rs_ctx = map.get_ctx();
3248        let mut map = map;
3249        map.do_not_free_on_drop();
3250        let map = map.ptr;
3251        let type_ = type_.to_i32();
3252        let mut value = value;
3253        value.do_not_free_on_drop();
3254        let value = value.ptr;
3255        let isl_rs_result = unsafe { isl_map_lower_bound_val(map, type_, pos, value) };
3256        let isl_rs_result = Map { ptr: isl_rs_result,
3257                                  should_free_on_drop: true };
3258        let err = isl_rs_ctx.last_error();
3259        if err != Error::None_ {
3260            let err_msg = isl_rs_ctx.last_error_msg();
3261            isl_rs_ctx.reset_error();
3262            return Err(LibISLError::new(err, err_msg));
3263        }
3264        Ok(isl_rs_result)
3265    }
3266
3267    /// Wraps `isl_map_make_disjoint`.
3268    pub fn make_disjoint(self) -> Result<Map, LibISLError> {
3269        let map = self;
3270        let isl_rs_ctx = map.get_ctx();
3271        let mut map = map;
3272        map.do_not_free_on_drop();
3273        let map = map.ptr;
3274        let isl_rs_result = unsafe { isl_map_make_disjoint(map) };
3275        let isl_rs_result = Map { ptr: isl_rs_result,
3276                                  should_free_on_drop: true };
3277        let err = isl_rs_ctx.last_error();
3278        if err != Error::None_ {
3279            let err_msg = isl_rs_ctx.last_error_msg();
3280            isl_rs_ctx.reset_error();
3281            return Err(LibISLError::new(err, err_msg));
3282        }
3283        Ok(isl_rs_result)
3284    }
3285
3286    /// Wraps `isl_map_max_multi_pw_aff`.
3287    pub fn max_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
3288        let map = self;
3289        let isl_rs_ctx = map.get_ctx();
3290        let mut map = map;
3291        map.do_not_free_on_drop();
3292        let map = map.ptr;
3293        let isl_rs_result = unsafe { isl_map_max_multi_pw_aff(map) };
3294        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
3295                                         should_free_on_drop: true };
3296        let err = isl_rs_ctx.last_error();
3297        if err != Error::None_ {
3298            let err_msg = isl_rs_ctx.last_error_msg();
3299            isl_rs_ctx.reset_error();
3300            return Err(LibISLError::new(err, err_msg));
3301        }
3302        Ok(isl_rs_result)
3303    }
3304
3305    /// Wraps `isl_map_min_multi_pw_aff`.
3306    pub fn min_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
3307        let map = self;
3308        let isl_rs_ctx = map.get_ctx();
3309        let mut map = map;
3310        map.do_not_free_on_drop();
3311        let map = map.ptr;
3312        let isl_rs_result = unsafe { isl_map_min_multi_pw_aff(map) };
3313        let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
3314                                         should_free_on_drop: true };
3315        let err = isl_rs_ctx.last_error();
3316        if err != Error::None_ {
3317            let err_msg = isl_rs_ctx.last_error_msg();
3318            isl_rs_ctx.reset_error();
3319            return Err(LibISLError::new(err, err_msg));
3320        }
3321        Ok(isl_rs_result)
3322    }
3323
3324    /// Wraps `isl_map_move_dims`.
3325    pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
3326                     n: u32)
3327                     -> Result<Map, LibISLError> {
3328        let map = self;
3329        let isl_rs_ctx = map.get_ctx();
3330        let mut map = map;
3331        map.do_not_free_on_drop();
3332        let map = map.ptr;
3333        let dst_type = dst_type.to_i32();
3334        let src_type = src_type.to_i32();
3335        let isl_rs_result =
3336            unsafe { isl_map_move_dims(map, dst_type, dst_pos, src_type, src_pos, n) };
3337        let isl_rs_result = Map { ptr: isl_rs_result,
3338                                  should_free_on_drop: true };
3339        let err = isl_rs_ctx.last_error();
3340        if err != Error::None_ {
3341            let err_msg = isl_rs_ctx.last_error_msg();
3342            isl_rs_ctx.reset_error();
3343            return Err(LibISLError::new(err, err_msg));
3344        }
3345        Ok(isl_rs_result)
3346    }
3347
3348    /// Wraps `isl_map_n_basic_map`.
3349    pub fn n_basic_map(&self) -> Result<i32, LibISLError> {
3350        let map = self;
3351        let isl_rs_ctx = map.get_ctx();
3352        let map = map.ptr;
3353        let isl_rs_result = unsafe { isl_map_n_basic_map(map) };
3354        let err = isl_rs_ctx.last_error();
3355        if err != Error::None_ {
3356            let err_msg = isl_rs_ctx.last_error_msg();
3357            isl_rs_ctx.reset_error();
3358            return Err(LibISLError::new(err, err_msg));
3359        }
3360        Ok(isl_rs_result)
3361    }
3362
3363    /// Wraps `isl_map_nat_universe`.
3364    pub fn nat_universe(space: Space) -> Result<Map, LibISLError> {
3365        let isl_rs_ctx = space.get_ctx();
3366        let mut space = space;
3367        space.do_not_free_on_drop();
3368        let space = space.ptr;
3369        let isl_rs_result = unsafe { isl_map_nat_universe(space) };
3370        let isl_rs_result = Map { ptr: isl_rs_result,
3371                                  should_free_on_drop: true };
3372        let err = isl_rs_ctx.last_error();
3373        if err != Error::None_ {
3374            let err_msg = isl_rs_ctx.last_error_msg();
3375            isl_rs_ctx.reset_error();
3376            return Err(LibISLError::new(err, err_msg));
3377        }
3378        Ok(isl_rs_result)
3379    }
3380
3381    /// Wraps `isl_map_neg`.
3382    pub fn neg(self) -> Result<Map, LibISLError> {
3383        let map = self;
3384        let isl_rs_ctx = map.get_ctx();
3385        let mut map = map;
3386        map.do_not_free_on_drop();
3387        let map = map.ptr;
3388        let isl_rs_result = unsafe { isl_map_neg(map) };
3389        let isl_rs_result = Map { ptr: isl_rs_result,
3390                                  should_free_on_drop: true };
3391        let err = isl_rs_ctx.last_error();
3392        if err != Error::None_ {
3393            let err_msg = isl_rs_ctx.last_error_msg();
3394            isl_rs_ctx.reset_error();
3395            return Err(LibISLError::new(err, err_msg));
3396        }
3397        Ok(isl_rs_result)
3398    }
3399
3400    /// Wraps `isl_map_oppose`.
3401    pub fn oppose(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
3402                  -> Result<Map, LibISLError> {
3403        let map = self;
3404        let isl_rs_ctx = map.get_ctx();
3405        let mut map = map;
3406        map.do_not_free_on_drop();
3407        let map = map.ptr;
3408        let type1 = type1.to_i32();
3409        let type2 = type2.to_i32();
3410        let isl_rs_result = unsafe { isl_map_oppose(map, type1, pos1, type2, pos2) };
3411        let isl_rs_result = Map { ptr: isl_rs_result,
3412                                  should_free_on_drop: true };
3413        let err = isl_rs_ctx.last_error();
3414        if err != Error::None_ {
3415            let err_msg = isl_rs_ctx.last_error_msg();
3416            isl_rs_ctx.reset_error();
3417            return Err(LibISLError::new(err, err_msg));
3418        }
3419        Ok(isl_rs_result)
3420    }
3421
3422    /// Wraps `isl_map_order_ge`.
3423    pub fn order_ge(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
3424                    -> Result<Map, LibISLError> {
3425        let map = self;
3426        let isl_rs_ctx = map.get_ctx();
3427        let mut map = map;
3428        map.do_not_free_on_drop();
3429        let map = map.ptr;
3430        let type1 = type1.to_i32();
3431        let type2 = type2.to_i32();
3432        let isl_rs_result = unsafe { isl_map_order_ge(map, type1, pos1, type2, pos2) };
3433        let isl_rs_result = Map { ptr: isl_rs_result,
3434                                  should_free_on_drop: true };
3435        let err = isl_rs_ctx.last_error();
3436        if err != Error::None_ {
3437            let err_msg = isl_rs_ctx.last_error_msg();
3438            isl_rs_ctx.reset_error();
3439            return Err(LibISLError::new(err, err_msg));
3440        }
3441        Ok(isl_rs_result)
3442    }
3443
3444    /// Wraps `isl_map_order_gt`.
3445    pub fn order_gt(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
3446                    -> Result<Map, LibISLError> {
3447        let map = self;
3448        let isl_rs_ctx = map.get_ctx();
3449        let mut map = map;
3450        map.do_not_free_on_drop();
3451        let map = map.ptr;
3452        let type1 = type1.to_i32();
3453        let type2 = type2.to_i32();
3454        let isl_rs_result = unsafe { isl_map_order_gt(map, type1, pos1, type2, pos2) };
3455        let isl_rs_result = Map { ptr: isl_rs_result,
3456                                  should_free_on_drop: true };
3457        let err = isl_rs_ctx.last_error();
3458        if err != Error::None_ {
3459            let err_msg = isl_rs_ctx.last_error_msg();
3460            isl_rs_ctx.reset_error();
3461            return Err(LibISLError::new(err, err_msg));
3462        }
3463        Ok(isl_rs_result)
3464    }
3465
3466    /// Wraps `isl_map_order_le`.
3467    pub fn order_le(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
3468                    -> Result<Map, LibISLError> {
3469        let map = self;
3470        let isl_rs_ctx = map.get_ctx();
3471        let mut map = map;
3472        map.do_not_free_on_drop();
3473        let map = map.ptr;
3474        let type1 = type1.to_i32();
3475        let type2 = type2.to_i32();
3476        let isl_rs_result = unsafe { isl_map_order_le(map, type1, pos1, type2, pos2) };
3477        let isl_rs_result = Map { ptr: isl_rs_result,
3478                                  should_free_on_drop: true };
3479        let err = isl_rs_ctx.last_error();
3480        if err != Error::None_ {
3481            let err_msg = isl_rs_ctx.last_error_msg();
3482            isl_rs_ctx.reset_error();
3483            return Err(LibISLError::new(err, err_msg));
3484        }
3485        Ok(isl_rs_result)
3486    }
3487
3488    /// Wraps `isl_map_order_lt`.
3489    pub fn order_lt(self, type1: DimType, pos1: i32, type2: DimType, pos2: i32)
3490                    -> Result<Map, LibISLError> {
3491        let map = self;
3492        let isl_rs_ctx = map.get_ctx();
3493        let mut map = map;
3494        map.do_not_free_on_drop();
3495        let map = map.ptr;
3496        let type1 = type1.to_i32();
3497        let type2 = type2.to_i32();
3498        let isl_rs_result = unsafe { isl_map_order_lt(map, type1, pos1, type2, pos2) };
3499        let isl_rs_result = Map { ptr: isl_rs_result,
3500                                  should_free_on_drop: true };
3501        let err = isl_rs_ctx.last_error();
3502        if err != Error::None_ {
3503            let err_msg = isl_rs_ctx.last_error_msg();
3504            isl_rs_ctx.reset_error();
3505            return Err(LibISLError::new(err, err_msg));
3506        }
3507        Ok(isl_rs_result)
3508    }
3509
3510    /// Wraps `isl_map_params`.
3511    pub fn params(self) -> Result<Set, LibISLError> {
3512        let map = self;
3513        let isl_rs_ctx = map.get_ctx();
3514        let mut map = map;
3515        map.do_not_free_on_drop();
3516        let map = map.ptr;
3517        let isl_rs_result = unsafe { isl_map_params(map) };
3518        let isl_rs_result = Set { ptr: isl_rs_result,
3519                                  should_free_on_drop: true };
3520        let err = isl_rs_ctx.last_error();
3521        if err != Error::None_ {
3522            let err_msg = isl_rs_ctx.last_error_msg();
3523            isl_rs_ctx.reset_error();
3524            return Err(LibISLError::new(err, err_msg));
3525        }
3526        Ok(isl_rs_result)
3527    }
3528
3529    /// Wraps `isl_map_plain_get_val_if_fixed`.
3530    pub fn plain_get_val_if_fixed(&self, type_: DimType, pos: u32) -> Result<Val, LibISLError> {
3531        let map = self;
3532        let isl_rs_ctx = map.get_ctx();
3533        let map = map.ptr;
3534        let type_ = type_.to_i32();
3535        let isl_rs_result = unsafe { isl_map_plain_get_val_if_fixed(map, type_, pos) };
3536        let isl_rs_result = Val { ptr: isl_rs_result,
3537                                  should_free_on_drop: true };
3538        let err = isl_rs_ctx.last_error();
3539        if err != Error::None_ {
3540            let err_msg = isl_rs_ctx.last_error_msg();
3541            isl_rs_ctx.reset_error();
3542            return Err(LibISLError::new(err, err_msg));
3543        }
3544        Ok(isl_rs_result)
3545    }
3546
3547    /// Wraps `isl_map_plain_is_empty`.
3548    pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
3549        let map = self;
3550        let isl_rs_ctx = map.get_ctx();
3551        let map = map.ptr;
3552        let isl_rs_result = unsafe { isl_map_plain_is_empty(map) };
3553        let isl_rs_result = match isl_rs_result {
3554            0 => false,
3555            1 => true,
3556            _ => {
3557                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
3558            }
3559        };
3560        let err = isl_rs_ctx.last_error();
3561        if err != Error::None_ {
3562            let err_msg = isl_rs_ctx.last_error_msg();
3563            isl_rs_ctx.reset_error();
3564            return Err(LibISLError::new(err, err_msg));
3565        }
3566        Ok(isl_rs_result)
3567    }
3568
3569    /// Wraps `isl_map_plain_is_equal`.
3570    pub fn plain_is_equal(&self, map2: &Map) -> Result<bool, LibISLError> {
3571        let map1 = self;
3572        let isl_rs_ctx = map1.get_ctx();
3573        let map1 = map1.ptr;
3574        let map2 = map2.ptr;
3575        let isl_rs_result = unsafe { isl_map_plain_is_equal(map1, map2) };
3576        let isl_rs_result = match isl_rs_result {
3577            0 => false,
3578            1 => true,
3579            _ => {
3580                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
3581            }
3582        };
3583        let err = isl_rs_ctx.last_error();
3584        if err != Error::None_ {
3585            let err_msg = isl_rs_ctx.last_error_msg();
3586            isl_rs_ctx.reset_error();
3587            return Err(LibISLError::new(err, err_msg));
3588        }
3589        Ok(isl_rs_result)
3590    }
3591
3592    /// Wraps `isl_map_plain_is_injective`.
3593    pub fn plain_is_injective(&self) -> Result<bool, LibISLError> {
3594        let map = self;
3595        let isl_rs_ctx = map.get_ctx();
3596        let map = map.ptr;
3597        let isl_rs_result = unsafe { isl_map_plain_is_injective(map) };
3598        let isl_rs_result = match isl_rs_result {
3599            0 => false,
3600            1 => true,
3601            _ => {
3602                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
3603            }
3604        };
3605        let err = isl_rs_ctx.last_error();
3606        if err != Error::None_ {
3607            let err_msg = isl_rs_ctx.last_error_msg();
3608            isl_rs_ctx.reset_error();
3609            return Err(LibISLError::new(err, err_msg));
3610        }
3611        Ok(isl_rs_result)
3612    }
3613
3614    /// Wraps `isl_map_plain_is_single_valued`.
3615    pub fn plain_is_single_valued(&self) -> Result<bool, LibISLError> {
3616        let map = self;
3617        let isl_rs_ctx = map.get_ctx();
3618        let map = map.ptr;
3619        let isl_rs_result = unsafe { isl_map_plain_is_single_valued(map) };
3620        let isl_rs_result = match isl_rs_result {
3621            0 => false,
3622            1 => true,
3623            _ => {
3624                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
3625            }
3626        };
3627        let err = isl_rs_ctx.last_error();
3628        if err != Error::None_ {
3629            let err_msg = isl_rs_ctx.last_error_msg();
3630            isl_rs_ctx.reset_error();
3631            return Err(LibISLError::new(err, err_msg));
3632        }
3633        Ok(isl_rs_result)
3634    }
3635
3636    /// Wraps `isl_map_plain_is_universe`.
3637    pub fn plain_is_universe(&self) -> Result<bool, LibISLError> {
3638        let map = self;
3639        let isl_rs_ctx = map.get_ctx();
3640        let map = map.ptr;
3641        let isl_rs_result = unsafe { isl_map_plain_is_universe(map) };
3642        let isl_rs_result = match isl_rs_result {
3643            0 => false,
3644            1 => true,
3645            _ => {
3646                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
3647            }
3648        };
3649        let err = isl_rs_ctx.last_error();
3650        if err != Error::None_ {
3651            let err_msg = isl_rs_ctx.last_error_msg();
3652            isl_rs_ctx.reset_error();
3653            return Err(LibISLError::new(err, err_msg));
3654        }
3655        Ok(isl_rs_result)
3656    }
3657
3658    /// Wraps `isl_map_plain_unshifted_simple_hull`.
3659    pub fn plain_unshifted_simple_hull(self) -> Result<BasicMap, LibISLError> {
3660        let map = self;
3661        let isl_rs_ctx = map.get_ctx();
3662        let mut map = map;
3663        map.do_not_free_on_drop();
3664        let map = map.ptr;
3665        let isl_rs_result = unsafe { isl_map_plain_unshifted_simple_hull(map) };
3666        let isl_rs_result = BasicMap { ptr: isl_rs_result,
3667                                       should_free_on_drop: true };
3668        let err = isl_rs_ctx.last_error();
3669        if err != Error::None_ {
3670            let err_msg = isl_rs_ctx.last_error_msg();
3671            isl_rs_ctx.reset_error();
3672            return Err(LibISLError::new(err, err_msg));
3673        }
3674        Ok(isl_rs_result)
3675    }
3676
3677    /// Wraps `isl_map_polyhedral_hull`.
3678    pub fn polyhedral_hull(self) -> Result<BasicMap, LibISLError> {
3679        let map = self;
3680        let isl_rs_ctx = map.get_ctx();
3681        let mut map = map;
3682        map.do_not_free_on_drop();
3683        let map = map.ptr;
3684        let isl_rs_result = unsafe { isl_map_polyhedral_hull(map) };
3685        let isl_rs_result = BasicMap { ptr: isl_rs_result,
3686                                       should_free_on_drop: true };
3687        let err = isl_rs_ctx.last_error();
3688        if err != Error::None_ {
3689            let err_msg = isl_rs_ctx.last_error_msg();
3690            isl_rs_ctx.reset_error();
3691            return Err(LibISLError::new(err, err_msg));
3692        }
3693        Ok(isl_rs_result)
3694    }
3695
3696    /// Wraps `isl_map_preimage_domain_multi_aff`.
3697    pub fn preimage_domain_multi_aff(self, ma: MultiAff) -> Result<Map, LibISLError> {
3698        let map = self;
3699        let isl_rs_ctx = map.get_ctx();
3700        let mut map = map;
3701        map.do_not_free_on_drop();
3702        let map = map.ptr;
3703        let mut ma = ma;
3704        ma.do_not_free_on_drop();
3705        let ma = ma.ptr;
3706        let isl_rs_result = unsafe { isl_map_preimage_domain_multi_aff(map, ma) };
3707        let isl_rs_result = Map { ptr: isl_rs_result,
3708                                  should_free_on_drop: true };
3709        let err = isl_rs_ctx.last_error();
3710        if err != Error::None_ {
3711            let err_msg = isl_rs_ctx.last_error_msg();
3712            isl_rs_ctx.reset_error();
3713            return Err(LibISLError::new(err, err_msg));
3714        }
3715        Ok(isl_rs_result)
3716    }
3717
3718    /// Wraps `isl_map_preimage_domain_multi_pw_aff`.
3719    pub fn preimage_domain_multi_pw_aff(self, mpa: MultiPwAff) -> Result<Map, LibISLError> {
3720        let map = self;
3721        let isl_rs_ctx = map.get_ctx();
3722        let mut map = map;
3723        map.do_not_free_on_drop();
3724        let map = map.ptr;
3725        let mut mpa = mpa;
3726        mpa.do_not_free_on_drop();
3727        let mpa = mpa.ptr;
3728        let isl_rs_result = unsafe { isl_map_preimage_domain_multi_pw_aff(map, mpa) };
3729        let isl_rs_result = Map { ptr: isl_rs_result,
3730                                  should_free_on_drop: true };
3731        let err = isl_rs_ctx.last_error();
3732        if err != Error::None_ {
3733            let err_msg = isl_rs_ctx.last_error_msg();
3734            isl_rs_ctx.reset_error();
3735            return Err(LibISLError::new(err, err_msg));
3736        }
3737        Ok(isl_rs_result)
3738    }
3739
3740    /// Wraps `isl_map_preimage_domain_pw_multi_aff`.
3741    pub fn preimage_domain_pw_multi_aff(self, pma: PwMultiAff) -> Result<Map, LibISLError> {
3742        let map = self;
3743        let isl_rs_ctx = map.get_ctx();
3744        let mut map = map;
3745        map.do_not_free_on_drop();
3746        let map = map.ptr;
3747        let mut pma = pma;
3748        pma.do_not_free_on_drop();
3749        let pma = pma.ptr;
3750        let isl_rs_result = unsafe { isl_map_preimage_domain_pw_multi_aff(map, pma) };
3751        let isl_rs_result = Map { ptr: isl_rs_result,
3752                                  should_free_on_drop: true };
3753        let err = isl_rs_ctx.last_error();
3754        if err != Error::None_ {
3755            let err_msg = isl_rs_ctx.last_error_msg();
3756            isl_rs_ctx.reset_error();
3757            return Err(LibISLError::new(err, err_msg));
3758        }
3759        Ok(isl_rs_result)
3760    }
3761
3762    /// Wraps `isl_map_preimage_range_multi_aff`.
3763    pub fn preimage_range_multi_aff(self, ma: MultiAff) -> Result<Map, LibISLError> {
3764        let map = self;
3765        let isl_rs_ctx = map.get_ctx();
3766        let mut map = map;
3767        map.do_not_free_on_drop();
3768        let map = map.ptr;
3769        let mut ma = ma;
3770        ma.do_not_free_on_drop();
3771        let ma = ma.ptr;
3772        let isl_rs_result = unsafe { isl_map_preimage_range_multi_aff(map, ma) };
3773        let isl_rs_result = Map { ptr: isl_rs_result,
3774                                  should_free_on_drop: true };
3775        let err = isl_rs_ctx.last_error();
3776        if err != Error::None_ {
3777            let err_msg = isl_rs_ctx.last_error_msg();
3778            isl_rs_ctx.reset_error();
3779            return Err(LibISLError::new(err, err_msg));
3780        }
3781        Ok(isl_rs_result)
3782    }
3783
3784    /// Wraps `isl_map_preimage_range_pw_multi_aff`.
3785    pub fn preimage_range_pw_multi_aff(self, pma: PwMultiAff) -> Result<Map, LibISLError> {
3786        let map = self;
3787        let isl_rs_ctx = map.get_ctx();
3788        let mut map = map;
3789        map.do_not_free_on_drop();
3790        let map = map.ptr;
3791        let mut pma = pma;
3792        pma.do_not_free_on_drop();
3793        let pma = pma.ptr;
3794        let isl_rs_result = unsafe { isl_map_preimage_range_pw_multi_aff(map, pma) };
3795        let isl_rs_result = Map { ptr: isl_rs_result,
3796                                  should_free_on_drop: true };
3797        let err = isl_rs_ctx.last_error();
3798        if err != Error::None_ {
3799            let err_msg = isl_rs_ctx.last_error_msg();
3800            isl_rs_ctx.reset_error();
3801            return Err(LibISLError::new(err, err_msg));
3802        }
3803        Ok(isl_rs_result)
3804    }
3805
3806    /// Wraps `isl_map_product`.
3807    pub fn product(self, map2: Map) -> Result<Map, LibISLError> {
3808        let map1 = self;
3809        let isl_rs_ctx = map1.get_ctx();
3810        let mut map1 = map1;
3811        map1.do_not_free_on_drop();
3812        let map1 = map1.ptr;
3813        let mut map2 = map2;
3814        map2.do_not_free_on_drop();
3815        let map2 = map2.ptr;
3816        let isl_rs_result = unsafe { isl_map_product(map1, map2) };
3817        let isl_rs_result = Map { ptr: isl_rs_result,
3818                                  should_free_on_drop: true };
3819        let err = isl_rs_ctx.last_error();
3820        if err != Error::None_ {
3821            let err_msg = isl_rs_ctx.last_error_msg();
3822            isl_rs_ctx.reset_error();
3823            return Err(LibISLError::new(err, err_msg));
3824        }
3825        Ok(isl_rs_result)
3826    }
3827
3828    /// Wraps `isl_map_project_out`.
3829    pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<Map, LibISLError> {
3830        let map = self;
3831        let isl_rs_ctx = map.get_ctx();
3832        let mut map = map;
3833        map.do_not_free_on_drop();
3834        let map = map.ptr;
3835        let type_ = type_.to_i32();
3836        let isl_rs_result = unsafe { isl_map_project_out(map, type_, first, n) };
3837        let isl_rs_result = Map { ptr: isl_rs_result,
3838                                  should_free_on_drop: true };
3839        let err = isl_rs_ctx.last_error();
3840        if err != Error::None_ {
3841            let err_msg = isl_rs_ctx.last_error_msg();
3842            isl_rs_ctx.reset_error();
3843            return Err(LibISLError::new(err, err_msg));
3844        }
3845        Ok(isl_rs_result)
3846    }
3847
3848    /// Wraps `isl_map_project_out_all_params`.
3849    pub fn project_out_all_params(self) -> Result<Map, LibISLError> {
3850        let map = self;
3851        let isl_rs_ctx = map.get_ctx();
3852        let mut map = map;
3853        map.do_not_free_on_drop();
3854        let map = map.ptr;
3855        let isl_rs_result = unsafe { isl_map_project_out_all_params(map) };
3856        let isl_rs_result = Map { ptr: isl_rs_result,
3857                                  should_free_on_drop: true };
3858        let err = isl_rs_ctx.last_error();
3859        if err != Error::None_ {
3860            let err_msg = isl_rs_ctx.last_error_msg();
3861            isl_rs_ctx.reset_error();
3862            return Err(LibISLError::new(err, err_msg));
3863        }
3864        Ok(isl_rs_result)
3865    }
3866
3867    /// Wraps `isl_map_project_out_param_id`.
3868    pub fn project_out_param_id(self, id: Id) -> Result<Map, LibISLError> {
3869        let map = self;
3870        let isl_rs_ctx = map.get_ctx();
3871        let mut map = map;
3872        map.do_not_free_on_drop();
3873        let map = map.ptr;
3874        let mut id = id;
3875        id.do_not_free_on_drop();
3876        let id = id.ptr;
3877        let isl_rs_result = unsafe { isl_map_project_out_param_id(map, id) };
3878        let isl_rs_result = Map { ptr: isl_rs_result,
3879                                  should_free_on_drop: true };
3880        let err = isl_rs_ctx.last_error();
3881        if err != Error::None_ {
3882            let err_msg = isl_rs_ctx.last_error_msg();
3883            isl_rs_ctx.reset_error();
3884            return Err(LibISLError::new(err, err_msg));
3885        }
3886        Ok(isl_rs_result)
3887    }
3888
3889    /// Wraps `isl_map_project_out_param_id_list`.
3890    pub fn project_out_param_id_list(self, list: IdList) -> Result<Map, LibISLError> {
3891        let map = self;
3892        let isl_rs_ctx = map.get_ctx();
3893        let mut map = map;
3894        map.do_not_free_on_drop();
3895        let map = map.ptr;
3896        let mut list = list;
3897        list.do_not_free_on_drop();
3898        let list = list.ptr;
3899        let isl_rs_result = unsafe { isl_map_project_out_param_id_list(map, list) };
3900        let isl_rs_result = Map { ptr: isl_rs_result,
3901                                  should_free_on_drop: true };
3902        let err = isl_rs_ctx.last_error();
3903        if err != Error::None_ {
3904            let err_msg = isl_rs_ctx.last_error_msg();
3905            isl_rs_ctx.reset_error();
3906            return Err(LibISLError::new(err, err_msg));
3907        }
3908        Ok(isl_rs_result)
3909    }
3910
3911    /// Wraps `isl_map_range`.
3912    pub fn range(self) -> Result<Set, LibISLError> {
3913        let map = self;
3914        let isl_rs_ctx = map.get_ctx();
3915        let mut map = map;
3916        map.do_not_free_on_drop();
3917        let map = map.ptr;
3918        let isl_rs_result = unsafe { isl_map_range(map) };
3919        let isl_rs_result = Set { ptr: isl_rs_result,
3920                                  should_free_on_drop: true };
3921        let err = isl_rs_ctx.last_error();
3922        if err != Error::None_ {
3923            let err_msg = isl_rs_ctx.last_error_msg();
3924            isl_rs_ctx.reset_error();
3925            return Err(LibISLError::new(err, err_msg));
3926        }
3927        Ok(isl_rs_result)
3928    }
3929
3930    /// Wraps `isl_map_range_curry`.
3931    pub fn range_curry(self) -> Result<Map, LibISLError> {
3932        let map = self;
3933        let isl_rs_ctx = map.get_ctx();
3934        let mut map = map;
3935        map.do_not_free_on_drop();
3936        let map = map.ptr;
3937        let isl_rs_result = unsafe { isl_map_range_curry(map) };
3938        let isl_rs_result = Map { ptr: isl_rs_result,
3939                                  should_free_on_drop: true };
3940        let err = isl_rs_ctx.last_error();
3941        if err != Error::None_ {
3942            let err_msg = isl_rs_ctx.last_error_msg();
3943            isl_rs_ctx.reset_error();
3944            return Err(LibISLError::new(err, err_msg));
3945        }
3946        Ok(isl_rs_result)
3947    }
3948
3949    /// Wraps `isl_map_range_factor_domain`.
3950    pub fn range_factor_domain(self) -> Result<Map, LibISLError> {
3951        let map = self;
3952        let isl_rs_ctx = map.get_ctx();
3953        let mut map = map;
3954        map.do_not_free_on_drop();
3955        let map = map.ptr;
3956        let isl_rs_result = unsafe { isl_map_range_factor_domain(map) };
3957        let isl_rs_result = Map { ptr: isl_rs_result,
3958                                  should_free_on_drop: true };
3959        let err = isl_rs_ctx.last_error();
3960        if err != Error::None_ {
3961            let err_msg = isl_rs_ctx.last_error_msg();
3962            isl_rs_ctx.reset_error();
3963            return Err(LibISLError::new(err, err_msg));
3964        }
3965        Ok(isl_rs_result)
3966    }
3967
3968    /// Wraps `isl_map_range_factor_range`.
3969    pub fn range_factor_range(self) -> Result<Map, LibISLError> {
3970        let map = self;
3971        let isl_rs_ctx = map.get_ctx();
3972        let mut map = map;
3973        map.do_not_free_on_drop();
3974        let map = map.ptr;
3975        let isl_rs_result = unsafe { isl_map_range_factor_range(map) };
3976        let isl_rs_result = Map { ptr: isl_rs_result,
3977                                  should_free_on_drop: true };
3978        let err = isl_rs_ctx.last_error();
3979        if err != Error::None_ {
3980            let err_msg = isl_rs_ctx.last_error_msg();
3981            isl_rs_ctx.reset_error();
3982            return Err(LibISLError::new(err, err_msg));
3983        }
3984        Ok(isl_rs_result)
3985    }
3986
3987    /// Wraps `isl_map_range_is_wrapping`.
3988    pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
3989        let map = self;
3990        let isl_rs_ctx = map.get_ctx();
3991        let map = map.ptr;
3992        let isl_rs_result = unsafe { isl_map_range_is_wrapping(map) };
3993        let isl_rs_result = match isl_rs_result {
3994            0 => false,
3995            1 => true,
3996            _ => {
3997                return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
3998            }
3999        };
4000        let err = isl_rs_ctx.last_error();
4001        if err != Error::None_ {
4002            let err_msg = isl_rs_ctx.last_error_msg();
4003            isl_rs_ctx.reset_error();
4004            return Err(LibISLError::new(err, err_msg));
4005        }
4006        Ok(isl_rs_result)
4007    }
4008
4009    /// Wraps `isl_map_range_map`.
4010    pub fn range_map(self) -> Result<Map, LibISLError> {
4011        let map = self;
4012        let isl_rs_ctx = map.get_ctx();
4013        let mut map = map;
4014        map.do_not_free_on_drop();
4015        let map = map.ptr;
4016        let isl_rs_result = unsafe { isl_map_range_map(map) };
4017        let isl_rs_result = Map { ptr: isl_rs_result,
4018                                  should_free_on_drop: true };
4019        let err = isl_rs_ctx.last_error();
4020        if err != Error::None_ {
4021            let err_msg = isl_rs_ctx.last_error_msg();
4022            isl_rs_ctx.reset_error();
4023            return Err(LibISLError::new(err, err_msg));
4024        }
4025        Ok(isl_rs_result)
4026    }
4027
4028    /// Wraps `isl_map_range_product`.
4029    pub fn range_product(self, map2: Map) -> Result<Map, LibISLError> {
4030        let map1 = self;
4031        let isl_rs_ctx = map1.get_ctx();
4032        let mut map1 = map1;
4033        map1.do_not_free_on_drop();
4034        let map1 = map1.ptr;
4035        let mut map2 = map2;
4036        map2.do_not_free_on_drop();
4037        let map2 = map2.ptr;
4038        let isl_rs_result = unsafe { isl_map_range_product(map1, map2) };
4039        let isl_rs_result = Map { ptr: isl_rs_result,
4040                                  should_free_on_drop: true };
4041        let err = isl_rs_ctx.last_error();
4042        if err != Error::None_ {
4043            let err_msg = isl_rs_ctx.last_error_msg();
4044            isl_rs_ctx.reset_error();
4045            return Err(LibISLError::new(err, err_msg));
4046        }
4047        Ok(isl_rs_result)
4048    }
4049
4050    /// Wraps `isl_map_range_reverse`.
4051    pub fn range_reverse(self) -> Result<Map, LibISLError> {
4052        let map = self;
4053        let isl_rs_ctx = map.get_ctx();
4054        let mut map = map;
4055        map.do_not_free_on_drop();
4056        let map = map.ptr;
4057        let isl_rs_result = unsafe { isl_map_range_reverse(map) };
4058        let isl_rs_result = Map { ptr: isl_rs_result,
4059                                  should_free_on_drop: true };
4060        let err = isl_rs_ctx.last_error();
4061        if err != Error::None_ {
4062            let err_msg = isl_rs_ctx.last_error_msg();
4063            isl_rs_ctx.reset_error();
4064            return Err(LibISLError::new(err, err_msg));
4065        }
4066        Ok(isl_rs_result)
4067    }
4068
4069    /// Wraps `isl_map_range_tuple_dim`.
4070    pub fn range_tuple_dim(&self) -> Result<i32, LibISLError> {
4071        let map = self;
4072        let isl_rs_ctx = map.get_ctx();
4073        let map = map.ptr;
4074        let isl_rs_result = unsafe { isl_map_range_tuple_dim(map) };
4075        let err = isl_rs_ctx.last_error();
4076        if err != Error::None_ {
4077            let err_msg = isl_rs_ctx.last_error_msg();
4078            isl_rs_ctx.reset_error();
4079            return Err(LibISLError::new(err, err_msg));
4080        }
4081        Ok(isl_rs_result)
4082    }
4083
4084    /// Wraps `isl_map_read_from_str`.
4085    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<Map, LibISLError> {
4086        let isl_rs_ctx = Context { ptr: ctx.ptr,
4087                                   should_free_on_drop: false };
4088        let ctx = ctx.ptr;
4089        let str_ = CString::new(str_).unwrap();
4090        let str_ = str_.as_ptr();
4091        let isl_rs_result = unsafe { isl_map_read_from_str(ctx, str_) };
4092        let isl_rs_result = Map { ptr: isl_rs_result,
4093                                  should_free_on_drop: true };
4094        let err = isl_rs_ctx.last_error();
4095        if err != Error::None_ {
4096            let err_msg = isl_rs_ctx.last_error_msg();
4097            isl_rs_ctx.reset_error();
4098            return Err(LibISLError::new(err, err_msg));
4099        }
4100        Ok(isl_rs_result)
4101    }
4102
4103    /// Wraps `isl_map_remove_dims`.
4104    pub fn remove_dims(self, type_: DimType, first: u32, n: u32) -> Result<Map, LibISLError> {
4105        let map = self;
4106        let isl_rs_ctx = map.get_ctx();
4107        let mut map = map;
4108        map.do_not_free_on_drop();
4109        let map = map.ptr;
4110        let type_ = type_.to_i32();
4111        let isl_rs_result = unsafe { isl_map_remove_dims(map, type_, first, n) };
4112        let isl_rs_result = Map { ptr: isl_rs_result,
4113                                  should_free_on_drop: true };
4114        let err = isl_rs_ctx.last_error();
4115        if err != Error::None_ {
4116            let err_msg = isl_rs_ctx.last_error_msg();
4117            isl_rs_ctx.reset_error();
4118            return Err(LibISLError::new(err, err_msg));
4119        }
4120        Ok(isl_rs_result)
4121    }
4122
4123    /// Wraps `isl_map_remove_divs`.
4124    pub fn remove_divs(self) -> Result<Map, LibISLError> {
4125        let map = self;
4126        let isl_rs_ctx = map.get_ctx();
4127        let mut map = map;
4128        map.do_not_free_on_drop();
4129        let map = map.ptr;
4130        let isl_rs_result = unsafe { isl_map_remove_divs(map) };
4131        let isl_rs_result = Map { ptr: isl_rs_result,
4132                                  should_free_on_drop: true };
4133        let err = isl_rs_ctx.last_error();
4134        if err != Error::None_ {
4135            let err_msg = isl_rs_ctx.last_error_msg();
4136            isl_rs_ctx.reset_error();
4137            return Err(LibISLError::new(err, err_msg));
4138        }
4139        Ok(isl_rs_result)
4140    }
4141
4142    /// Wraps `isl_map_remove_divs_involving_dims`.
4143    pub fn remove_divs_involving_dims(self, type_: DimType, first: u32, n: u32)
4144                                      -> Result<Map, LibISLError> {
4145        let map = self;
4146        let isl_rs_ctx = map.get_ctx();
4147        let mut map = map;
4148        map.do_not_free_on_drop();
4149        let map = map.ptr;
4150        let type_ = type_.to_i32();
4151        let isl_rs_result = unsafe { isl_map_remove_divs_involving_dims(map, type_, first, n) };
4152        let isl_rs_result = Map { ptr: isl_rs_result,
4153                                  should_free_on_drop: true };
4154        let err = isl_rs_ctx.last_error();
4155        if err != Error::None_ {
4156            let err_msg = isl_rs_ctx.last_error_msg();
4157            isl_rs_ctx.reset_error();
4158            return Err(LibISLError::new(err, err_msg));
4159        }
4160        Ok(isl_rs_result)
4161    }
4162
4163    /// Wraps `isl_map_remove_inputs`.
4164    pub fn remove_inputs(self, first: u32, n: u32) -> Result<Map, LibISLError> {
4165        let map = self;
4166        let isl_rs_ctx = map.get_ctx();
4167        let mut map = map;
4168        map.do_not_free_on_drop();
4169        let map = map.ptr;
4170        let isl_rs_result = unsafe { isl_map_remove_inputs(map, first, n) };
4171        let isl_rs_result = Map { ptr: isl_rs_result,
4172                                  should_free_on_drop: true };
4173        let err = isl_rs_ctx.last_error();
4174        if err != Error::None_ {
4175            let err_msg = isl_rs_ctx.last_error_msg();
4176            isl_rs_ctx.reset_error();
4177            return Err(LibISLError::new(err, err_msg));
4178        }
4179        Ok(isl_rs_result)
4180    }
4181
4182    /// Wraps `isl_map_remove_redundancies`.
4183    pub fn remove_redundancies(self) -> Result<Map, LibISLError> {
4184        let map = self;
4185        let isl_rs_ctx = map.get_ctx();
4186        let mut map = map;
4187        map.do_not_free_on_drop();
4188        let map = map.ptr;
4189        let isl_rs_result = unsafe { isl_map_remove_redundancies(map) };
4190        let isl_rs_result = Map { ptr: isl_rs_result,
4191                                  should_free_on_drop: true };
4192        let err = isl_rs_ctx.last_error();
4193        if err != Error::None_ {
4194            let err_msg = isl_rs_ctx.last_error_msg();
4195            isl_rs_ctx.reset_error();
4196            return Err(LibISLError::new(err, err_msg));
4197        }
4198        Ok(isl_rs_result)
4199    }
4200
4201    /// Wraps `isl_map_remove_unknown_divs`.
4202    pub fn remove_unknown_divs(self) -> Result<Map, LibISLError> {
4203        let map = self;
4204        let isl_rs_ctx = map.get_ctx();
4205        let mut map = map;
4206        map.do_not_free_on_drop();
4207        let map = map.ptr;
4208        let isl_rs_result = unsafe { isl_map_remove_unknown_divs(map) };
4209        let isl_rs_result = Map { ptr: isl_rs_result,
4210                                  should_free_on_drop: true };
4211        let err = isl_rs_ctx.last_error();
4212        if err != Error::None_ {
4213            let err_msg = isl_rs_ctx.last_error_msg();
4214            isl_rs_ctx.reset_error();
4215            return Err(LibISLError::new(err, err_msg));
4216        }
4217        Ok(isl_rs_result)
4218    }
4219
4220    /// Wraps `isl_map_reset_tuple_id`.
4221    pub fn reset_tuple_id(self, type_: DimType) -> Result<Map, LibISLError> {
4222        let map = self;
4223        let isl_rs_ctx = map.get_ctx();
4224        let mut map = map;
4225        map.do_not_free_on_drop();
4226        let map = map.ptr;
4227        let type_ = type_.to_i32();
4228        let isl_rs_result = unsafe { isl_map_reset_tuple_id(map, type_) };
4229        let isl_rs_result = Map { ptr: isl_rs_result,
4230                                  should_free_on_drop: true };
4231        let err = isl_rs_ctx.last_error();
4232        if err != Error::None_ {
4233            let err_msg = isl_rs_ctx.last_error_msg();
4234            isl_rs_ctx.reset_error();
4235            return Err(LibISLError::new(err, err_msg));
4236        }
4237        Ok(isl_rs_result)
4238    }
4239
4240    /// Wraps `isl_map_reset_user`.
4241    pub fn reset_user(self) -> Result<Map, LibISLError> {
4242        let map = self;
4243        let isl_rs_ctx = map.get_ctx();
4244        let mut map = map;
4245        map.do_not_free_on_drop();
4246        let map = map.ptr;
4247        let isl_rs_result = unsafe { isl_map_reset_user(map) };
4248        let isl_rs_result = Map { ptr: isl_rs_result,
4249                                  should_free_on_drop: true };
4250        let err = isl_rs_ctx.last_error();
4251        if err != Error::None_ {
4252            let err_msg = isl_rs_ctx.last_error_msg();
4253            isl_rs_ctx.reset_error();
4254            return Err(LibISLError::new(err, err_msg));
4255        }
4256        Ok(isl_rs_result)
4257    }
4258
4259    /// Wraps `isl_map_reverse`.
4260    pub fn reverse(self) -> Result<Map, LibISLError> {
4261        let map = self;
4262        let isl_rs_ctx = map.get_ctx();
4263        let mut map = map;
4264        map.do_not_free_on_drop();
4265        let map = map.ptr;
4266        let isl_rs_result = unsafe { isl_map_reverse(map) };
4267        let isl_rs_result = Map { ptr: isl_rs_result,
4268                                  should_free_on_drop: true };
4269        let err = isl_rs_ctx.last_error();
4270        if err != Error::None_ {
4271            let err_msg = isl_rs_ctx.last_error_msg();
4272            isl_rs_ctx.reset_error();
4273            return Err(LibISLError::new(err, err_msg));
4274        }
4275        Ok(isl_rs_result)
4276    }
4277
4278    /// Wraps `isl_map_sample`.
4279    pub fn sample(self) -> Result<BasicMap, LibISLError> {
4280        let map = self;
4281        let isl_rs_ctx = map.get_ctx();
4282        let mut map = map;
4283        map.do_not_free_on_drop();
4284        let map = map.ptr;
4285        let isl_rs_result = unsafe { isl_map_sample(map) };
4286        let isl_rs_result = BasicMap { ptr: isl_rs_result,
4287                                       should_free_on_drop: true };
4288        let err = isl_rs_ctx.last_error();
4289        if err != Error::None_ {
4290            let err_msg = isl_rs_ctx.last_error_msg();
4291            isl_rs_ctx.reset_error();
4292            return Err(LibISLError::new(err, err_msg));
4293        }
4294        Ok(isl_rs_result)
4295    }
4296
4297    /// Wraps `isl_map_set_dim_id`.
4298    pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<Map, LibISLError> {
4299        let map = self;
4300        let isl_rs_ctx = map.get_ctx();
4301        let mut map = map;
4302        map.do_not_free_on_drop();
4303        let map = map.ptr;
4304        let type_ = type_.to_i32();
4305        let mut id = id;
4306        id.do_not_free_on_drop();
4307        let id = id.ptr;
4308        let isl_rs_result = unsafe { isl_map_set_dim_id(map, type_, pos, id) };
4309        let isl_rs_result = Map { ptr: isl_rs_result,
4310                                  should_free_on_drop: true };
4311        let err = isl_rs_ctx.last_error();
4312        if err != Error::None_ {
4313            let err_msg = isl_rs_ctx.last_error_msg();
4314            isl_rs_ctx.reset_error();
4315            return Err(LibISLError::new(err, err_msg));
4316        }
4317        Ok(isl_rs_result)
4318    }
4319
4320    /// Wraps `isl_map_set_dim_name`.
4321    pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<Map, LibISLError> {
4322        let map = self;
4323        let isl_rs_ctx = map.get_ctx();
4324        let mut map = map;
4325        map.do_not_free_on_drop();
4326        let map = map.ptr;
4327        let type_ = type_.to_i32();
4328        let s = CString::new(s).unwrap();
4329        let s = s.as_ptr();
4330        let isl_rs_result = unsafe { isl_map_set_dim_name(map, type_, pos, s) };
4331        let isl_rs_result = Map { ptr: isl_rs_result,
4332                                  should_free_on_drop: true };
4333        let err = isl_rs_ctx.last_error();
4334        if err != Error::None_ {
4335            let err_msg = isl_rs_ctx.last_error_msg();
4336            isl_rs_ctx.reset_error();
4337            return Err(LibISLError::new(err, err_msg));
4338        }
4339        Ok(isl_rs_result)
4340    }
4341
4342    /// Wraps `isl_map_set_domain_tuple_id`.
4343    pub fn set_domain_tuple_id(self, id: Id) -> Result<Map, LibISLError> {
4344        let map = self;
4345        let isl_rs_ctx = map.get_ctx();
4346        let mut map = map;
4347        map.do_not_free_on_drop();
4348        let map = map.ptr;
4349        let mut id = id;
4350        id.do_not_free_on_drop();
4351        let id = id.ptr;
4352        let isl_rs_result = unsafe { isl_map_set_domain_tuple_id(map, id) };
4353        let isl_rs_result = Map { ptr: isl_rs_result,
4354                                  should_free_on_drop: true };
4355        let err = isl_rs_ctx.last_error();
4356        if err != Error::None_ {
4357            let err_msg = isl_rs_ctx.last_error_msg();
4358            isl_rs_ctx.reset_error();
4359            return Err(LibISLError::new(err, err_msg));
4360        }
4361        Ok(isl_rs_result)
4362    }
4363
4364    /// Wraps `isl_map_set_range_tuple_id`.
4365    pub fn set_range_tuple_id(self, id: Id) -> Result<Map, LibISLError> {
4366        let map = self;
4367        let isl_rs_ctx = map.get_ctx();
4368        let mut map = map;
4369        map.do_not_free_on_drop();
4370        let map = map.ptr;
4371        let mut id = id;
4372        id.do_not_free_on_drop();
4373        let id = id.ptr;
4374        let isl_rs_result = unsafe { isl_map_set_range_tuple_id(map, id) };
4375        let isl_rs_result = Map { ptr: isl_rs_result,
4376                                  should_free_on_drop: true };
4377        let err = isl_rs_ctx.last_error();
4378        if err != Error::None_ {
4379            let err_msg = isl_rs_ctx.last_error_msg();
4380            isl_rs_ctx.reset_error();
4381            return Err(LibISLError::new(err, err_msg));
4382        }
4383        Ok(isl_rs_result)
4384    }
4385
4386    /// Wraps `isl_map_set_tuple_id`.
4387    pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<Map, LibISLError> {
4388        let map = self;
4389        let isl_rs_ctx = map.get_ctx();
4390        let mut map = map;
4391        map.do_not_free_on_drop();
4392        let map = map.ptr;
4393        let type_ = type_.to_i32();
4394        let mut id = id;
4395        id.do_not_free_on_drop();
4396        let id = id.ptr;
4397        let isl_rs_result = unsafe { isl_map_set_tuple_id(map, type_, id) };
4398        let isl_rs_result = Map { ptr: isl_rs_result,
4399                                  should_free_on_drop: true };
4400        let err = isl_rs_ctx.last_error();
4401        if err != Error::None_ {
4402            let err_msg = isl_rs_ctx.last_error_msg();
4403            isl_rs_ctx.reset_error();
4404            return Err(LibISLError::new(err, err_msg));
4405        }
4406        Ok(isl_rs_result)
4407    }
4408
4409    /// Wraps `isl_map_set_tuple_name`.
4410    pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<Map, LibISLError> {
4411        let map = self;
4412        let isl_rs_ctx = map.get_ctx();
4413        let mut map = map;
4414        map.do_not_free_on_drop();
4415        let map = map.ptr;
4416        let type_ = type_.to_i32();
4417        let s = CString::new(s).unwrap();
4418        let s = s.as_ptr();
4419        let isl_rs_result = unsafe { isl_map_set_tuple_name(map, type_, s) };
4420        let isl_rs_result = Map { ptr: isl_rs_result,
4421                                  should_free_on_drop: true };
4422        let err = isl_rs_ctx.last_error();
4423        if err != Error::None_ {
4424            let err_msg = isl_rs_ctx.last_error_msg();
4425            isl_rs_ctx.reset_error();
4426            return Err(LibISLError::new(err, err_msg));
4427        }
4428        Ok(isl_rs_result)
4429    }
4430
4431    /// Wraps `isl_map_simple_hull`.
4432    pub fn simple_hull(self) -> Result<BasicMap, LibISLError> {
4433        let map = self;
4434        let isl_rs_ctx = map.get_ctx();
4435        let mut map = map;
4436        map.do_not_free_on_drop();
4437        let map = map.ptr;
4438        let isl_rs_result = unsafe { isl_map_simple_hull(map) };
4439        let isl_rs_result = BasicMap { ptr: isl_rs_result,
4440                                       should_free_on_drop: true };
4441        let err = isl_rs_ctx.last_error();
4442        if err != Error::None_ {
4443            let err_msg = isl_rs_ctx.last_error_msg();
4444            isl_rs_ctx.reset_error();
4445            return Err(LibISLError::new(err, err_msg));
4446        }
4447        Ok(isl_rs_result)
4448    }
4449
4450    /// Wraps `isl_map_subtract`.
4451    pub fn subtract(self, map2: Map) -> Result<Map, LibISLError> {
4452        let map1 = self;
4453        let isl_rs_ctx = map1.get_ctx();
4454        let mut map1 = map1;
4455        map1.do_not_free_on_drop();
4456        let map1 = map1.ptr;
4457        let mut map2 = map2;
4458        map2.do_not_free_on_drop();
4459        let map2 = map2.ptr;
4460        let isl_rs_result = unsafe { isl_map_subtract(map1, map2) };
4461        let isl_rs_result = Map { ptr: isl_rs_result,
4462                                  should_free_on_drop: true };
4463        let err = isl_rs_ctx.last_error();
4464        if err != Error::None_ {
4465            let err_msg = isl_rs_ctx.last_error_msg();
4466            isl_rs_ctx.reset_error();
4467            return Err(LibISLError::new(err, err_msg));
4468        }
4469        Ok(isl_rs_result)
4470    }
4471
4472    /// Wraps `isl_map_subtract_domain`.
4473    pub fn subtract_domain(self, dom: Set) -> Result<Map, LibISLError> {
4474        let map = self;
4475        let isl_rs_ctx = map.get_ctx();
4476        let mut map = map;
4477        map.do_not_free_on_drop();
4478        let map = map.ptr;
4479        let mut dom = dom;
4480        dom.do_not_free_on_drop();
4481        let dom = dom.ptr;
4482        let isl_rs_result = unsafe { isl_map_subtract_domain(map, dom) };
4483        let isl_rs_result = Map { ptr: isl_rs_result,
4484                                  should_free_on_drop: true };
4485        let err = isl_rs_ctx.last_error();
4486        if err != Error::None_ {
4487            let err_msg = isl_rs_ctx.last_error_msg();
4488            isl_rs_ctx.reset_error();
4489            return Err(LibISLError::new(err, err_msg));
4490        }
4491        Ok(isl_rs_result)
4492    }
4493
4494    /// Wraps `isl_map_subtract_range`.
4495    pub fn subtract_range(self, dom: Set) -> Result<Map, LibISLError> {
4496        let map = self;
4497        let isl_rs_ctx = map.get_ctx();
4498        let mut map = map;
4499        map.do_not_free_on_drop();
4500        let map = map.ptr;
4501        let mut dom = dom;
4502        dom.do_not_free_on_drop();
4503        let dom = dom.ptr;
4504        let isl_rs_result = unsafe { isl_map_subtract_range(map, dom) };
4505        let isl_rs_result = Map { ptr: isl_rs_result,
4506                                  should_free_on_drop: true };
4507        let err = isl_rs_ctx.last_error();
4508        if err != Error::None_ {
4509            let err_msg = isl_rs_ctx.last_error_msg();
4510            isl_rs_ctx.reset_error();
4511            return Err(LibISLError::new(err, err_msg));
4512        }
4513        Ok(isl_rs_result)
4514    }
4515
4516    /// Wraps `isl_map_sum`.
4517    pub fn sum(self, map2: Map) -> Result<Map, LibISLError> {
4518        let map1 = self;
4519        let isl_rs_ctx = map1.get_ctx();
4520        let mut map1 = map1;
4521        map1.do_not_free_on_drop();
4522        let map1 = map1.ptr;
4523        let mut map2 = map2;
4524        map2.do_not_free_on_drop();
4525        let map2 = map2.ptr;
4526        let isl_rs_result = unsafe { isl_map_sum(map1, map2) };
4527        let isl_rs_result = Map { ptr: isl_rs_result,
4528                                  should_free_on_drop: true };
4529        let err = isl_rs_ctx.last_error();
4530        if err != Error::None_ {
4531            let err_msg = isl_rs_ctx.last_error_msg();
4532            isl_rs_ctx.reset_error();
4533            return Err(LibISLError::new(err, err_msg));
4534        }
4535        Ok(isl_rs_result)
4536    }
4537
4538    /// Wraps `isl_map_to_list`.
4539    pub fn to_list(self) -> Result<MapList, LibISLError> {
4540        let el = self;
4541        let isl_rs_ctx = el.get_ctx();
4542        let mut el = el;
4543        el.do_not_free_on_drop();
4544        let el = el.ptr;
4545        let isl_rs_result = unsafe { isl_map_to_list(el) };
4546        let isl_rs_result = MapList { ptr: isl_rs_result,
4547                                      should_free_on_drop: true };
4548        let err = isl_rs_ctx.last_error();
4549        if err != Error::None_ {
4550            let err_msg = isl_rs_ctx.last_error_msg();
4551            isl_rs_ctx.reset_error();
4552            return Err(LibISLError::new(err, err_msg));
4553        }
4554        Ok(isl_rs_result)
4555    }
4556
4557    /// Wraps `isl_map_to_str`.
4558    pub fn to_str(&self) -> Result<&str, LibISLError> {
4559        let map = self;
4560        let isl_rs_ctx = map.get_ctx();
4561        let map = map.ptr;
4562        let isl_rs_result = unsafe { isl_map_to_str(map) };
4563        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
4564        let isl_rs_result = isl_rs_result.to_str().unwrap();
4565        let err = isl_rs_ctx.last_error();
4566        if err != Error::None_ {
4567            let err_msg = isl_rs_ctx.last_error_msg();
4568            isl_rs_ctx.reset_error();
4569            return Err(LibISLError::new(err, err_msg));
4570        }
4571        Ok(isl_rs_result)
4572    }
4573
4574    /// Wraps `isl_map_to_union_map`.
4575    pub fn to_union_map(self) -> Result<UnionMap, LibISLError> {
4576        let map = self;
4577        let isl_rs_ctx = map.get_ctx();
4578        let mut map = map;
4579        map.do_not_free_on_drop();
4580        let map = map.ptr;
4581        let isl_rs_result = unsafe { isl_map_to_union_map(map) };
4582        let isl_rs_result = UnionMap { ptr: isl_rs_result,
4583                                       should_free_on_drop: true };
4584        let err = isl_rs_ctx.last_error();
4585        if err != Error::None_ {
4586            let err_msg = isl_rs_ctx.last_error_msg();
4587            isl_rs_ctx.reset_error();
4588            return Err(LibISLError::new(err, err_msg));
4589        }
4590        Ok(isl_rs_result)
4591    }
4592
4593    /// Wraps `isl_map_uncurry`.
4594    pub fn uncurry(self) -> Result<Map, LibISLError> {
4595        let map = self;
4596        let isl_rs_ctx = map.get_ctx();
4597        let mut map = map;
4598        map.do_not_free_on_drop();
4599        let map = map.ptr;
4600        let isl_rs_result = unsafe { isl_map_uncurry(map) };
4601        let isl_rs_result = Map { ptr: isl_rs_result,
4602                                  should_free_on_drop: true };
4603        let err = isl_rs_ctx.last_error();
4604        if err != Error::None_ {
4605            let err_msg = isl_rs_ctx.last_error_msg();
4606            isl_rs_ctx.reset_error();
4607            return Err(LibISLError::new(err, err_msg));
4608        }
4609        Ok(isl_rs_result)
4610    }
4611
4612    /// Wraps `isl_map_union`.
4613    pub fn union(self, map2: Map) -> Result<Map, LibISLError> {
4614        let map1 = self;
4615        let isl_rs_ctx = map1.get_ctx();
4616        let mut map1 = map1;
4617        map1.do_not_free_on_drop();
4618        let map1 = map1.ptr;
4619        let mut map2 = map2;
4620        map2.do_not_free_on_drop();
4621        let map2 = map2.ptr;
4622        let isl_rs_result = unsafe { isl_map_union(map1, map2) };
4623        let isl_rs_result = Map { ptr: isl_rs_result,
4624                                  should_free_on_drop: true };
4625        let err = isl_rs_ctx.last_error();
4626        if err != Error::None_ {
4627            let err_msg = isl_rs_ctx.last_error_msg();
4628            isl_rs_ctx.reset_error();
4629            return Err(LibISLError::new(err, err_msg));
4630        }
4631        Ok(isl_rs_result)
4632    }
4633
4634    /// Wraps `isl_map_union_disjoint`.
4635    pub fn union_disjoint(self, map2: Map) -> Result<Map, LibISLError> {
4636        let map1 = self;
4637        let isl_rs_ctx = map1.get_ctx();
4638        let mut map1 = map1;
4639        map1.do_not_free_on_drop();
4640        let map1 = map1.ptr;
4641        let mut map2 = map2;
4642        map2.do_not_free_on_drop();
4643        let map2 = map2.ptr;
4644        let isl_rs_result = unsafe { isl_map_union_disjoint(map1, map2) };
4645        let isl_rs_result = Map { ptr: isl_rs_result,
4646                                  should_free_on_drop: true };
4647        let err = isl_rs_ctx.last_error();
4648        if err != Error::None_ {
4649            let err_msg = isl_rs_ctx.last_error_msg();
4650            isl_rs_ctx.reset_error();
4651            return Err(LibISLError::new(err, err_msg));
4652        }
4653        Ok(isl_rs_result)
4654    }
4655
4656    /// Wraps `isl_map_universe`.
4657    pub fn universe(space: Space) -> Result<Map, LibISLError> {
4658        let isl_rs_ctx = space.get_ctx();
4659        let mut space = space;
4660        space.do_not_free_on_drop();
4661        let space = space.ptr;
4662        let isl_rs_result = unsafe { isl_map_universe(space) };
4663        let isl_rs_result = Map { ptr: isl_rs_result,
4664                                  should_free_on_drop: true };
4665        let err = isl_rs_ctx.last_error();
4666        if err != Error::None_ {
4667            let err_msg = isl_rs_ctx.last_error_msg();
4668            isl_rs_ctx.reset_error();
4669            return Err(LibISLError::new(err, err_msg));
4670        }
4671        Ok(isl_rs_result)
4672    }
4673
4674    /// Wraps `isl_map_unshifted_simple_hull`.
4675    pub fn unshifted_simple_hull(self) -> Result<BasicMap, LibISLError> {
4676        let map = self;
4677        let isl_rs_ctx = map.get_ctx();
4678        let mut map = map;
4679        map.do_not_free_on_drop();
4680        let map = map.ptr;
4681        let isl_rs_result = unsafe { isl_map_unshifted_simple_hull(map) };
4682        let isl_rs_result = BasicMap { ptr: isl_rs_result,
4683                                       should_free_on_drop: true };
4684        let err = isl_rs_ctx.last_error();
4685        if err != Error::None_ {
4686            let err_msg = isl_rs_ctx.last_error_msg();
4687            isl_rs_ctx.reset_error();
4688            return Err(LibISLError::new(err, err_msg));
4689        }
4690        Ok(isl_rs_result)
4691    }
4692
4693    /// Wraps `isl_map_unshifted_simple_hull_from_map_list`.
4694    pub fn unshifted_simple_hull_from_map_list(self, list: MapList)
4695                                               -> Result<BasicMap, LibISLError> {
4696        let map = self;
4697        let isl_rs_ctx = map.get_ctx();
4698        let mut map = map;
4699        map.do_not_free_on_drop();
4700        let map = map.ptr;
4701        let mut list = list;
4702        list.do_not_free_on_drop();
4703        let list = list.ptr;
4704        let isl_rs_result = unsafe { isl_map_unshifted_simple_hull_from_map_list(map, list) };
4705        let isl_rs_result = BasicMap { ptr: isl_rs_result,
4706                                       should_free_on_drop: true };
4707        let err = isl_rs_ctx.last_error();
4708        if err != Error::None_ {
4709            let err_msg = isl_rs_ctx.last_error_msg();
4710            isl_rs_ctx.reset_error();
4711            return Err(LibISLError::new(err, err_msg));
4712        }
4713        Ok(isl_rs_result)
4714    }
4715
4716    /// Wraps `isl_map_upper_bound_multi_pw_aff`.
4717    pub fn upper_bound_multi_pw_aff(self, upper: MultiPwAff) -> Result<Map, LibISLError> {
4718        let map = self;
4719        let isl_rs_ctx = map.get_ctx();
4720        let mut map = map;
4721        map.do_not_free_on_drop();
4722        let map = map.ptr;
4723        let mut upper = upper;
4724        upper.do_not_free_on_drop();
4725        let upper = upper.ptr;
4726        let isl_rs_result = unsafe { isl_map_upper_bound_multi_pw_aff(map, upper) };
4727        let isl_rs_result = Map { ptr: isl_rs_result,
4728                                  should_free_on_drop: true };
4729        let err = isl_rs_ctx.last_error();
4730        if err != Error::None_ {
4731            let err_msg = isl_rs_ctx.last_error_msg();
4732            isl_rs_ctx.reset_error();
4733            return Err(LibISLError::new(err, err_msg));
4734        }
4735        Ok(isl_rs_result)
4736    }
4737
4738    /// Wraps `isl_map_upper_bound_si`.
4739    pub fn upper_bound_si(self, type_: DimType, pos: u32, value: i32) -> Result<Map, LibISLError> {
4740        let map = self;
4741        let isl_rs_ctx = map.get_ctx();
4742        let mut map = map;
4743        map.do_not_free_on_drop();
4744        let map = map.ptr;
4745        let type_ = type_.to_i32();
4746        let isl_rs_result = unsafe { isl_map_upper_bound_si(map, type_, pos, value) };
4747        let isl_rs_result = Map { ptr: isl_rs_result,
4748                                  should_free_on_drop: true };
4749        let err = isl_rs_ctx.last_error();
4750        if err != Error::None_ {
4751            let err_msg = isl_rs_ctx.last_error_msg();
4752            isl_rs_ctx.reset_error();
4753            return Err(LibISLError::new(err, err_msg));
4754        }
4755        Ok(isl_rs_result)
4756    }
4757
4758    /// Wraps `isl_map_upper_bound_val`.
4759    pub fn upper_bound_val(self, type_: DimType, pos: u32, value: Val) -> Result<Map, LibISLError> {
4760        let map = self;
4761        let isl_rs_ctx = map.get_ctx();
4762        let mut map = map;
4763        map.do_not_free_on_drop();
4764        let map = map.ptr;
4765        let type_ = type_.to_i32();
4766        let mut value = value;
4767        value.do_not_free_on_drop();
4768        let value = value.ptr;
4769        let isl_rs_result = unsafe { isl_map_upper_bound_val(map, type_, pos, value) };
4770        let isl_rs_result = Map { ptr: isl_rs_result,
4771                                  should_free_on_drop: true };
4772        let err = isl_rs_ctx.last_error();
4773        if err != Error::None_ {
4774            let err_msg = isl_rs_ctx.last_error_msg();
4775            isl_rs_ctx.reset_error();
4776            return Err(LibISLError::new(err, err_msg));
4777        }
4778        Ok(isl_rs_result)
4779    }
4780
4781    /// Wraps `isl_map_wrap`.
4782    pub fn wrap(self) -> Result<Set, LibISLError> {
4783        let map = self;
4784        let isl_rs_ctx = map.get_ctx();
4785        let mut map = map;
4786        map.do_not_free_on_drop();
4787        let map = map.ptr;
4788        let isl_rs_result = unsafe { isl_map_wrap(map) };
4789        let isl_rs_result = Set { ptr: isl_rs_result,
4790                                  should_free_on_drop: true };
4791        let err = isl_rs_ctx.last_error();
4792        if err != Error::None_ {
4793            let err_msg = isl_rs_ctx.last_error_msg();
4794            isl_rs_ctx.reset_error();
4795            return Err(LibISLError::new(err, err_msg));
4796        }
4797        Ok(isl_rs_result)
4798    }
4799
4800    /// Wraps `isl_map_zip`.
4801    pub fn zip(self) -> Result<Map, LibISLError> {
4802        let map = self;
4803        let isl_rs_ctx = map.get_ctx();
4804        let mut map = map;
4805        map.do_not_free_on_drop();
4806        let map = map.ptr;
4807        let isl_rs_result = unsafe { isl_map_zip(map) };
4808        let isl_rs_result = Map { ptr: isl_rs_result,
4809                                  should_free_on_drop: true };
4810        let err = isl_rs_ctx.last_error();
4811        if err != Error::None_ {
4812            let err_msg = isl_rs_ctx.last_error_msg();
4813            isl_rs_ctx.reset_error();
4814            return Err(LibISLError::new(err, err_msg));
4815        }
4816        Ok(isl_rs_result)
4817    }
4818
4819    /// Does not call isl_map_free() on being dropped. (For internal use only.)
4820    pub fn do_not_free_on_drop(&mut self) {
4821        self.should_free_on_drop = false;
4822    }
4823}
4824
4825impl Drop for Map {
4826    fn drop(&mut self) {
4827        if self.should_free_on_drop {
4828            unsafe {
4829                isl_map_free(self.ptr);
4830            }
4831        }
4832    }
4833}