1use super::{
5 BasicMap, Context, DimType, Error, Id, IdList, LibISLError, Map, MapList, MultiAff, MultiId,
6 MultiPwAff, MultiUnionPwAff, PwMultiAff, Set, Space, UnionMapList, UnionPwAff, UnionPwMultiAff,
7 UnionSet, Val,
8};
9use libc::uintptr_t;
10use std::ffi::{CStr, CString};
11use std::os::raw::c_char;
12
13pub struct UnionMap {
15 pub ptr: uintptr_t,
16 pub should_free_on_drop: bool,
17}
18
19extern "C" {
20
21 fn isl_union_map_add_map(umap: uintptr_t, map: uintptr_t) -> uintptr_t;
22
23 fn isl_union_map_affine_hull(umap: uintptr_t) -> uintptr_t;
24
25 fn isl_union_map_align_params(umap: uintptr_t, model: uintptr_t) -> uintptr_t;
26
27 fn isl_union_map_apply_domain(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
28
29 fn isl_union_map_apply_range(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
30
31 fn isl_union_map_as_map(umap: uintptr_t) -> uintptr_t;
32
33 fn isl_union_map_as_multi_union_pw_aff(umap: uintptr_t) -> uintptr_t;
34
35 fn isl_union_map_as_union_pw_multi_aff(umap: uintptr_t) -> uintptr_t;
36
37 fn isl_union_map_bind_range(umap: uintptr_t, tuple: uintptr_t) -> uintptr_t;
38
39 fn isl_union_map_coalesce(umap: uintptr_t) -> uintptr_t;
40
41 fn isl_union_map_compute_divs(umap: uintptr_t) -> uintptr_t;
42
43 fn isl_union_map_contains(umap: uintptr_t, space: uintptr_t) -> i32;
44
45 fn isl_union_map_copy(umap: uintptr_t) -> uintptr_t;
46
47 fn isl_union_map_curry(umap: uintptr_t) -> uintptr_t;
48
49 fn isl_union_map_deltas(umap: uintptr_t) -> uintptr_t;
50
51 fn isl_union_map_deltas_map(umap: uintptr_t) -> uintptr_t;
52
53 fn isl_union_map_detect_equalities(umap: uintptr_t) -> uintptr_t;
54
55 fn isl_union_map_dim(umap: uintptr_t, type_: i32) -> i32;
56
57 fn isl_union_map_domain(umap: uintptr_t) -> uintptr_t;
58
59 fn isl_union_map_domain_factor_domain(umap: uintptr_t) -> uintptr_t;
60
61 fn isl_union_map_domain_factor_range(umap: uintptr_t) -> uintptr_t;
62
63 fn isl_union_map_domain_map(umap: uintptr_t) -> uintptr_t;
64
65 fn isl_union_map_domain_map_union_pw_multi_aff(umap: uintptr_t) -> uintptr_t;
66
67 fn isl_union_map_domain_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
68
69 fn isl_union_map_domain_reverse(umap: uintptr_t) -> uintptr_t;
70
71 fn isl_union_map_drop_unused_params(umap: uintptr_t) -> uintptr_t;
72
73 fn isl_union_map_dump(umap: uintptr_t) -> ();
74
75 fn isl_union_map_empty(space: uintptr_t) -> uintptr_t;
76
77 fn isl_union_map_empty_ctx(ctx: uintptr_t) -> uintptr_t;
78
79 fn isl_union_map_empty_space(space: uintptr_t) -> uintptr_t;
80
81 fn isl_union_map_eq_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
82
83 fn isl_union_map_extract_map(umap: uintptr_t, space: uintptr_t) -> uintptr_t;
84
85 fn isl_union_map_factor_domain(umap: uintptr_t) -> uintptr_t;
86
87 fn isl_union_map_factor_range(umap: uintptr_t) -> uintptr_t;
88
89 fn isl_union_map_find_dim_by_name(umap: uintptr_t, type_: i32, name: *const c_char) -> i32;
90
91 fn isl_union_map_fixed_power_val(umap: uintptr_t, exp: uintptr_t) -> uintptr_t;
92
93 fn isl_union_map_flat_domain_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
94
95 fn isl_union_map_flat_range_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
96
97 fn isl_union_map_free(umap: uintptr_t) -> uintptr_t;
98
99 fn isl_union_map_from_basic_map(bmap: uintptr_t) -> uintptr_t;
100
101 fn isl_union_map_from_domain(uset: uintptr_t) -> uintptr_t;
102
103 fn isl_union_map_from_domain_and_range(domain: uintptr_t, range: uintptr_t) -> uintptr_t;
104
105 fn isl_union_map_from_map(map: uintptr_t) -> uintptr_t;
106
107 fn isl_union_map_from_multi_union_pw_aff(mupa: uintptr_t) -> uintptr_t;
108
109 fn isl_union_map_from_range(uset: uintptr_t) -> uintptr_t;
110
111 fn isl_union_map_from_union_pw_aff(upa: uintptr_t) -> uintptr_t;
112
113 fn isl_union_map_from_union_pw_multi_aff(upma: uintptr_t) -> uintptr_t;
114
115 fn isl_union_map_get_ctx(umap: uintptr_t) -> uintptr_t;
116
117 fn isl_union_map_get_dim_id(umap: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
118
119 fn isl_union_map_get_hash(umap: uintptr_t) -> u32;
120
121 fn isl_union_map_get_map_list(umap: uintptr_t) -> uintptr_t;
122
123 fn isl_union_map_get_space(umap: uintptr_t) -> uintptr_t;
124
125 fn isl_union_map_gist(umap: uintptr_t, context: uintptr_t) -> uintptr_t;
126
127 fn isl_union_map_gist_domain(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
128
129 fn isl_union_map_gist_params(umap: uintptr_t, set: uintptr_t) -> uintptr_t;
130
131 fn isl_union_map_gist_range(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
132
133 fn isl_union_map_intersect(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
134
135 fn isl_union_map_intersect_domain(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
136
137 fn isl_union_map_intersect_domain_factor_domain(umap: uintptr_t, factor: uintptr_t)
138 -> uintptr_t;
139
140 fn isl_union_map_intersect_domain_factor_range(umap: uintptr_t, factor: uintptr_t)
141 -> uintptr_t;
142
143 fn isl_union_map_intersect_domain_space(umap: uintptr_t, space: uintptr_t) -> uintptr_t;
144
145 fn isl_union_map_intersect_domain_union_set(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
146
147 fn isl_union_map_intersect_domain_wrapped_domain_union_set(umap: uintptr_t, domain: uintptr_t)
148 -> uintptr_t;
149
150 fn isl_union_map_intersect_params(umap: uintptr_t, set: uintptr_t) -> uintptr_t;
151
152 fn isl_union_map_intersect_range(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
153
154 fn isl_union_map_intersect_range_factor_domain(umap: uintptr_t, factor: uintptr_t)
155 -> uintptr_t;
156
157 fn isl_union_map_intersect_range_factor_range(umap: uintptr_t, factor: uintptr_t) -> uintptr_t;
158
159 fn isl_union_map_intersect_range_space(umap: uintptr_t, space: uintptr_t) -> uintptr_t;
160
161 fn isl_union_map_intersect_range_union_set(umap: uintptr_t, uset: uintptr_t) -> uintptr_t;
162
163 fn isl_union_map_intersect_range_wrapped_domain_union_set(umap: uintptr_t, domain: uintptr_t)
164 -> uintptr_t;
165
166 fn isl_union_map_involves_dims(umap: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
167
168 fn isl_union_map_is_bijective(umap: uintptr_t) -> i32;
169
170 fn isl_union_map_is_disjoint(umap1: uintptr_t, umap2: uintptr_t) -> i32;
171
172 fn isl_union_map_is_empty(umap: uintptr_t) -> i32;
173
174 fn isl_union_map_is_equal(umap1: uintptr_t, umap2: uintptr_t) -> i32;
175
176 fn isl_union_map_is_identity(umap: uintptr_t) -> i32;
177
178 fn isl_union_map_is_injective(umap: uintptr_t) -> i32;
179
180 fn isl_union_map_is_single_valued(umap: uintptr_t) -> i32;
181
182 fn isl_union_map_is_strict_subset(umap1: uintptr_t, umap2: uintptr_t) -> i32;
183
184 fn isl_union_map_is_subset(umap1: uintptr_t, umap2: uintptr_t) -> i32;
185
186 fn isl_union_map_isa_map(umap: uintptr_t) -> i32;
187
188 fn isl_union_map_lex_ge_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
189
190 fn isl_union_map_lex_ge_union_map(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
191
192 fn isl_union_map_lex_gt_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
193
194 fn isl_union_map_lex_gt_union_map(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
195
196 fn isl_union_map_lex_le_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
197
198 fn isl_union_map_lex_le_union_map(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
199
200 fn isl_union_map_lex_lt_at_multi_union_pw_aff(umap: uintptr_t, mupa: uintptr_t) -> uintptr_t;
201
202 fn isl_union_map_lex_lt_union_map(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
203
204 fn isl_union_map_lexmax(umap: uintptr_t) -> uintptr_t;
205
206 fn isl_union_map_lexmin(umap: uintptr_t) -> uintptr_t;
207
208 fn isl_union_map_n_map(umap: uintptr_t) -> i32;
209
210 fn isl_union_map_params(umap: uintptr_t) -> uintptr_t;
211
212 fn isl_union_map_plain_is_empty(umap: uintptr_t) -> i32;
213
214 fn isl_union_map_plain_is_injective(umap: uintptr_t) -> i32;
215
216 fn isl_union_map_plain_unshifted_simple_hull(umap: uintptr_t) -> uintptr_t;
217
218 fn isl_union_map_polyhedral_hull(umap: uintptr_t) -> uintptr_t;
219
220 fn isl_union_map_preimage_domain_multi_aff(umap: uintptr_t, ma: uintptr_t) -> uintptr_t;
221
222 fn isl_union_map_preimage_domain_multi_pw_aff(umap: uintptr_t, mpa: uintptr_t) -> uintptr_t;
223
224 fn isl_union_map_preimage_domain_pw_multi_aff(umap: uintptr_t, pma: uintptr_t) -> uintptr_t;
225
226 fn isl_union_map_preimage_domain_union_pw_multi_aff(umap: uintptr_t, upma: uintptr_t)
227 -> uintptr_t;
228
229 fn isl_union_map_preimage_range_multi_aff(umap: uintptr_t, ma: uintptr_t) -> uintptr_t;
230
231 fn isl_union_map_preimage_range_pw_multi_aff(umap: uintptr_t, pma: uintptr_t) -> uintptr_t;
232
233 fn isl_union_map_preimage_range_union_pw_multi_aff(umap: uintptr_t, upma: uintptr_t)
234 -> uintptr_t;
235
236 fn isl_union_map_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
237
238 fn isl_union_map_project_out(umap: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
239
240 fn isl_union_map_project_out_all_params(umap: uintptr_t) -> uintptr_t;
241
242 fn isl_union_map_project_out_param_id(umap: uintptr_t, id: uintptr_t) -> uintptr_t;
243
244 fn isl_union_map_project_out_param_id_list(umap: uintptr_t, list: uintptr_t) -> uintptr_t;
245
246 fn isl_union_map_range(umap: uintptr_t) -> uintptr_t;
247
248 fn isl_union_map_range_curry(umap: uintptr_t) -> uintptr_t;
249
250 fn isl_union_map_range_factor_domain(umap: uintptr_t) -> uintptr_t;
251
252 fn isl_union_map_range_factor_range(umap: uintptr_t) -> uintptr_t;
253
254 fn isl_union_map_range_map(umap: uintptr_t) -> uintptr_t;
255
256 fn isl_union_map_range_product(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
257
258 fn isl_union_map_range_reverse(umap: uintptr_t) -> uintptr_t;
259
260 fn isl_union_map_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
261
262 fn isl_union_map_remove_divs(bmap: uintptr_t) -> uintptr_t;
263
264 fn isl_union_map_remove_redundancies(umap: uintptr_t) -> uintptr_t;
265
266 fn isl_union_map_reset_user(umap: uintptr_t) -> uintptr_t;
267
268 fn isl_union_map_reverse(umap: uintptr_t) -> uintptr_t;
269
270 fn isl_union_map_sample(umap: uintptr_t) -> uintptr_t;
271
272 fn isl_union_map_simple_hull(umap: uintptr_t) -> uintptr_t;
273
274 fn isl_union_map_subtract(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
275
276 fn isl_union_map_subtract_domain(umap: uintptr_t, dom: uintptr_t) -> uintptr_t;
277
278 fn isl_union_map_subtract_range(umap: uintptr_t, dom: uintptr_t) -> uintptr_t;
279
280 fn isl_union_map_to_list(el: uintptr_t) -> uintptr_t;
281
282 fn isl_union_map_to_str(umap: uintptr_t) -> *const c_char;
283
284 fn isl_union_map_uncurry(umap: uintptr_t) -> uintptr_t;
285
286 fn isl_union_map_union(umap1: uintptr_t, umap2: uintptr_t) -> uintptr_t;
287
288 fn isl_union_map_universe(umap: uintptr_t) -> uintptr_t;
289
290 fn isl_union_map_wrap(umap: uintptr_t) -> uintptr_t;
291
292 fn isl_union_map_zip(umap: uintptr_t) -> uintptr_t;
293
294}
295
296impl UnionMap {
297 pub fn add_map(self, map: Map) -> Result<UnionMap, LibISLError> {
299 let umap = self;
300 let isl_rs_ctx = umap.get_ctx();
301 let mut umap = umap;
302 umap.do_not_free_on_drop();
303 let umap = umap.ptr;
304 let mut map = map;
305 map.do_not_free_on_drop();
306 let map = map.ptr;
307 let isl_rs_result = unsafe { isl_union_map_add_map(umap, map) };
308 let isl_rs_result = UnionMap { ptr: isl_rs_result,
309 should_free_on_drop: true };
310 let err = isl_rs_ctx.last_error();
311 if err != Error::None_ {
312 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
313 }
314 Ok(isl_rs_result)
315 }
316
317 pub fn affine_hull(self) -> Result<UnionMap, LibISLError> {
319 let umap = self;
320 let isl_rs_ctx = umap.get_ctx();
321 let mut umap = umap;
322 umap.do_not_free_on_drop();
323 let umap = umap.ptr;
324 let isl_rs_result = unsafe { isl_union_map_affine_hull(umap) };
325 let isl_rs_result = UnionMap { ptr: isl_rs_result,
326 should_free_on_drop: true };
327 let err = isl_rs_ctx.last_error();
328 if err != Error::None_ {
329 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
330 }
331 Ok(isl_rs_result)
332 }
333
334 pub fn align_params(self, model: Space) -> Result<UnionMap, LibISLError> {
336 let umap = self;
337 let isl_rs_ctx = umap.get_ctx();
338 let mut umap = umap;
339 umap.do_not_free_on_drop();
340 let umap = umap.ptr;
341 let mut model = model;
342 model.do_not_free_on_drop();
343 let model = model.ptr;
344 let isl_rs_result = unsafe { isl_union_map_align_params(umap, model) };
345 let isl_rs_result = UnionMap { ptr: isl_rs_result,
346 should_free_on_drop: true };
347 let err = isl_rs_ctx.last_error();
348 if err != Error::None_ {
349 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
350 }
351 Ok(isl_rs_result)
352 }
353
354 pub fn apply_domain(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
356 let umap1 = self;
357 let isl_rs_ctx = umap1.get_ctx();
358 let mut umap1 = umap1;
359 umap1.do_not_free_on_drop();
360 let umap1 = umap1.ptr;
361 let mut umap2 = umap2;
362 umap2.do_not_free_on_drop();
363 let umap2 = umap2.ptr;
364 let isl_rs_result = unsafe { isl_union_map_apply_domain(umap1, umap2) };
365 let isl_rs_result = UnionMap { ptr: isl_rs_result,
366 should_free_on_drop: true };
367 let err = isl_rs_ctx.last_error();
368 if err != Error::None_ {
369 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
370 }
371 Ok(isl_rs_result)
372 }
373
374 pub fn apply_range(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
376 let umap1 = self;
377 let isl_rs_ctx = umap1.get_ctx();
378 let mut umap1 = umap1;
379 umap1.do_not_free_on_drop();
380 let umap1 = umap1.ptr;
381 let mut umap2 = umap2;
382 umap2.do_not_free_on_drop();
383 let umap2 = umap2.ptr;
384 let isl_rs_result = unsafe { isl_union_map_apply_range(umap1, umap2) };
385 let isl_rs_result = UnionMap { ptr: isl_rs_result,
386 should_free_on_drop: true };
387 let err = isl_rs_ctx.last_error();
388 if err != Error::None_ {
389 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
390 }
391 Ok(isl_rs_result)
392 }
393
394 pub fn as_map(self) -> Result<Map, LibISLError> {
396 let umap = self;
397 let isl_rs_ctx = umap.get_ctx();
398 let mut umap = umap;
399 umap.do_not_free_on_drop();
400 let umap = umap.ptr;
401 let isl_rs_result = unsafe { isl_union_map_as_map(umap) };
402 let isl_rs_result = Map { ptr: isl_rs_result,
403 should_free_on_drop: true };
404 let err = isl_rs_ctx.last_error();
405 if err != Error::None_ {
406 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
407 }
408 Ok(isl_rs_result)
409 }
410
411 pub fn as_multi_union_pw_aff(self) -> Result<MultiUnionPwAff, LibISLError> {
413 let umap = self;
414 let isl_rs_ctx = umap.get_ctx();
415 let mut umap = umap;
416 umap.do_not_free_on_drop();
417 let umap = umap.ptr;
418 let isl_rs_result = unsafe { isl_union_map_as_multi_union_pw_aff(umap) };
419 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
420 should_free_on_drop: true };
421 let err = isl_rs_ctx.last_error();
422 if err != Error::None_ {
423 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
424 }
425 Ok(isl_rs_result)
426 }
427
428 pub fn as_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
430 let umap = self;
431 let isl_rs_ctx = umap.get_ctx();
432 let mut umap = umap;
433 umap.do_not_free_on_drop();
434 let umap = umap.ptr;
435 let isl_rs_result = unsafe { isl_union_map_as_union_pw_multi_aff(umap) };
436 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
437 should_free_on_drop: true };
438 let err = isl_rs_ctx.last_error();
439 if err != Error::None_ {
440 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
441 }
442 Ok(isl_rs_result)
443 }
444
445 pub fn bind_range(self, tuple: MultiId) -> Result<UnionSet, LibISLError> {
447 let umap = self;
448 let isl_rs_ctx = umap.get_ctx();
449 let mut umap = umap;
450 umap.do_not_free_on_drop();
451 let umap = umap.ptr;
452 let mut tuple = tuple;
453 tuple.do_not_free_on_drop();
454 let tuple = tuple.ptr;
455 let isl_rs_result = unsafe { isl_union_map_bind_range(umap, tuple) };
456 let isl_rs_result = UnionSet { ptr: isl_rs_result,
457 should_free_on_drop: true };
458 let err = isl_rs_ctx.last_error();
459 if err != Error::None_ {
460 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
461 }
462 Ok(isl_rs_result)
463 }
464
465 pub fn coalesce(self) -> Result<UnionMap, LibISLError> {
467 let umap = self;
468 let isl_rs_ctx = umap.get_ctx();
469 let mut umap = umap;
470 umap.do_not_free_on_drop();
471 let umap = umap.ptr;
472 let isl_rs_result = unsafe { isl_union_map_coalesce(umap) };
473 let isl_rs_result = UnionMap { ptr: isl_rs_result,
474 should_free_on_drop: true };
475 let err = isl_rs_ctx.last_error();
476 if err != Error::None_ {
477 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
478 }
479 Ok(isl_rs_result)
480 }
481
482 pub fn compute_divs(self) -> Result<UnionMap, LibISLError> {
484 let umap = self;
485 let isl_rs_ctx = umap.get_ctx();
486 let mut umap = umap;
487 umap.do_not_free_on_drop();
488 let umap = umap.ptr;
489 let isl_rs_result = unsafe { isl_union_map_compute_divs(umap) };
490 let isl_rs_result = UnionMap { ptr: isl_rs_result,
491 should_free_on_drop: true };
492 let err = isl_rs_ctx.last_error();
493 if err != Error::None_ {
494 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
495 }
496 Ok(isl_rs_result)
497 }
498
499 pub fn contains(&self, space: &Space) -> Result<bool, LibISLError> {
501 let umap = self;
502 let isl_rs_ctx = umap.get_ctx();
503 let umap = umap.ptr;
504 let space = space.ptr;
505 let isl_rs_result = unsafe { isl_union_map_contains(umap, space) };
506 let isl_rs_result = match isl_rs_result {
507 0 => false,
508 1 => true,
509 _ => panic!("Got isl_bool = -1"),
510 };
511 let err = isl_rs_ctx.last_error();
512 if err != Error::None_ {
513 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
514 }
515 Ok(isl_rs_result)
516 }
517
518 pub fn copy(&self) -> Result<UnionMap, LibISLError> {
520 let umap = self;
521 let isl_rs_ctx = umap.get_ctx();
522 let umap = umap.ptr;
523 let isl_rs_result = unsafe { isl_union_map_copy(umap) };
524 let isl_rs_result = UnionMap { ptr: isl_rs_result,
525 should_free_on_drop: true };
526 let err = isl_rs_ctx.last_error();
527 if err != Error::None_ {
528 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
529 }
530 Ok(isl_rs_result)
531 }
532
533 pub fn curry(self) -> Result<UnionMap, LibISLError> {
535 let umap = self;
536 let isl_rs_ctx = umap.get_ctx();
537 let mut umap = umap;
538 umap.do_not_free_on_drop();
539 let umap = umap.ptr;
540 let isl_rs_result = unsafe { isl_union_map_curry(umap) };
541 let isl_rs_result = UnionMap { ptr: isl_rs_result,
542 should_free_on_drop: true };
543 let err = isl_rs_ctx.last_error();
544 if err != Error::None_ {
545 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
546 }
547 Ok(isl_rs_result)
548 }
549
550 pub fn deltas(self) -> Result<UnionSet, LibISLError> {
552 let umap = self;
553 let isl_rs_ctx = umap.get_ctx();
554 let mut umap = umap;
555 umap.do_not_free_on_drop();
556 let umap = umap.ptr;
557 let isl_rs_result = unsafe { isl_union_map_deltas(umap) };
558 let isl_rs_result = UnionSet { ptr: isl_rs_result,
559 should_free_on_drop: true };
560 let err = isl_rs_ctx.last_error();
561 if err != Error::None_ {
562 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
563 }
564 Ok(isl_rs_result)
565 }
566
567 pub fn deltas_map(self) -> Result<UnionMap, LibISLError> {
569 let umap = self;
570 let isl_rs_ctx = umap.get_ctx();
571 let mut umap = umap;
572 umap.do_not_free_on_drop();
573 let umap = umap.ptr;
574 let isl_rs_result = unsafe { isl_union_map_deltas_map(umap) };
575 let isl_rs_result = UnionMap { ptr: isl_rs_result,
576 should_free_on_drop: true };
577 let err = isl_rs_ctx.last_error();
578 if err != Error::None_ {
579 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
580 }
581 Ok(isl_rs_result)
582 }
583
584 pub fn detect_equalities(self) -> Result<UnionMap, LibISLError> {
586 let umap = self;
587 let isl_rs_ctx = umap.get_ctx();
588 let mut umap = umap;
589 umap.do_not_free_on_drop();
590 let umap = umap.ptr;
591 let isl_rs_result = unsafe { isl_union_map_detect_equalities(umap) };
592 let isl_rs_result = UnionMap { ptr: isl_rs_result,
593 should_free_on_drop: true };
594 let err = isl_rs_ctx.last_error();
595 if err != Error::None_ {
596 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
597 }
598 Ok(isl_rs_result)
599 }
600
601 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
603 let umap = self;
604 let isl_rs_ctx = umap.get_ctx();
605 let umap = umap.ptr;
606 let type_ = type_.to_i32();
607 let isl_rs_result = unsafe { isl_union_map_dim(umap, type_) };
608 let err = isl_rs_ctx.last_error();
609 if err != Error::None_ {
610 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
611 }
612 Ok(isl_rs_result)
613 }
614
615 pub fn domain(self) -> Result<UnionSet, LibISLError> {
617 let umap = self;
618 let isl_rs_ctx = umap.get_ctx();
619 let mut umap = umap;
620 umap.do_not_free_on_drop();
621 let umap = umap.ptr;
622 let isl_rs_result = unsafe { isl_union_map_domain(umap) };
623 let isl_rs_result = UnionSet { ptr: isl_rs_result,
624 should_free_on_drop: true };
625 let err = isl_rs_ctx.last_error();
626 if err != Error::None_ {
627 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
628 }
629 Ok(isl_rs_result)
630 }
631
632 pub fn domain_factor_domain(self) -> Result<UnionMap, LibISLError> {
634 let umap = self;
635 let isl_rs_ctx = umap.get_ctx();
636 let mut umap = umap;
637 umap.do_not_free_on_drop();
638 let umap = umap.ptr;
639 let isl_rs_result = unsafe { isl_union_map_domain_factor_domain(umap) };
640 let isl_rs_result = UnionMap { ptr: isl_rs_result,
641 should_free_on_drop: true };
642 let err = isl_rs_ctx.last_error();
643 if err != Error::None_ {
644 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
645 }
646 Ok(isl_rs_result)
647 }
648
649 pub fn domain_factor_range(self) -> Result<UnionMap, LibISLError> {
651 let umap = self;
652 let isl_rs_ctx = umap.get_ctx();
653 let mut umap = umap;
654 umap.do_not_free_on_drop();
655 let umap = umap.ptr;
656 let isl_rs_result = unsafe { isl_union_map_domain_factor_range(umap) };
657 let isl_rs_result = UnionMap { ptr: isl_rs_result,
658 should_free_on_drop: true };
659 let err = isl_rs_ctx.last_error();
660 if err != Error::None_ {
661 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
662 }
663 Ok(isl_rs_result)
664 }
665
666 pub fn domain_map(self) -> Result<UnionMap, LibISLError> {
668 let umap = self;
669 let isl_rs_ctx = umap.get_ctx();
670 let mut umap = umap;
671 umap.do_not_free_on_drop();
672 let umap = umap.ptr;
673 let isl_rs_result = unsafe { isl_union_map_domain_map(umap) };
674 let isl_rs_result = UnionMap { ptr: isl_rs_result,
675 should_free_on_drop: true };
676 let err = isl_rs_ctx.last_error();
677 if err != Error::None_ {
678 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
679 }
680 Ok(isl_rs_result)
681 }
682
683 pub fn domain_map_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
685 let umap = self;
686 let isl_rs_ctx = umap.get_ctx();
687 let mut umap = umap;
688 umap.do_not_free_on_drop();
689 let umap = umap.ptr;
690 let isl_rs_result = unsafe { isl_union_map_domain_map_union_pw_multi_aff(umap) };
691 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
692 should_free_on_drop: true };
693 let err = isl_rs_ctx.last_error();
694 if err != Error::None_ {
695 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
696 }
697 Ok(isl_rs_result)
698 }
699
700 pub fn domain_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
702 let umap1 = self;
703 let isl_rs_ctx = umap1.get_ctx();
704 let mut umap1 = umap1;
705 umap1.do_not_free_on_drop();
706 let umap1 = umap1.ptr;
707 let mut umap2 = umap2;
708 umap2.do_not_free_on_drop();
709 let umap2 = umap2.ptr;
710 let isl_rs_result = unsafe { isl_union_map_domain_product(umap1, umap2) };
711 let isl_rs_result = UnionMap { ptr: isl_rs_result,
712 should_free_on_drop: true };
713 let err = isl_rs_ctx.last_error();
714 if err != Error::None_ {
715 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
716 }
717 Ok(isl_rs_result)
718 }
719
720 pub fn domain_reverse(self) -> Result<UnionMap, LibISLError> {
722 let umap = self;
723 let isl_rs_ctx = umap.get_ctx();
724 let mut umap = umap;
725 umap.do_not_free_on_drop();
726 let umap = umap.ptr;
727 let isl_rs_result = unsafe { isl_union_map_domain_reverse(umap) };
728 let isl_rs_result = UnionMap { ptr: isl_rs_result,
729 should_free_on_drop: true };
730 let err = isl_rs_ctx.last_error();
731 if err != Error::None_ {
732 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
733 }
734 Ok(isl_rs_result)
735 }
736
737 pub fn drop_unused_params(self) -> Result<UnionMap, LibISLError> {
739 let umap = self;
740 let isl_rs_ctx = umap.get_ctx();
741 let mut umap = umap;
742 umap.do_not_free_on_drop();
743 let umap = umap.ptr;
744 let isl_rs_result = unsafe { isl_union_map_drop_unused_params(umap) };
745 let isl_rs_result = UnionMap { ptr: isl_rs_result,
746 should_free_on_drop: true };
747 let err = isl_rs_ctx.last_error();
748 if err != Error::None_ {
749 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
750 }
751 Ok(isl_rs_result)
752 }
753
754 pub fn dump(&self) -> Result<(), LibISLError> {
756 let umap = self;
757 let isl_rs_ctx = umap.get_ctx();
758 let umap = umap.ptr;
759 let isl_rs_result = unsafe { isl_union_map_dump(umap) };
760 let err = isl_rs_ctx.last_error();
761 if err != Error::None_ {
762 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
763 }
764 Ok(isl_rs_result)
765 }
766
767 pub fn empty(space: Space) -> Result<UnionMap, LibISLError> {
769 let isl_rs_ctx = space.get_ctx();
770 let mut space = space;
771 space.do_not_free_on_drop();
772 let space = space.ptr;
773 let isl_rs_result = unsafe { isl_union_map_empty(space) };
774 let isl_rs_result = UnionMap { ptr: isl_rs_result,
775 should_free_on_drop: true };
776 let err = isl_rs_ctx.last_error();
777 if err != Error::None_ {
778 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
779 }
780 Ok(isl_rs_result)
781 }
782
783 pub fn empty_ctx(ctx: &Context) -> Result<UnionMap, LibISLError> {
785 let isl_rs_ctx = Context { ptr: ctx.ptr,
786 should_free_on_drop: false };
787 let ctx = ctx.ptr;
788 let isl_rs_result = unsafe { isl_union_map_empty_ctx(ctx) };
789 let isl_rs_result = UnionMap { ptr: isl_rs_result,
790 should_free_on_drop: true };
791 let err = isl_rs_ctx.last_error();
792 if err != Error::None_ {
793 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
794 }
795 Ok(isl_rs_result)
796 }
797
798 pub fn empty_space(space: Space) -> Result<UnionMap, LibISLError> {
800 let isl_rs_ctx = space.get_ctx();
801 let mut space = space;
802 space.do_not_free_on_drop();
803 let space = space.ptr;
804 let isl_rs_result = unsafe { isl_union_map_empty_space(space) };
805 let isl_rs_result = UnionMap { ptr: isl_rs_result,
806 should_free_on_drop: true };
807 let err = isl_rs_ctx.last_error();
808 if err != Error::None_ {
809 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
810 }
811 Ok(isl_rs_result)
812 }
813
814 pub fn eq_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff) -> Result<UnionMap, LibISLError> {
816 let umap = self;
817 let isl_rs_ctx = umap.get_ctx();
818 let mut umap = umap;
819 umap.do_not_free_on_drop();
820 let umap = umap.ptr;
821 let mut mupa = mupa;
822 mupa.do_not_free_on_drop();
823 let mupa = mupa.ptr;
824 let isl_rs_result = unsafe { isl_union_map_eq_at_multi_union_pw_aff(umap, mupa) };
825 let isl_rs_result = UnionMap { ptr: isl_rs_result,
826 should_free_on_drop: true };
827 let err = isl_rs_ctx.last_error();
828 if err != Error::None_ {
829 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
830 }
831 Ok(isl_rs_result)
832 }
833
834 pub fn extract_map(&self, space: Space) -> Result<Map, LibISLError> {
836 let umap = self;
837 let isl_rs_ctx = umap.get_ctx();
838 let umap = umap.ptr;
839 let mut space = space;
840 space.do_not_free_on_drop();
841 let space = space.ptr;
842 let isl_rs_result = unsafe { isl_union_map_extract_map(umap, space) };
843 let isl_rs_result = Map { ptr: isl_rs_result,
844 should_free_on_drop: true };
845 let err = isl_rs_ctx.last_error();
846 if err != Error::None_ {
847 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
848 }
849 Ok(isl_rs_result)
850 }
851
852 pub fn factor_domain(self) -> Result<UnionMap, LibISLError> {
854 let umap = self;
855 let isl_rs_ctx = umap.get_ctx();
856 let mut umap = umap;
857 umap.do_not_free_on_drop();
858 let umap = umap.ptr;
859 let isl_rs_result = unsafe { isl_union_map_factor_domain(umap) };
860 let isl_rs_result = UnionMap { ptr: isl_rs_result,
861 should_free_on_drop: true };
862 let err = isl_rs_ctx.last_error();
863 if err != Error::None_ {
864 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
865 }
866 Ok(isl_rs_result)
867 }
868
869 pub fn factor_range(self) -> Result<UnionMap, LibISLError> {
871 let umap = self;
872 let isl_rs_ctx = umap.get_ctx();
873 let mut umap = umap;
874 umap.do_not_free_on_drop();
875 let umap = umap.ptr;
876 let isl_rs_result = unsafe { isl_union_map_factor_range(umap) };
877 let isl_rs_result = UnionMap { ptr: isl_rs_result,
878 should_free_on_drop: true };
879 let err = isl_rs_ctx.last_error();
880 if err != Error::None_ {
881 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
882 }
883 Ok(isl_rs_result)
884 }
885
886 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
888 let umap = self;
889 let isl_rs_ctx = umap.get_ctx();
890 let umap = umap.ptr;
891 let type_ = type_.to_i32();
892 let name = CString::new(name).unwrap();
893 let name = name.as_ptr();
894 let isl_rs_result = unsafe { isl_union_map_find_dim_by_name(umap, type_, name) };
895 let err = isl_rs_ctx.last_error();
896 if err != Error::None_ {
897 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
898 }
899 Ok(isl_rs_result)
900 }
901
902 pub fn fixed_power_val(self, exp: Val) -> Result<UnionMap, LibISLError> {
904 let umap = self;
905 let isl_rs_ctx = umap.get_ctx();
906 let mut umap = umap;
907 umap.do_not_free_on_drop();
908 let umap = umap.ptr;
909 let mut exp = exp;
910 exp.do_not_free_on_drop();
911 let exp = exp.ptr;
912 let isl_rs_result = unsafe { isl_union_map_fixed_power_val(umap, exp) };
913 let isl_rs_result = UnionMap { ptr: isl_rs_result,
914 should_free_on_drop: true };
915 let err = isl_rs_ctx.last_error();
916 if err != Error::None_ {
917 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
918 }
919 Ok(isl_rs_result)
920 }
921
922 pub fn flat_domain_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
924 let umap1 = self;
925 let isl_rs_ctx = umap1.get_ctx();
926 let mut umap1 = umap1;
927 umap1.do_not_free_on_drop();
928 let umap1 = umap1.ptr;
929 let mut umap2 = umap2;
930 umap2.do_not_free_on_drop();
931 let umap2 = umap2.ptr;
932 let isl_rs_result = unsafe { isl_union_map_flat_domain_product(umap1, umap2) };
933 let isl_rs_result = UnionMap { ptr: isl_rs_result,
934 should_free_on_drop: true };
935 let err = isl_rs_ctx.last_error();
936 if err != Error::None_ {
937 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
938 }
939 Ok(isl_rs_result)
940 }
941
942 pub fn flat_range_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
944 let umap1 = self;
945 let isl_rs_ctx = umap1.get_ctx();
946 let mut umap1 = umap1;
947 umap1.do_not_free_on_drop();
948 let umap1 = umap1.ptr;
949 let mut umap2 = umap2;
950 umap2.do_not_free_on_drop();
951 let umap2 = umap2.ptr;
952 let isl_rs_result = unsafe { isl_union_map_flat_range_product(umap1, umap2) };
953 let isl_rs_result = UnionMap { ptr: isl_rs_result,
954 should_free_on_drop: true };
955 let err = isl_rs_ctx.last_error();
956 if err != Error::None_ {
957 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
958 }
959 Ok(isl_rs_result)
960 }
961
962 pub fn free(self) -> Result<UnionMap, LibISLError> {
964 let umap = self;
965 let isl_rs_ctx = umap.get_ctx();
966 let mut umap = umap;
967 umap.do_not_free_on_drop();
968 let umap = umap.ptr;
969 let isl_rs_result = unsafe { isl_union_map_free(umap) };
970 let isl_rs_result = UnionMap { ptr: isl_rs_result,
971 should_free_on_drop: true };
972 let err = isl_rs_ctx.last_error();
973 if err != Error::None_ {
974 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
975 }
976 Ok(isl_rs_result)
977 }
978
979 pub fn from_basic_map(bmap: BasicMap) -> Result<UnionMap, LibISLError> {
981 let isl_rs_ctx = bmap.get_ctx();
982 let mut bmap = bmap;
983 bmap.do_not_free_on_drop();
984 let bmap = bmap.ptr;
985 let isl_rs_result = unsafe { isl_union_map_from_basic_map(bmap) };
986 let isl_rs_result = UnionMap { ptr: isl_rs_result,
987 should_free_on_drop: true };
988 let err = isl_rs_ctx.last_error();
989 if err != Error::None_ {
990 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
991 }
992 Ok(isl_rs_result)
993 }
994
995 pub fn from_domain(uset: UnionSet) -> Result<UnionMap, LibISLError> {
997 let isl_rs_ctx = uset.get_ctx();
998 let mut uset = uset;
999 uset.do_not_free_on_drop();
1000 let uset = uset.ptr;
1001 let isl_rs_result = unsafe { isl_union_map_from_domain(uset) };
1002 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1003 should_free_on_drop: true };
1004 let err = isl_rs_ctx.last_error();
1005 if err != Error::None_ {
1006 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1007 }
1008 Ok(isl_rs_result)
1009 }
1010
1011 pub fn from_domain_and_range(domain: UnionSet, range: UnionSet)
1013 -> Result<UnionMap, LibISLError> {
1014 let isl_rs_ctx = domain.get_ctx();
1015 let mut domain = domain;
1016 domain.do_not_free_on_drop();
1017 let domain = domain.ptr;
1018 let mut range = range;
1019 range.do_not_free_on_drop();
1020 let range = range.ptr;
1021 let isl_rs_result = unsafe { isl_union_map_from_domain_and_range(domain, range) };
1022 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1023 should_free_on_drop: true };
1024 let err = isl_rs_ctx.last_error();
1025 if err != Error::None_ {
1026 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1027 }
1028 Ok(isl_rs_result)
1029 }
1030
1031 pub fn from_map(map: Map) -> Result<UnionMap, LibISLError> {
1033 let isl_rs_ctx = map.get_ctx();
1034 let mut map = map;
1035 map.do_not_free_on_drop();
1036 let map = map.ptr;
1037 let isl_rs_result = unsafe { isl_union_map_from_map(map) };
1038 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1039 should_free_on_drop: true };
1040 let err = isl_rs_ctx.last_error();
1041 if err != Error::None_ {
1042 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1043 }
1044 Ok(isl_rs_result)
1045 }
1046
1047 pub fn from_multi_union_pw_aff(mupa: MultiUnionPwAff) -> Result<UnionMap, LibISLError> {
1049 let isl_rs_ctx = mupa.get_ctx();
1050 let mut mupa = mupa;
1051 mupa.do_not_free_on_drop();
1052 let mupa = mupa.ptr;
1053 let isl_rs_result = unsafe { isl_union_map_from_multi_union_pw_aff(mupa) };
1054 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1055 should_free_on_drop: true };
1056 let err = isl_rs_ctx.last_error();
1057 if err != Error::None_ {
1058 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1059 }
1060 Ok(isl_rs_result)
1061 }
1062
1063 pub fn from_range(uset: UnionSet) -> Result<UnionMap, LibISLError> {
1065 let isl_rs_ctx = uset.get_ctx();
1066 let mut uset = uset;
1067 uset.do_not_free_on_drop();
1068 let uset = uset.ptr;
1069 let isl_rs_result = unsafe { isl_union_map_from_range(uset) };
1070 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1071 should_free_on_drop: true };
1072 let err = isl_rs_ctx.last_error();
1073 if err != Error::None_ {
1074 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1075 }
1076 Ok(isl_rs_result)
1077 }
1078
1079 pub fn from_union_pw_aff(upa: UnionPwAff) -> Result<UnionMap, LibISLError> {
1081 let isl_rs_ctx = upa.get_ctx();
1082 let mut upa = upa;
1083 upa.do_not_free_on_drop();
1084 let upa = upa.ptr;
1085 let isl_rs_result = unsafe { isl_union_map_from_union_pw_aff(upa) };
1086 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1087 should_free_on_drop: true };
1088 let err = isl_rs_ctx.last_error();
1089 if err != Error::None_ {
1090 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1091 }
1092 Ok(isl_rs_result)
1093 }
1094
1095 pub fn from_union_pw_multi_aff(upma: UnionPwMultiAff) -> Result<UnionMap, LibISLError> {
1097 let isl_rs_ctx = upma.get_ctx();
1098 let mut upma = upma;
1099 upma.do_not_free_on_drop();
1100 let upma = upma.ptr;
1101 let isl_rs_result = unsafe { isl_union_map_from_union_pw_multi_aff(upma) };
1102 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1103 should_free_on_drop: true };
1104 let err = isl_rs_ctx.last_error();
1105 if err != Error::None_ {
1106 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1107 }
1108 Ok(isl_rs_result)
1109 }
1110
1111 pub fn get_ctx(&self) -> Context {
1113 let umap = self;
1114 let umap = umap.ptr;
1115 let isl_rs_result = unsafe { isl_union_map_get_ctx(umap) };
1116 let isl_rs_result = Context { ptr: isl_rs_result,
1117 should_free_on_drop: false };
1118 isl_rs_result
1119 }
1120
1121 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
1123 let umap = self;
1124 let isl_rs_ctx = umap.get_ctx();
1125 let umap = umap.ptr;
1126 let type_ = type_.to_i32();
1127 let isl_rs_result = unsafe { isl_union_map_get_dim_id(umap, type_, pos) };
1128 let isl_rs_result = Id { ptr: isl_rs_result,
1129 should_free_on_drop: true };
1130 let err = isl_rs_ctx.last_error();
1131 if err != Error::None_ {
1132 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1133 }
1134 Ok(isl_rs_result)
1135 }
1136
1137 pub fn get_hash(&self) -> Result<u32, LibISLError> {
1139 let umap = self;
1140 let isl_rs_ctx = umap.get_ctx();
1141 let umap = umap.ptr;
1142 let isl_rs_result = unsafe { isl_union_map_get_hash(umap) };
1143 let err = isl_rs_ctx.last_error();
1144 if err != Error::None_ {
1145 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1146 }
1147 Ok(isl_rs_result)
1148 }
1149
1150 pub fn get_map_list(&self) -> Result<MapList, LibISLError> {
1152 let umap = self;
1153 let isl_rs_ctx = umap.get_ctx();
1154 let umap = umap.ptr;
1155 let isl_rs_result = unsafe { isl_union_map_get_map_list(umap) };
1156 let isl_rs_result = MapList { ptr: isl_rs_result,
1157 should_free_on_drop: true };
1158 let err = isl_rs_ctx.last_error();
1159 if err != Error::None_ {
1160 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1161 }
1162 Ok(isl_rs_result)
1163 }
1164
1165 pub fn get_space(&self) -> Result<Space, LibISLError> {
1167 let umap = self;
1168 let isl_rs_ctx = umap.get_ctx();
1169 let umap = umap.ptr;
1170 let isl_rs_result = unsafe { isl_union_map_get_space(umap) };
1171 let isl_rs_result = Space { ptr: isl_rs_result,
1172 should_free_on_drop: true };
1173 let err = isl_rs_ctx.last_error();
1174 if err != Error::None_ {
1175 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1176 }
1177 Ok(isl_rs_result)
1178 }
1179
1180 pub fn gist(self, context: UnionMap) -> Result<UnionMap, LibISLError> {
1182 let umap = self;
1183 let isl_rs_ctx = umap.get_ctx();
1184 let mut umap = umap;
1185 umap.do_not_free_on_drop();
1186 let umap = umap.ptr;
1187 let mut context = context;
1188 context.do_not_free_on_drop();
1189 let context = context.ptr;
1190 let isl_rs_result = unsafe { isl_union_map_gist(umap, context) };
1191 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1192 should_free_on_drop: true };
1193 let err = isl_rs_ctx.last_error();
1194 if err != Error::None_ {
1195 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1196 }
1197 Ok(isl_rs_result)
1198 }
1199
1200 pub fn gist_domain(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1202 let umap = self;
1203 let isl_rs_ctx = umap.get_ctx();
1204 let mut umap = umap;
1205 umap.do_not_free_on_drop();
1206 let umap = umap.ptr;
1207 let mut uset = uset;
1208 uset.do_not_free_on_drop();
1209 let uset = uset.ptr;
1210 let isl_rs_result = unsafe { isl_union_map_gist_domain(umap, uset) };
1211 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1212 should_free_on_drop: true };
1213 let err = isl_rs_ctx.last_error();
1214 if err != Error::None_ {
1215 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1216 }
1217 Ok(isl_rs_result)
1218 }
1219
1220 pub fn gist_params(self, set: Set) -> Result<UnionMap, LibISLError> {
1222 let umap = self;
1223 let isl_rs_ctx = umap.get_ctx();
1224 let mut umap = umap;
1225 umap.do_not_free_on_drop();
1226 let umap = umap.ptr;
1227 let mut set = set;
1228 set.do_not_free_on_drop();
1229 let set = set.ptr;
1230 let isl_rs_result = unsafe { isl_union_map_gist_params(umap, set) };
1231 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1232 should_free_on_drop: true };
1233 let err = isl_rs_ctx.last_error();
1234 if err != Error::None_ {
1235 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1236 }
1237 Ok(isl_rs_result)
1238 }
1239
1240 pub fn gist_range(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1242 let umap = self;
1243 let isl_rs_ctx = umap.get_ctx();
1244 let mut umap = umap;
1245 umap.do_not_free_on_drop();
1246 let umap = umap.ptr;
1247 let mut uset = uset;
1248 uset.do_not_free_on_drop();
1249 let uset = uset.ptr;
1250 let isl_rs_result = unsafe { isl_union_map_gist_range(umap, uset) };
1251 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1252 should_free_on_drop: true };
1253 let err = isl_rs_ctx.last_error();
1254 if err != Error::None_ {
1255 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1256 }
1257 Ok(isl_rs_result)
1258 }
1259
1260 pub fn intersect(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1262 let umap1 = self;
1263 let isl_rs_ctx = umap1.get_ctx();
1264 let mut umap1 = umap1;
1265 umap1.do_not_free_on_drop();
1266 let umap1 = umap1.ptr;
1267 let mut umap2 = umap2;
1268 umap2.do_not_free_on_drop();
1269 let umap2 = umap2.ptr;
1270 let isl_rs_result = unsafe { isl_union_map_intersect(umap1, umap2) };
1271 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1272 should_free_on_drop: true };
1273 let err = isl_rs_ctx.last_error();
1274 if err != Error::None_ {
1275 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1276 }
1277 Ok(isl_rs_result)
1278 }
1279
1280 pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1282 let umap = self;
1283 let isl_rs_ctx = umap.get_ctx();
1284 let mut umap = umap;
1285 umap.do_not_free_on_drop();
1286 let umap = umap.ptr;
1287 let mut uset = uset;
1288 uset.do_not_free_on_drop();
1289 let uset = uset.ptr;
1290 let isl_rs_result = unsafe { isl_union_map_intersect_domain(umap, uset) };
1291 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1292 should_free_on_drop: true };
1293 let err = isl_rs_ctx.last_error();
1294 if err != Error::None_ {
1295 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1296 }
1297 Ok(isl_rs_result)
1298 }
1299
1300 pub fn intersect_domain_factor_domain(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1302 let umap = self;
1303 let isl_rs_ctx = umap.get_ctx();
1304 let mut umap = umap;
1305 umap.do_not_free_on_drop();
1306 let umap = umap.ptr;
1307 let mut factor = factor;
1308 factor.do_not_free_on_drop();
1309 let factor = factor.ptr;
1310 let isl_rs_result = unsafe { isl_union_map_intersect_domain_factor_domain(umap, factor) };
1311 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1312 should_free_on_drop: true };
1313 let err = isl_rs_ctx.last_error();
1314 if err != Error::None_ {
1315 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1316 }
1317 Ok(isl_rs_result)
1318 }
1319
1320 pub fn intersect_domain_factor_range(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1322 let umap = self;
1323 let isl_rs_ctx = umap.get_ctx();
1324 let mut umap = umap;
1325 umap.do_not_free_on_drop();
1326 let umap = umap.ptr;
1327 let mut factor = factor;
1328 factor.do_not_free_on_drop();
1329 let factor = factor.ptr;
1330 let isl_rs_result = unsafe { isl_union_map_intersect_domain_factor_range(umap, factor) };
1331 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1332 should_free_on_drop: true };
1333 let err = isl_rs_ctx.last_error();
1334 if err != Error::None_ {
1335 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1336 }
1337 Ok(isl_rs_result)
1338 }
1339
1340 pub fn intersect_domain_space(self, space: Space) -> Result<UnionMap, LibISLError> {
1342 let umap = self;
1343 let isl_rs_ctx = umap.get_ctx();
1344 let mut umap = umap;
1345 umap.do_not_free_on_drop();
1346 let umap = umap.ptr;
1347 let mut space = space;
1348 space.do_not_free_on_drop();
1349 let space = space.ptr;
1350 let isl_rs_result = unsafe { isl_union_map_intersect_domain_space(umap, space) };
1351 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1352 should_free_on_drop: true };
1353 let err = isl_rs_ctx.last_error();
1354 if err != Error::None_ {
1355 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1356 }
1357 Ok(isl_rs_result)
1358 }
1359
1360 pub fn intersect_domain_union_set(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1362 let umap = self;
1363 let isl_rs_ctx = umap.get_ctx();
1364 let mut umap = umap;
1365 umap.do_not_free_on_drop();
1366 let umap = umap.ptr;
1367 let mut uset = uset;
1368 uset.do_not_free_on_drop();
1369 let uset = uset.ptr;
1370 let isl_rs_result = unsafe { isl_union_map_intersect_domain_union_set(umap, uset) };
1371 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1372 should_free_on_drop: true };
1373 let err = isl_rs_ctx.last_error();
1374 if err != Error::None_ {
1375 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1376 }
1377 Ok(isl_rs_result)
1378 }
1379
1380 pub fn intersect_domain_wrapped_domain_union_set(self, domain: UnionSet)
1382 -> Result<UnionMap, LibISLError> {
1383 let umap = self;
1384 let isl_rs_ctx = umap.get_ctx();
1385 let mut umap = umap;
1386 umap.do_not_free_on_drop();
1387 let umap = umap.ptr;
1388 let mut domain = domain;
1389 domain.do_not_free_on_drop();
1390 let domain = domain.ptr;
1391 let isl_rs_result =
1392 unsafe { isl_union_map_intersect_domain_wrapped_domain_union_set(umap, domain) };
1393 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1394 should_free_on_drop: true };
1395 let err = isl_rs_ctx.last_error();
1396 if err != Error::None_ {
1397 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1398 }
1399 Ok(isl_rs_result)
1400 }
1401
1402 pub fn intersect_params(self, set: Set) -> Result<UnionMap, LibISLError> {
1404 let umap = self;
1405 let isl_rs_ctx = umap.get_ctx();
1406 let mut umap = umap;
1407 umap.do_not_free_on_drop();
1408 let umap = umap.ptr;
1409 let mut set = set;
1410 set.do_not_free_on_drop();
1411 let set = set.ptr;
1412 let isl_rs_result = unsafe { isl_union_map_intersect_params(umap, set) };
1413 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1414 should_free_on_drop: true };
1415 let err = isl_rs_ctx.last_error();
1416 if err != Error::None_ {
1417 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1418 }
1419 Ok(isl_rs_result)
1420 }
1421
1422 pub fn intersect_range(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1424 let umap = self;
1425 let isl_rs_ctx = umap.get_ctx();
1426 let mut umap = umap;
1427 umap.do_not_free_on_drop();
1428 let umap = umap.ptr;
1429 let mut uset = uset;
1430 uset.do_not_free_on_drop();
1431 let uset = uset.ptr;
1432 let isl_rs_result = unsafe { isl_union_map_intersect_range(umap, uset) };
1433 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1434 should_free_on_drop: true };
1435 let err = isl_rs_ctx.last_error();
1436 if err != Error::None_ {
1437 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1438 }
1439 Ok(isl_rs_result)
1440 }
1441
1442 pub fn intersect_range_factor_domain(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1444 let umap = self;
1445 let isl_rs_ctx = umap.get_ctx();
1446 let mut umap = umap;
1447 umap.do_not_free_on_drop();
1448 let umap = umap.ptr;
1449 let mut factor = factor;
1450 factor.do_not_free_on_drop();
1451 let factor = factor.ptr;
1452 let isl_rs_result = unsafe { isl_union_map_intersect_range_factor_domain(umap, factor) };
1453 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1454 should_free_on_drop: true };
1455 let err = isl_rs_ctx.last_error();
1456 if err != Error::None_ {
1457 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1458 }
1459 Ok(isl_rs_result)
1460 }
1461
1462 pub fn intersect_range_factor_range(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1464 let umap = self;
1465 let isl_rs_ctx = umap.get_ctx();
1466 let mut umap = umap;
1467 umap.do_not_free_on_drop();
1468 let umap = umap.ptr;
1469 let mut factor = factor;
1470 factor.do_not_free_on_drop();
1471 let factor = factor.ptr;
1472 let isl_rs_result = unsafe { isl_union_map_intersect_range_factor_range(umap, factor) };
1473 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1474 should_free_on_drop: true };
1475 let err = isl_rs_ctx.last_error();
1476 if err != Error::None_ {
1477 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1478 }
1479 Ok(isl_rs_result)
1480 }
1481
1482 pub fn intersect_range_space(self, space: Space) -> Result<UnionMap, LibISLError> {
1484 let umap = self;
1485 let isl_rs_ctx = umap.get_ctx();
1486 let mut umap = umap;
1487 umap.do_not_free_on_drop();
1488 let umap = umap.ptr;
1489 let mut space = space;
1490 space.do_not_free_on_drop();
1491 let space = space.ptr;
1492 let isl_rs_result = unsafe { isl_union_map_intersect_range_space(umap, space) };
1493 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1494 should_free_on_drop: true };
1495 let err = isl_rs_ctx.last_error();
1496 if err != Error::None_ {
1497 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1498 }
1499 Ok(isl_rs_result)
1500 }
1501
1502 pub fn intersect_range_union_set(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1504 let umap = self;
1505 let isl_rs_ctx = umap.get_ctx();
1506 let mut umap = umap;
1507 umap.do_not_free_on_drop();
1508 let umap = umap.ptr;
1509 let mut uset = uset;
1510 uset.do_not_free_on_drop();
1511 let uset = uset.ptr;
1512 let isl_rs_result = unsafe { isl_union_map_intersect_range_union_set(umap, uset) };
1513 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1514 should_free_on_drop: true };
1515 let err = isl_rs_ctx.last_error();
1516 if err != Error::None_ {
1517 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1518 }
1519 Ok(isl_rs_result)
1520 }
1521
1522 pub fn intersect_range_wrapped_domain_union_set(self, domain: UnionSet)
1524 -> Result<UnionMap, LibISLError> {
1525 let umap = self;
1526 let isl_rs_ctx = umap.get_ctx();
1527 let mut umap = umap;
1528 umap.do_not_free_on_drop();
1529 let umap = umap.ptr;
1530 let mut domain = domain;
1531 domain.do_not_free_on_drop();
1532 let domain = domain.ptr;
1533 let isl_rs_result =
1534 unsafe { isl_union_map_intersect_range_wrapped_domain_union_set(umap, domain) };
1535 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1536 should_free_on_drop: true };
1537 let err = isl_rs_ctx.last_error();
1538 if err != Error::None_ {
1539 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1540 }
1541 Ok(isl_rs_result)
1542 }
1543
1544 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1546 let umap = self;
1547 let isl_rs_ctx = umap.get_ctx();
1548 let umap = umap.ptr;
1549 let type_ = type_.to_i32();
1550 let isl_rs_result = unsafe { isl_union_map_involves_dims(umap, type_, first, n) };
1551 let isl_rs_result = match isl_rs_result {
1552 0 => false,
1553 1 => true,
1554 _ => panic!("Got isl_bool = -1"),
1555 };
1556 let err = isl_rs_ctx.last_error();
1557 if err != Error::None_ {
1558 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1559 }
1560 Ok(isl_rs_result)
1561 }
1562
1563 pub fn is_bijective(&self) -> Result<bool, LibISLError> {
1565 let umap = self;
1566 let isl_rs_ctx = umap.get_ctx();
1567 let umap = umap.ptr;
1568 let isl_rs_result = unsafe { isl_union_map_is_bijective(umap) };
1569 let isl_rs_result = match isl_rs_result {
1570 0 => false,
1571 1 => true,
1572 _ => panic!("Got isl_bool = -1"),
1573 };
1574 let err = isl_rs_ctx.last_error();
1575 if err != Error::None_ {
1576 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1577 }
1578 Ok(isl_rs_result)
1579 }
1580
1581 pub fn is_disjoint(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1583 let umap1 = self;
1584 let isl_rs_ctx = umap1.get_ctx();
1585 let umap1 = umap1.ptr;
1586 let umap2 = umap2.ptr;
1587 let isl_rs_result = unsafe { isl_union_map_is_disjoint(umap1, umap2) };
1588 let isl_rs_result = match isl_rs_result {
1589 0 => false,
1590 1 => true,
1591 _ => panic!("Got isl_bool = -1"),
1592 };
1593 let err = isl_rs_ctx.last_error();
1594 if err != Error::None_ {
1595 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1596 }
1597 Ok(isl_rs_result)
1598 }
1599
1600 pub fn is_empty(&self) -> Result<bool, LibISLError> {
1602 let umap = self;
1603 let isl_rs_ctx = umap.get_ctx();
1604 let umap = umap.ptr;
1605 let isl_rs_result = unsafe { isl_union_map_is_empty(umap) };
1606 let isl_rs_result = match isl_rs_result {
1607 0 => false,
1608 1 => true,
1609 _ => panic!("Got isl_bool = -1"),
1610 };
1611 let err = isl_rs_ctx.last_error();
1612 if err != Error::None_ {
1613 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1614 }
1615 Ok(isl_rs_result)
1616 }
1617
1618 pub fn is_equal(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1620 let umap1 = self;
1621 let isl_rs_ctx = umap1.get_ctx();
1622 let umap1 = umap1.ptr;
1623 let umap2 = umap2.ptr;
1624 let isl_rs_result = unsafe { isl_union_map_is_equal(umap1, umap2) };
1625 let isl_rs_result = match isl_rs_result {
1626 0 => false,
1627 1 => true,
1628 _ => panic!("Got isl_bool = -1"),
1629 };
1630 let err = isl_rs_ctx.last_error();
1631 if err != Error::None_ {
1632 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1633 }
1634 Ok(isl_rs_result)
1635 }
1636
1637 pub fn is_identity(&self) -> Result<bool, LibISLError> {
1639 let umap = self;
1640 let isl_rs_ctx = umap.get_ctx();
1641 let umap = umap.ptr;
1642 let isl_rs_result = unsafe { isl_union_map_is_identity(umap) };
1643 let isl_rs_result = match isl_rs_result {
1644 0 => false,
1645 1 => true,
1646 _ => panic!("Got isl_bool = -1"),
1647 };
1648 let err = isl_rs_ctx.last_error();
1649 if err != Error::None_ {
1650 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1651 }
1652 Ok(isl_rs_result)
1653 }
1654
1655 pub fn is_injective(&self) -> Result<bool, LibISLError> {
1657 let umap = self;
1658 let isl_rs_ctx = umap.get_ctx();
1659 let umap = umap.ptr;
1660 let isl_rs_result = unsafe { isl_union_map_is_injective(umap) };
1661 let isl_rs_result = match isl_rs_result {
1662 0 => false,
1663 1 => true,
1664 _ => panic!("Got isl_bool = -1"),
1665 };
1666 let err = isl_rs_ctx.last_error();
1667 if err != Error::None_ {
1668 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1669 }
1670 Ok(isl_rs_result)
1671 }
1672
1673 pub fn is_single_valued(&self) -> Result<bool, LibISLError> {
1675 let umap = self;
1676 let isl_rs_ctx = umap.get_ctx();
1677 let umap = umap.ptr;
1678 let isl_rs_result = unsafe { isl_union_map_is_single_valued(umap) };
1679 let isl_rs_result = match isl_rs_result {
1680 0 => false,
1681 1 => true,
1682 _ => panic!("Got isl_bool = -1"),
1683 };
1684 let err = isl_rs_ctx.last_error();
1685 if err != Error::None_ {
1686 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1687 }
1688 Ok(isl_rs_result)
1689 }
1690
1691 pub fn is_strict_subset(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1693 let umap1 = self;
1694 let isl_rs_ctx = umap1.get_ctx();
1695 let umap1 = umap1.ptr;
1696 let umap2 = umap2.ptr;
1697 let isl_rs_result = unsafe { isl_union_map_is_strict_subset(umap1, umap2) };
1698 let isl_rs_result = match isl_rs_result {
1699 0 => false,
1700 1 => true,
1701 _ => panic!("Got isl_bool = -1"),
1702 };
1703 let err = isl_rs_ctx.last_error();
1704 if err != Error::None_ {
1705 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1706 }
1707 Ok(isl_rs_result)
1708 }
1709
1710 pub fn is_subset(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1712 let umap1 = self;
1713 let isl_rs_ctx = umap1.get_ctx();
1714 let umap1 = umap1.ptr;
1715 let umap2 = umap2.ptr;
1716 let isl_rs_result = unsafe { isl_union_map_is_subset(umap1, umap2) };
1717 let isl_rs_result = match isl_rs_result {
1718 0 => false,
1719 1 => true,
1720 _ => panic!("Got isl_bool = -1"),
1721 };
1722 let err = isl_rs_ctx.last_error();
1723 if err != Error::None_ {
1724 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1725 }
1726 Ok(isl_rs_result)
1727 }
1728
1729 pub fn isa_map(&self) -> Result<bool, LibISLError> {
1731 let umap = self;
1732 let isl_rs_ctx = umap.get_ctx();
1733 let umap = umap.ptr;
1734 let isl_rs_result = unsafe { isl_union_map_isa_map(umap) };
1735 let isl_rs_result = match isl_rs_result {
1736 0 => false,
1737 1 => true,
1738 _ => panic!("Got isl_bool = -1"),
1739 };
1740 let err = isl_rs_ctx.last_error();
1741 if err != Error::None_ {
1742 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1743 }
1744 Ok(isl_rs_result)
1745 }
1746
1747 pub fn lex_ge_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1749 -> Result<UnionMap, LibISLError> {
1750 let umap = self;
1751 let isl_rs_ctx = umap.get_ctx();
1752 let mut umap = umap;
1753 umap.do_not_free_on_drop();
1754 let umap = umap.ptr;
1755 let mut mupa = mupa;
1756 mupa.do_not_free_on_drop();
1757 let mupa = mupa.ptr;
1758 let isl_rs_result = unsafe { isl_union_map_lex_ge_at_multi_union_pw_aff(umap, mupa) };
1759 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1760 should_free_on_drop: true };
1761 let err = isl_rs_ctx.last_error();
1762 if err != Error::None_ {
1763 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1764 }
1765 Ok(isl_rs_result)
1766 }
1767
1768 pub fn lex_ge_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1770 let umap1 = self;
1771 let isl_rs_ctx = umap1.get_ctx();
1772 let mut umap1 = umap1;
1773 umap1.do_not_free_on_drop();
1774 let umap1 = umap1.ptr;
1775 let mut umap2 = umap2;
1776 umap2.do_not_free_on_drop();
1777 let umap2 = umap2.ptr;
1778 let isl_rs_result = unsafe { isl_union_map_lex_ge_union_map(umap1, umap2) };
1779 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1780 should_free_on_drop: true };
1781 let err = isl_rs_ctx.last_error();
1782 if err != Error::None_ {
1783 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1784 }
1785 Ok(isl_rs_result)
1786 }
1787
1788 pub fn lex_gt_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1790 -> Result<UnionMap, LibISLError> {
1791 let umap = self;
1792 let isl_rs_ctx = umap.get_ctx();
1793 let mut umap = umap;
1794 umap.do_not_free_on_drop();
1795 let umap = umap.ptr;
1796 let mut mupa = mupa;
1797 mupa.do_not_free_on_drop();
1798 let mupa = mupa.ptr;
1799 let isl_rs_result = unsafe { isl_union_map_lex_gt_at_multi_union_pw_aff(umap, mupa) };
1800 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1801 should_free_on_drop: true };
1802 let err = isl_rs_ctx.last_error();
1803 if err != Error::None_ {
1804 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1805 }
1806 Ok(isl_rs_result)
1807 }
1808
1809 pub fn lex_gt_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1811 let umap1 = self;
1812 let isl_rs_ctx = umap1.get_ctx();
1813 let mut umap1 = umap1;
1814 umap1.do_not_free_on_drop();
1815 let umap1 = umap1.ptr;
1816 let mut umap2 = umap2;
1817 umap2.do_not_free_on_drop();
1818 let umap2 = umap2.ptr;
1819 let isl_rs_result = unsafe { isl_union_map_lex_gt_union_map(umap1, umap2) };
1820 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1821 should_free_on_drop: true };
1822 let err = isl_rs_ctx.last_error();
1823 if err != Error::None_ {
1824 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1825 }
1826 Ok(isl_rs_result)
1827 }
1828
1829 pub fn lex_le_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1831 -> Result<UnionMap, LibISLError> {
1832 let umap = self;
1833 let isl_rs_ctx = umap.get_ctx();
1834 let mut umap = umap;
1835 umap.do_not_free_on_drop();
1836 let umap = umap.ptr;
1837 let mut mupa = mupa;
1838 mupa.do_not_free_on_drop();
1839 let mupa = mupa.ptr;
1840 let isl_rs_result = unsafe { isl_union_map_lex_le_at_multi_union_pw_aff(umap, mupa) };
1841 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1842 should_free_on_drop: true };
1843 let err = isl_rs_ctx.last_error();
1844 if err != Error::None_ {
1845 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1846 }
1847 Ok(isl_rs_result)
1848 }
1849
1850 pub fn lex_le_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1852 let umap1 = self;
1853 let isl_rs_ctx = umap1.get_ctx();
1854 let mut umap1 = umap1;
1855 umap1.do_not_free_on_drop();
1856 let umap1 = umap1.ptr;
1857 let mut umap2 = umap2;
1858 umap2.do_not_free_on_drop();
1859 let umap2 = umap2.ptr;
1860 let isl_rs_result = unsafe { isl_union_map_lex_le_union_map(umap1, umap2) };
1861 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1862 should_free_on_drop: true };
1863 let err = isl_rs_ctx.last_error();
1864 if err != Error::None_ {
1865 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1866 }
1867 Ok(isl_rs_result)
1868 }
1869
1870 pub fn lex_lt_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1872 -> Result<UnionMap, LibISLError> {
1873 let umap = self;
1874 let isl_rs_ctx = umap.get_ctx();
1875 let mut umap = umap;
1876 umap.do_not_free_on_drop();
1877 let umap = umap.ptr;
1878 let mut mupa = mupa;
1879 mupa.do_not_free_on_drop();
1880 let mupa = mupa.ptr;
1881 let isl_rs_result = unsafe { isl_union_map_lex_lt_at_multi_union_pw_aff(umap, mupa) };
1882 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1883 should_free_on_drop: true };
1884 let err = isl_rs_ctx.last_error();
1885 if err != Error::None_ {
1886 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1887 }
1888 Ok(isl_rs_result)
1889 }
1890
1891 pub fn lex_lt_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1893 let umap1 = self;
1894 let isl_rs_ctx = umap1.get_ctx();
1895 let mut umap1 = umap1;
1896 umap1.do_not_free_on_drop();
1897 let umap1 = umap1.ptr;
1898 let mut umap2 = umap2;
1899 umap2.do_not_free_on_drop();
1900 let umap2 = umap2.ptr;
1901 let isl_rs_result = unsafe { isl_union_map_lex_lt_union_map(umap1, umap2) };
1902 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1903 should_free_on_drop: true };
1904 let err = isl_rs_ctx.last_error();
1905 if err != Error::None_ {
1906 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1907 }
1908 Ok(isl_rs_result)
1909 }
1910
1911 pub fn lexmax(self) -> Result<UnionMap, LibISLError> {
1913 let umap = self;
1914 let isl_rs_ctx = umap.get_ctx();
1915 let mut umap = umap;
1916 umap.do_not_free_on_drop();
1917 let umap = umap.ptr;
1918 let isl_rs_result = unsafe { isl_union_map_lexmax(umap) };
1919 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1920 should_free_on_drop: true };
1921 let err = isl_rs_ctx.last_error();
1922 if err != Error::None_ {
1923 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1924 }
1925 Ok(isl_rs_result)
1926 }
1927
1928 pub fn lexmin(self) -> Result<UnionMap, LibISLError> {
1930 let umap = self;
1931 let isl_rs_ctx = umap.get_ctx();
1932 let mut umap = umap;
1933 umap.do_not_free_on_drop();
1934 let umap = umap.ptr;
1935 let isl_rs_result = unsafe { isl_union_map_lexmin(umap) };
1936 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1937 should_free_on_drop: true };
1938 let err = isl_rs_ctx.last_error();
1939 if err != Error::None_ {
1940 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1941 }
1942 Ok(isl_rs_result)
1943 }
1944
1945 pub fn n_map(&self) -> Result<i32, LibISLError> {
1947 let umap = self;
1948 let isl_rs_ctx = umap.get_ctx();
1949 let umap = umap.ptr;
1950 let isl_rs_result = unsafe { isl_union_map_n_map(umap) };
1951 let err = isl_rs_ctx.last_error();
1952 if err != Error::None_ {
1953 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1954 }
1955 Ok(isl_rs_result)
1956 }
1957
1958 pub fn params(self) -> Result<Set, LibISLError> {
1960 let umap = self;
1961 let isl_rs_ctx = umap.get_ctx();
1962 let mut umap = umap;
1963 umap.do_not_free_on_drop();
1964 let umap = umap.ptr;
1965 let isl_rs_result = unsafe { isl_union_map_params(umap) };
1966 let isl_rs_result = Set { ptr: isl_rs_result,
1967 should_free_on_drop: true };
1968 let err = isl_rs_ctx.last_error();
1969 if err != Error::None_ {
1970 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1971 }
1972 Ok(isl_rs_result)
1973 }
1974
1975 pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
1977 let umap = self;
1978 let isl_rs_ctx = umap.get_ctx();
1979 let umap = umap.ptr;
1980 let isl_rs_result = unsafe { isl_union_map_plain_is_empty(umap) };
1981 let isl_rs_result = match isl_rs_result {
1982 0 => false,
1983 1 => true,
1984 _ => panic!("Got isl_bool = -1"),
1985 };
1986 let err = isl_rs_ctx.last_error();
1987 if err != Error::None_ {
1988 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1989 }
1990 Ok(isl_rs_result)
1991 }
1992
1993 pub fn plain_is_injective(&self) -> Result<bool, LibISLError> {
1995 let umap = self;
1996 let isl_rs_ctx = umap.get_ctx();
1997 let umap = umap.ptr;
1998 let isl_rs_result = unsafe { isl_union_map_plain_is_injective(umap) };
1999 let isl_rs_result = match isl_rs_result {
2000 0 => false,
2001 1 => true,
2002 _ => panic!("Got isl_bool = -1"),
2003 };
2004 let err = isl_rs_ctx.last_error();
2005 if err != Error::None_ {
2006 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2007 }
2008 Ok(isl_rs_result)
2009 }
2010
2011 pub fn plain_unshifted_simple_hull(self) -> Result<UnionMap, LibISLError> {
2013 let umap = self;
2014 let isl_rs_ctx = umap.get_ctx();
2015 let mut umap = umap;
2016 umap.do_not_free_on_drop();
2017 let umap = umap.ptr;
2018 let isl_rs_result = unsafe { isl_union_map_plain_unshifted_simple_hull(umap) };
2019 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2020 should_free_on_drop: true };
2021 let err = isl_rs_ctx.last_error();
2022 if err != Error::None_ {
2023 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2024 }
2025 Ok(isl_rs_result)
2026 }
2027
2028 pub fn polyhedral_hull(self) -> Result<UnionMap, LibISLError> {
2030 let umap = self;
2031 let isl_rs_ctx = umap.get_ctx();
2032 let mut umap = umap;
2033 umap.do_not_free_on_drop();
2034 let umap = umap.ptr;
2035 let isl_rs_result = unsafe { isl_union_map_polyhedral_hull(umap) };
2036 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2037 should_free_on_drop: true };
2038 let err = isl_rs_ctx.last_error();
2039 if err != Error::None_ {
2040 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2041 }
2042 Ok(isl_rs_result)
2043 }
2044
2045 pub fn preimage_domain_multi_aff(self, ma: MultiAff) -> Result<UnionMap, LibISLError> {
2047 let umap = self;
2048 let isl_rs_ctx = umap.get_ctx();
2049 let mut umap = umap;
2050 umap.do_not_free_on_drop();
2051 let umap = umap.ptr;
2052 let mut ma = ma;
2053 ma.do_not_free_on_drop();
2054 let ma = ma.ptr;
2055 let isl_rs_result = unsafe { isl_union_map_preimage_domain_multi_aff(umap, ma) };
2056 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2057 should_free_on_drop: true };
2058 let err = isl_rs_ctx.last_error();
2059 if err != Error::None_ {
2060 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2061 }
2062 Ok(isl_rs_result)
2063 }
2064
2065 pub fn preimage_domain_multi_pw_aff(self, mpa: MultiPwAff) -> Result<UnionMap, LibISLError> {
2067 let umap = self;
2068 let isl_rs_ctx = umap.get_ctx();
2069 let mut umap = umap;
2070 umap.do_not_free_on_drop();
2071 let umap = umap.ptr;
2072 let mut mpa = mpa;
2073 mpa.do_not_free_on_drop();
2074 let mpa = mpa.ptr;
2075 let isl_rs_result = unsafe { isl_union_map_preimage_domain_multi_pw_aff(umap, mpa) };
2076 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2077 should_free_on_drop: true };
2078 let err = isl_rs_ctx.last_error();
2079 if err != Error::None_ {
2080 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2081 }
2082 Ok(isl_rs_result)
2083 }
2084
2085 pub fn preimage_domain_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionMap, LibISLError> {
2087 let umap = self;
2088 let isl_rs_ctx = umap.get_ctx();
2089 let mut umap = umap;
2090 umap.do_not_free_on_drop();
2091 let umap = umap.ptr;
2092 let mut pma = pma;
2093 pma.do_not_free_on_drop();
2094 let pma = pma.ptr;
2095 let isl_rs_result = unsafe { isl_union_map_preimage_domain_pw_multi_aff(umap, pma) };
2096 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2097 should_free_on_drop: true };
2098 let err = isl_rs_ctx.last_error();
2099 if err != Error::None_ {
2100 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2101 }
2102 Ok(isl_rs_result)
2103 }
2104
2105 pub fn preimage_domain_union_pw_multi_aff(self, upma: UnionPwMultiAff)
2107 -> Result<UnionMap, LibISLError> {
2108 let umap = self;
2109 let isl_rs_ctx = umap.get_ctx();
2110 let mut umap = umap;
2111 umap.do_not_free_on_drop();
2112 let umap = umap.ptr;
2113 let mut upma = upma;
2114 upma.do_not_free_on_drop();
2115 let upma = upma.ptr;
2116 let isl_rs_result = unsafe { isl_union_map_preimage_domain_union_pw_multi_aff(umap, upma) };
2117 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2118 should_free_on_drop: true };
2119 let err = isl_rs_ctx.last_error();
2120 if err != Error::None_ {
2121 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2122 }
2123 Ok(isl_rs_result)
2124 }
2125
2126 pub fn preimage_range_multi_aff(self, ma: MultiAff) -> Result<UnionMap, LibISLError> {
2128 let umap = self;
2129 let isl_rs_ctx = umap.get_ctx();
2130 let mut umap = umap;
2131 umap.do_not_free_on_drop();
2132 let umap = umap.ptr;
2133 let mut ma = ma;
2134 ma.do_not_free_on_drop();
2135 let ma = ma.ptr;
2136 let isl_rs_result = unsafe { isl_union_map_preimage_range_multi_aff(umap, ma) };
2137 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2138 should_free_on_drop: true };
2139 let err = isl_rs_ctx.last_error();
2140 if err != Error::None_ {
2141 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2142 }
2143 Ok(isl_rs_result)
2144 }
2145
2146 pub fn preimage_range_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionMap, LibISLError> {
2148 let umap = self;
2149 let isl_rs_ctx = umap.get_ctx();
2150 let mut umap = umap;
2151 umap.do_not_free_on_drop();
2152 let umap = umap.ptr;
2153 let mut pma = pma;
2154 pma.do_not_free_on_drop();
2155 let pma = pma.ptr;
2156 let isl_rs_result = unsafe { isl_union_map_preimage_range_pw_multi_aff(umap, pma) };
2157 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2158 should_free_on_drop: true };
2159 let err = isl_rs_ctx.last_error();
2160 if err != Error::None_ {
2161 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2162 }
2163 Ok(isl_rs_result)
2164 }
2165
2166 pub fn preimage_range_union_pw_multi_aff(self, upma: UnionPwMultiAff)
2168 -> Result<UnionMap, LibISLError> {
2169 let umap = self;
2170 let isl_rs_ctx = umap.get_ctx();
2171 let mut umap = umap;
2172 umap.do_not_free_on_drop();
2173 let umap = umap.ptr;
2174 let mut upma = upma;
2175 upma.do_not_free_on_drop();
2176 let upma = upma.ptr;
2177 let isl_rs_result = unsafe { isl_union_map_preimage_range_union_pw_multi_aff(umap, upma) };
2178 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2179 should_free_on_drop: true };
2180 let err = isl_rs_ctx.last_error();
2181 if err != Error::None_ {
2182 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2183 }
2184 Ok(isl_rs_result)
2185 }
2186
2187 pub fn product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2189 let umap1 = self;
2190 let isl_rs_ctx = umap1.get_ctx();
2191 let mut umap1 = umap1;
2192 umap1.do_not_free_on_drop();
2193 let umap1 = umap1.ptr;
2194 let mut umap2 = umap2;
2195 umap2.do_not_free_on_drop();
2196 let umap2 = umap2.ptr;
2197 let isl_rs_result = unsafe { isl_union_map_product(umap1, umap2) };
2198 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2199 should_free_on_drop: true };
2200 let err = isl_rs_ctx.last_error();
2201 if err != Error::None_ {
2202 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2203 }
2204 Ok(isl_rs_result)
2205 }
2206
2207 pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<UnionMap, LibISLError> {
2209 let umap = self;
2210 let isl_rs_ctx = umap.get_ctx();
2211 let mut umap = umap;
2212 umap.do_not_free_on_drop();
2213 let umap = umap.ptr;
2214 let type_ = type_.to_i32();
2215 let isl_rs_result = unsafe { isl_union_map_project_out(umap, type_, first, n) };
2216 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2217 should_free_on_drop: true };
2218 let err = isl_rs_ctx.last_error();
2219 if err != Error::None_ {
2220 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2221 }
2222 Ok(isl_rs_result)
2223 }
2224
2225 pub fn project_out_all_params(self) -> Result<UnionMap, LibISLError> {
2227 let umap = self;
2228 let isl_rs_ctx = umap.get_ctx();
2229 let mut umap = umap;
2230 umap.do_not_free_on_drop();
2231 let umap = umap.ptr;
2232 let isl_rs_result = unsafe { isl_union_map_project_out_all_params(umap) };
2233 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2234 should_free_on_drop: true };
2235 let err = isl_rs_ctx.last_error();
2236 if err != Error::None_ {
2237 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2238 }
2239 Ok(isl_rs_result)
2240 }
2241
2242 pub fn project_out_param_id(self, id: Id) -> Result<UnionMap, LibISLError> {
2244 let umap = self;
2245 let isl_rs_ctx = umap.get_ctx();
2246 let mut umap = umap;
2247 umap.do_not_free_on_drop();
2248 let umap = umap.ptr;
2249 let mut id = id;
2250 id.do_not_free_on_drop();
2251 let id = id.ptr;
2252 let isl_rs_result = unsafe { isl_union_map_project_out_param_id(umap, id) };
2253 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2254 should_free_on_drop: true };
2255 let err = isl_rs_ctx.last_error();
2256 if err != Error::None_ {
2257 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2258 }
2259 Ok(isl_rs_result)
2260 }
2261
2262 pub fn project_out_param_id_list(self, list: IdList) -> Result<UnionMap, LibISLError> {
2264 let umap = self;
2265 let isl_rs_ctx = umap.get_ctx();
2266 let mut umap = umap;
2267 umap.do_not_free_on_drop();
2268 let umap = umap.ptr;
2269 let mut list = list;
2270 list.do_not_free_on_drop();
2271 let list = list.ptr;
2272 let isl_rs_result = unsafe { isl_union_map_project_out_param_id_list(umap, list) };
2273 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2274 should_free_on_drop: true };
2275 let err = isl_rs_ctx.last_error();
2276 if err != Error::None_ {
2277 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2278 }
2279 Ok(isl_rs_result)
2280 }
2281
2282 pub fn range(self) -> Result<UnionSet, LibISLError> {
2284 let umap = self;
2285 let isl_rs_ctx = umap.get_ctx();
2286 let mut umap = umap;
2287 umap.do_not_free_on_drop();
2288 let umap = umap.ptr;
2289 let isl_rs_result = unsafe { isl_union_map_range(umap) };
2290 let isl_rs_result = UnionSet { ptr: isl_rs_result,
2291 should_free_on_drop: true };
2292 let err = isl_rs_ctx.last_error();
2293 if err != Error::None_ {
2294 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2295 }
2296 Ok(isl_rs_result)
2297 }
2298
2299 pub fn range_curry(self) -> Result<UnionMap, LibISLError> {
2301 let umap = self;
2302 let isl_rs_ctx = umap.get_ctx();
2303 let mut umap = umap;
2304 umap.do_not_free_on_drop();
2305 let umap = umap.ptr;
2306 let isl_rs_result = unsafe { isl_union_map_range_curry(umap) };
2307 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2308 should_free_on_drop: true };
2309 let err = isl_rs_ctx.last_error();
2310 if err != Error::None_ {
2311 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2312 }
2313 Ok(isl_rs_result)
2314 }
2315
2316 pub fn range_factor_domain(self) -> Result<UnionMap, LibISLError> {
2318 let umap = self;
2319 let isl_rs_ctx = umap.get_ctx();
2320 let mut umap = umap;
2321 umap.do_not_free_on_drop();
2322 let umap = umap.ptr;
2323 let isl_rs_result = unsafe { isl_union_map_range_factor_domain(umap) };
2324 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2325 should_free_on_drop: true };
2326 let err = isl_rs_ctx.last_error();
2327 if err != Error::None_ {
2328 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2329 }
2330 Ok(isl_rs_result)
2331 }
2332
2333 pub fn range_factor_range(self) -> Result<UnionMap, LibISLError> {
2335 let umap = self;
2336 let isl_rs_ctx = umap.get_ctx();
2337 let mut umap = umap;
2338 umap.do_not_free_on_drop();
2339 let umap = umap.ptr;
2340 let isl_rs_result = unsafe { isl_union_map_range_factor_range(umap) };
2341 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2342 should_free_on_drop: true };
2343 let err = isl_rs_ctx.last_error();
2344 if err != Error::None_ {
2345 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2346 }
2347 Ok(isl_rs_result)
2348 }
2349
2350 pub fn range_map(self) -> Result<UnionMap, LibISLError> {
2352 let umap = self;
2353 let isl_rs_ctx = umap.get_ctx();
2354 let mut umap = umap;
2355 umap.do_not_free_on_drop();
2356 let umap = umap.ptr;
2357 let isl_rs_result = unsafe { isl_union_map_range_map(umap) };
2358 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2359 should_free_on_drop: true };
2360 let err = isl_rs_ctx.last_error();
2361 if err != Error::None_ {
2362 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2363 }
2364 Ok(isl_rs_result)
2365 }
2366
2367 pub fn range_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2369 let umap1 = self;
2370 let isl_rs_ctx = umap1.get_ctx();
2371 let mut umap1 = umap1;
2372 umap1.do_not_free_on_drop();
2373 let umap1 = umap1.ptr;
2374 let mut umap2 = umap2;
2375 umap2.do_not_free_on_drop();
2376 let umap2 = umap2.ptr;
2377 let isl_rs_result = unsafe { isl_union_map_range_product(umap1, umap2) };
2378 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2379 should_free_on_drop: true };
2380 let err = isl_rs_ctx.last_error();
2381 if err != Error::None_ {
2382 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2383 }
2384 Ok(isl_rs_result)
2385 }
2386
2387 pub fn range_reverse(self) -> Result<UnionMap, LibISLError> {
2389 let umap = self;
2390 let isl_rs_ctx = umap.get_ctx();
2391 let mut umap = umap;
2392 umap.do_not_free_on_drop();
2393 let umap = umap.ptr;
2394 let isl_rs_result = unsafe { isl_union_map_range_reverse(umap) };
2395 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2396 should_free_on_drop: true };
2397 let err = isl_rs_ctx.last_error();
2398 if err != Error::None_ {
2399 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2400 }
2401 Ok(isl_rs_result)
2402 }
2403
2404 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionMap, LibISLError> {
2406 let isl_rs_ctx = Context { ptr: ctx.ptr,
2407 should_free_on_drop: false };
2408 let ctx = ctx.ptr;
2409 let str_ = CString::new(str_).unwrap();
2410 let str_ = str_.as_ptr();
2411 let isl_rs_result = unsafe { isl_union_map_read_from_str(ctx, str_) };
2412 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2413 should_free_on_drop: true };
2414 let err = isl_rs_ctx.last_error();
2415 if err != Error::None_ {
2416 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2417 }
2418 Ok(isl_rs_result)
2419 }
2420
2421 pub fn remove_divs(self) -> Result<UnionMap, LibISLError> {
2423 let bmap = self;
2424 let isl_rs_ctx = bmap.get_ctx();
2425 let mut bmap = bmap;
2426 bmap.do_not_free_on_drop();
2427 let bmap = bmap.ptr;
2428 let isl_rs_result = unsafe { isl_union_map_remove_divs(bmap) };
2429 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2430 should_free_on_drop: true };
2431 let err = isl_rs_ctx.last_error();
2432 if err != Error::None_ {
2433 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2434 }
2435 Ok(isl_rs_result)
2436 }
2437
2438 pub fn remove_redundancies(self) -> Result<UnionMap, LibISLError> {
2440 let umap = self;
2441 let isl_rs_ctx = umap.get_ctx();
2442 let mut umap = umap;
2443 umap.do_not_free_on_drop();
2444 let umap = umap.ptr;
2445 let isl_rs_result = unsafe { isl_union_map_remove_redundancies(umap) };
2446 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2447 should_free_on_drop: true };
2448 let err = isl_rs_ctx.last_error();
2449 if err != Error::None_ {
2450 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2451 }
2452 Ok(isl_rs_result)
2453 }
2454
2455 pub fn reset_user(self) -> Result<UnionMap, LibISLError> {
2457 let umap = self;
2458 let isl_rs_ctx = umap.get_ctx();
2459 let mut umap = umap;
2460 umap.do_not_free_on_drop();
2461 let umap = umap.ptr;
2462 let isl_rs_result = unsafe { isl_union_map_reset_user(umap) };
2463 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2464 should_free_on_drop: true };
2465 let err = isl_rs_ctx.last_error();
2466 if err != Error::None_ {
2467 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2468 }
2469 Ok(isl_rs_result)
2470 }
2471
2472 pub fn reverse(self) -> Result<UnionMap, LibISLError> {
2474 let umap = self;
2475 let isl_rs_ctx = umap.get_ctx();
2476 let mut umap = umap;
2477 umap.do_not_free_on_drop();
2478 let umap = umap.ptr;
2479 let isl_rs_result = unsafe { isl_union_map_reverse(umap) };
2480 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2481 should_free_on_drop: true };
2482 let err = isl_rs_ctx.last_error();
2483 if err != Error::None_ {
2484 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2485 }
2486 Ok(isl_rs_result)
2487 }
2488
2489 pub fn sample(self) -> Result<BasicMap, LibISLError> {
2491 let umap = self;
2492 let isl_rs_ctx = umap.get_ctx();
2493 let mut umap = umap;
2494 umap.do_not_free_on_drop();
2495 let umap = umap.ptr;
2496 let isl_rs_result = unsafe { isl_union_map_sample(umap) };
2497 let isl_rs_result = BasicMap { ptr: isl_rs_result,
2498 should_free_on_drop: true };
2499 let err = isl_rs_ctx.last_error();
2500 if err != Error::None_ {
2501 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2502 }
2503 Ok(isl_rs_result)
2504 }
2505
2506 pub fn simple_hull(self) -> Result<UnionMap, LibISLError> {
2508 let umap = self;
2509 let isl_rs_ctx = umap.get_ctx();
2510 let mut umap = umap;
2511 umap.do_not_free_on_drop();
2512 let umap = umap.ptr;
2513 let isl_rs_result = unsafe { isl_union_map_simple_hull(umap) };
2514 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2515 should_free_on_drop: true };
2516 let err = isl_rs_ctx.last_error();
2517 if err != Error::None_ {
2518 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2519 }
2520 Ok(isl_rs_result)
2521 }
2522
2523 pub fn subtract(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2525 let umap1 = self;
2526 let isl_rs_ctx = umap1.get_ctx();
2527 let mut umap1 = umap1;
2528 umap1.do_not_free_on_drop();
2529 let umap1 = umap1.ptr;
2530 let mut umap2 = umap2;
2531 umap2.do_not_free_on_drop();
2532 let umap2 = umap2.ptr;
2533 let isl_rs_result = unsafe { isl_union_map_subtract(umap1, umap2) };
2534 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2535 should_free_on_drop: true };
2536 let err = isl_rs_ctx.last_error();
2537 if err != Error::None_ {
2538 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2539 }
2540 Ok(isl_rs_result)
2541 }
2542
2543 pub fn subtract_domain(self, dom: UnionSet) -> Result<UnionMap, LibISLError> {
2545 let umap = self;
2546 let isl_rs_ctx = umap.get_ctx();
2547 let mut umap = umap;
2548 umap.do_not_free_on_drop();
2549 let umap = umap.ptr;
2550 let mut dom = dom;
2551 dom.do_not_free_on_drop();
2552 let dom = dom.ptr;
2553 let isl_rs_result = unsafe { isl_union_map_subtract_domain(umap, dom) };
2554 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2555 should_free_on_drop: true };
2556 let err = isl_rs_ctx.last_error();
2557 if err != Error::None_ {
2558 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2559 }
2560 Ok(isl_rs_result)
2561 }
2562
2563 pub fn subtract_range(self, dom: UnionSet) -> Result<UnionMap, LibISLError> {
2565 let umap = self;
2566 let isl_rs_ctx = umap.get_ctx();
2567 let mut umap = umap;
2568 umap.do_not_free_on_drop();
2569 let umap = umap.ptr;
2570 let mut dom = dom;
2571 dom.do_not_free_on_drop();
2572 let dom = dom.ptr;
2573 let isl_rs_result = unsafe { isl_union_map_subtract_range(umap, dom) };
2574 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2575 should_free_on_drop: true };
2576 let err = isl_rs_ctx.last_error();
2577 if err != Error::None_ {
2578 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2579 }
2580 Ok(isl_rs_result)
2581 }
2582
2583 pub fn to_list(self) -> Result<UnionMapList, LibISLError> {
2585 let el = self;
2586 let isl_rs_ctx = el.get_ctx();
2587 let mut el = el;
2588 el.do_not_free_on_drop();
2589 let el = el.ptr;
2590 let isl_rs_result = unsafe { isl_union_map_to_list(el) };
2591 let isl_rs_result = UnionMapList { ptr: isl_rs_result,
2592 should_free_on_drop: true };
2593 let err = isl_rs_ctx.last_error();
2594 if err != Error::None_ {
2595 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2596 }
2597 Ok(isl_rs_result)
2598 }
2599
2600 pub fn to_str(&self) -> Result<&str, LibISLError> {
2602 let umap = self;
2603 let isl_rs_ctx = umap.get_ctx();
2604 let umap = umap.ptr;
2605 let isl_rs_result = unsafe { isl_union_map_to_str(umap) };
2606 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2607 let isl_rs_result = isl_rs_result.to_str().unwrap();
2608 let err = isl_rs_ctx.last_error();
2609 if err != Error::None_ {
2610 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2611 }
2612 Ok(isl_rs_result)
2613 }
2614
2615 pub fn uncurry(self) -> Result<UnionMap, LibISLError> {
2617 let umap = self;
2618 let isl_rs_ctx = umap.get_ctx();
2619 let mut umap = umap;
2620 umap.do_not_free_on_drop();
2621 let umap = umap.ptr;
2622 let isl_rs_result = unsafe { isl_union_map_uncurry(umap) };
2623 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2624 should_free_on_drop: true };
2625 let err = isl_rs_ctx.last_error();
2626 if err != Error::None_ {
2627 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2628 }
2629 Ok(isl_rs_result)
2630 }
2631
2632 pub fn union(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2634 let umap1 = self;
2635 let isl_rs_ctx = umap1.get_ctx();
2636 let mut umap1 = umap1;
2637 umap1.do_not_free_on_drop();
2638 let umap1 = umap1.ptr;
2639 let mut umap2 = umap2;
2640 umap2.do_not_free_on_drop();
2641 let umap2 = umap2.ptr;
2642 let isl_rs_result = unsafe { isl_union_map_union(umap1, umap2) };
2643 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2644 should_free_on_drop: true };
2645 let err = isl_rs_ctx.last_error();
2646 if err != Error::None_ {
2647 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2648 }
2649 Ok(isl_rs_result)
2650 }
2651
2652 pub fn universe(self) -> Result<UnionMap, LibISLError> {
2654 let umap = self;
2655 let isl_rs_ctx = umap.get_ctx();
2656 let mut umap = umap;
2657 umap.do_not_free_on_drop();
2658 let umap = umap.ptr;
2659 let isl_rs_result = unsafe { isl_union_map_universe(umap) };
2660 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2661 should_free_on_drop: true };
2662 let err = isl_rs_ctx.last_error();
2663 if err != Error::None_ {
2664 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2665 }
2666 Ok(isl_rs_result)
2667 }
2668
2669 pub fn wrap(self) -> Result<UnionSet, LibISLError> {
2671 let umap = self;
2672 let isl_rs_ctx = umap.get_ctx();
2673 let mut umap = umap;
2674 umap.do_not_free_on_drop();
2675 let umap = umap.ptr;
2676 let isl_rs_result = unsafe { isl_union_map_wrap(umap) };
2677 let isl_rs_result = UnionSet { ptr: isl_rs_result,
2678 should_free_on_drop: true };
2679 let err = isl_rs_ctx.last_error();
2680 if err != Error::None_ {
2681 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2682 }
2683 Ok(isl_rs_result)
2684 }
2685
2686 pub fn zip(self) -> Result<UnionMap, LibISLError> {
2688 let umap = self;
2689 let isl_rs_ctx = umap.get_ctx();
2690 let mut umap = umap;
2691 umap.do_not_free_on_drop();
2692 let umap = umap.ptr;
2693 let isl_rs_result = unsafe { isl_union_map_zip(umap) };
2694 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2695 should_free_on_drop: true };
2696 let err = isl_rs_ctx.last_error();
2697 if err != Error::None_ {
2698 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2699 }
2700 Ok(isl_rs_result)
2701 }
2702
2703 pub fn do_not_free_on_drop(&mut self) {
2706 self.should_free_on_drop = false;
2707 }
2708}
2709
2710impl Drop for UnionMap {
2711 fn drop(&mut self) {
2712 if self.should_free_on_drop {
2713 unsafe {
2714 isl_union_map_free(self.ptr);
2715 }
2716 }
2717 }
2718}