1use super::{
5 Aff, Context, DimType, Error, LibISLError, MultiAff, MultiUnionPwAff, MultiVal, PwMultiAff,
6 PwMultiAffList, Set, Space, UnionMap, UnionPwAff, UnionPwMultiAffList, UnionSet, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct UnionPwMultiAff {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_union_pw_multi_aff_add(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
21
22 fn isl_union_pw_multi_aff_add_pw_multi_aff(upma: uintptr_t, pma: uintptr_t) -> uintptr_t;
23
24 fn isl_union_pw_multi_aff_align_params(upma: uintptr_t, model: uintptr_t) -> uintptr_t;
25
26 fn isl_union_pw_multi_aff_apply_union_pw_multi_aff(upma1: uintptr_t, upma2: uintptr_t)
27 -> uintptr_t;
28
29 fn isl_union_pw_multi_aff_as_multi_union_pw_aff(upma: uintptr_t) -> uintptr_t;
30
31 fn isl_union_pw_multi_aff_as_pw_multi_aff(upma: uintptr_t) -> uintptr_t;
32
33 fn isl_union_pw_multi_aff_as_union_map(upma: uintptr_t) -> uintptr_t;
34
35 fn isl_union_pw_multi_aff_coalesce(upma: uintptr_t) -> uintptr_t;
36
37 fn isl_union_pw_multi_aff_copy(upma: uintptr_t) -> uintptr_t;
38
39 fn isl_union_pw_multi_aff_dim(upma: uintptr_t, type_: i32) -> i32;
40
41 fn isl_union_pw_multi_aff_domain(upma: uintptr_t) -> uintptr_t;
42
43 fn isl_union_pw_multi_aff_drop_dims(upma: uintptr_t, type_: i32, first: u32, n: u32)
44 -> uintptr_t;
45
46 fn isl_union_pw_multi_aff_drop_unused_params(upma: uintptr_t) -> uintptr_t;
47
48 fn isl_union_pw_multi_aff_dump(upma: uintptr_t) -> ();
49
50 fn isl_union_pw_multi_aff_empty(space: uintptr_t) -> uintptr_t;
51
52 fn isl_union_pw_multi_aff_empty_ctx(ctx: uintptr_t) -> uintptr_t;
53
54 fn isl_union_pw_multi_aff_empty_space(space: uintptr_t) -> uintptr_t;
55
56 fn isl_union_pw_multi_aff_extract_pw_multi_aff(upma: uintptr_t, space: uintptr_t) -> uintptr_t;
57
58 fn isl_union_pw_multi_aff_find_dim_by_name(upma: uintptr_t, type_: i32, name: *const c_char)
59 -> i32;
60
61 fn isl_union_pw_multi_aff_flat_range_product(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
62
63 fn isl_union_pw_multi_aff_free(upma: uintptr_t) -> uintptr_t;
64
65 fn isl_union_pw_multi_aff_from_aff(aff: uintptr_t) -> uintptr_t;
66
67 fn isl_union_pw_multi_aff_from_domain(uset: uintptr_t) -> uintptr_t;
68
69 fn isl_union_pw_multi_aff_from_multi_aff(ma: uintptr_t) -> uintptr_t;
70
71 fn isl_union_pw_multi_aff_from_multi_union_pw_aff(mupa: uintptr_t) -> uintptr_t;
72
73 fn isl_union_pw_multi_aff_from_pw_multi_aff(pma: uintptr_t) -> uintptr_t;
74
75 fn isl_union_pw_multi_aff_from_union_map(umap: uintptr_t) -> uintptr_t;
76
77 fn isl_union_pw_multi_aff_from_union_pw_aff(upa: uintptr_t) -> uintptr_t;
78
79 fn isl_union_pw_multi_aff_from_union_set(uset: uintptr_t) -> uintptr_t;
80
81 fn isl_union_pw_multi_aff_get_ctx(upma: uintptr_t) -> uintptr_t;
82
83 fn isl_union_pw_multi_aff_get_pw_multi_aff_list(upma: uintptr_t) -> uintptr_t;
84
85 fn isl_union_pw_multi_aff_get_space(upma: uintptr_t) -> uintptr_t;
86
87 fn isl_union_pw_multi_aff_get_union_pw_aff(upma: uintptr_t, pos: i32) -> uintptr_t;
88
89 fn isl_union_pw_multi_aff_gist(upma: uintptr_t, context: uintptr_t) -> uintptr_t;
90
91 fn isl_union_pw_multi_aff_gist_params(upma: uintptr_t, context: uintptr_t) -> uintptr_t;
92
93 fn isl_union_pw_multi_aff_intersect_domain(upma: uintptr_t, uset: uintptr_t) -> uintptr_t;
94
95 fn isl_union_pw_multi_aff_intersect_domain_space(upma: uintptr_t, space: uintptr_t)
96 -> uintptr_t;
97
98 fn isl_union_pw_multi_aff_intersect_domain_union_set(upma: uintptr_t, uset: uintptr_t)
99 -> uintptr_t;
100
101 fn isl_union_pw_multi_aff_intersect_domain_wrapped_domain(upma: uintptr_t, uset: uintptr_t)
102 -> uintptr_t;
103
104 fn isl_union_pw_multi_aff_intersect_domain_wrapped_range(upma: uintptr_t, uset: uintptr_t)
105 -> uintptr_t;
106
107 fn isl_union_pw_multi_aff_intersect_params(upma: uintptr_t, set: uintptr_t) -> uintptr_t;
108
109 fn isl_union_pw_multi_aff_involves_locals(upma: uintptr_t) -> i32;
110
111 fn isl_union_pw_multi_aff_involves_nan(upma: uintptr_t) -> i32;
112
113 fn isl_union_pw_multi_aff_isa_pw_multi_aff(upma: uintptr_t) -> i32;
114
115 fn isl_union_pw_multi_aff_multi_val_on_domain(domain: uintptr_t, mv: uintptr_t) -> uintptr_t;
116
117 fn isl_union_pw_multi_aff_n_pw_multi_aff(upma: uintptr_t) -> i32;
118
119 fn isl_union_pw_multi_aff_neg(upma: uintptr_t) -> uintptr_t;
120
121 fn isl_union_pw_multi_aff_plain_is_empty(upma: uintptr_t) -> i32;
122
123 fn isl_union_pw_multi_aff_plain_is_equal(upma1: uintptr_t, upma2: uintptr_t) -> i32;
124
125 fn isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(upma1: uintptr_t,
126 upma2: uintptr_t)
127 -> uintptr_t;
128
129 fn isl_union_pw_multi_aff_pullback_union_pw_multi_aff(upma1: uintptr_t, upma2: uintptr_t)
130 -> uintptr_t;
131
132 fn isl_union_pw_multi_aff_range_factor_domain(upma: uintptr_t) -> uintptr_t;
133
134 fn isl_union_pw_multi_aff_range_factor_range(upma: uintptr_t) -> uintptr_t;
135
136 fn isl_union_pw_multi_aff_range_product(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
137
138 fn isl_union_pw_multi_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
139
140 fn isl_union_pw_multi_aff_reset_user(upma: uintptr_t) -> uintptr_t;
141
142 fn isl_union_pw_multi_aff_scale_down_val(upma: uintptr_t, val: uintptr_t) -> uintptr_t;
143
144 fn isl_union_pw_multi_aff_scale_multi_val(upma: uintptr_t, mv: uintptr_t) -> uintptr_t;
145
146 fn isl_union_pw_multi_aff_scale_val(upma: uintptr_t, val: uintptr_t) -> uintptr_t;
147
148 fn isl_union_pw_multi_aff_set_dim_name(upma: uintptr_t, type_: i32, pos: u32, s: *const c_char)
149 -> uintptr_t;
150
151 fn isl_union_pw_multi_aff_sub(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
152
153 fn isl_union_pw_multi_aff_subtract_domain(upma: uintptr_t, uset: uintptr_t) -> uintptr_t;
154
155 fn isl_union_pw_multi_aff_subtract_domain_space(upma: uintptr_t, space: uintptr_t)
156 -> uintptr_t;
157
158 fn isl_union_pw_multi_aff_subtract_domain_union_set(upma: uintptr_t, uset: uintptr_t)
159 -> uintptr_t;
160
161 fn isl_union_pw_multi_aff_to_list(el: uintptr_t) -> uintptr_t;
162
163 fn isl_union_pw_multi_aff_to_str(upma: uintptr_t) -> *const c_char;
164
165 fn isl_union_pw_multi_aff_union_add(upma1: uintptr_t, upma2: uintptr_t) -> uintptr_t;
166
167}
168
169impl UnionPwMultiAff {
170 pub fn add(self, upma2: UnionPwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
172 let upma1 = self;
173 let isl_rs_ctx = upma1.get_ctx();
174 let mut upma1 = upma1;
175 upma1.do_not_free_on_drop();
176 let upma1 = upma1.ptr;
177 let mut upma2 = upma2;
178 upma2.do_not_free_on_drop();
179 let upma2 = upma2.ptr;
180 let isl_rs_result = unsafe { isl_union_pw_multi_aff_add(upma1, upma2) };
181 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
182 should_free_on_drop: true };
183 let err = isl_rs_ctx.last_error();
184 if err != Error::None_ {
185 let err_msg = isl_rs_ctx.last_error_msg();
186 isl_rs_ctx.reset_error();
187 return Err(LibISLError::new(err, err_msg));
188 }
189 Ok(isl_rs_result)
190 }
191
192 pub fn add_pw_multi_aff(self, pma: PwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
194 let upma = self;
195 let isl_rs_ctx = upma.get_ctx();
196 let mut upma = upma;
197 upma.do_not_free_on_drop();
198 let upma = upma.ptr;
199 let mut pma = pma;
200 pma.do_not_free_on_drop();
201 let pma = pma.ptr;
202 let isl_rs_result = unsafe { isl_union_pw_multi_aff_add_pw_multi_aff(upma, pma) };
203 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
204 should_free_on_drop: true };
205 let err = isl_rs_ctx.last_error();
206 if err != Error::None_ {
207 let err_msg = isl_rs_ctx.last_error_msg();
208 isl_rs_ctx.reset_error();
209 return Err(LibISLError::new(err, err_msg));
210 }
211 Ok(isl_rs_result)
212 }
213
214 pub fn align_params(self, model: Space) -> Result<UnionPwMultiAff, LibISLError> {
216 let upma = self;
217 let isl_rs_ctx = upma.get_ctx();
218 let mut upma = upma;
219 upma.do_not_free_on_drop();
220 let upma = upma.ptr;
221 let mut model = model;
222 model.do_not_free_on_drop();
223 let model = model.ptr;
224 let isl_rs_result = unsafe { isl_union_pw_multi_aff_align_params(upma, model) };
225 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
226 should_free_on_drop: true };
227 let err = isl_rs_ctx.last_error();
228 if err != Error::None_ {
229 let err_msg = isl_rs_ctx.last_error_msg();
230 isl_rs_ctx.reset_error();
231 return Err(LibISLError::new(err, err_msg));
232 }
233 Ok(isl_rs_result)
234 }
235
236 pub fn apply_union_pw_multi_aff(self, upma2: UnionPwMultiAff)
238 -> Result<UnionPwMultiAff, LibISLError> {
239 let upma1 = self;
240 let isl_rs_ctx = upma1.get_ctx();
241 let mut upma1 = upma1;
242 upma1.do_not_free_on_drop();
243 let upma1 = upma1.ptr;
244 let mut upma2 = upma2;
245 upma2.do_not_free_on_drop();
246 let upma2 = upma2.ptr;
247 let isl_rs_result =
248 unsafe { isl_union_pw_multi_aff_apply_union_pw_multi_aff(upma1, upma2) };
249 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
250 should_free_on_drop: true };
251 let err = isl_rs_ctx.last_error();
252 if err != Error::None_ {
253 let err_msg = isl_rs_ctx.last_error_msg();
254 isl_rs_ctx.reset_error();
255 return Err(LibISLError::new(err, err_msg));
256 }
257 Ok(isl_rs_result)
258 }
259
260 pub fn as_multi_union_pw_aff(self) -> Result<MultiUnionPwAff, LibISLError> {
262 let upma = self;
263 let isl_rs_ctx = upma.get_ctx();
264 let mut upma = upma;
265 upma.do_not_free_on_drop();
266 let upma = upma.ptr;
267 let isl_rs_result = unsafe { isl_union_pw_multi_aff_as_multi_union_pw_aff(upma) };
268 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
269 should_free_on_drop: true };
270 let err = isl_rs_ctx.last_error();
271 if err != Error::None_ {
272 let err_msg = isl_rs_ctx.last_error_msg();
273 isl_rs_ctx.reset_error();
274 return Err(LibISLError::new(err, err_msg));
275 }
276 Ok(isl_rs_result)
277 }
278
279 pub fn as_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
281 let upma = self;
282 let isl_rs_ctx = upma.get_ctx();
283 let mut upma = upma;
284 upma.do_not_free_on_drop();
285 let upma = upma.ptr;
286 let isl_rs_result = unsafe { isl_union_pw_multi_aff_as_pw_multi_aff(upma) };
287 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
288 should_free_on_drop: true };
289 let err = isl_rs_ctx.last_error();
290 if err != Error::None_ {
291 let err_msg = isl_rs_ctx.last_error_msg();
292 isl_rs_ctx.reset_error();
293 return Err(LibISLError::new(err, err_msg));
294 }
295 Ok(isl_rs_result)
296 }
297
298 pub fn as_union_map(self) -> Result<UnionMap, LibISLError> {
300 let upma = self;
301 let isl_rs_ctx = upma.get_ctx();
302 let mut upma = upma;
303 upma.do_not_free_on_drop();
304 let upma = upma.ptr;
305 let isl_rs_result = unsafe { isl_union_pw_multi_aff_as_union_map(upma) };
306 let isl_rs_result = UnionMap { ptr: isl_rs_result,
307 should_free_on_drop: true };
308 let err = isl_rs_ctx.last_error();
309 if err != Error::None_ {
310 let err_msg = isl_rs_ctx.last_error_msg();
311 isl_rs_ctx.reset_error();
312 return Err(LibISLError::new(err, err_msg));
313 }
314 Ok(isl_rs_result)
315 }
316
317 pub fn coalesce(self) -> Result<UnionPwMultiAff, LibISLError> {
319 let upma = self;
320 let isl_rs_ctx = upma.get_ctx();
321 let mut upma = upma;
322 upma.do_not_free_on_drop();
323 let upma = upma.ptr;
324 let isl_rs_result = unsafe { isl_union_pw_multi_aff_coalesce(upma) };
325 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
326 should_free_on_drop: true };
327 let err = isl_rs_ctx.last_error();
328 if err != Error::None_ {
329 let err_msg = isl_rs_ctx.last_error_msg();
330 isl_rs_ctx.reset_error();
331 return Err(LibISLError::new(err, err_msg));
332 }
333 Ok(isl_rs_result)
334 }
335
336 pub fn copy(&self) -> Result<UnionPwMultiAff, LibISLError> {
338 let upma = self;
339 let isl_rs_ctx = upma.get_ctx();
340 let upma = upma.ptr;
341 let isl_rs_result = unsafe { isl_union_pw_multi_aff_copy(upma) };
342 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
343 should_free_on_drop: true };
344 let err = isl_rs_ctx.last_error();
345 if err != Error::None_ {
346 let err_msg = isl_rs_ctx.last_error_msg();
347 isl_rs_ctx.reset_error();
348 return Err(LibISLError::new(err, err_msg));
349 }
350 Ok(isl_rs_result)
351 }
352
353 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
355 let upma = self;
356 let isl_rs_ctx = upma.get_ctx();
357 let upma = upma.ptr;
358 let type_ = type_.to_i32();
359 let isl_rs_result = unsafe { isl_union_pw_multi_aff_dim(upma, type_) };
360 let err = isl_rs_ctx.last_error();
361 if err != Error::None_ {
362 let err_msg = isl_rs_ctx.last_error_msg();
363 isl_rs_ctx.reset_error();
364 return Err(LibISLError::new(err, err_msg));
365 }
366 Ok(isl_rs_result)
367 }
368
369 pub fn domain(self) -> Result<UnionSet, LibISLError> {
371 let upma = self;
372 let isl_rs_ctx = upma.get_ctx();
373 let mut upma = upma;
374 upma.do_not_free_on_drop();
375 let upma = upma.ptr;
376 let isl_rs_result = unsafe { isl_union_pw_multi_aff_domain(upma) };
377 let isl_rs_result = UnionSet { ptr: isl_rs_result,
378 should_free_on_drop: true };
379 let err = isl_rs_ctx.last_error();
380 if err != Error::None_ {
381 let err_msg = isl_rs_ctx.last_error_msg();
382 isl_rs_ctx.reset_error();
383 return Err(LibISLError::new(err, err_msg));
384 }
385 Ok(isl_rs_result)
386 }
387
388 pub fn drop_dims(self, type_: DimType, first: u32, n: u32)
390 -> Result<UnionPwMultiAff, LibISLError> {
391 let upma = self;
392 let isl_rs_ctx = upma.get_ctx();
393 let mut upma = upma;
394 upma.do_not_free_on_drop();
395 let upma = upma.ptr;
396 let type_ = type_.to_i32();
397 let isl_rs_result = unsafe { isl_union_pw_multi_aff_drop_dims(upma, type_, first, n) };
398 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
399 should_free_on_drop: true };
400 let err = isl_rs_ctx.last_error();
401 if err != Error::None_ {
402 let err_msg = isl_rs_ctx.last_error_msg();
403 isl_rs_ctx.reset_error();
404 return Err(LibISLError::new(err, err_msg));
405 }
406 Ok(isl_rs_result)
407 }
408
409 pub fn drop_unused_params(self) -> Result<UnionPwMultiAff, LibISLError> {
411 let upma = self;
412 let isl_rs_ctx = upma.get_ctx();
413 let mut upma = upma;
414 upma.do_not_free_on_drop();
415 let upma = upma.ptr;
416 let isl_rs_result = unsafe { isl_union_pw_multi_aff_drop_unused_params(upma) };
417 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
418 should_free_on_drop: true };
419 let err = isl_rs_ctx.last_error();
420 if err != Error::None_ {
421 let err_msg = isl_rs_ctx.last_error_msg();
422 isl_rs_ctx.reset_error();
423 return Err(LibISLError::new(err, err_msg));
424 }
425 Ok(isl_rs_result)
426 }
427
428 pub fn dump(&self) -> Result<(), LibISLError> {
430 let upma = self;
431 let isl_rs_ctx = upma.get_ctx();
432 let upma = upma.ptr;
433 let isl_rs_result = unsafe { isl_union_pw_multi_aff_dump(upma) };
434 let err = isl_rs_ctx.last_error();
435 if err != Error::None_ {
436 let err_msg = isl_rs_ctx.last_error_msg();
437 isl_rs_ctx.reset_error();
438 return Err(LibISLError::new(err, err_msg));
439 }
440 Ok(isl_rs_result)
441 }
442
443 pub fn empty(space: Space) -> Result<UnionPwMultiAff, LibISLError> {
445 let isl_rs_ctx = space.get_ctx();
446 let mut space = space;
447 space.do_not_free_on_drop();
448 let space = space.ptr;
449 let isl_rs_result = unsafe { isl_union_pw_multi_aff_empty(space) };
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 empty_ctx(ctx: &Context) -> Result<UnionPwMultiAff, LibISLError> {
463 let isl_rs_ctx = Context { ptr: ctx.ptr,
464 should_free_on_drop: false };
465 let ctx = ctx.ptr;
466 let isl_rs_result = unsafe { isl_union_pw_multi_aff_empty_ctx(ctx) };
467 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
468 should_free_on_drop: true };
469 let err = isl_rs_ctx.last_error();
470 if err != Error::None_ {
471 let err_msg = isl_rs_ctx.last_error_msg();
472 isl_rs_ctx.reset_error();
473 return Err(LibISLError::new(err, err_msg));
474 }
475 Ok(isl_rs_result)
476 }
477
478 pub fn empty_space(space: Space) -> Result<UnionPwMultiAff, LibISLError> {
480 let isl_rs_ctx = space.get_ctx();
481 let mut space = space;
482 space.do_not_free_on_drop();
483 let space = space.ptr;
484 let isl_rs_result = unsafe { isl_union_pw_multi_aff_empty_space(space) };
485 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
486 should_free_on_drop: true };
487 let err = isl_rs_ctx.last_error();
488 if err != Error::None_ {
489 let err_msg = isl_rs_ctx.last_error_msg();
490 isl_rs_ctx.reset_error();
491 return Err(LibISLError::new(err, err_msg));
492 }
493 Ok(isl_rs_result)
494 }
495
496 pub fn extract_pw_multi_aff(&self, space: Space) -> Result<PwMultiAff, LibISLError> {
498 let upma = self;
499 let isl_rs_ctx = upma.get_ctx();
500 let upma = upma.ptr;
501 let mut space = space;
502 space.do_not_free_on_drop();
503 let space = space.ptr;
504 let isl_rs_result = unsafe { isl_union_pw_multi_aff_extract_pw_multi_aff(upma, space) };
505 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
506 should_free_on_drop: true };
507 let err = isl_rs_ctx.last_error();
508 if err != Error::None_ {
509 let err_msg = isl_rs_ctx.last_error_msg();
510 isl_rs_ctx.reset_error();
511 return Err(LibISLError::new(err, err_msg));
512 }
513 Ok(isl_rs_result)
514 }
515
516 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
518 let upma = self;
519 let isl_rs_ctx = upma.get_ctx();
520 let upma = upma.ptr;
521 let type_ = type_.to_i32();
522 let name = CString::new(name).unwrap();
523 let name = name.as_ptr();
524 let isl_rs_result = unsafe { isl_union_pw_multi_aff_find_dim_by_name(upma, type_, name) };
525 let err = isl_rs_ctx.last_error();
526 if err != Error::None_ {
527 let err_msg = isl_rs_ctx.last_error_msg();
528 isl_rs_ctx.reset_error();
529 return Err(LibISLError::new(err, err_msg));
530 }
531 Ok(isl_rs_result)
532 }
533
534 pub fn flat_range_product(self, upma2: UnionPwMultiAff)
536 -> Result<UnionPwMultiAff, LibISLError> {
537 let upma1 = self;
538 let isl_rs_ctx = upma1.get_ctx();
539 let mut upma1 = upma1;
540 upma1.do_not_free_on_drop();
541 let upma1 = upma1.ptr;
542 let mut upma2 = upma2;
543 upma2.do_not_free_on_drop();
544 let upma2 = upma2.ptr;
545 let isl_rs_result = unsafe { isl_union_pw_multi_aff_flat_range_product(upma1, upma2) };
546 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
547 should_free_on_drop: true };
548 let err = isl_rs_ctx.last_error();
549 if err != Error::None_ {
550 let err_msg = isl_rs_ctx.last_error_msg();
551 isl_rs_ctx.reset_error();
552 return Err(LibISLError::new(err, err_msg));
553 }
554 Ok(isl_rs_result)
555 }
556
557 pub fn free(self) -> Result<UnionPwMultiAff, LibISLError> {
559 let upma = self;
560 let isl_rs_ctx = upma.get_ctx();
561 let mut upma = upma;
562 upma.do_not_free_on_drop();
563 let upma = upma.ptr;
564 let isl_rs_result = unsafe { isl_union_pw_multi_aff_free(upma) };
565 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
566 should_free_on_drop: true };
567 let err = isl_rs_ctx.last_error();
568 if err != Error::None_ {
569 let err_msg = isl_rs_ctx.last_error_msg();
570 isl_rs_ctx.reset_error();
571 return Err(LibISLError::new(err, err_msg));
572 }
573 Ok(isl_rs_result)
574 }
575
576 pub fn from_aff(aff: Aff) -> Result<UnionPwMultiAff, LibISLError> {
578 let isl_rs_ctx = aff.get_ctx();
579 let mut aff = aff;
580 aff.do_not_free_on_drop();
581 let aff = aff.ptr;
582 let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_aff(aff) };
583 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
584 should_free_on_drop: true };
585 let err = isl_rs_ctx.last_error();
586 if err != Error::None_ {
587 let err_msg = isl_rs_ctx.last_error_msg();
588 isl_rs_ctx.reset_error();
589 return Err(LibISLError::new(err, err_msg));
590 }
591 Ok(isl_rs_result)
592 }
593
594 pub fn from_domain(uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
596 let isl_rs_ctx = uset.get_ctx();
597 let mut uset = uset;
598 uset.do_not_free_on_drop();
599 let uset = uset.ptr;
600 let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_domain(uset) };
601 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
602 should_free_on_drop: true };
603 let err = isl_rs_ctx.last_error();
604 if err != Error::None_ {
605 let err_msg = isl_rs_ctx.last_error_msg();
606 isl_rs_ctx.reset_error();
607 return Err(LibISLError::new(err, err_msg));
608 }
609 Ok(isl_rs_result)
610 }
611
612 pub fn from_multi_aff(ma: MultiAff) -> Result<UnionPwMultiAff, LibISLError> {
614 let isl_rs_ctx = ma.get_ctx();
615 let mut ma = ma;
616 ma.do_not_free_on_drop();
617 let ma = ma.ptr;
618 let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_multi_aff(ma) };
619 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
620 should_free_on_drop: true };
621 let err = isl_rs_ctx.last_error();
622 if err != Error::None_ {
623 let err_msg = isl_rs_ctx.last_error_msg();
624 isl_rs_ctx.reset_error();
625 return Err(LibISLError::new(err, err_msg));
626 }
627 Ok(isl_rs_result)
628 }
629
630 pub fn from_multi_union_pw_aff(mupa: MultiUnionPwAff) -> Result<UnionPwMultiAff, LibISLError> {
632 let isl_rs_ctx = mupa.get_ctx();
633 let mut mupa = mupa;
634 mupa.do_not_free_on_drop();
635 let mupa = mupa.ptr;
636 let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_multi_union_pw_aff(mupa) };
637 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
638 should_free_on_drop: true };
639 let err = isl_rs_ctx.last_error();
640 if err != Error::None_ {
641 let err_msg = isl_rs_ctx.last_error_msg();
642 isl_rs_ctx.reset_error();
643 return Err(LibISLError::new(err, err_msg));
644 }
645 Ok(isl_rs_result)
646 }
647
648 pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
650 let isl_rs_ctx = pma.get_ctx();
651 let mut pma = pma;
652 pma.do_not_free_on_drop();
653 let pma = pma.ptr;
654 let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_pw_multi_aff(pma) };
655 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
656 should_free_on_drop: true };
657 let err = isl_rs_ctx.last_error();
658 if err != Error::None_ {
659 let err_msg = isl_rs_ctx.last_error_msg();
660 isl_rs_ctx.reset_error();
661 return Err(LibISLError::new(err, err_msg));
662 }
663 Ok(isl_rs_result)
664 }
665
666 pub fn from_union_map(umap: UnionMap) -> Result<UnionPwMultiAff, LibISLError> {
668 let isl_rs_ctx = umap.get_ctx();
669 let mut umap = umap;
670 umap.do_not_free_on_drop();
671 let umap = umap.ptr;
672 let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_union_map(umap) };
673 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
674 should_free_on_drop: true };
675 let err = isl_rs_ctx.last_error();
676 if err != Error::None_ {
677 let err_msg = isl_rs_ctx.last_error_msg();
678 isl_rs_ctx.reset_error();
679 return Err(LibISLError::new(err, err_msg));
680 }
681 Ok(isl_rs_result)
682 }
683
684 pub fn from_union_pw_aff(upa: UnionPwAff) -> Result<UnionPwMultiAff, LibISLError> {
686 let isl_rs_ctx = upa.get_ctx();
687 let mut upa = upa;
688 upa.do_not_free_on_drop();
689 let upa = upa.ptr;
690 let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_union_pw_aff(upa) };
691 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
692 should_free_on_drop: true };
693 let err = isl_rs_ctx.last_error();
694 if err != Error::None_ {
695 let err_msg = isl_rs_ctx.last_error_msg();
696 isl_rs_ctx.reset_error();
697 return Err(LibISLError::new(err, err_msg));
698 }
699 Ok(isl_rs_result)
700 }
701
702 pub fn from_union_set(uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
704 let isl_rs_ctx = uset.get_ctx();
705 let mut uset = uset;
706 uset.do_not_free_on_drop();
707 let uset = uset.ptr;
708 let isl_rs_result = unsafe { isl_union_pw_multi_aff_from_union_set(uset) };
709 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
710 should_free_on_drop: true };
711 let err = isl_rs_ctx.last_error();
712 if err != Error::None_ {
713 let err_msg = isl_rs_ctx.last_error_msg();
714 isl_rs_ctx.reset_error();
715 return Err(LibISLError::new(err, err_msg));
716 }
717 Ok(isl_rs_result)
718 }
719
720 pub fn get_ctx(&self) -> Context {
722 let upma = self;
723 let upma = upma.ptr;
724 let isl_rs_result = unsafe { isl_union_pw_multi_aff_get_ctx(upma) };
725 let isl_rs_result = Context { ptr: isl_rs_result,
726 should_free_on_drop: false };
727 isl_rs_result
728 }
729
730 pub fn get_pw_multi_aff_list(&self) -> Result<PwMultiAffList, LibISLError> {
732 let upma = self;
733 let isl_rs_ctx = upma.get_ctx();
734 let upma = upma.ptr;
735 let isl_rs_result = unsafe { isl_union_pw_multi_aff_get_pw_multi_aff_list(upma) };
736 let isl_rs_result = PwMultiAffList { ptr: isl_rs_result,
737 should_free_on_drop: true };
738 let err = isl_rs_ctx.last_error();
739 if err != Error::None_ {
740 let err_msg = isl_rs_ctx.last_error_msg();
741 isl_rs_ctx.reset_error();
742 return Err(LibISLError::new(err, err_msg));
743 }
744 Ok(isl_rs_result)
745 }
746
747 pub fn get_space(&self) -> Result<Space, LibISLError> {
749 let upma = self;
750 let isl_rs_ctx = upma.get_ctx();
751 let upma = upma.ptr;
752 let isl_rs_result = unsafe { isl_union_pw_multi_aff_get_space(upma) };
753 let isl_rs_result = Space { ptr: isl_rs_result,
754 should_free_on_drop: true };
755 let err = isl_rs_ctx.last_error();
756 if err != Error::None_ {
757 let err_msg = isl_rs_ctx.last_error_msg();
758 isl_rs_ctx.reset_error();
759 return Err(LibISLError::new(err, err_msg));
760 }
761 Ok(isl_rs_result)
762 }
763
764 pub fn get_union_pw_aff(&self, pos: i32) -> Result<UnionPwAff, LibISLError> {
766 let upma = self;
767 let isl_rs_ctx = upma.get_ctx();
768 let upma = upma.ptr;
769 let isl_rs_result = unsafe { isl_union_pw_multi_aff_get_union_pw_aff(upma, pos) };
770 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
771 should_free_on_drop: true };
772 let err = isl_rs_ctx.last_error();
773 if err != Error::None_ {
774 let err_msg = isl_rs_ctx.last_error_msg();
775 isl_rs_ctx.reset_error();
776 return Err(LibISLError::new(err, err_msg));
777 }
778 Ok(isl_rs_result)
779 }
780
781 pub fn gist(self, context: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
783 let upma = self;
784 let isl_rs_ctx = upma.get_ctx();
785 let mut upma = upma;
786 upma.do_not_free_on_drop();
787 let upma = upma.ptr;
788 let mut context = context;
789 context.do_not_free_on_drop();
790 let context = context.ptr;
791 let isl_rs_result = unsafe { isl_union_pw_multi_aff_gist(upma, context) };
792 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
793 should_free_on_drop: true };
794 let err = isl_rs_ctx.last_error();
795 if err != Error::None_ {
796 let err_msg = isl_rs_ctx.last_error_msg();
797 isl_rs_ctx.reset_error();
798 return Err(LibISLError::new(err, err_msg));
799 }
800 Ok(isl_rs_result)
801 }
802
803 pub fn gist_params(self, context: Set) -> Result<UnionPwMultiAff, LibISLError> {
805 let upma = self;
806 let isl_rs_ctx = upma.get_ctx();
807 let mut upma = upma;
808 upma.do_not_free_on_drop();
809 let upma = upma.ptr;
810 let mut context = context;
811 context.do_not_free_on_drop();
812 let context = context.ptr;
813 let isl_rs_result = unsafe { isl_union_pw_multi_aff_gist_params(upma, context) };
814 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
815 should_free_on_drop: true };
816 let err = isl_rs_ctx.last_error();
817 if err != Error::None_ {
818 let err_msg = isl_rs_ctx.last_error_msg();
819 isl_rs_ctx.reset_error();
820 return Err(LibISLError::new(err, err_msg));
821 }
822 Ok(isl_rs_result)
823 }
824
825 pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
827 let upma = self;
828 let isl_rs_ctx = upma.get_ctx();
829 let mut upma = upma;
830 upma.do_not_free_on_drop();
831 let upma = upma.ptr;
832 let mut uset = uset;
833 uset.do_not_free_on_drop();
834 let uset = uset.ptr;
835 let isl_rs_result = unsafe { isl_union_pw_multi_aff_intersect_domain(upma, uset) };
836 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
837 should_free_on_drop: true };
838 let err = isl_rs_ctx.last_error();
839 if err != Error::None_ {
840 let err_msg = isl_rs_ctx.last_error_msg();
841 isl_rs_ctx.reset_error();
842 return Err(LibISLError::new(err, err_msg));
843 }
844 Ok(isl_rs_result)
845 }
846
847 pub fn intersect_domain_space(self, space: Space) -> Result<UnionPwMultiAff, LibISLError> {
849 let upma = self;
850 let isl_rs_ctx = upma.get_ctx();
851 let mut upma = upma;
852 upma.do_not_free_on_drop();
853 let upma = upma.ptr;
854 let mut space = space;
855 space.do_not_free_on_drop();
856 let space = space.ptr;
857 let isl_rs_result = unsafe { isl_union_pw_multi_aff_intersect_domain_space(upma, space) };
858 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
859 should_free_on_drop: true };
860 let err = isl_rs_ctx.last_error();
861 if err != Error::None_ {
862 let err_msg = isl_rs_ctx.last_error_msg();
863 isl_rs_ctx.reset_error();
864 return Err(LibISLError::new(err, err_msg));
865 }
866 Ok(isl_rs_result)
867 }
868
869 pub fn intersect_domain_union_set(self, uset: UnionSet)
871 -> Result<UnionPwMultiAff, LibISLError> {
872 let upma = self;
873 let isl_rs_ctx = upma.get_ctx();
874 let mut upma = upma;
875 upma.do_not_free_on_drop();
876 let upma = upma.ptr;
877 let mut uset = uset;
878 uset.do_not_free_on_drop();
879 let uset = uset.ptr;
880 let isl_rs_result =
881 unsafe { isl_union_pw_multi_aff_intersect_domain_union_set(upma, uset) };
882 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
883 should_free_on_drop: true };
884 let err = isl_rs_ctx.last_error();
885 if err != Error::None_ {
886 let err_msg = isl_rs_ctx.last_error_msg();
887 isl_rs_ctx.reset_error();
888 return Err(LibISLError::new(err, err_msg));
889 }
890 Ok(isl_rs_result)
891 }
892
893 pub fn intersect_domain_wrapped_domain(self, uset: UnionSet)
895 -> Result<UnionPwMultiAff, LibISLError> {
896 let upma = self;
897 let isl_rs_ctx = upma.get_ctx();
898 let mut upma = upma;
899 upma.do_not_free_on_drop();
900 let upma = upma.ptr;
901 let mut uset = uset;
902 uset.do_not_free_on_drop();
903 let uset = uset.ptr;
904 let isl_rs_result =
905 unsafe { isl_union_pw_multi_aff_intersect_domain_wrapped_domain(upma, uset) };
906 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
907 should_free_on_drop: true };
908 let err = isl_rs_ctx.last_error();
909 if err != Error::None_ {
910 let err_msg = isl_rs_ctx.last_error_msg();
911 isl_rs_ctx.reset_error();
912 return Err(LibISLError::new(err, err_msg));
913 }
914 Ok(isl_rs_result)
915 }
916
917 pub fn intersect_domain_wrapped_range(self, uset: UnionSet)
919 -> Result<UnionPwMultiAff, LibISLError> {
920 let upma = self;
921 let isl_rs_ctx = upma.get_ctx();
922 let mut upma = upma;
923 upma.do_not_free_on_drop();
924 let upma = upma.ptr;
925 let mut uset = uset;
926 uset.do_not_free_on_drop();
927 let uset = uset.ptr;
928 let isl_rs_result =
929 unsafe { isl_union_pw_multi_aff_intersect_domain_wrapped_range(upma, uset) };
930 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
931 should_free_on_drop: true };
932 let err = isl_rs_ctx.last_error();
933 if err != Error::None_ {
934 let err_msg = isl_rs_ctx.last_error_msg();
935 isl_rs_ctx.reset_error();
936 return Err(LibISLError::new(err, err_msg));
937 }
938 Ok(isl_rs_result)
939 }
940
941 pub fn intersect_params(self, set: Set) -> Result<UnionPwMultiAff, LibISLError> {
943 let upma = self;
944 let isl_rs_ctx = upma.get_ctx();
945 let mut upma = upma;
946 upma.do_not_free_on_drop();
947 let upma = upma.ptr;
948 let mut set = set;
949 set.do_not_free_on_drop();
950 let set = set.ptr;
951 let isl_rs_result = unsafe { isl_union_pw_multi_aff_intersect_params(upma, set) };
952 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
953 should_free_on_drop: true };
954 let err = isl_rs_ctx.last_error();
955 if err != Error::None_ {
956 let err_msg = isl_rs_ctx.last_error_msg();
957 isl_rs_ctx.reset_error();
958 return Err(LibISLError::new(err, err_msg));
959 }
960 Ok(isl_rs_result)
961 }
962
963 pub fn involves_locals(&self) -> Result<bool, LibISLError> {
965 let upma = self;
966 let isl_rs_ctx = upma.get_ctx();
967 let upma = upma.ptr;
968 let isl_rs_result = unsafe { isl_union_pw_multi_aff_involves_locals(upma) };
969 let isl_rs_result = match isl_rs_result {
970 0 => false,
971 1 => true,
972 _ => {
973 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
974 }
975 };
976 let err = isl_rs_ctx.last_error();
977 if err != Error::None_ {
978 let err_msg = isl_rs_ctx.last_error_msg();
979 isl_rs_ctx.reset_error();
980 return Err(LibISLError::new(err, err_msg));
981 }
982 Ok(isl_rs_result)
983 }
984
985 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
987 let upma = self;
988 let isl_rs_ctx = upma.get_ctx();
989 let upma = upma.ptr;
990 let isl_rs_result = unsafe { isl_union_pw_multi_aff_involves_nan(upma) };
991 let isl_rs_result = match isl_rs_result {
992 0 => false,
993 1 => true,
994 _ => {
995 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
996 }
997 };
998 let err = isl_rs_ctx.last_error();
999 if err != Error::None_ {
1000 let err_msg = isl_rs_ctx.last_error_msg();
1001 isl_rs_ctx.reset_error();
1002 return Err(LibISLError::new(err, err_msg));
1003 }
1004 Ok(isl_rs_result)
1005 }
1006
1007 pub fn isa_pw_multi_aff(&self) -> Result<bool, LibISLError> {
1009 let upma = self;
1010 let isl_rs_ctx = upma.get_ctx();
1011 let upma = upma.ptr;
1012 let isl_rs_result = unsafe { isl_union_pw_multi_aff_isa_pw_multi_aff(upma) };
1013 let isl_rs_result = match isl_rs_result {
1014 0 => false,
1015 1 => true,
1016 _ => {
1017 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1018 }
1019 };
1020 let err = isl_rs_ctx.last_error();
1021 if err != Error::None_ {
1022 let err_msg = isl_rs_ctx.last_error_msg();
1023 isl_rs_ctx.reset_error();
1024 return Err(LibISLError::new(err, err_msg));
1025 }
1026 Ok(isl_rs_result)
1027 }
1028
1029 pub fn multi_val_on_domain(domain: UnionSet, mv: MultiVal)
1031 -> Result<UnionPwMultiAff, LibISLError> {
1032 let isl_rs_ctx = domain.get_ctx();
1033 let mut domain = domain;
1034 domain.do_not_free_on_drop();
1035 let domain = domain.ptr;
1036 let mut mv = mv;
1037 mv.do_not_free_on_drop();
1038 let mv = mv.ptr;
1039 let isl_rs_result = unsafe { isl_union_pw_multi_aff_multi_val_on_domain(domain, mv) };
1040 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1041 should_free_on_drop: true };
1042 let err = isl_rs_ctx.last_error();
1043 if err != Error::None_ {
1044 let err_msg = isl_rs_ctx.last_error_msg();
1045 isl_rs_ctx.reset_error();
1046 return Err(LibISLError::new(err, err_msg));
1047 }
1048 Ok(isl_rs_result)
1049 }
1050
1051 pub fn n_pw_multi_aff(&self) -> Result<i32, LibISLError> {
1053 let upma = self;
1054 let isl_rs_ctx = upma.get_ctx();
1055 let upma = upma.ptr;
1056 let isl_rs_result = unsafe { isl_union_pw_multi_aff_n_pw_multi_aff(upma) };
1057 let err = isl_rs_ctx.last_error();
1058 if err != Error::None_ {
1059 let err_msg = isl_rs_ctx.last_error_msg();
1060 isl_rs_ctx.reset_error();
1061 return Err(LibISLError::new(err, err_msg));
1062 }
1063 Ok(isl_rs_result)
1064 }
1065
1066 pub fn neg(self) -> Result<UnionPwMultiAff, LibISLError> {
1068 let upma = self;
1069 let isl_rs_ctx = upma.get_ctx();
1070 let mut upma = upma;
1071 upma.do_not_free_on_drop();
1072 let upma = upma.ptr;
1073 let isl_rs_result = unsafe { isl_union_pw_multi_aff_neg(upma) };
1074 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1075 should_free_on_drop: true };
1076 let err = isl_rs_ctx.last_error();
1077 if err != Error::None_ {
1078 let err_msg = isl_rs_ctx.last_error_msg();
1079 isl_rs_ctx.reset_error();
1080 return Err(LibISLError::new(err, err_msg));
1081 }
1082 Ok(isl_rs_result)
1083 }
1084
1085 pub fn plain_is_empty(&self) -> Result<bool, LibISLError> {
1087 let upma = self;
1088 let isl_rs_ctx = upma.get_ctx();
1089 let upma = upma.ptr;
1090 let isl_rs_result = unsafe { isl_union_pw_multi_aff_plain_is_empty(upma) };
1091 let isl_rs_result = match isl_rs_result {
1092 0 => false,
1093 1 => true,
1094 _ => {
1095 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1096 }
1097 };
1098 let err = isl_rs_ctx.last_error();
1099 if err != Error::None_ {
1100 let err_msg = isl_rs_ctx.last_error_msg();
1101 isl_rs_ctx.reset_error();
1102 return Err(LibISLError::new(err, err_msg));
1103 }
1104 Ok(isl_rs_result)
1105 }
1106
1107 pub fn plain_is_equal(&self, upma2: &UnionPwMultiAff) -> Result<bool, LibISLError> {
1109 let upma1 = self;
1110 let isl_rs_ctx = upma1.get_ctx();
1111 let upma1 = upma1.ptr;
1112 let upma2 = upma2.ptr;
1113 let isl_rs_result = unsafe { isl_union_pw_multi_aff_plain_is_equal(upma1, upma2) };
1114 let isl_rs_result = match isl_rs_result {
1115 0 => false,
1116 1 => true,
1117 _ => {
1118 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1119 }
1120 };
1121 let err = isl_rs_ctx.last_error();
1122 if err != Error::None_ {
1123 let err_msg = isl_rs_ctx.last_error_msg();
1124 isl_rs_ctx.reset_error();
1125 return Err(LibISLError::new(err, err_msg));
1126 }
1127 Ok(isl_rs_result)
1128 }
1129
1130 pub fn preimage_domain_wrapped_domain_union_pw_multi_aff(
1132 self, upma2: UnionPwMultiAff)
1133 -> Result<UnionPwMultiAff, LibISLError> {
1134 let upma1 = self;
1135 let isl_rs_ctx = upma1.get_ctx();
1136 let mut upma1 = upma1;
1137 upma1.do_not_free_on_drop();
1138 let upma1 = upma1.ptr;
1139 let mut upma2 = upma2;
1140 upma2.do_not_free_on_drop();
1141 let upma2 = upma2.ptr;
1142 let isl_rs_result = unsafe {
1143 isl_union_pw_multi_aff_preimage_domain_wrapped_domain_union_pw_multi_aff(upma1, upma2)
1144 };
1145 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1146 should_free_on_drop: true };
1147 let err = isl_rs_ctx.last_error();
1148 if err != Error::None_ {
1149 let err_msg = isl_rs_ctx.last_error_msg();
1150 isl_rs_ctx.reset_error();
1151 return Err(LibISLError::new(err, err_msg));
1152 }
1153 Ok(isl_rs_result)
1154 }
1155
1156 pub fn pullback_union_pw_multi_aff(self, upma2: UnionPwMultiAff)
1158 -> Result<UnionPwMultiAff, LibISLError> {
1159 let upma1 = self;
1160 let isl_rs_ctx = upma1.get_ctx();
1161 let mut upma1 = upma1;
1162 upma1.do_not_free_on_drop();
1163 let upma1 = upma1.ptr;
1164 let mut upma2 = upma2;
1165 upma2.do_not_free_on_drop();
1166 let upma2 = upma2.ptr;
1167 let isl_rs_result =
1168 unsafe { isl_union_pw_multi_aff_pullback_union_pw_multi_aff(upma1, upma2) };
1169 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1170 should_free_on_drop: true };
1171 let err = isl_rs_ctx.last_error();
1172 if err != Error::None_ {
1173 let err_msg = isl_rs_ctx.last_error_msg();
1174 isl_rs_ctx.reset_error();
1175 return Err(LibISLError::new(err, err_msg));
1176 }
1177 Ok(isl_rs_result)
1178 }
1179
1180 pub fn range_factor_domain(self) -> Result<UnionPwMultiAff, LibISLError> {
1182 let upma = self;
1183 let isl_rs_ctx = upma.get_ctx();
1184 let mut upma = upma;
1185 upma.do_not_free_on_drop();
1186 let upma = upma.ptr;
1187 let isl_rs_result = unsafe { isl_union_pw_multi_aff_range_factor_domain(upma) };
1188 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1189 should_free_on_drop: true };
1190 let err = isl_rs_ctx.last_error();
1191 if err != Error::None_ {
1192 let err_msg = isl_rs_ctx.last_error_msg();
1193 isl_rs_ctx.reset_error();
1194 return Err(LibISLError::new(err, err_msg));
1195 }
1196 Ok(isl_rs_result)
1197 }
1198
1199 pub fn range_factor_range(self) -> Result<UnionPwMultiAff, LibISLError> {
1201 let upma = self;
1202 let isl_rs_ctx = upma.get_ctx();
1203 let mut upma = upma;
1204 upma.do_not_free_on_drop();
1205 let upma = upma.ptr;
1206 let isl_rs_result = unsafe { isl_union_pw_multi_aff_range_factor_range(upma) };
1207 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1208 should_free_on_drop: true };
1209 let err = isl_rs_ctx.last_error();
1210 if err != Error::None_ {
1211 let err_msg = isl_rs_ctx.last_error_msg();
1212 isl_rs_ctx.reset_error();
1213 return Err(LibISLError::new(err, err_msg));
1214 }
1215 Ok(isl_rs_result)
1216 }
1217
1218 pub fn range_product(self, upma2: UnionPwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
1220 let upma1 = self;
1221 let isl_rs_ctx = upma1.get_ctx();
1222 let mut upma1 = upma1;
1223 upma1.do_not_free_on_drop();
1224 let upma1 = upma1.ptr;
1225 let mut upma2 = upma2;
1226 upma2.do_not_free_on_drop();
1227 let upma2 = upma2.ptr;
1228 let isl_rs_result = unsafe { isl_union_pw_multi_aff_range_product(upma1, upma2) };
1229 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1230 should_free_on_drop: true };
1231 let err = isl_rs_ctx.last_error();
1232 if err != Error::None_ {
1233 let err_msg = isl_rs_ctx.last_error_msg();
1234 isl_rs_ctx.reset_error();
1235 return Err(LibISLError::new(err, err_msg));
1236 }
1237 Ok(isl_rs_result)
1238 }
1239
1240 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionPwMultiAff, LibISLError> {
1242 let isl_rs_ctx = Context { ptr: ctx.ptr,
1243 should_free_on_drop: false };
1244 let ctx = ctx.ptr;
1245 let str_ = CString::new(str_).unwrap();
1246 let str_ = str_.as_ptr();
1247 let isl_rs_result = unsafe { isl_union_pw_multi_aff_read_from_str(ctx, str_) };
1248 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1249 should_free_on_drop: true };
1250 let err = isl_rs_ctx.last_error();
1251 if err != Error::None_ {
1252 let err_msg = isl_rs_ctx.last_error_msg();
1253 isl_rs_ctx.reset_error();
1254 return Err(LibISLError::new(err, err_msg));
1255 }
1256 Ok(isl_rs_result)
1257 }
1258
1259 pub fn reset_user(self) -> Result<UnionPwMultiAff, LibISLError> {
1261 let upma = self;
1262 let isl_rs_ctx = upma.get_ctx();
1263 let mut upma = upma;
1264 upma.do_not_free_on_drop();
1265 let upma = upma.ptr;
1266 let isl_rs_result = unsafe { isl_union_pw_multi_aff_reset_user(upma) };
1267 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1268 should_free_on_drop: true };
1269 let err = isl_rs_ctx.last_error();
1270 if err != Error::None_ {
1271 let err_msg = isl_rs_ctx.last_error_msg();
1272 isl_rs_ctx.reset_error();
1273 return Err(LibISLError::new(err, err_msg));
1274 }
1275 Ok(isl_rs_result)
1276 }
1277
1278 pub fn scale_down_val(self, val: Val) -> Result<UnionPwMultiAff, LibISLError> {
1280 let upma = self;
1281 let isl_rs_ctx = upma.get_ctx();
1282 let mut upma = upma;
1283 upma.do_not_free_on_drop();
1284 let upma = upma.ptr;
1285 let mut val = val;
1286 val.do_not_free_on_drop();
1287 let val = val.ptr;
1288 let isl_rs_result = unsafe { isl_union_pw_multi_aff_scale_down_val(upma, val) };
1289 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1290 should_free_on_drop: true };
1291 let err = isl_rs_ctx.last_error();
1292 if err != Error::None_ {
1293 let err_msg = isl_rs_ctx.last_error_msg();
1294 isl_rs_ctx.reset_error();
1295 return Err(LibISLError::new(err, err_msg));
1296 }
1297 Ok(isl_rs_result)
1298 }
1299
1300 pub fn scale_multi_val(self, mv: MultiVal) -> Result<UnionPwMultiAff, LibISLError> {
1302 let upma = self;
1303 let isl_rs_ctx = upma.get_ctx();
1304 let mut upma = upma;
1305 upma.do_not_free_on_drop();
1306 let upma = upma.ptr;
1307 let mut mv = mv;
1308 mv.do_not_free_on_drop();
1309 let mv = mv.ptr;
1310 let isl_rs_result = unsafe { isl_union_pw_multi_aff_scale_multi_val(upma, mv) };
1311 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1312 should_free_on_drop: true };
1313 let err = isl_rs_ctx.last_error();
1314 if err != Error::None_ {
1315 let err_msg = isl_rs_ctx.last_error_msg();
1316 isl_rs_ctx.reset_error();
1317 return Err(LibISLError::new(err, err_msg));
1318 }
1319 Ok(isl_rs_result)
1320 }
1321
1322 pub fn scale_val(self, val: Val) -> Result<UnionPwMultiAff, LibISLError> {
1324 let upma = self;
1325 let isl_rs_ctx = upma.get_ctx();
1326 let mut upma = upma;
1327 upma.do_not_free_on_drop();
1328 let upma = upma.ptr;
1329 let mut val = val;
1330 val.do_not_free_on_drop();
1331 let val = val.ptr;
1332 let isl_rs_result = unsafe { isl_union_pw_multi_aff_scale_val(upma, val) };
1333 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1334 should_free_on_drop: true };
1335 let err = isl_rs_ctx.last_error();
1336 if err != Error::None_ {
1337 let err_msg = isl_rs_ctx.last_error_msg();
1338 isl_rs_ctx.reset_error();
1339 return Err(LibISLError::new(err, err_msg));
1340 }
1341 Ok(isl_rs_result)
1342 }
1343
1344 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1346 -> Result<UnionPwMultiAff, LibISLError> {
1347 let upma = self;
1348 let isl_rs_ctx = upma.get_ctx();
1349 let mut upma = upma;
1350 upma.do_not_free_on_drop();
1351 let upma = upma.ptr;
1352 let type_ = type_.to_i32();
1353 let s = CString::new(s).unwrap();
1354 let s = s.as_ptr();
1355 let isl_rs_result = unsafe { isl_union_pw_multi_aff_set_dim_name(upma, type_, pos, s) };
1356 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1357 should_free_on_drop: true };
1358 let err = isl_rs_ctx.last_error();
1359 if err != Error::None_ {
1360 let err_msg = isl_rs_ctx.last_error_msg();
1361 isl_rs_ctx.reset_error();
1362 return Err(LibISLError::new(err, err_msg));
1363 }
1364 Ok(isl_rs_result)
1365 }
1366
1367 pub fn sub(self, upma2: UnionPwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
1369 let upma1 = self;
1370 let isl_rs_ctx = upma1.get_ctx();
1371 let mut upma1 = upma1;
1372 upma1.do_not_free_on_drop();
1373 let upma1 = upma1.ptr;
1374 let mut upma2 = upma2;
1375 upma2.do_not_free_on_drop();
1376 let upma2 = upma2.ptr;
1377 let isl_rs_result = unsafe { isl_union_pw_multi_aff_sub(upma1, upma2) };
1378 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1379 should_free_on_drop: true };
1380 let err = isl_rs_ctx.last_error();
1381 if err != Error::None_ {
1382 let err_msg = isl_rs_ctx.last_error_msg();
1383 isl_rs_ctx.reset_error();
1384 return Err(LibISLError::new(err, err_msg));
1385 }
1386 Ok(isl_rs_result)
1387 }
1388
1389 pub fn subtract_domain(self, uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
1391 let upma = self;
1392 let isl_rs_ctx = upma.get_ctx();
1393 let mut upma = upma;
1394 upma.do_not_free_on_drop();
1395 let upma = upma.ptr;
1396 let mut uset = uset;
1397 uset.do_not_free_on_drop();
1398 let uset = uset.ptr;
1399 let isl_rs_result = unsafe { isl_union_pw_multi_aff_subtract_domain(upma, uset) };
1400 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1401 should_free_on_drop: true };
1402 let err = isl_rs_ctx.last_error();
1403 if err != Error::None_ {
1404 let err_msg = isl_rs_ctx.last_error_msg();
1405 isl_rs_ctx.reset_error();
1406 return Err(LibISLError::new(err, err_msg));
1407 }
1408 Ok(isl_rs_result)
1409 }
1410
1411 pub fn subtract_domain_space(self, space: Space) -> Result<UnionPwMultiAff, LibISLError> {
1413 let upma = self;
1414 let isl_rs_ctx = upma.get_ctx();
1415 let mut upma = upma;
1416 upma.do_not_free_on_drop();
1417 let upma = upma.ptr;
1418 let mut space = space;
1419 space.do_not_free_on_drop();
1420 let space = space.ptr;
1421 let isl_rs_result = unsafe { isl_union_pw_multi_aff_subtract_domain_space(upma, space) };
1422 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1423 should_free_on_drop: true };
1424 let err = isl_rs_ctx.last_error();
1425 if err != Error::None_ {
1426 let err_msg = isl_rs_ctx.last_error_msg();
1427 isl_rs_ctx.reset_error();
1428 return Err(LibISLError::new(err, err_msg));
1429 }
1430 Ok(isl_rs_result)
1431 }
1432
1433 pub fn subtract_domain_union_set(self, uset: UnionSet) -> Result<UnionPwMultiAff, LibISLError> {
1435 let upma = self;
1436 let isl_rs_ctx = upma.get_ctx();
1437 let mut upma = upma;
1438 upma.do_not_free_on_drop();
1439 let upma = upma.ptr;
1440 let mut uset = uset;
1441 uset.do_not_free_on_drop();
1442 let uset = uset.ptr;
1443 let isl_rs_result = unsafe { isl_union_pw_multi_aff_subtract_domain_union_set(upma, uset) };
1444 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1445 should_free_on_drop: true };
1446 let err = isl_rs_ctx.last_error();
1447 if err != Error::None_ {
1448 let err_msg = isl_rs_ctx.last_error_msg();
1449 isl_rs_ctx.reset_error();
1450 return Err(LibISLError::new(err, err_msg));
1451 }
1452 Ok(isl_rs_result)
1453 }
1454
1455 pub fn to_list(self) -> Result<UnionPwMultiAffList, LibISLError> {
1457 let el = self;
1458 let isl_rs_ctx = el.get_ctx();
1459 let mut el = el;
1460 el.do_not_free_on_drop();
1461 let el = el.ptr;
1462 let isl_rs_result = unsafe { isl_union_pw_multi_aff_to_list(el) };
1463 let isl_rs_result = UnionPwMultiAffList { ptr: isl_rs_result,
1464 should_free_on_drop: true };
1465 let err = isl_rs_ctx.last_error();
1466 if err != Error::None_ {
1467 let err_msg = isl_rs_ctx.last_error_msg();
1468 isl_rs_ctx.reset_error();
1469 return Err(LibISLError::new(err, err_msg));
1470 }
1471 Ok(isl_rs_result)
1472 }
1473
1474 pub fn to_str(&self) -> Result<&str, LibISLError> {
1476 let upma = self;
1477 let isl_rs_ctx = upma.get_ctx();
1478 let upma = upma.ptr;
1479 let isl_rs_result = unsafe { isl_union_pw_multi_aff_to_str(upma) };
1480 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1481 let isl_rs_result = isl_rs_result.to_str().unwrap();
1482 let err = isl_rs_ctx.last_error();
1483 if err != Error::None_ {
1484 let err_msg = isl_rs_ctx.last_error_msg();
1485 isl_rs_ctx.reset_error();
1486 return Err(LibISLError::new(err, err_msg));
1487 }
1488 Ok(isl_rs_result)
1489 }
1490
1491 pub fn union_add(self, upma2: UnionPwMultiAff) -> Result<UnionPwMultiAff, LibISLError> {
1493 let upma1 = self;
1494 let isl_rs_ctx = upma1.get_ctx();
1495 let mut upma1 = upma1;
1496 upma1.do_not_free_on_drop();
1497 let upma1 = upma1.ptr;
1498 let mut upma2 = upma2;
1499 upma2.do_not_free_on_drop();
1500 let upma2 = upma2.ptr;
1501 let isl_rs_result = unsafe { isl_union_pw_multi_aff_union_add(upma1, upma2) };
1502 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1503 should_free_on_drop: true };
1504 let err = isl_rs_ctx.last_error();
1505 if err != Error::None_ {
1506 let err_msg = isl_rs_ctx.last_error_msg();
1507 isl_rs_ctx.reset_error();
1508 return Err(LibISLError::new(err, err_msg));
1509 }
1510 Ok(isl_rs_result)
1511 }
1512
1513 pub fn do_not_free_on_drop(&mut self) {
1516 self.should_free_on_drop = false;
1517 }
1518}
1519
1520impl Drop for UnionPwMultiAff {
1521 fn drop(&mut self) {
1522 if self.should_free_on_drop {
1523 unsafe {
1524 isl_union_pw_multi_aff_free(self.ptr);
1525 }
1526 }
1527 }
1528}