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 let err_msg = isl_rs_ctx.last_error_msg();
313 isl_rs_ctx.reset_error();
314 return Err(LibISLError::new(err, err_msg));
315 }
316 Ok(isl_rs_result)
317 }
318
319 pub fn affine_hull(self) -> Result<UnionMap, LibISLError> {
321 let umap = self;
322 let isl_rs_ctx = umap.get_ctx();
323 let mut umap = umap;
324 umap.do_not_free_on_drop();
325 let umap = umap.ptr;
326 let isl_rs_result = unsafe { isl_union_map_affine_hull(umap) };
327 let isl_rs_result = UnionMap { ptr: isl_rs_result,
328 should_free_on_drop: true };
329 let err = isl_rs_ctx.last_error();
330 if err != Error::None_ {
331 let err_msg = isl_rs_ctx.last_error_msg();
332 isl_rs_ctx.reset_error();
333 return Err(LibISLError::new(err, err_msg));
334 }
335 Ok(isl_rs_result)
336 }
337
338 pub fn align_params(self, model: Space) -> Result<UnionMap, LibISLError> {
340 let umap = self;
341 let isl_rs_ctx = umap.get_ctx();
342 let mut umap = umap;
343 umap.do_not_free_on_drop();
344 let umap = umap.ptr;
345 let mut model = model;
346 model.do_not_free_on_drop();
347 let model = model.ptr;
348 let isl_rs_result = unsafe { isl_union_map_align_params(umap, model) };
349 let isl_rs_result = UnionMap { ptr: isl_rs_result,
350 should_free_on_drop: true };
351 let err = isl_rs_ctx.last_error();
352 if err != Error::None_ {
353 let err_msg = isl_rs_ctx.last_error_msg();
354 isl_rs_ctx.reset_error();
355 return Err(LibISLError::new(err, err_msg));
356 }
357 Ok(isl_rs_result)
358 }
359
360 pub fn apply_domain(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
362 let umap1 = self;
363 let isl_rs_ctx = umap1.get_ctx();
364 let mut umap1 = umap1;
365 umap1.do_not_free_on_drop();
366 let umap1 = umap1.ptr;
367 let mut umap2 = umap2;
368 umap2.do_not_free_on_drop();
369 let umap2 = umap2.ptr;
370 let isl_rs_result = unsafe { isl_union_map_apply_domain(umap1, umap2) };
371 let isl_rs_result = UnionMap { ptr: isl_rs_result,
372 should_free_on_drop: true };
373 let err = isl_rs_ctx.last_error();
374 if err != Error::None_ {
375 let err_msg = isl_rs_ctx.last_error_msg();
376 isl_rs_ctx.reset_error();
377 return Err(LibISLError::new(err, err_msg));
378 }
379 Ok(isl_rs_result)
380 }
381
382 pub fn apply_range(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
384 let umap1 = self;
385 let isl_rs_ctx = umap1.get_ctx();
386 let mut umap1 = umap1;
387 umap1.do_not_free_on_drop();
388 let umap1 = umap1.ptr;
389 let mut umap2 = umap2;
390 umap2.do_not_free_on_drop();
391 let umap2 = umap2.ptr;
392 let isl_rs_result = unsafe { isl_union_map_apply_range(umap1, umap2) };
393 let isl_rs_result = UnionMap { ptr: isl_rs_result,
394 should_free_on_drop: true };
395 let err = isl_rs_ctx.last_error();
396 if err != Error::None_ {
397 let err_msg = isl_rs_ctx.last_error_msg();
398 isl_rs_ctx.reset_error();
399 return Err(LibISLError::new(err, err_msg));
400 }
401 Ok(isl_rs_result)
402 }
403
404 pub fn as_map(self) -> Result<Map, LibISLError> {
406 let umap = self;
407 let isl_rs_ctx = umap.get_ctx();
408 let mut umap = umap;
409 umap.do_not_free_on_drop();
410 let umap = umap.ptr;
411 let isl_rs_result = unsafe { isl_union_map_as_map(umap) };
412 let isl_rs_result = Map { ptr: isl_rs_result,
413 should_free_on_drop: true };
414 let err = isl_rs_ctx.last_error();
415 if err != Error::None_ {
416 let err_msg = isl_rs_ctx.last_error_msg();
417 isl_rs_ctx.reset_error();
418 return Err(LibISLError::new(err, err_msg));
419 }
420 Ok(isl_rs_result)
421 }
422
423 pub fn as_multi_union_pw_aff(self) -> Result<MultiUnionPwAff, LibISLError> {
425 let umap = self;
426 let isl_rs_ctx = umap.get_ctx();
427 let mut umap = umap;
428 umap.do_not_free_on_drop();
429 let umap = umap.ptr;
430 let isl_rs_result = unsafe { isl_union_map_as_multi_union_pw_aff(umap) };
431 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
432 should_free_on_drop: true };
433 let err = isl_rs_ctx.last_error();
434 if err != Error::None_ {
435 let err_msg = isl_rs_ctx.last_error_msg();
436 isl_rs_ctx.reset_error();
437 return Err(LibISLError::new(err, err_msg));
438 }
439 Ok(isl_rs_result)
440 }
441
442 pub fn as_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
444 let umap = self;
445 let isl_rs_ctx = umap.get_ctx();
446 let mut umap = umap;
447 umap.do_not_free_on_drop();
448 let umap = umap.ptr;
449 let isl_rs_result = unsafe { isl_union_map_as_union_pw_multi_aff(umap) };
450 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
451 should_free_on_drop: true };
452 let err = isl_rs_ctx.last_error();
453 if err != Error::None_ {
454 let err_msg = isl_rs_ctx.last_error_msg();
455 isl_rs_ctx.reset_error();
456 return Err(LibISLError::new(err, err_msg));
457 }
458 Ok(isl_rs_result)
459 }
460
461 pub fn bind_range(self, tuple: MultiId) -> Result<UnionSet, LibISLError> {
463 let umap = self;
464 let isl_rs_ctx = umap.get_ctx();
465 let mut umap = umap;
466 umap.do_not_free_on_drop();
467 let umap = umap.ptr;
468 let mut tuple = tuple;
469 tuple.do_not_free_on_drop();
470 let tuple = tuple.ptr;
471 let isl_rs_result = unsafe { isl_union_map_bind_range(umap, tuple) };
472 let isl_rs_result = UnionSet { ptr: isl_rs_result,
473 should_free_on_drop: true };
474 let err = isl_rs_ctx.last_error();
475 if err != Error::None_ {
476 let err_msg = isl_rs_ctx.last_error_msg();
477 isl_rs_ctx.reset_error();
478 return Err(LibISLError::new(err, err_msg));
479 }
480 Ok(isl_rs_result)
481 }
482
483 pub fn coalesce(self) -> Result<UnionMap, LibISLError> {
485 let umap = self;
486 let isl_rs_ctx = umap.get_ctx();
487 let mut umap = umap;
488 umap.do_not_free_on_drop();
489 let umap = umap.ptr;
490 let isl_rs_result = unsafe { isl_union_map_coalesce(umap) };
491 let isl_rs_result = UnionMap { ptr: isl_rs_result,
492 should_free_on_drop: true };
493 let err = isl_rs_ctx.last_error();
494 if err != Error::None_ {
495 let err_msg = isl_rs_ctx.last_error_msg();
496 isl_rs_ctx.reset_error();
497 return Err(LibISLError::new(err, err_msg));
498 }
499 Ok(isl_rs_result)
500 }
501
502 pub fn compute_divs(self) -> Result<UnionMap, LibISLError> {
504 let umap = self;
505 let isl_rs_ctx = umap.get_ctx();
506 let mut umap = umap;
507 umap.do_not_free_on_drop();
508 let umap = umap.ptr;
509 let isl_rs_result = unsafe { isl_union_map_compute_divs(umap) };
510 let isl_rs_result = UnionMap { ptr: isl_rs_result,
511 should_free_on_drop: true };
512 let err = isl_rs_ctx.last_error();
513 if err != Error::None_ {
514 let err_msg = isl_rs_ctx.last_error_msg();
515 isl_rs_ctx.reset_error();
516 return Err(LibISLError::new(err, err_msg));
517 }
518 Ok(isl_rs_result)
519 }
520
521 pub fn contains(&self, space: &Space) -> Result<bool, LibISLError> {
523 let umap = self;
524 let isl_rs_ctx = umap.get_ctx();
525 let umap = umap.ptr;
526 let space = space.ptr;
527 let isl_rs_result = unsafe { isl_union_map_contains(umap, space) };
528 let isl_rs_result = match isl_rs_result {
529 0 => false,
530 1 => true,
531 _ => {
532 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
533 }
534 };
535 let err = isl_rs_ctx.last_error();
536 if err != Error::None_ {
537 let err_msg = isl_rs_ctx.last_error_msg();
538 isl_rs_ctx.reset_error();
539 return Err(LibISLError::new(err, err_msg));
540 }
541 Ok(isl_rs_result)
542 }
543
544 pub fn copy(&self) -> Result<UnionMap, LibISLError> {
546 let umap = self;
547 let isl_rs_ctx = umap.get_ctx();
548 let umap = umap.ptr;
549 let isl_rs_result = unsafe { isl_union_map_copy(umap) };
550 let isl_rs_result = UnionMap { ptr: isl_rs_result,
551 should_free_on_drop: true };
552 let err = isl_rs_ctx.last_error();
553 if err != Error::None_ {
554 let err_msg = isl_rs_ctx.last_error_msg();
555 isl_rs_ctx.reset_error();
556 return Err(LibISLError::new(err, err_msg));
557 }
558 Ok(isl_rs_result)
559 }
560
561 pub fn curry(self) -> Result<UnionMap, LibISLError> {
563 let umap = self;
564 let isl_rs_ctx = umap.get_ctx();
565 let mut umap = umap;
566 umap.do_not_free_on_drop();
567 let umap = umap.ptr;
568 let isl_rs_result = unsafe { isl_union_map_curry(umap) };
569 let isl_rs_result = UnionMap { ptr: isl_rs_result,
570 should_free_on_drop: true };
571 let err = isl_rs_ctx.last_error();
572 if err != Error::None_ {
573 let err_msg = isl_rs_ctx.last_error_msg();
574 isl_rs_ctx.reset_error();
575 return Err(LibISLError::new(err, err_msg));
576 }
577 Ok(isl_rs_result)
578 }
579
580 pub fn deltas(self) -> Result<UnionSet, LibISLError> {
582 let umap = self;
583 let isl_rs_ctx = umap.get_ctx();
584 let mut umap = umap;
585 umap.do_not_free_on_drop();
586 let umap = umap.ptr;
587 let isl_rs_result = unsafe { isl_union_map_deltas(umap) };
588 let isl_rs_result = UnionSet { ptr: isl_rs_result,
589 should_free_on_drop: true };
590 let err = isl_rs_ctx.last_error();
591 if err != Error::None_ {
592 let err_msg = isl_rs_ctx.last_error_msg();
593 isl_rs_ctx.reset_error();
594 return Err(LibISLError::new(err, err_msg));
595 }
596 Ok(isl_rs_result)
597 }
598
599 pub fn deltas_map(self) -> Result<UnionMap, LibISLError> {
601 let umap = self;
602 let isl_rs_ctx = umap.get_ctx();
603 let mut umap = umap;
604 umap.do_not_free_on_drop();
605 let umap = umap.ptr;
606 let isl_rs_result = unsafe { isl_union_map_deltas_map(umap) };
607 let isl_rs_result = UnionMap { ptr: isl_rs_result,
608 should_free_on_drop: true };
609 let err = isl_rs_ctx.last_error();
610 if err != Error::None_ {
611 let err_msg = isl_rs_ctx.last_error_msg();
612 isl_rs_ctx.reset_error();
613 return Err(LibISLError::new(err, err_msg));
614 }
615 Ok(isl_rs_result)
616 }
617
618 pub fn detect_equalities(self) -> Result<UnionMap, LibISLError> {
620 let umap = self;
621 let isl_rs_ctx = umap.get_ctx();
622 let mut umap = umap;
623 umap.do_not_free_on_drop();
624 let umap = umap.ptr;
625 let isl_rs_result = unsafe { isl_union_map_detect_equalities(umap) };
626 let isl_rs_result = UnionMap { ptr: isl_rs_result,
627 should_free_on_drop: true };
628 let err = isl_rs_ctx.last_error();
629 if err != Error::None_ {
630 let err_msg = isl_rs_ctx.last_error_msg();
631 isl_rs_ctx.reset_error();
632 return Err(LibISLError::new(err, err_msg));
633 }
634 Ok(isl_rs_result)
635 }
636
637 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
639 let umap = self;
640 let isl_rs_ctx = umap.get_ctx();
641 let umap = umap.ptr;
642 let type_ = type_.to_i32();
643 let isl_rs_result = unsafe { isl_union_map_dim(umap, type_) };
644 let err = isl_rs_ctx.last_error();
645 if err != Error::None_ {
646 let err_msg = isl_rs_ctx.last_error_msg();
647 isl_rs_ctx.reset_error();
648 return Err(LibISLError::new(err, err_msg));
649 }
650 Ok(isl_rs_result)
651 }
652
653 pub fn domain(self) -> Result<UnionSet, LibISLError> {
655 let umap = self;
656 let isl_rs_ctx = umap.get_ctx();
657 let mut umap = umap;
658 umap.do_not_free_on_drop();
659 let umap = umap.ptr;
660 let isl_rs_result = unsafe { isl_union_map_domain(umap) };
661 let isl_rs_result = UnionSet { 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 domain_factor_domain(self) -> Result<UnionMap, LibISLError> {
674 let umap = self;
675 let isl_rs_ctx = umap.get_ctx();
676 let mut umap = umap;
677 umap.do_not_free_on_drop();
678 let umap = umap.ptr;
679 let isl_rs_result = unsafe { isl_union_map_domain_factor_domain(umap) };
680 let isl_rs_result = UnionMap { ptr: isl_rs_result,
681 should_free_on_drop: true };
682 let err = isl_rs_ctx.last_error();
683 if err != Error::None_ {
684 let err_msg = isl_rs_ctx.last_error_msg();
685 isl_rs_ctx.reset_error();
686 return Err(LibISLError::new(err, err_msg));
687 }
688 Ok(isl_rs_result)
689 }
690
691 pub fn domain_factor_range(self) -> Result<UnionMap, LibISLError> {
693 let umap = self;
694 let isl_rs_ctx = umap.get_ctx();
695 let mut umap = umap;
696 umap.do_not_free_on_drop();
697 let umap = umap.ptr;
698 let isl_rs_result = unsafe { isl_union_map_domain_factor_range(umap) };
699 let isl_rs_result = UnionMap { ptr: isl_rs_result,
700 should_free_on_drop: true };
701 let err = isl_rs_ctx.last_error();
702 if err != Error::None_ {
703 let err_msg = isl_rs_ctx.last_error_msg();
704 isl_rs_ctx.reset_error();
705 return Err(LibISLError::new(err, err_msg));
706 }
707 Ok(isl_rs_result)
708 }
709
710 pub fn domain_map(self) -> Result<UnionMap, LibISLError> {
712 let umap = self;
713 let isl_rs_ctx = umap.get_ctx();
714 let mut umap = umap;
715 umap.do_not_free_on_drop();
716 let umap = umap.ptr;
717 let isl_rs_result = unsafe { isl_union_map_domain_map(umap) };
718 let isl_rs_result = UnionMap { ptr: isl_rs_result,
719 should_free_on_drop: true };
720 let err = isl_rs_ctx.last_error();
721 if err != Error::None_ {
722 let err_msg = isl_rs_ctx.last_error_msg();
723 isl_rs_ctx.reset_error();
724 return Err(LibISLError::new(err, err_msg));
725 }
726 Ok(isl_rs_result)
727 }
728
729 pub fn domain_map_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
731 let umap = self;
732 let isl_rs_ctx = umap.get_ctx();
733 let mut umap = umap;
734 umap.do_not_free_on_drop();
735 let umap = umap.ptr;
736 let isl_rs_result = unsafe { isl_union_map_domain_map_union_pw_multi_aff(umap) };
737 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
738 should_free_on_drop: true };
739 let err = isl_rs_ctx.last_error();
740 if err != Error::None_ {
741 let err_msg = isl_rs_ctx.last_error_msg();
742 isl_rs_ctx.reset_error();
743 return Err(LibISLError::new(err, err_msg));
744 }
745 Ok(isl_rs_result)
746 }
747
748 pub fn domain_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
750 let umap1 = self;
751 let isl_rs_ctx = umap1.get_ctx();
752 let mut umap1 = umap1;
753 umap1.do_not_free_on_drop();
754 let umap1 = umap1.ptr;
755 let mut umap2 = umap2;
756 umap2.do_not_free_on_drop();
757 let umap2 = umap2.ptr;
758 let isl_rs_result = unsafe { isl_union_map_domain_product(umap1, umap2) };
759 let isl_rs_result = UnionMap { ptr: isl_rs_result,
760 should_free_on_drop: true };
761 let err = isl_rs_ctx.last_error();
762 if err != Error::None_ {
763 let err_msg = isl_rs_ctx.last_error_msg();
764 isl_rs_ctx.reset_error();
765 return Err(LibISLError::new(err, err_msg));
766 }
767 Ok(isl_rs_result)
768 }
769
770 pub fn domain_reverse(self) -> Result<UnionMap, LibISLError> {
772 let umap = self;
773 let isl_rs_ctx = umap.get_ctx();
774 let mut umap = umap;
775 umap.do_not_free_on_drop();
776 let umap = umap.ptr;
777 let isl_rs_result = unsafe { isl_union_map_domain_reverse(umap) };
778 let isl_rs_result = UnionMap { ptr: isl_rs_result,
779 should_free_on_drop: true };
780 let err = isl_rs_ctx.last_error();
781 if err != Error::None_ {
782 let err_msg = isl_rs_ctx.last_error_msg();
783 isl_rs_ctx.reset_error();
784 return Err(LibISLError::new(err, err_msg));
785 }
786 Ok(isl_rs_result)
787 }
788
789 pub fn drop_unused_params(self) -> Result<UnionMap, LibISLError> {
791 let umap = self;
792 let isl_rs_ctx = umap.get_ctx();
793 let mut umap = umap;
794 umap.do_not_free_on_drop();
795 let umap = umap.ptr;
796 let isl_rs_result = unsafe { isl_union_map_drop_unused_params(umap) };
797 let isl_rs_result = UnionMap { ptr: isl_rs_result,
798 should_free_on_drop: true };
799 let err = isl_rs_ctx.last_error();
800 if err != Error::None_ {
801 let err_msg = isl_rs_ctx.last_error_msg();
802 isl_rs_ctx.reset_error();
803 return Err(LibISLError::new(err, err_msg));
804 }
805 Ok(isl_rs_result)
806 }
807
808 pub fn dump(&self) -> Result<(), LibISLError> {
810 let umap = self;
811 let isl_rs_ctx = umap.get_ctx();
812 let umap = umap.ptr;
813 let isl_rs_result = unsafe { isl_union_map_dump(umap) };
814 let err = isl_rs_ctx.last_error();
815 if err != Error::None_ {
816 let err_msg = isl_rs_ctx.last_error_msg();
817 isl_rs_ctx.reset_error();
818 return Err(LibISLError::new(err, err_msg));
819 }
820 Ok(isl_rs_result)
821 }
822
823 pub fn empty(space: Space) -> Result<UnionMap, LibISLError> {
825 let isl_rs_ctx = space.get_ctx();
826 let mut space = space;
827 space.do_not_free_on_drop();
828 let space = space.ptr;
829 let isl_rs_result = unsafe { isl_union_map_empty(space) };
830 let isl_rs_result = UnionMap { ptr: isl_rs_result,
831 should_free_on_drop: true };
832 let err = isl_rs_ctx.last_error();
833 if err != Error::None_ {
834 let err_msg = isl_rs_ctx.last_error_msg();
835 isl_rs_ctx.reset_error();
836 return Err(LibISLError::new(err, err_msg));
837 }
838 Ok(isl_rs_result)
839 }
840
841 pub fn empty_ctx(ctx: &Context) -> Result<UnionMap, LibISLError> {
843 let isl_rs_ctx = Context { ptr: ctx.ptr,
844 should_free_on_drop: false };
845 let ctx = ctx.ptr;
846 let isl_rs_result = unsafe { isl_union_map_empty_ctx(ctx) };
847 let isl_rs_result = UnionMap { ptr: isl_rs_result,
848 should_free_on_drop: true };
849 let err = isl_rs_ctx.last_error();
850 if err != Error::None_ {
851 let err_msg = isl_rs_ctx.last_error_msg();
852 isl_rs_ctx.reset_error();
853 return Err(LibISLError::new(err, err_msg));
854 }
855 Ok(isl_rs_result)
856 }
857
858 pub fn empty_space(space: Space) -> Result<UnionMap, LibISLError> {
860 let isl_rs_ctx = space.get_ctx();
861 let mut space = space;
862 space.do_not_free_on_drop();
863 let space = space.ptr;
864 let isl_rs_result = unsafe { isl_union_map_empty_space(space) };
865 let isl_rs_result = UnionMap { ptr: isl_rs_result,
866 should_free_on_drop: true };
867 let err = isl_rs_ctx.last_error();
868 if err != Error::None_ {
869 let err_msg = isl_rs_ctx.last_error_msg();
870 isl_rs_ctx.reset_error();
871 return Err(LibISLError::new(err, err_msg));
872 }
873 Ok(isl_rs_result)
874 }
875
876 pub fn eq_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff) -> Result<UnionMap, LibISLError> {
878 let umap = self;
879 let isl_rs_ctx = umap.get_ctx();
880 let mut umap = umap;
881 umap.do_not_free_on_drop();
882 let umap = umap.ptr;
883 let mut mupa = mupa;
884 mupa.do_not_free_on_drop();
885 let mupa = mupa.ptr;
886 let isl_rs_result = unsafe { isl_union_map_eq_at_multi_union_pw_aff(umap, mupa) };
887 let isl_rs_result = UnionMap { ptr: isl_rs_result,
888 should_free_on_drop: true };
889 let err = isl_rs_ctx.last_error();
890 if err != Error::None_ {
891 let err_msg = isl_rs_ctx.last_error_msg();
892 isl_rs_ctx.reset_error();
893 return Err(LibISLError::new(err, err_msg));
894 }
895 Ok(isl_rs_result)
896 }
897
898 pub fn extract_map(&self, space: Space) -> Result<Map, LibISLError> {
900 let umap = self;
901 let isl_rs_ctx = umap.get_ctx();
902 let umap = umap.ptr;
903 let mut space = space;
904 space.do_not_free_on_drop();
905 let space = space.ptr;
906 let isl_rs_result = unsafe { isl_union_map_extract_map(umap, space) };
907 let isl_rs_result = Map { ptr: isl_rs_result,
908 should_free_on_drop: true };
909 let err = isl_rs_ctx.last_error();
910 if err != Error::None_ {
911 let err_msg = isl_rs_ctx.last_error_msg();
912 isl_rs_ctx.reset_error();
913 return Err(LibISLError::new(err, err_msg));
914 }
915 Ok(isl_rs_result)
916 }
917
918 pub fn factor_domain(self) -> Result<UnionMap, LibISLError> {
920 let umap = self;
921 let isl_rs_ctx = umap.get_ctx();
922 let mut umap = umap;
923 umap.do_not_free_on_drop();
924 let umap = umap.ptr;
925 let isl_rs_result = unsafe { isl_union_map_factor_domain(umap) };
926 let isl_rs_result = UnionMap { ptr: isl_rs_result,
927 should_free_on_drop: true };
928 let err = isl_rs_ctx.last_error();
929 if err != Error::None_ {
930 let err_msg = isl_rs_ctx.last_error_msg();
931 isl_rs_ctx.reset_error();
932 return Err(LibISLError::new(err, err_msg));
933 }
934 Ok(isl_rs_result)
935 }
936
937 pub fn factor_range(self) -> Result<UnionMap, LibISLError> {
939 let umap = self;
940 let isl_rs_ctx = umap.get_ctx();
941 let mut umap = umap;
942 umap.do_not_free_on_drop();
943 let umap = umap.ptr;
944 let isl_rs_result = unsafe { isl_union_map_factor_range(umap) };
945 let isl_rs_result = UnionMap { ptr: isl_rs_result,
946 should_free_on_drop: true };
947 let err = isl_rs_ctx.last_error();
948 if err != Error::None_ {
949 let err_msg = isl_rs_ctx.last_error_msg();
950 isl_rs_ctx.reset_error();
951 return Err(LibISLError::new(err, err_msg));
952 }
953 Ok(isl_rs_result)
954 }
955
956 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
958 let umap = self;
959 let isl_rs_ctx = umap.get_ctx();
960 let umap = umap.ptr;
961 let type_ = type_.to_i32();
962 let name = CString::new(name).unwrap();
963 let name = name.as_ptr();
964 let isl_rs_result = unsafe { isl_union_map_find_dim_by_name(umap, type_, name) };
965 let err = isl_rs_ctx.last_error();
966 if err != Error::None_ {
967 let err_msg = isl_rs_ctx.last_error_msg();
968 isl_rs_ctx.reset_error();
969 return Err(LibISLError::new(err, err_msg));
970 }
971 Ok(isl_rs_result)
972 }
973
974 pub fn fixed_power_val(self, exp: Val) -> Result<UnionMap, LibISLError> {
976 let umap = self;
977 let isl_rs_ctx = umap.get_ctx();
978 let mut umap = umap;
979 umap.do_not_free_on_drop();
980 let umap = umap.ptr;
981 let mut exp = exp;
982 exp.do_not_free_on_drop();
983 let exp = exp.ptr;
984 let isl_rs_result = unsafe { isl_union_map_fixed_power_val(umap, exp) };
985 let isl_rs_result = UnionMap { ptr: isl_rs_result,
986 should_free_on_drop: true };
987 let err = isl_rs_ctx.last_error();
988 if err != Error::None_ {
989 let err_msg = isl_rs_ctx.last_error_msg();
990 isl_rs_ctx.reset_error();
991 return Err(LibISLError::new(err, err_msg));
992 }
993 Ok(isl_rs_result)
994 }
995
996 pub fn flat_domain_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
998 let umap1 = self;
999 let isl_rs_ctx = umap1.get_ctx();
1000 let mut umap1 = umap1;
1001 umap1.do_not_free_on_drop();
1002 let umap1 = umap1.ptr;
1003 let mut umap2 = umap2;
1004 umap2.do_not_free_on_drop();
1005 let umap2 = umap2.ptr;
1006 let isl_rs_result = unsafe { isl_union_map_flat_domain_product(umap1, umap2) };
1007 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1008 should_free_on_drop: true };
1009 let err = isl_rs_ctx.last_error();
1010 if err != Error::None_ {
1011 let err_msg = isl_rs_ctx.last_error_msg();
1012 isl_rs_ctx.reset_error();
1013 return Err(LibISLError::new(err, err_msg));
1014 }
1015 Ok(isl_rs_result)
1016 }
1017
1018 pub fn flat_range_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1020 let umap1 = self;
1021 let isl_rs_ctx = umap1.get_ctx();
1022 let mut umap1 = umap1;
1023 umap1.do_not_free_on_drop();
1024 let umap1 = umap1.ptr;
1025 let mut umap2 = umap2;
1026 umap2.do_not_free_on_drop();
1027 let umap2 = umap2.ptr;
1028 let isl_rs_result = unsafe { isl_union_map_flat_range_product(umap1, umap2) };
1029 let isl_rs_result = UnionMap { 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 free(self) -> Result<UnionMap, LibISLError> {
1042 let umap = self;
1043 let isl_rs_ctx = umap.get_ctx();
1044 let mut umap = umap;
1045 umap.do_not_free_on_drop();
1046 let umap = umap.ptr;
1047 let isl_rs_result = unsafe { isl_union_map_free(umap) };
1048 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1049 should_free_on_drop: true };
1050 let err = isl_rs_ctx.last_error();
1051 if err != Error::None_ {
1052 let err_msg = isl_rs_ctx.last_error_msg();
1053 isl_rs_ctx.reset_error();
1054 return Err(LibISLError::new(err, err_msg));
1055 }
1056 Ok(isl_rs_result)
1057 }
1058
1059 pub fn from_basic_map(bmap: BasicMap) -> Result<UnionMap, LibISLError> {
1061 let isl_rs_ctx = bmap.get_ctx();
1062 let mut bmap = bmap;
1063 bmap.do_not_free_on_drop();
1064 let bmap = bmap.ptr;
1065 let isl_rs_result = unsafe { isl_union_map_from_basic_map(bmap) };
1066 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1067 should_free_on_drop: true };
1068 let err = isl_rs_ctx.last_error();
1069 if err != Error::None_ {
1070 let err_msg = isl_rs_ctx.last_error_msg();
1071 isl_rs_ctx.reset_error();
1072 return Err(LibISLError::new(err, err_msg));
1073 }
1074 Ok(isl_rs_result)
1075 }
1076
1077 pub fn from_domain(uset: UnionSet) -> Result<UnionMap, LibISLError> {
1079 let isl_rs_ctx = uset.get_ctx();
1080 let mut uset = uset;
1081 uset.do_not_free_on_drop();
1082 let uset = uset.ptr;
1083 let isl_rs_result = unsafe { isl_union_map_from_domain(uset) };
1084 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1085 should_free_on_drop: true };
1086 let err = isl_rs_ctx.last_error();
1087 if err != Error::None_ {
1088 let err_msg = isl_rs_ctx.last_error_msg();
1089 isl_rs_ctx.reset_error();
1090 return Err(LibISLError::new(err, err_msg));
1091 }
1092 Ok(isl_rs_result)
1093 }
1094
1095 pub fn from_domain_and_range(domain: UnionSet, range: UnionSet)
1097 -> Result<UnionMap, LibISLError> {
1098 let isl_rs_ctx = domain.get_ctx();
1099 let mut domain = domain;
1100 domain.do_not_free_on_drop();
1101 let domain = domain.ptr;
1102 let mut range = range;
1103 range.do_not_free_on_drop();
1104 let range = range.ptr;
1105 let isl_rs_result = unsafe { isl_union_map_from_domain_and_range(domain, range) };
1106 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1107 should_free_on_drop: true };
1108 let err = isl_rs_ctx.last_error();
1109 if err != Error::None_ {
1110 let err_msg = isl_rs_ctx.last_error_msg();
1111 isl_rs_ctx.reset_error();
1112 return Err(LibISLError::new(err, err_msg));
1113 }
1114 Ok(isl_rs_result)
1115 }
1116
1117 pub fn from_map(map: Map) -> Result<UnionMap, LibISLError> {
1119 let isl_rs_ctx = map.get_ctx();
1120 let mut map = map;
1121 map.do_not_free_on_drop();
1122 let map = map.ptr;
1123 let isl_rs_result = unsafe { isl_union_map_from_map(map) };
1124 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1125 should_free_on_drop: true };
1126 let err = isl_rs_ctx.last_error();
1127 if err != Error::None_ {
1128 let err_msg = isl_rs_ctx.last_error_msg();
1129 isl_rs_ctx.reset_error();
1130 return Err(LibISLError::new(err, err_msg));
1131 }
1132 Ok(isl_rs_result)
1133 }
1134
1135 pub fn from_multi_union_pw_aff(mupa: MultiUnionPwAff) -> Result<UnionMap, LibISLError> {
1137 let isl_rs_ctx = mupa.get_ctx();
1138 let mut mupa = mupa;
1139 mupa.do_not_free_on_drop();
1140 let mupa = mupa.ptr;
1141 let isl_rs_result = unsafe { isl_union_map_from_multi_union_pw_aff(mupa) };
1142 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1143 should_free_on_drop: true };
1144 let err = isl_rs_ctx.last_error();
1145 if err != Error::None_ {
1146 let err_msg = isl_rs_ctx.last_error_msg();
1147 isl_rs_ctx.reset_error();
1148 return Err(LibISLError::new(err, err_msg));
1149 }
1150 Ok(isl_rs_result)
1151 }
1152
1153 pub fn from_range(uset: UnionSet) -> Result<UnionMap, LibISLError> {
1155 let isl_rs_ctx = uset.get_ctx();
1156 let mut uset = uset;
1157 uset.do_not_free_on_drop();
1158 let uset = uset.ptr;
1159 let isl_rs_result = unsafe { isl_union_map_from_range(uset) };
1160 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1161 should_free_on_drop: true };
1162 let err = isl_rs_ctx.last_error();
1163 if err != Error::None_ {
1164 let err_msg = isl_rs_ctx.last_error_msg();
1165 isl_rs_ctx.reset_error();
1166 return Err(LibISLError::new(err, err_msg));
1167 }
1168 Ok(isl_rs_result)
1169 }
1170
1171 pub fn from_union_pw_aff(upa: UnionPwAff) -> Result<UnionMap, LibISLError> {
1173 let isl_rs_ctx = upa.get_ctx();
1174 let mut upa = upa;
1175 upa.do_not_free_on_drop();
1176 let upa = upa.ptr;
1177 let isl_rs_result = unsafe { isl_union_map_from_union_pw_aff(upa) };
1178 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1179 should_free_on_drop: true };
1180 let err = isl_rs_ctx.last_error();
1181 if err != Error::None_ {
1182 let err_msg = isl_rs_ctx.last_error_msg();
1183 isl_rs_ctx.reset_error();
1184 return Err(LibISLError::new(err, err_msg));
1185 }
1186 Ok(isl_rs_result)
1187 }
1188
1189 pub fn from_union_pw_multi_aff(upma: UnionPwMultiAff) -> Result<UnionMap, LibISLError> {
1191 let isl_rs_ctx = upma.get_ctx();
1192 let mut upma = upma;
1193 upma.do_not_free_on_drop();
1194 let upma = upma.ptr;
1195 let isl_rs_result = unsafe { isl_union_map_from_union_pw_multi_aff(upma) };
1196 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1197 should_free_on_drop: true };
1198 let err = isl_rs_ctx.last_error();
1199 if err != Error::None_ {
1200 let err_msg = isl_rs_ctx.last_error_msg();
1201 isl_rs_ctx.reset_error();
1202 return Err(LibISLError::new(err, err_msg));
1203 }
1204 Ok(isl_rs_result)
1205 }
1206
1207 pub fn get_ctx(&self) -> Context {
1209 let umap = self;
1210 let umap = umap.ptr;
1211 let isl_rs_result = unsafe { isl_union_map_get_ctx(umap) };
1212 let isl_rs_result = Context { ptr: isl_rs_result,
1213 should_free_on_drop: false };
1214 isl_rs_result
1215 }
1216
1217 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
1219 let umap = self;
1220 let isl_rs_ctx = umap.get_ctx();
1221 let umap = umap.ptr;
1222 let type_ = type_.to_i32();
1223 let isl_rs_result = unsafe { isl_union_map_get_dim_id(umap, type_, pos) };
1224 let isl_rs_result = Id { 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 get_hash(&self) -> Result<u32, LibISLError> {
1237 let umap = self;
1238 let isl_rs_ctx = umap.get_ctx();
1239 let umap = umap.ptr;
1240 let isl_rs_result = unsafe { isl_union_map_get_hash(umap) };
1241 let err = isl_rs_ctx.last_error();
1242 if err != Error::None_ {
1243 let err_msg = isl_rs_ctx.last_error_msg();
1244 isl_rs_ctx.reset_error();
1245 return Err(LibISLError::new(err, err_msg));
1246 }
1247 Ok(isl_rs_result)
1248 }
1249
1250 pub fn get_map_list(&self) -> Result<MapList, LibISLError> {
1252 let umap = self;
1253 let isl_rs_ctx = umap.get_ctx();
1254 let umap = umap.ptr;
1255 let isl_rs_result = unsafe { isl_union_map_get_map_list(umap) };
1256 let isl_rs_result = MapList { ptr: isl_rs_result,
1257 should_free_on_drop: true };
1258 let err = isl_rs_ctx.last_error();
1259 if err != Error::None_ {
1260 let err_msg = isl_rs_ctx.last_error_msg();
1261 isl_rs_ctx.reset_error();
1262 return Err(LibISLError::new(err, err_msg));
1263 }
1264 Ok(isl_rs_result)
1265 }
1266
1267 pub fn get_space(&self) -> Result<Space, LibISLError> {
1269 let umap = self;
1270 let isl_rs_ctx = umap.get_ctx();
1271 let umap = umap.ptr;
1272 let isl_rs_result = unsafe { isl_union_map_get_space(umap) };
1273 let isl_rs_result = Space { ptr: isl_rs_result,
1274 should_free_on_drop: true };
1275 let err = isl_rs_ctx.last_error();
1276 if err != Error::None_ {
1277 let err_msg = isl_rs_ctx.last_error_msg();
1278 isl_rs_ctx.reset_error();
1279 return Err(LibISLError::new(err, err_msg));
1280 }
1281 Ok(isl_rs_result)
1282 }
1283
1284 pub fn gist(self, context: UnionMap) -> Result<UnionMap, LibISLError> {
1286 let umap = self;
1287 let isl_rs_ctx = umap.get_ctx();
1288 let mut umap = umap;
1289 umap.do_not_free_on_drop();
1290 let umap = umap.ptr;
1291 let mut context = context;
1292 context.do_not_free_on_drop();
1293 let context = context.ptr;
1294 let isl_rs_result = unsafe { isl_union_map_gist(umap, context) };
1295 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1296 should_free_on_drop: true };
1297 let err = isl_rs_ctx.last_error();
1298 if err != Error::None_ {
1299 let err_msg = isl_rs_ctx.last_error_msg();
1300 isl_rs_ctx.reset_error();
1301 return Err(LibISLError::new(err, err_msg));
1302 }
1303 Ok(isl_rs_result)
1304 }
1305
1306 pub fn gist_domain(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1308 let umap = self;
1309 let isl_rs_ctx = umap.get_ctx();
1310 let mut umap = umap;
1311 umap.do_not_free_on_drop();
1312 let umap = umap.ptr;
1313 let mut uset = uset;
1314 uset.do_not_free_on_drop();
1315 let uset = uset.ptr;
1316 let isl_rs_result = unsafe { isl_union_map_gist_domain(umap, uset) };
1317 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1318 should_free_on_drop: true };
1319 let err = isl_rs_ctx.last_error();
1320 if err != Error::None_ {
1321 let err_msg = isl_rs_ctx.last_error_msg();
1322 isl_rs_ctx.reset_error();
1323 return Err(LibISLError::new(err, err_msg));
1324 }
1325 Ok(isl_rs_result)
1326 }
1327
1328 pub fn gist_params(self, set: Set) -> Result<UnionMap, LibISLError> {
1330 let umap = self;
1331 let isl_rs_ctx = umap.get_ctx();
1332 let mut umap = umap;
1333 umap.do_not_free_on_drop();
1334 let umap = umap.ptr;
1335 let mut set = set;
1336 set.do_not_free_on_drop();
1337 let set = set.ptr;
1338 let isl_rs_result = unsafe { isl_union_map_gist_params(umap, set) };
1339 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1340 should_free_on_drop: true };
1341 let err = isl_rs_ctx.last_error();
1342 if err != Error::None_ {
1343 let err_msg = isl_rs_ctx.last_error_msg();
1344 isl_rs_ctx.reset_error();
1345 return Err(LibISLError::new(err, err_msg));
1346 }
1347 Ok(isl_rs_result)
1348 }
1349
1350 pub fn gist_range(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1352 let umap = self;
1353 let isl_rs_ctx = umap.get_ctx();
1354 let mut umap = umap;
1355 umap.do_not_free_on_drop();
1356 let umap = umap.ptr;
1357 let mut uset = uset;
1358 uset.do_not_free_on_drop();
1359 let uset = uset.ptr;
1360 let isl_rs_result = unsafe { isl_union_map_gist_range(umap, uset) };
1361 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1362 should_free_on_drop: true };
1363 let err = isl_rs_ctx.last_error();
1364 if err != Error::None_ {
1365 let err_msg = isl_rs_ctx.last_error_msg();
1366 isl_rs_ctx.reset_error();
1367 return Err(LibISLError::new(err, err_msg));
1368 }
1369 Ok(isl_rs_result)
1370 }
1371
1372 pub fn intersect(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1374 let umap1 = self;
1375 let isl_rs_ctx = umap1.get_ctx();
1376 let mut umap1 = umap1;
1377 umap1.do_not_free_on_drop();
1378 let umap1 = umap1.ptr;
1379 let mut umap2 = umap2;
1380 umap2.do_not_free_on_drop();
1381 let umap2 = umap2.ptr;
1382 let isl_rs_result = unsafe { isl_union_map_intersect(umap1, umap2) };
1383 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1384 should_free_on_drop: true };
1385 let err = isl_rs_ctx.last_error();
1386 if err != Error::None_ {
1387 let err_msg = isl_rs_ctx.last_error_msg();
1388 isl_rs_ctx.reset_error();
1389 return Err(LibISLError::new(err, err_msg));
1390 }
1391 Ok(isl_rs_result)
1392 }
1393
1394 pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1396 let umap = self;
1397 let isl_rs_ctx = umap.get_ctx();
1398 let mut umap = umap;
1399 umap.do_not_free_on_drop();
1400 let umap = umap.ptr;
1401 let mut uset = uset;
1402 uset.do_not_free_on_drop();
1403 let uset = uset.ptr;
1404 let isl_rs_result = unsafe { isl_union_map_intersect_domain(umap, uset) };
1405 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1406 should_free_on_drop: true };
1407 let err = isl_rs_ctx.last_error();
1408 if err != Error::None_ {
1409 let err_msg = isl_rs_ctx.last_error_msg();
1410 isl_rs_ctx.reset_error();
1411 return Err(LibISLError::new(err, err_msg));
1412 }
1413 Ok(isl_rs_result)
1414 }
1415
1416 pub fn intersect_domain_factor_domain(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1418 let umap = self;
1419 let isl_rs_ctx = umap.get_ctx();
1420 let mut umap = umap;
1421 umap.do_not_free_on_drop();
1422 let umap = umap.ptr;
1423 let mut factor = factor;
1424 factor.do_not_free_on_drop();
1425 let factor = factor.ptr;
1426 let isl_rs_result = unsafe { isl_union_map_intersect_domain_factor_domain(umap, factor) };
1427 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1428 should_free_on_drop: true };
1429 let err = isl_rs_ctx.last_error();
1430 if err != Error::None_ {
1431 let err_msg = isl_rs_ctx.last_error_msg();
1432 isl_rs_ctx.reset_error();
1433 return Err(LibISLError::new(err, err_msg));
1434 }
1435 Ok(isl_rs_result)
1436 }
1437
1438 pub fn intersect_domain_factor_range(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1440 let umap = self;
1441 let isl_rs_ctx = umap.get_ctx();
1442 let mut umap = umap;
1443 umap.do_not_free_on_drop();
1444 let umap = umap.ptr;
1445 let mut factor = factor;
1446 factor.do_not_free_on_drop();
1447 let factor = factor.ptr;
1448 let isl_rs_result = unsafe { isl_union_map_intersect_domain_factor_range(umap, factor) };
1449 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1450 should_free_on_drop: true };
1451 let err = isl_rs_ctx.last_error();
1452 if err != Error::None_ {
1453 let err_msg = isl_rs_ctx.last_error_msg();
1454 isl_rs_ctx.reset_error();
1455 return Err(LibISLError::new(err, err_msg));
1456 }
1457 Ok(isl_rs_result)
1458 }
1459
1460 pub fn intersect_domain_space(self, space: Space) -> Result<UnionMap, LibISLError> {
1462 let umap = self;
1463 let isl_rs_ctx = umap.get_ctx();
1464 let mut umap = umap;
1465 umap.do_not_free_on_drop();
1466 let umap = umap.ptr;
1467 let mut space = space;
1468 space.do_not_free_on_drop();
1469 let space = space.ptr;
1470 let isl_rs_result = unsafe { isl_union_map_intersect_domain_space(umap, space) };
1471 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1472 should_free_on_drop: true };
1473 let err = isl_rs_ctx.last_error();
1474 if err != Error::None_ {
1475 let err_msg = isl_rs_ctx.last_error_msg();
1476 isl_rs_ctx.reset_error();
1477 return Err(LibISLError::new(err, err_msg));
1478 }
1479 Ok(isl_rs_result)
1480 }
1481
1482 pub fn intersect_domain_union_set(self, uset: UnionSet) -> 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 uset = uset;
1490 uset.do_not_free_on_drop();
1491 let uset = uset.ptr;
1492 let isl_rs_result = unsafe { isl_union_map_intersect_domain_union_set(umap, uset) };
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 let err_msg = isl_rs_ctx.last_error_msg();
1498 isl_rs_ctx.reset_error();
1499 return Err(LibISLError::new(err, err_msg));
1500 }
1501 Ok(isl_rs_result)
1502 }
1503
1504 pub fn intersect_domain_wrapped_domain_union_set(self, domain: UnionSet)
1506 -> Result<UnionMap, LibISLError> {
1507 let umap = self;
1508 let isl_rs_ctx = umap.get_ctx();
1509 let mut umap = umap;
1510 umap.do_not_free_on_drop();
1511 let umap = umap.ptr;
1512 let mut domain = domain;
1513 domain.do_not_free_on_drop();
1514 let domain = domain.ptr;
1515 let isl_rs_result =
1516 unsafe { isl_union_map_intersect_domain_wrapped_domain_union_set(umap, domain) };
1517 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1518 should_free_on_drop: true };
1519 let err = isl_rs_ctx.last_error();
1520 if err != Error::None_ {
1521 let err_msg = isl_rs_ctx.last_error_msg();
1522 isl_rs_ctx.reset_error();
1523 return Err(LibISLError::new(err, err_msg));
1524 }
1525 Ok(isl_rs_result)
1526 }
1527
1528 pub fn intersect_params(self, set: Set) -> Result<UnionMap, LibISLError> {
1530 let umap = self;
1531 let isl_rs_ctx = umap.get_ctx();
1532 let mut umap = umap;
1533 umap.do_not_free_on_drop();
1534 let umap = umap.ptr;
1535 let mut set = set;
1536 set.do_not_free_on_drop();
1537 let set = set.ptr;
1538 let isl_rs_result = unsafe { isl_union_map_intersect_params(umap, set) };
1539 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1540 should_free_on_drop: true };
1541 let err = isl_rs_ctx.last_error();
1542 if err != Error::None_ {
1543 let err_msg = isl_rs_ctx.last_error_msg();
1544 isl_rs_ctx.reset_error();
1545 return Err(LibISLError::new(err, err_msg));
1546 }
1547 Ok(isl_rs_result)
1548 }
1549
1550 pub fn intersect_range(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1552 let umap = self;
1553 let isl_rs_ctx = umap.get_ctx();
1554 let mut umap = umap;
1555 umap.do_not_free_on_drop();
1556 let umap = umap.ptr;
1557 let mut uset = uset;
1558 uset.do_not_free_on_drop();
1559 let uset = uset.ptr;
1560 let isl_rs_result = unsafe { isl_union_map_intersect_range(umap, uset) };
1561 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1562 should_free_on_drop: true };
1563 let err = isl_rs_ctx.last_error();
1564 if err != Error::None_ {
1565 let err_msg = isl_rs_ctx.last_error_msg();
1566 isl_rs_ctx.reset_error();
1567 return Err(LibISLError::new(err, err_msg));
1568 }
1569 Ok(isl_rs_result)
1570 }
1571
1572 pub fn intersect_range_factor_domain(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1574 let umap = self;
1575 let isl_rs_ctx = umap.get_ctx();
1576 let mut umap = umap;
1577 umap.do_not_free_on_drop();
1578 let umap = umap.ptr;
1579 let mut factor = factor;
1580 factor.do_not_free_on_drop();
1581 let factor = factor.ptr;
1582 let isl_rs_result = unsafe { isl_union_map_intersect_range_factor_domain(umap, factor) };
1583 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1584 should_free_on_drop: true };
1585 let err = isl_rs_ctx.last_error();
1586 if err != Error::None_ {
1587 let err_msg = isl_rs_ctx.last_error_msg();
1588 isl_rs_ctx.reset_error();
1589 return Err(LibISLError::new(err, err_msg));
1590 }
1591 Ok(isl_rs_result)
1592 }
1593
1594 pub fn intersect_range_factor_range(self, factor: UnionMap) -> Result<UnionMap, LibISLError> {
1596 let umap = self;
1597 let isl_rs_ctx = umap.get_ctx();
1598 let mut umap = umap;
1599 umap.do_not_free_on_drop();
1600 let umap = umap.ptr;
1601 let mut factor = factor;
1602 factor.do_not_free_on_drop();
1603 let factor = factor.ptr;
1604 let isl_rs_result = unsafe { isl_union_map_intersect_range_factor_range(umap, factor) };
1605 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1606 should_free_on_drop: true };
1607 let err = isl_rs_ctx.last_error();
1608 if err != Error::None_ {
1609 let err_msg = isl_rs_ctx.last_error_msg();
1610 isl_rs_ctx.reset_error();
1611 return Err(LibISLError::new(err, err_msg));
1612 }
1613 Ok(isl_rs_result)
1614 }
1615
1616 pub fn intersect_range_space(self, space: Space) -> Result<UnionMap, LibISLError> {
1618 let umap = self;
1619 let isl_rs_ctx = umap.get_ctx();
1620 let mut umap = umap;
1621 umap.do_not_free_on_drop();
1622 let umap = umap.ptr;
1623 let mut space = space;
1624 space.do_not_free_on_drop();
1625 let space = space.ptr;
1626 let isl_rs_result = unsafe { isl_union_map_intersect_range_space(umap, space) };
1627 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1628 should_free_on_drop: true };
1629 let err = isl_rs_ctx.last_error();
1630 if err != Error::None_ {
1631 let err_msg = isl_rs_ctx.last_error_msg();
1632 isl_rs_ctx.reset_error();
1633 return Err(LibISLError::new(err, err_msg));
1634 }
1635 Ok(isl_rs_result)
1636 }
1637
1638 pub fn intersect_range_union_set(self, uset: UnionSet) -> Result<UnionMap, LibISLError> {
1640 let umap = self;
1641 let isl_rs_ctx = umap.get_ctx();
1642 let mut umap = umap;
1643 umap.do_not_free_on_drop();
1644 let umap = umap.ptr;
1645 let mut uset = uset;
1646 uset.do_not_free_on_drop();
1647 let uset = uset.ptr;
1648 let isl_rs_result = unsafe { isl_union_map_intersect_range_union_set(umap, uset) };
1649 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1650 should_free_on_drop: true };
1651 let err = isl_rs_ctx.last_error();
1652 if err != Error::None_ {
1653 let err_msg = isl_rs_ctx.last_error_msg();
1654 isl_rs_ctx.reset_error();
1655 return Err(LibISLError::new(err, err_msg));
1656 }
1657 Ok(isl_rs_result)
1658 }
1659
1660 pub fn intersect_range_wrapped_domain_union_set(self, domain: UnionSet)
1662 -> Result<UnionMap, LibISLError> {
1663 let umap = self;
1664 let isl_rs_ctx = umap.get_ctx();
1665 let mut umap = umap;
1666 umap.do_not_free_on_drop();
1667 let umap = umap.ptr;
1668 let mut domain = domain;
1669 domain.do_not_free_on_drop();
1670 let domain = domain.ptr;
1671 let isl_rs_result =
1672 unsafe { isl_union_map_intersect_range_wrapped_domain_union_set(umap, domain) };
1673 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1674 should_free_on_drop: true };
1675 let err = isl_rs_ctx.last_error();
1676 if err != Error::None_ {
1677 let err_msg = isl_rs_ctx.last_error_msg();
1678 isl_rs_ctx.reset_error();
1679 return Err(LibISLError::new(err, err_msg));
1680 }
1681 Ok(isl_rs_result)
1682 }
1683
1684 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1686 let umap = self;
1687 let isl_rs_ctx = umap.get_ctx();
1688 let umap = umap.ptr;
1689 let type_ = type_.to_i32();
1690 let isl_rs_result = unsafe { isl_union_map_involves_dims(umap, type_, first, n) };
1691 let isl_rs_result = match isl_rs_result {
1692 0 => false,
1693 1 => true,
1694 _ => {
1695 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1696 }
1697 };
1698 let err = isl_rs_ctx.last_error();
1699 if err != Error::None_ {
1700 let err_msg = isl_rs_ctx.last_error_msg();
1701 isl_rs_ctx.reset_error();
1702 return Err(LibISLError::new(err, err_msg));
1703 }
1704 Ok(isl_rs_result)
1705 }
1706
1707 pub fn is_bijective(&self) -> Result<bool, LibISLError> {
1709 let umap = self;
1710 let isl_rs_ctx = umap.get_ctx();
1711 let umap = umap.ptr;
1712 let isl_rs_result = unsafe { isl_union_map_is_bijective(umap) };
1713 let isl_rs_result = match isl_rs_result {
1714 0 => false,
1715 1 => true,
1716 _ => {
1717 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1718 }
1719 };
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 is_disjoint(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1731 let umap1 = self;
1732 let isl_rs_ctx = umap1.get_ctx();
1733 let umap1 = umap1.ptr;
1734 let umap2 = umap2.ptr;
1735 let isl_rs_result = unsafe { isl_union_map_is_disjoint(umap1, umap2) };
1736 let isl_rs_result = match isl_rs_result {
1737 0 => false,
1738 1 => true,
1739 _ => {
1740 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1741 }
1742 };
1743 let err = isl_rs_ctx.last_error();
1744 if err != Error::None_ {
1745 let err_msg = isl_rs_ctx.last_error_msg();
1746 isl_rs_ctx.reset_error();
1747 return Err(LibISLError::new(err, err_msg));
1748 }
1749 Ok(isl_rs_result)
1750 }
1751
1752 pub fn is_empty(&self) -> Result<bool, LibISLError> {
1754 let umap = self;
1755 let isl_rs_ctx = umap.get_ctx();
1756 let umap = umap.ptr;
1757 let isl_rs_result = unsafe { isl_union_map_is_empty(umap) };
1758 let isl_rs_result = match isl_rs_result {
1759 0 => false,
1760 1 => true,
1761 _ => {
1762 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1763 }
1764 };
1765 let err = isl_rs_ctx.last_error();
1766 if err != Error::None_ {
1767 let err_msg = isl_rs_ctx.last_error_msg();
1768 isl_rs_ctx.reset_error();
1769 return Err(LibISLError::new(err, err_msg));
1770 }
1771 Ok(isl_rs_result)
1772 }
1773
1774 pub fn is_equal(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1776 let umap1 = self;
1777 let isl_rs_ctx = umap1.get_ctx();
1778 let umap1 = umap1.ptr;
1779 let umap2 = umap2.ptr;
1780 let isl_rs_result = unsafe { isl_union_map_is_equal(umap1, umap2) };
1781 let isl_rs_result = match isl_rs_result {
1782 0 => false,
1783 1 => true,
1784 _ => {
1785 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1786 }
1787 };
1788 let err = isl_rs_ctx.last_error();
1789 if err != Error::None_ {
1790 let err_msg = isl_rs_ctx.last_error_msg();
1791 isl_rs_ctx.reset_error();
1792 return Err(LibISLError::new(err, err_msg));
1793 }
1794 Ok(isl_rs_result)
1795 }
1796
1797 pub fn is_identity(&self) -> Result<bool, LibISLError> {
1799 let umap = self;
1800 let isl_rs_ctx = umap.get_ctx();
1801 let umap = umap.ptr;
1802 let isl_rs_result = unsafe { isl_union_map_is_identity(umap) };
1803 let isl_rs_result = match isl_rs_result {
1804 0 => false,
1805 1 => true,
1806 _ => {
1807 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1808 }
1809 };
1810 let err = isl_rs_ctx.last_error();
1811 if err != Error::None_ {
1812 let err_msg = isl_rs_ctx.last_error_msg();
1813 isl_rs_ctx.reset_error();
1814 return Err(LibISLError::new(err, err_msg));
1815 }
1816 Ok(isl_rs_result)
1817 }
1818
1819 pub fn is_injective(&self) -> Result<bool, LibISLError> {
1821 let umap = self;
1822 let isl_rs_ctx = umap.get_ctx();
1823 let umap = umap.ptr;
1824 let isl_rs_result = unsafe { isl_union_map_is_injective(umap) };
1825 let isl_rs_result = match isl_rs_result {
1826 0 => false,
1827 1 => true,
1828 _ => {
1829 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1830 }
1831 };
1832 let err = isl_rs_ctx.last_error();
1833 if err != Error::None_ {
1834 let err_msg = isl_rs_ctx.last_error_msg();
1835 isl_rs_ctx.reset_error();
1836 return Err(LibISLError::new(err, err_msg));
1837 }
1838 Ok(isl_rs_result)
1839 }
1840
1841 pub fn is_single_valued(&self) -> Result<bool, LibISLError> {
1843 let umap = self;
1844 let isl_rs_ctx = umap.get_ctx();
1845 let umap = umap.ptr;
1846 let isl_rs_result = unsafe { isl_union_map_is_single_valued(umap) };
1847 let isl_rs_result = match isl_rs_result {
1848 0 => false,
1849 1 => true,
1850 _ => {
1851 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1852 }
1853 };
1854 let err = isl_rs_ctx.last_error();
1855 if err != Error::None_ {
1856 let err_msg = isl_rs_ctx.last_error_msg();
1857 isl_rs_ctx.reset_error();
1858 return Err(LibISLError::new(err, err_msg));
1859 }
1860 Ok(isl_rs_result)
1861 }
1862
1863 pub fn is_strict_subset(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1865 let umap1 = self;
1866 let isl_rs_ctx = umap1.get_ctx();
1867 let umap1 = umap1.ptr;
1868 let umap2 = umap2.ptr;
1869 let isl_rs_result = unsafe { isl_union_map_is_strict_subset(umap1, umap2) };
1870 let isl_rs_result = match isl_rs_result {
1871 0 => false,
1872 1 => true,
1873 _ => {
1874 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1875 }
1876 };
1877 let err = isl_rs_ctx.last_error();
1878 if err != Error::None_ {
1879 let err_msg = isl_rs_ctx.last_error_msg();
1880 isl_rs_ctx.reset_error();
1881 return Err(LibISLError::new(err, err_msg));
1882 }
1883 Ok(isl_rs_result)
1884 }
1885
1886 pub fn is_subset(&self, umap2: &UnionMap) -> Result<bool, LibISLError> {
1888 let umap1 = self;
1889 let isl_rs_ctx = umap1.get_ctx();
1890 let umap1 = umap1.ptr;
1891 let umap2 = umap2.ptr;
1892 let isl_rs_result = unsafe { isl_union_map_is_subset(umap1, umap2) };
1893 let isl_rs_result = match isl_rs_result {
1894 0 => false,
1895 1 => true,
1896 _ => {
1897 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1898 }
1899 };
1900 let err = isl_rs_ctx.last_error();
1901 if err != Error::None_ {
1902 let err_msg = isl_rs_ctx.last_error_msg();
1903 isl_rs_ctx.reset_error();
1904 return Err(LibISLError::new(err, err_msg));
1905 }
1906 Ok(isl_rs_result)
1907 }
1908
1909 pub fn isa_map(&self) -> Result<bool, LibISLError> {
1911 let umap = self;
1912 let isl_rs_ctx = umap.get_ctx();
1913 let umap = umap.ptr;
1914 let isl_rs_result = unsafe { isl_union_map_isa_map(umap) };
1915 let isl_rs_result = match isl_rs_result {
1916 0 => false,
1917 1 => true,
1918 _ => {
1919 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1920 }
1921 };
1922 let err = isl_rs_ctx.last_error();
1923 if err != Error::None_ {
1924 let err_msg = isl_rs_ctx.last_error_msg();
1925 isl_rs_ctx.reset_error();
1926 return Err(LibISLError::new(err, err_msg));
1927 }
1928 Ok(isl_rs_result)
1929 }
1930
1931 pub fn lex_ge_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1933 -> Result<UnionMap, LibISLError> {
1934 let umap = self;
1935 let isl_rs_ctx = umap.get_ctx();
1936 let mut umap = umap;
1937 umap.do_not_free_on_drop();
1938 let umap = umap.ptr;
1939 let mut mupa = mupa;
1940 mupa.do_not_free_on_drop();
1941 let mupa = mupa.ptr;
1942 let isl_rs_result = unsafe { isl_union_map_lex_ge_at_multi_union_pw_aff(umap, mupa) };
1943 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1944 should_free_on_drop: true };
1945 let err = isl_rs_ctx.last_error();
1946 if err != Error::None_ {
1947 let err_msg = isl_rs_ctx.last_error_msg();
1948 isl_rs_ctx.reset_error();
1949 return Err(LibISLError::new(err, err_msg));
1950 }
1951 Ok(isl_rs_result)
1952 }
1953
1954 pub fn lex_ge_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
1956 let umap1 = self;
1957 let isl_rs_ctx = umap1.get_ctx();
1958 let mut umap1 = umap1;
1959 umap1.do_not_free_on_drop();
1960 let umap1 = umap1.ptr;
1961 let mut umap2 = umap2;
1962 umap2.do_not_free_on_drop();
1963 let umap2 = umap2.ptr;
1964 let isl_rs_result = unsafe { isl_union_map_lex_ge_union_map(umap1, umap2) };
1965 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1966 should_free_on_drop: true };
1967 let err = isl_rs_ctx.last_error();
1968 if err != Error::None_ {
1969 let err_msg = isl_rs_ctx.last_error_msg();
1970 isl_rs_ctx.reset_error();
1971 return Err(LibISLError::new(err, err_msg));
1972 }
1973 Ok(isl_rs_result)
1974 }
1975
1976 pub fn lex_gt_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
1978 -> Result<UnionMap, LibISLError> {
1979 let umap = self;
1980 let isl_rs_ctx = umap.get_ctx();
1981 let mut umap = umap;
1982 umap.do_not_free_on_drop();
1983 let umap = umap.ptr;
1984 let mut mupa = mupa;
1985 mupa.do_not_free_on_drop();
1986 let mupa = mupa.ptr;
1987 let isl_rs_result = unsafe { isl_union_map_lex_gt_at_multi_union_pw_aff(umap, mupa) };
1988 let isl_rs_result = UnionMap { 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 lex_gt_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2001 let umap1 = self;
2002 let isl_rs_ctx = umap1.get_ctx();
2003 let mut umap1 = umap1;
2004 umap1.do_not_free_on_drop();
2005 let umap1 = umap1.ptr;
2006 let mut umap2 = umap2;
2007 umap2.do_not_free_on_drop();
2008 let umap2 = umap2.ptr;
2009 let isl_rs_result = unsafe { isl_union_map_lex_gt_union_map(umap1, umap2) };
2010 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2011 should_free_on_drop: true };
2012 let err = isl_rs_ctx.last_error();
2013 if err != Error::None_ {
2014 let err_msg = isl_rs_ctx.last_error_msg();
2015 isl_rs_ctx.reset_error();
2016 return Err(LibISLError::new(err, err_msg));
2017 }
2018 Ok(isl_rs_result)
2019 }
2020
2021 pub fn lex_le_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
2023 -> Result<UnionMap, LibISLError> {
2024 let umap = self;
2025 let isl_rs_ctx = umap.get_ctx();
2026 let mut umap = umap;
2027 umap.do_not_free_on_drop();
2028 let umap = umap.ptr;
2029 let mut mupa = mupa;
2030 mupa.do_not_free_on_drop();
2031 let mupa = mupa.ptr;
2032 let isl_rs_result = unsafe { isl_union_map_lex_le_at_multi_union_pw_aff(umap, mupa) };
2033 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2034 should_free_on_drop: true };
2035 let err = isl_rs_ctx.last_error();
2036 if err != Error::None_ {
2037 let err_msg = isl_rs_ctx.last_error_msg();
2038 isl_rs_ctx.reset_error();
2039 return Err(LibISLError::new(err, err_msg));
2040 }
2041 Ok(isl_rs_result)
2042 }
2043
2044 pub fn lex_le_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2046 let umap1 = self;
2047 let isl_rs_ctx = umap1.get_ctx();
2048 let mut umap1 = umap1;
2049 umap1.do_not_free_on_drop();
2050 let umap1 = umap1.ptr;
2051 let mut umap2 = umap2;
2052 umap2.do_not_free_on_drop();
2053 let umap2 = umap2.ptr;
2054 let isl_rs_result = unsafe { isl_union_map_lex_le_union_map(umap1, umap2) };
2055 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2056 should_free_on_drop: true };
2057 let err = isl_rs_ctx.last_error();
2058 if err != Error::None_ {
2059 let err_msg = isl_rs_ctx.last_error_msg();
2060 isl_rs_ctx.reset_error();
2061 return Err(LibISLError::new(err, err_msg));
2062 }
2063 Ok(isl_rs_result)
2064 }
2065
2066 pub fn lex_lt_at_multi_union_pw_aff(self, mupa: MultiUnionPwAff)
2068 -> Result<UnionMap, LibISLError> {
2069 let umap = self;
2070 let isl_rs_ctx = umap.get_ctx();
2071 let mut umap = umap;
2072 umap.do_not_free_on_drop();
2073 let umap = umap.ptr;
2074 let mut mupa = mupa;
2075 mupa.do_not_free_on_drop();
2076 let mupa = mupa.ptr;
2077 let isl_rs_result = unsafe { isl_union_map_lex_lt_at_multi_union_pw_aff(umap, mupa) };
2078 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2079 should_free_on_drop: true };
2080 let err = isl_rs_ctx.last_error();
2081 if err != Error::None_ {
2082 let err_msg = isl_rs_ctx.last_error_msg();
2083 isl_rs_ctx.reset_error();
2084 return Err(LibISLError::new(err, err_msg));
2085 }
2086 Ok(isl_rs_result)
2087 }
2088
2089 pub fn lex_lt_union_map(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2091 let umap1 = self;
2092 let isl_rs_ctx = umap1.get_ctx();
2093 let mut umap1 = umap1;
2094 umap1.do_not_free_on_drop();
2095 let umap1 = umap1.ptr;
2096 let mut umap2 = umap2;
2097 umap2.do_not_free_on_drop();
2098 let umap2 = umap2.ptr;
2099 let isl_rs_result = unsafe { isl_union_map_lex_lt_union_map(umap1, umap2) };
2100 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2101 should_free_on_drop: true };
2102 let err = isl_rs_ctx.last_error();
2103 if err != Error::None_ {
2104 let err_msg = isl_rs_ctx.last_error_msg();
2105 isl_rs_ctx.reset_error();
2106 return Err(LibISLError::new(err, err_msg));
2107 }
2108 Ok(isl_rs_result)
2109 }
2110
2111 pub fn lexmax(self) -> Result<UnionMap, LibISLError> {
2113 let umap = self;
2114 let isl_rs_ctx = umap.get_ctx();
2115 let mut umap = umap;
2116 umap.do_not_free_on_drop();
2117 let umap = umap.ptr;
2118 let isl_rs_result = unsafe { isl_union_map_lexmax(umap) };
2119 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2120 should_free_on_drop: true };
2121 let err = isl_rs_ctx.last_error();
2122 if err != Error::None_ {
2123 let err_msg = isl_rs_ctx.last_error_msg();
2124 isl_rs_ctx.reset_error();
2125 return Err(LibISLError::new(err, err_msg));
2126 }
2127 Ok(isl_rs_result)
2128 }
2129
2130 pub fn lexmin(self) -> Result<UnionMap, LibISLError> {
2132 let umap = self;
2133 let isl_rs_ctx = umap.get_ctx();
2134 let mut umap = umap;
2135 umap.do_not_free_on_drop();
2136 let umap = umap.ptr;
2137 let isl_rs_result = unsafe { isl_union_map_lexmin(umap) };
2138 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2139 should_free_on_drop: true };
2140 let err = isl_rs_ctx.last_error();
2141 if err != Error::None_ {
2142 let err_msg = isl_rs_ctx.last_error_msg();
2143 isl_rs_ctx.reset_error();
2144 return Err(LibISLError::new(err, err_msg));
2145 }
2146 Ok(isl_rs_result)
2147 }
2148
2149 pub fn n_map(&self) -> Result<i32, LibISLError> {
2151 let umap = self;
2152 let isl_rs_ctx = umap.get_ctx();
2153 let umap = umap.ptr;
2154 let isl_rs_result = unsafe { isl_union_map_n_map(umap) };
2155 let err = isl_rs_ctx.last_error();
2156 if err != Error::None_ {
2157 let err_msg = isl_rs_ctx.last_error_msg();
2158 isl_rs_ctx.reset_error();
2159 return Err(LibISLError::new(err, err_msg));
2160 }
2161 Ok(isl_rs_result)
2162 }
2163
2164 pub fn params(self) -> Result<Set, LibISLError> {
2166 let umap = self;
2167 let isl_rs_ctx = umap.get_ctx();
2168 let mut umap = umap;
2169 umap.do_not_free_on_drop();
2170 let umap = umap.ptr;
2171 let isl_rs_result = unsafe { isl_union_map_params(umap) };
2172 let isl_rs_result = Set { ptr: isl_rs_result,
2173 should_free_on_drop: true };
2174 let err = isl_rs_ctx.last_error();
2175 if err != Error::None_ {
2176 let err_msg = isl_rs_ctx.last_error_msg();
2177 isl_rs_ctx.reset_error();
2178 return Err(LibISLError::new(err, err_msg));
2179 }
2180 Ok(isl_rs_result)
2181 }
2182
2183 pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
2185 let umap = self;
2186 let isl_rs_ctx = umap.get_ctx();
2187 let umap = umap.ptr;
2188 let isl_rs_result = unsafe { isl_union_map_plain_is_empty(umap) };
2189 let isl_rs_result = match isl_rs_result {
2190 0 => false,
2191 1 => true,
2192 _ => {
2193 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2194 }
2195 };
2196 let err = isl_rs_ctx.last_error();
2197 if err != Error::None_ {
2198 let err_msg = isl_rs_ctx.last_error_msg();
2199 isl_rs_ctx.reset_error();
2200 return Err(LibISLError::new(err, err_msg));
2201 }
2202 Ok(isl_rs_result)
2203 }
2204
2205 pub fn plain_is_injective(&self) -> Result<bool, LibISLError> {
2207 let umap = self;
2208 let isl_rs_ctx = umap.get_ctx();
2209 let umap = umap.ptr;
2210 let isl_rs_result = unsafe { isl_union_map_plain_is_injective(umap) };
2211 let isl_rs_result = match isl_rs_result {
2212 0 => false,
2213 1 => true,
2214 _ => {
2215 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2216 }
2217 };
2218 let err = isl_rs_ctx.last_error();
2219 if err != Error::None_ {
2220 let err_msg = isl_rs_ctx.last_error_msg();
2221 isl_rs_ctx.reset_error();
2222 return Err(LibISLError::new(err, err_msg));
2223 }
2224 Ok(isl_rs_result)
2225 }
2226
2227 pub fn plain_unshifted_simple_hull(self) -> Result<UnionMap, LibISLError> {
2229 let umap = self;
2230 let isl_rs_ctx = umap.get_ctx();
2231 let mut umap = umap;
2232 umap.do_not_free_on_drop();
2233 let umap = umap.ptr;
2234 let isl_rs_result = unsafe { isl_union_map_plain_unshifted_simple_hull(umap) };
2235 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2236 should_free_on_drop: true };
2237 let err = isl_rs_ctx.last_error();
2238 if err != Error::None_ {
2239 let err_msg = isl_rs_ctx.last_error_msg();
2240 isl_rs_ctx.reset_error();
2241 return Err(LibISLError::new(err, err_msg));
2242 }
2243 Ok(isl_rs_result)
2244 }
2245
2246 pub fn polyhedral_hull(self) -> Result<UnionMap, LibISLError> {
2248 let umap = self;
2249 let isl_rs_ctx = umap.get_ctx();
2250 let mut umap = umap;
2251 umap.do_not_free_on_drop();
2252 let umap = umap.ptr;
2253 let isl_rs_result = unsafe { isl_union_map_polyhedral_hull(umap) };
2254 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2255 should_free_on_drop: true };
2256 let err = isl_rs_ctx.last_error();
2257 if err != Error::None_ {
2258 let err_msg = isl_rs_ctx.last_error_msg();
2259 isl_rs_ctx.reset_error();
2260 return Err(LibISLError::new(err, err_msg));
2261 }
2262 Ok(isl_rs_result)
2263 }
2264
2265 pub fn preimage_domain_multi_aff(self, ma: MultiAff) -> Result<UnionMap, LibISLError> {
2267 let umap = self;
2268 let isl_rs_ctx = umap.get_ctx();
2269 let mut umap = umap;
2270 umap.do_not_free_on_drop();
2271 let umap = umap.ptr;
2272 let mut ma = ma;
2273 ma.do_not_free_on_drop();
2274 let ma = ma.ptr;
2275 let isl_rs_result = unsafe { isl_union_map_preimage_domain_multi_aff(umap, ma) };
2276 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2277 should_free_on_drop: true };
2278 let err = isl_rs_ctx.last_error();
2279 if err != Error::None_ {
2280 let err_msg = isl_rs_ctx.last_error_msg();
2281 isl_rs_ctx.reset_error();
2282 return Err(LibISLError::new(err, err_msg));
2283 }
2284 Ok(isl_rs_result)
2285 }
2286
2287 pub fn preimage_domain_multi_pw_aff(self, mpa: MultiPwAff) -> Result<UnionMap, LibISLError> {
2289 let umap = self;
2290 let isl_rs_ctx = umap.get_ctx();
2291 let mut umap = umap;
2292 umap.do_not_free_on_drop();
2293 let umap = umap.ptr;
2294 let mut mpa = mpa;
2295 mpa.do_not_free_on_drop();
2296 let mpa = mpa.ptr;
2297 let isl_rs_result = unsafe { isl_union_map_preimage_domain_multi_pw_aff(umap, mpa) };
2298 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2299 should_free_on_drop: true };
2300 let err = isl_rs_ctx.last_error();
2301 if err != Error::None_ {
2302 let err_msg = isl_rs_ctx.last_error_msg();
2303 isl_rs_ctx.reset_error();
2304 return Err(LibISLError::new(err, err_msg));
2305 }
2306 Ok(isl_rs_result)
2307 }
2308
2309 pub fn preimage_domain_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionMap, LibISLError> {
2311 let umap = self;
2312 let isl_rs_ctx = umap.get_ctx();
2313 let mut umap = umap;
2314 umap.do_not_free_on_drop();
2315 let umap = umap.ptr;
2316 let mut pma = pma;
2317 pma.do_not_free_on_drop();
2318 let pma = pma.ptr;
2319 let isl_rs_result = unsafe { isl_union_map_preimage_domain_pw_multi_aff(umap, pma) };
2320 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2321 should_free_on_drop: true };
2322 let err = isl_rs_ctx.last_error();
2323 if err != Error::None_ {
2324 let err_msg = isl_rs_ctx.last_error_msg();
2325 isl_rs_ctx.reset_error();
2326 return Err(LibISLError::new(err, err_msg));
2327 }
2328 Ok(isl_rs_result)
2329 }
2330
2331 pub fn preimage_domain_union_pw_multi_aff(self, upma: UnionPwMultiAff)
2333 -> Result<UnionMap, LibISLError> {
2334 let umap = self;
2335 let isl_rs_ctx = umap.get_ctx();
2336 let mut umap = umap;
2337 umap.do_not_free_on_drop();
2338 let umap = umap.ptr;
2339 let mut upma = upma;
2340 upma.do_not_free_on_drop();
2341 let upma = upma.ptr;
2342 let isl_rs_result = unsafe { isl_union_map_preimage_domain_union_pw_multi_aff(umap, upma) };
2343 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2344 should_free_on_drop: true };
2345 let err = isl_rs_ctx.last_error();
2346 if err != Error::None_ {
2347 let err_msg = isl_rs_ctx.last_error_msg();
2348 isl_rs_ctx.reset_error();
2349 return Err(LibISLError::new(err, err_msg));
2350 }
2351 Ok(isl_rs_result)
2352 }
2353
2354 pub fn preimage_range_multi_aff(self, ma: MultiAff) -> Result<UnionMap, LibISLError> {
2356 let umap = self;
2357 let isl_rs_ctx = umap.get_ctx();
2358 let mut umap = umap;
2359 umap.do_not_free_on_drop();
2360 let umap = umap.ptr;
2361 let mut ma = ma;
2362 ma.do_not_free_on_drop();
2363 let ma = ma.ptr;
2364 let isl_rs_result = unsafe { isl_union_map_preimage_range_multi_aff(umap, ma) };
2365 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2366 should_free_on_drop: true };
2367 let err = isl_rs_ctx.last_error();
2368 if err != Error::None_ {
2369 let err_msg = isl_rs_ctx.last_error_msg();
2370 isl_rs_ctx.reset_error();
2371 return Err(LibISLError::new(err, err_msg));
2372 }
2373 Ok(isl_rs_result)
2374 }
2375
2376 pub fn preimage_range_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionMap, LibISLError> {
2378 let umap = self;
2379 let isl_rs_ctx = umap.get_ctx();
2380 let mut umap = umap;
2381 umap.do_not_free_on_drop();
2382 let umap = umap.ptr;
2383 let mut pma = pma;
2384 pma.do_not_free_on_drop();
2385 let pma = pma.ptr;
2386 let isl_rs_result = unsafe { isl_union_map_preimage_range_pw_multi_aff(umap, pma) };
2387 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2388 should_free_on_drop: true };
2389 let err = isl_rs_ctx.last_error();
2390 if err != Error::None_ {
2391 let err_msg = isl_rs_ctx.last_error_msg();
2392 isl_rs_ctx.reset_error();
2393 return Err(LibISLError::new(err, err_msg));
2394 }
2395 Ok(isl_rs_result)
2396 }
2397
2398 pub fn preimage_range_union_pw_multi_aff(self, upma: UnionPwMultiAff)
2400 -> Result<UnionMap, LibISLError> {
2401 let umap = self;
2402 let isl_rs_ctx = umap.get_ctx();
2403 let mut umap = umap;
2404 umap.do_not_free_on_drop();
2405 let umap = umap.ptr;
2406 let mut upma = upma;
2407 upma.do_not_free_on_drop();
2408 let upma = upma.ptr;
2409 let isl_rs_result = unsafe { isl_union_map_preimage_range_union_pw_multi_aff(umap, upma) };
2410 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2411 should_free_on_drop: true };
2412 let err = isl_rs_ctx.last_error();
2413 if err != Error::None_ {
2414 let err_msg = isl_rs_ctx.last_error_msg();
2415 isl_rs_ctx.reset_error();
2416 return Err(LibISLError::new(err, err_msg));
2417 }
2418 Ok(isl_rs_result)
2419 }
2420
2421 pub fn product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2423 let umap1 = self;
2424 let isl_rs_ctx = umap1.get_ctx();
2425 let mut umap1 = umap1;
2426 umap1.do_not_free_on_drop();
2427 let umap1 = umap1.ptr;
2428 let mut umap2 = umap2;
2429 umap2.do_not_free_on_drop();
2430 let umap2 = umap2.ptr;
2431 let isl_rs_result = unsafe { isl_union_map_product(umap1, umap2) };
2432 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2433 should_free_on_drop: true };
2434 let err = isl_rs_ctx.last_error();
2435 if err != Error::None_ {
2436 let err_msg = isl_rs_ctx.last_error_msg();
2437 isl_rs_ctx.reset_error();
2438 return Err(LibISLError::new(err, err_msg));
2439 }
2440 Ok(isl_rs_result)
2441 }
2442
2443 pub fn project_out(self, type_: DimType, first: u32, n: u32) -> Result<UnionMap, LibISLError> {
2445 let umap = self;
2446 let isl_rs_ctx = umap.get_ctx();
2447 let mut umap = umap;
2448 umap.do_not_free_on_drop();
2449 let umap = umap.ptr;
2450 let type_ = type_.to_i32();
2451 let isl_rs_result = unsafe { isl_union_map_project_out(umap, type_, first, n) };
2452 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2453 should_free_on_drop: true };
2454 let err = isl_rs_ctx.last_error();
2455 if err != Error::None_ {
2456 let err_msg = isl_rs_ctx.last_error_msg();
2457 isl_rs_ctx.reset_error();
2458 return Err(LibISLError::new(err, err_msg));
2459 }
2460 Ok(isl_rs_result)
2461 }
2462
2463 pub fn project_out_all_params(self) -> Result<UnionMap, LibISLError> {
2465 let umap = self;
2466 let isl_rs_ctx = umap.get_ctx();
2467 let mut umap = umap;
2468 umap.do_not_free_on_drop();
2469 let umap = umap.ptr;
2470 let isl_rs_result = unsafe { isl_union_map_project_out_all_params(umap) };
2471 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2472 should_free_on_drop: true };
2473 let err = isl_rs_ctx.last_error();
2474 if err != Error::None_ {
2475 let err_msg = isl_rs_ctx.last_error_msg();
2476 isl_rs_ctx.reset_error();
2477 return Err(LibISLError::new(err, err_msg));
2478 }
2479 Ok(isl_rs_result)
2480 }
2481
2482 pub fn project_out_param_id(self, id: Id) -> Result<UnionMap, LibISLError> {
2484 let umap = self;
2485 let isl_rs_ctx = umap.get_ctx();
2486 let mut umap = umap;
2487 umap.do_not_free_on_drop();
2488 let umap = umap.ptr;
2489 let mut id = id;
2490 id.do_not_free_on_drop();
2491 let id = id.ptr;
2492 let isl_rs_result = unsafe { isl_union_map_project_out_param_id(umap, id) };
2493 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2494 should_free_on_drop: true };
2495 let err = isl_rs_ctx.last_error();
2496 if err != Error::None_ {
2497 let err_msg = isl_rs_ctx.last_error_msg();
2498 isl_rs_ctx.reset_error();
2499 return Err(LibISLError::new(err, err_msg));
2500 }
2501 Ok(isl_rs_result)
2502 }
2503
2504 pub fn project_out_param_id_list(self, list: IdList) -> Result<UnionMap, LibISLError> {
2506 let umap = self;
2507 let isl_rs_ctx = umap.get_ctx();
2508 let mut umap = umap;
2509 umap.do_not_free_on_drop();
2510 let umap = umap.ptr;
2511 let mut list = list;
2512 list.do_not_free_on_drop();
2513 let list = list.ptr;
2514 let isl_rs_result = unsafe { isl_union_map_project_out_param_id_list(umap, list) };
2515 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2516 should_free_on_drop: true };
2517 let err = isl_rs_ctx.last_error();
2518 if err != Error::None_ {
2519 let err_msg = isl_rs_ctx.last_error_msg();
2520 isl_rs_ctx.reset_error();
2521 return Err(LibISLError::new(err, err_msg));
2522 }
2523 Ok(isl_rs_result)
2524 }
2525
2526 pub fn range(self) -> Result<UnionSet, LibISLError> {
2528 let umap = self;
2529 let isl_rs_ctx = umap.get_ctx();
2530 let mut umap = umap;
2531 umap.do_not_free_on_drop();
2532 let umap = umap.ptr;
2533 let isl_rs_result = unsafe { isl_union_map_range(umap) };
2534 let isl_rs_result = UnionSet { ptr: isl_rs_result,
2535 should_free_on_drop: true };
2536 let err = isl_rs_ctx.last_error();
2537 if err != Error::None_ {
2538 let err_msg = isl_rs_ctx.last_error_msg();
2539 isl_rs_ctx.reset_error();
2540 return Err(LibISLError::new(err, err_msg));
2541 }
2542 Ok(isl_rs_result)
2543 }
2544
2545 pub fn range_curry(self) -> Result<UnionMap, LibISLError> {
2547 let umap = self;
2548 let isl_rs_ctx = umap.get_ctx();
2549 let mut umap = umap;
2550 umap.do_not_free_on_drop();
2551 let umap = umap.ptr;
2552 let isl_rs_result = unsafe { isl_union_map_range_curry(umap) };
2553 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2554 should_free_on_drop: true };
2555 let err = isl_rs_ctx.last_error();
2556 if err != Error::None_ {
2557 let err_msg = isl_rs_ctx.last_error_msg();
2558 isl_rs_ctx.reset_error();
2559 return Err(LibISLError::new(err, err_msg));
2560 }
2561 Ok(isl_rs_result)
2562 }
2563
2564 pub fn range_factor_domain(self) -> Result<UnionMap, LibISLError> {
2566 let umap = self;
2567 let isl_rs_ctx = umap.get_ctx();
2568 let mut umap = umap;
2569 umap.do_not_free_on_drop();
2570 let umap = umap.ptr;
2571 let isl_rs_result = unsafe { isl_union_map_range_factor_domain(umap) };
2572 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2573 should_free_on_drop: true };
2574 let err = isl_rs_ctx.last_error();
2575 if err != Error::None_ {
2576 let err_msg = isl_rs_ctx.last_error_msg();
2577 isl_rs_ctx.reset_error();
2578 return Err(LibISLError::new(err, err_msg));
2579 }
2580 Ok(isl_rs_result)
2581 }
2582
2583 pub fn range_factor_range(self) -> Result<UnionMap, LibISLError> {
2585 let umap = self;
2586 let isl_rs_ctx = umap.get_ctx();
2587 let mut umap = umap;
2588 umap.do_not_free_on_drop();
2589 let umap = umap.ptr;
2590 let isl_rs_result = unsafe { isl_union_map_range_factor_range(umap) };
2591 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2592 should_free_on_drop: true };
2593 let err = isl_rs_ctx.last_error();
2594 if err != Error::None_ {
2595 let err_msg = isl_rs_ctx.last_error_msg();
2596 isl_rs_ctx.reset_error();
2597 return Err(LibISLError::new(err, err_msg));
2598 }
2599 Ok(isl_rs_result)
2600 }
2601
2602 pub fn range_map(self) -> Result<UnionMap, LibISLError> {
2604 let umap = self;
2605 let isl_rs_ctx = umap.get_ctx();
2606 let mut umap = umap;
2607 umap.do_not_free_on_drop();
2608 let umap = umap.ptr;
2609 let isl_rs_result = unsafe { isl_union_map_range_map(umap) };
2610 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2611 should_free_on_drop: true };
2612 let err = isl_rs_ctx.last_error();
2613 if err != Error::None_ {
2614 let err_msg = isl_rs_ctx.last_error_msg();
2615 isl_rs_ctx.reset_error();
2616 return Err(LibISLError::new(err, err_msg));
2617 }
2618 Ok(isl_rs_result)
2619 }
2620
2621 pub fn range_product(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2623 let umap1 = self;
2624 let isl_rs_ctx = umap1.get_ctx();
2625 let mut umap1 = umap1;
2626 umap1.do_not_free_on_drop();
2627 let umap1 = umap1.ptr;
2628 let mut umap2 = umap2;
2629 umap2.do_not_free_on_drop();
2630 let umap2 = umap2.ptr;
2631 let isl_rs_result = unsafe { isl_union_map_range_product(umap1, umap2) };
2632 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2633 should_free_on_drop: true };
2634 let err = isl_rs_ctx.last_error();
2635 if err != Error::None_ {
2636 let err_msg = isl_rs_ctx.last_error_msg();
2637 isl_rs_ctx.reset_error();
2638 return Err(LibISLError::new(err, err_msg));
2639 }
2640 Ok(isl_rs_result)
2641 }
2642
2643 pub fn range_reverse(self) -> Result<UnionMap, LibISLError> {
2645 let umap = self;
2646 let isl_rs_ctx = umap.get_ctx();
2647 let mut umap = umap;
2648 umap.do_not_free_on_drop();
2649 let umap = umap.ptr;
2650 let isl_rs_result = unsafe { isl_union_map_range_reverse(umap) };
2651 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2652 should_free_on_drop: true };
2653 let err = isl_rs_ctx.last_error();
2654 if err != Error::None_ {
2655 let err_msg = isl_rs_ctx.last_error_msg();
2656 isl_rs_ctx.reset_error();
2657 return Err(LibISLError::new(err, err_msg));
2658 }
2659 Ok(isl_rs_result)
2660 }
2661
2662 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionMap, LibISLError> {
2664 let isl_rs_ctx = Context { ptr: ctx.ptr,
2665 should_free_on_drop: false };
2666 let ctx = ctx.ptr;
2667 let str_ = CString::new(str_).unwrap();
2668 let str_ = str_.as_ptr();
2669 let isl_rs_result = unsafe { isl_union_map_read_from_str(ctx, str_) };
2670 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2671 should_free_on_drop: true };
2672 let err = isl_rs_ctx.last_error();
2673 if err != Error::None_ {
2674 let err_msg = isl_rs_ctx.last_error_msg();
2675 isl_rs_ctx.reset_error();
2676 return Err(LibISLError::new(err, err_msg));
2677 }
2678 Ok(isl_rs_result)
2679 }
2680
2681 pub fn remove_divs(self) -> Result<UnionMap, LibISLError> {
2683 let bmap = self;
2684 let isl_rs_ctx = bmap.get_ctx();
2685 let mut bmap = bmap;
2686 bmap.do_not_free_on_drop();
2687 let bmap = bmap.ptr;
2688 let isl_rs_result = unsafe { isl_union_map_remove_divs(bmap) };
2689 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2690 should_free_on_drop: true };
2691 let err = isl_rs_ctx.last_error();
2692 if err != Error::None_ {
2693 let err_msg = isl_rs_ctx.last_error_msg();
2694 isl_rs_ctx.reset_error();
2695 return Err(LibISLError::new(err, err_msg));
2696 }
2697 Ok(isl_rs_result)
2698 }
2699
2700 pub fn remove_redundancies(self) -> Result<UnionMap, LibISLError> {
2702 let umap = self;
2703 let isl_rs_ctx = umap.get_ctx();
2704 let mut umap = umap;
2705 umap.do_not_free_on_drop();
2706 let umap = umap.ptr;
2707 let isl_rs_result = unsafe { isl_union_map_remove_redundancies(umap) };
2708 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2709 should_free_on_drop: true };
2710 let err = isl_rs_ctx.last_error();
2711 if err != Error::None_ {
2712 let err_msg = isl_rs_ctx.last_error_msg();
2713 isl_rs_ctx.reset_error();
2714 return Err(LibISLError::new(err, err_msg));
2715 }
2716 Ok(isl_rs_result)
2717 }
2718
2719 pub fn reset_user(self) -> Result<UnionMap, LibISLError> {
2721 let umap = self;
2722 let isl_rs_ctx = umap.get_ctx();
2723 let mut umap = umap;
2724 umap.do_not_free_on_drop();
2725 let umap = umap.ptr;
2726 let isl_rs_result = unsafe { isl_union_map_reset_user(umap) };
2727 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2728 should_free_on_drop: true };
2729 let err = isl_rs_ctx.last_error();
2730 if err != Error::None_ {
2731 let err_msg = isl_rs_ctx.last_error_msg();
2732 isl_rs_ctx.reset_error();
2733 return Err(LibISLError::new(err, err_msg));
2734 }
2735 Ok(isl_rs_result)
2736 }
2737
2738 pub fn reverse(self) -> Result<UnionMap, LibISLError> {
2740 let umap = self;
2741 let isl_rs_ctx = umap.get_ctx();
2742 let mut umap = umap;
2743 umap.do_not_free_on_drop();
2744 let umap = umap.ptr;
2745 let isl_rs_result = unsafe { isl_union_map_reverse(umap) };
2746 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2747 should_free_on_drop: true };
2748 let err = isl_rs_ctx.last_error();
2749 if err != Error::None_ {
2750 let err_msg = isl_rs_ctx.last_error_msg();
2751 isl_rs_ctx.reset_error();
2752 return Err(LibISLError::new(err, err_msg));
2753 }
2754 Ok(isl_rs_result)
2755 }
2756
2757 pub fn sample(self) -> Result<BasicMap, LibISLError> {
2759 let umap = self;
2760 let isl_rs_ctx = umap.get_ctx();
2761 let mut umap = umap;
2762 umap.do_not_free_on_drop();
2763 let umap = umap.ptr;
2764 let isl_rs_result = unsafe { isl_union_map_sample(umap) };
2765 let isl_rs_result = BasicMap { ptr: isl_rs_result,
2766 should_free_on_drop: true };
2767 let err = isl_rs_ctx.last_error();
2768 if err != Error::None_ {
2769 let err_msg = isl_rs_ctx.last_error_msg();
2770 isl_rs_ctx.reset_error();
2771 return Err(LibISLError::new(err, err_msg));
2772 }
2773 Ok(isl_rs_result)
2774 }
2775
2776 pub fn simple_hull(self) -> Result<UnionMap, LibISLError> {
2778 let umap = self;
2779 let isl_rs_ctx = umap.get_ctx();
2780 let mut umap = umap;
2781 umap.do_not_free_on_drop();
2782 let umap = umap.ptr;
2783 let isl_rs_result = unsafe { isl_union_map_simple_hull(umap) };
2784 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2785 should_free_on_drop: true };
2786 let err = isl_rs_ctx.last_error();
2787 if err != Error::None_ {
2788 let err_msg = isl_rs_ctx.last_error_msg();
2789 isl_rs_ctx.reset_error();
2790 return Err(LibISLError::new(err, err_msg));
2791 }
2792 Ok(isl_rs_result)
2793 }
2794
2795 pub fn subtract(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2797 let umap1 = self;
2798 let isl_rs_ctx = umap1.get_ctx();
2799 let mut umap1 = umap1;
2800 umap1.do_not_free_on_drop();
2801 let umap1 = umap1.ptr;
2802 let mut umap2 = umap2;
2803 umap2.do_not_free_on_drop();
2804 let umap2 = umap2.ptr;
2805 let isl_rs_result = unsafe { isl_union_map_subtract(umap1, umap2) };
2806 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2807 should_free_on_drop: true };
2808 let err = isl_rs_ctx.last_error();
2809 if err != Error::None_ {
2810 let err_msg = isl_rs_ctx.last_error_msg();
2811 isl_rs_ctx.reset_error();
2812 return Err(LibISLError::new(err, err_msg));
2813 }
2814 Ok(isl_rs_result)
2815 }
2816
2817 pub fn subtract_domain(self, dom: UnionSet) -> Result<UnionMap, LibISLError> {
2819 let umap = self;
2820 let isl_rs_ctx = umap.get_ctx();
2821 let mut umap = umap;
2822 umap.do_not_free_on_drop();
2823 let umap = umap.ptr;
2824 let mut dom = dom;
2825 dom.do_not_free_on_drop();
2826 let dom = dom.ptr;
2827 let isl_rs_result = unsafe { isl_union_map_subtract_domain(umap, dom) };
2828 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2829 should_free_on_drop: true };
2830 let err = isl_rs_ctx.last_error();
2831 if err != Error::None_ {
2832 let err_msg = isl_rs_ctx.last_error_msg();
2833 isl_rs_ctx.reset_error();
2834 return Err(LibISLError::new(err, err_msg));
2835 }
2836 Ok(isl_rs_result)
2837 }
2838
2839 pub fn subtract_range(self, dom: UnionSet) -> Result<UnionMap, LibISLError> {
2841 let umap = self;
2842 let isl_rs_ctx = umap.get_ctx();
2843 let mut umap = umap;
2844 umap.do_not_free_on_drop();
2845 let umap = umap.ptr;
2846 let mut dom = dom;
2847 dom.do_not_free_on_drop();
2848 let dom = dom.ptr;
2849 let isl_rs_result = unsafe { isl_union_map_subtract_range(umap, dom) };
2850 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2851 should_free_on_drop: true };
2852 let err = isl_rs_ctx.last_error();
2853 if err != Error::None_ {
2854 let err_msg = isl_rs_ctx.last_error_msg();
2855 isl_rs_ctx.reset_error();
2856 return Err(LibISLError::new(err, err_msg));
2857 }
2858 Ok(isl_rs_result)
2859 }
2860
2861 pub fn to_list(self) -> Result<UnionMapList, LibISLError> {
2863 let el = self;
2864 let isl_rs_ctx = el.get_ctx();
2865 let mut el = el;
2866 el.do_not_free_on_drop();
2867 let el = el.ptr;
2868 let isl_rs_result = unsafe { isl_union_map_to_list(el) };
2869 let isl_rs_result = UnionMapList { ptr: isl_rs_result,
2870 should_free_on_drop: true };
2871 let err = isl_rs_ctx.last_error();
2872 if err != Error::None_ {
2873 let err_msg = isl_rs_ctx.last_error_msg();
2874 isl_rs_ctx.reset_error();
2875 return Err(LibISLError::new(err, err_msg));
2876 }
2877 Ok(isl_rs_result)
2878 }
2879
2880 pub fn to_str(&self) -> Result<&str, LibISLError> {
2882 let umap = self;
2883 let isl_rs_ctx = umap.get_ctx();
2884 let umap = umap.ptr;
2885 let isl_rs_result = unsafe { isl_union_map_to_str(umap) };
2886 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2887 let isl_rs_result = isl_rs_result.to_str().unwrap();
2888 let err = isl_rs_ctx.last_error();
2889 if err != Error::None_ {
2890 let err_msg = isl_rs_ctx.last_error_msg();
2891 isl_rs_ctx.reset_error();
2892 return Err(LibISLError::new(err, err_msg));
2893 }
2894 Ok(isl_rs_result)
2895 }
2896
2897 pub fn uncurry(self) -> Result<UnionMap, LibISLError> {
2899 let umap = self;
2900 let isl_rs_ctx = umap.get_ctx();
2901 let mut umap = umap;
2902 umap.do_not_free_on_drop();
2903 let umap = umap.ptr;
2904 let isl_rs_result = unsafe { isl_union_map_uncurry(umap) };
2905 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2906 should_free_on_drop: true };
2907 let err = isl_rs_ctx.last_error();
2908 if err != Error::None_ {
2909 let err_msg = isl_rs_ctx.last_error_msg();
2910 isl_rs_ctx.reset_error();
2911 return Err(LibISLError::new(err, err_msg));
2912 }
2913 Ok(isl_rs_result)
2914 }
2915
2916 pub fn union(self, umap2: UnionMap) -> Result<UnionMap, LibISLError> {
2918 let umap1 = self;
2919 let isl_rs_ctx = umap1.get_ctx();
2920 let mut umap1 = umap1;
2921 umap1.do_not_free_on_drop();
2922 let umap1 = umap1.ptr;
2923 let mut umap2 = umap2;
2924 umap2.do_not_free_on_drop();
2925 let umap2 = umap2.ptr;
2926 let isl_rs_result = unsafe { isl_union_map_union(umap1, umap2) };
2927 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2928 should_free_on_drop: true };
2929 let err = isl_rs_ctx.last_error();
2930 if err != Error::None_ {
2931 let err_msg = isl_rs_ctx.last_error_msg();
2932 isl_rs_ctx.reset_error();
2933 return Err(LibISLError::new(err, err_msg));
2934 }
2935 Ok(isl_rs_result)
2936 }
2937
2938 pub fn universe(self) -> Result<UnionMap, LibISLError> {
2940 let umap = self;
2941 let isl_rs_ctx = umap.get_ctx();
2942 let mut umap = umap;
2943 umap.do_not_free_on_drop();
2944 let umap = umap.ptr;
2945 let isl_rs_result = unsafe { isl_union_map_universe(umap) };
2946 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2947 should_free_on_drop: true };
2948 let err = isl_rs_ctx.last_error();
2949 if err != Error::None_ {
2950 let err_msg = isl_rs_ctx.last_error_msg();
2951 isl_rs_ctx.reset_error();
2952 return Err(LibISLError::new(err, err_msg));
2953 }
2954 Ok(isl_rs_result)
2955 }
2956
2957 pub fn wrap(self) -> Result<UnionSet, LibISLError> {
2959 let umap = self;
2960 let isl_rs_ctx = umap.get_ctx();
2961 let mut umap = umap;
2962 umap.do_not_free_on_drop();
2963 let umap = umap.ptr;
2964 let isl_rs_result = unsafe { isl_union_map_wrap(umap) };
2965 let isl_rs_result = UnionSet { ptr: isl_rs_result,
2966 should_free_on_drop: true };
2967 let err = isl_rs_ctx.last_error();
2968 if err != Error::None_ {
2969 let err_msg = isl_rs_ctx.last_error_msg();
2970 isl_rs_ctx.reset_error();
2971 return Err(LibISLError::new(err, err_msg));
2972 }
2973 Ok(isl_rs_result)
2974 }
2975
2976 pub fn zip(self) -> Result<UnionMap, LibISLError> {
2978 let umap = self;
2979 let isl_rs_ctx = umap.get_ctx();
2980 let mut umap = umap;
2981 umap.do_not_free_on_drop();
2982 let umap = umap.ptr;
2983 let isl_rs_result = unsafe { isl_union_map_zip(umap) };
2984 let isl_rs_result = UnionMap { ptr: isl_rs_result,
2985 should_free_on_drop: true };
2986 let err = isl_rs_ctx.last_error();
2987 if err != Error::None_ {
2988 let err_msg = isl_rs_ctx.last_error_msg();
2989 isl_rs_ctx.reset_error();
2990 return Err(LibISLError::new(err, err_msg));
2991 }
2992 Ok(isl_rs_result)
2993 }
2994
2995 pub fn do_not_free_on_drop(&mut self) {
2998 self.should_free_on_drop = false;
2999 }
3000}
3001
3002impl Drop for UnionMap {
3003 fn drop(&mut self) {
3004 if self.should_free_on_drop {
3005 unsafe {
3006 isl_union_map_free(self.ptr);
3007 }
3008 }
3009 }
3010}