1use 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
13pub 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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}