1use super::{
5 Aff, Context, DimType, Error, Id, LibISLError, MultiAff, MultiId, MultiPwAff, MultiVal, PwAff,
6 PwMultiAff, Set, Space, UnionMap, UnionPwAff, UnionPwAffList, UnionPwMultiAff, UnionSet, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct MultiUnionPwAff {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_multi_union_pw_aff_add(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
21
22 fn isl_multi_union_pw_aff_align_params(multi: uintptr_t, model: uintptr_t) -> uintptr_t;
23
24 fn isl_multi_union_pw_aff_apply_aff(mupa: uintptr_t, aff: uintptr_t) -> uintptr_t;
25
26 fn isl_multi_union_pw_aff_apply_multi_aff(mupa: uintptr_t, ma: uintptr_t) -> uintptr_t;
27
28 fn isl_multi_union_pw_aff_apply_pw_aff(mupa: uintptr_t, pa: uintptr_t) -> uintptr_t;
29
30 fn isl_multi_union_pw_aff_apply_pw_multi_aff(mupa: uintptr_t, pma: uintptr_t) -> uintptr_t;
31
32 fn isl_multi_union_pw_aff_bind(mupa: uintptr_t, tuple: uintptr_t) -> uintptr_t;
33
34 fn isl_multi_union_pw_aff_coalesce(mupa: uintptr_t) -> uintptr_t;
35
36 fn isl_multi_union_pw_aff_copy(multi: uintptr_t) -> uintptr_t;
37
38 fn isl_multi_union_pw_aff_dim(multi: uintptr_t, type_: i32) -> i32;
39
40 fn isl_multi_union_pw_aff_domain(mupa: uintptr_t) -> uintptr_t;
41
42 fn isl_multi_union_pw_aff_drop_dims(multi: uintptr_t, type_: i32, first: u32, n: u32)
43 -> uintptr_t;
44
45 fn isl_multi_union_pw_aff_dump(mupa: uintptr_t) -> ();
46
47 fn isl_multi_union_pw_aff_extract_multi_pw_aff(mupa: uintptr_t, space: uintptr_t) -> uintptr_t;
48
49 fn isl_multi_union_pw_aff_factor_range(multi: uintptr_t) -> uintptr_t;
50
51 fn isl_multi_union_pw_aff_find_dim_by_id(multi: uintptr_t, type_: i32, id: uintptr_t) -> i32;
52
53 fn isl_multi_union_pw_aff_find_dim_by_name(multi: uintptr_t, type_: i32, name: *const c_char)
54 -> i32;
55
56 fn isl_multi_union_pw_aff_flat_range_product(multi1: uintptr_t, multi2: uintptr_t)
57 -> uintptr_t;
58
59 fn isl_multi_union_pw_aff_flatten_range(multi: uintptr_t) -> uintptr_t;
60
61 fn isl_multi_union_pw_aff_floor(mupa: uintptr_t) -> uintptr_t;
62
63 fn isl_multi_union_pw_aff_free(multi: uintptr_t) -> uintptr_t;
64
65 fn isl_multi_union_pw_aff_from_multi_aff(ma: uintptr_t) -> uintptr_t;
66
67 fn isl_multi_union_pw_aff_from_multi_pw_aff(mpa: uintptr_t) -> uintptr_t;
68
69 fn isl_multi_union_pw_aff_from_range(multi: uintptr_t) -> uintptr_t;
70
71 fn isl_multi_union_pw_aff_from_union_map(umap: uintptr_t) -> uintptr_t;
72
73 fn isl_multi_union_pw_aff_from_union_pw_aff(upa: uintptr_t) -> uintptr_t;
74
75 fn isl_multi_union_pw_aff_from_union_pw_aff_list(space: uintptr_t, list: uintptr_t)
76 -> uintptr_t;
77
78 fn isl_multi_union_pw_aff_from_union_pw_multi_aff(upma: uintptr_t) -> uintptr_t;
79
80 fn isl_multi_union_pw_aff_get_at(multi: uintptr_t, pos: i32) -> uintptr_t;
81
82 fn isl_multi_union_pw_aff_get_ctx(multi: uintptr_t) -> uintptr_t;
83
84 fn isl_multi_union_pw_aff_get_dim_id(multi: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
85
86 fn isl_multi_union_pw_aff_get_domain_space(multi: uintptr_t) -> uintptr_t;
87
88 fn isl_multi_union_pw_aff_get_list(multi: uintptr_t) -> uintptr_t;
89
90 fn isl_multi_union_pw_aff_get_range_tuple_id(multi: uintptr_t) -> uintptr_t;
91
92 fn isl_multi_union_pw_aff_get_space(multi: uintptr_t) -> uintptr_t;
93
94 fn isl_multi_union_pw_aff_get_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
95
96 fn isl_multi_union_pw_aff_get_tuple_name(multi: uintptr_t, type_: i32) -> *const c_char;
97
98 fn isl_multi_union_pw_aff_get_union_pw_aff(multi: uintptr_t, pos: i32) -> uintptr_t;
99
100 fn isl_multi_union_pw_aff_gist(mupa: uintptr_t, context: uintptr_t) -> uintptr_t;
101
102 fn isl_multi_union_pw_aff_gist_params(mupa: uintptr_t, context: uintptr_t) -> uintptr_t;
103
104 fn isl_multi_union_pw_aff_has_range_tuple_id(multi: uintptr_t) -> i32;
105
106 fn isl_multi_union_pw_aff_has_tuple_id(multi: uintptr_t, type_: i32) -> i32;
107
108 fn isl_multi_union_pw_aff_intersect_domain(mupa: uintptr_t, uset: uintptr_t) -> uintptr_t;
109
110 fn isl_multi_union_pw_aff_intersect_params(mupa: uintptr_t, params: uintptr_t) -> uintptr_t;
111
112 fn isl_multi_union_pw_aff_intersect_range(mupa: uintptr_t, set: uintptr_t) -> uintptr_t;
113
114 fn isl_multi_union_pw_aff_involves_nan(multi: uintptr_t) -> i32;
115
116 fn isl_multi_union_pw_aff_max_multi_val(mupa: uintptr_t) -> uintptr_t;
117
118 fn isl_multi_union_pw_aff_min_multi_val(mupa: uintptr_t) -> uintptr_t;
119
120 fn isl_multi_union_pw_aff_mod_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
121
122 fn isl_multi_union_pw_aff_multi_aff_on_domain(domain: uintptr_t, ma: uintptr_t) -> uintptr_t;
123
124 fn isl_multi_union_pw_aff_multi_val_on_domain(domain: uintptr_t, mv: uintptr_t) -> uintptr_t;
125
126 fn isl_multi_union_pw_aff_neg(multi: uintptr_t) -> uintptr_t;
127
128 fn isl_multi_union_pw_aff_plain_is_equal(multi1: uintptr_t, multi2: uintptr_t) -> i32;
129
130 fn isl_multi_union_pw_aff_pullback_union_pw_multi_aff(mupa: uintptr_t, upma: uintptr_t)
131 -> uintptr_t;
132
133 fn isl_multi_union_pw_aff_pw_multi_aff_on_domain(domain: uintptr_t, pma: uintptr_t)
134 -> uintptr_t;
135
136 fn isl_multi_union_pw_aff_range_factor_domain(multi: uintptr_t) -> uintptr_t;
137
138 fn isl_multi_union_pw_aff_range_factor_range(multi: uintptr_t) -> uintptr_t;
139
140 fn isl_multi_union_pw_aff_range_is_wrapping(multi: uintptr_t) -> i32;
141
142 fn isl_multi_union_pw_aff_range_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
143
144 fn isl_multi_union_pw_aff_range_splice(multi1: uintptr_t, pos: u32, multi2: uintptr_t)
145 -> uintptr_t;
146
147 fn isl_multi_union_pw_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
148
149 fn isl_multi_union_pw_aff_reset_range_tuple_id(multi: uintptr_t) -> uintptr_t;
150
151 fn isl_multi_union_pw_aff_reset_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
152
153 fn isl_multi_union_pw_aff_reset_user(multi: uintptr_t) -> uintptr_t;
154
155 fn isl_multi_union_pw_aff_scale_down_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
156
157 fn isl_multi_union_pw_aff_scale_down_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
158
159 fn isl_multi_union_pw_aff_scale_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
160
161 fn isl_multi_union_pw_aff_scale_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
162
163 fn isl_multi_union_pw_aff_set_at(multi: uintptr_t, pos: i32, el: uintptr_t) -> uintptr_t;
164
165 fn isl_multi_union_pw_aff_set_dim_id(multi: uintptr_t, type_: i32, pos: u32, id: uintptr_t)
166 -> uintptr_t;
167
168 fn isl_multi_union_pw_aff_set_dim_name(multi: uintptr_t, type_: i32, pos: u32,
169 s: *const c_char)
170 -> uintptr_t;
171
172 fn isl_multi_union_pw_aff_set_range_tuple_id(multi: uintptr_t, id: uintptr_t) -> uintptr_t;
173
174 fn isl_multi_union_pw_aff_set_tuple_id(multi: uintptr_t, type_: i32, id: uintptr_t)
175 -> uintptr_t;
176
177 fn isl_multi_union_pw_aff_set_tuple_name(multi: uintptr_t, type_: i32, s: *const c_char)
178 -> uintptr_t;
179
180 fn isl_multi_union_pw_aff_set_union_pw_aff(multi: uintptr_t, pos: i32, el: uintptr_t)
181 -> uintptr_t;
182
183 fn isl_multi_union_pw_aff_size(multi: uintptr_t) -> i32;
184
185 fn isl_multi_union_pw_aff_sub(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
186
187 fn isl_multi_union_pw_aff_to_str(mupa: uintptr_t) -> *const c_char;
188
189 fn isl_multi_union_pw_aff_union_add(mupa1: uintptr_t, mupa2: uintptr_t) -> uintptr_t;
190
191 fn isl_multi_union_pw_aff_zero(space: uintptr_t) -> uintptr_t;
192
193 fn isl_multi_union_pw_aff_zero_union_set(mupa: uintptr_t) -> uintptr_t;
194
195}
196
197impl MultiUnionPwAff {
198 pub fn add(self, multi2: MultiUnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
200 let multi1 = self;
201 let isl_rs_ctx = multi1.get_ctx();
202 let mut multi1 = multi1;
203 multi1.do_not_free_on_drop();
204 let multi1 = multi1.ptr;
205 let mut multi2 = multi2;
206 multi2.do_not_free_on_drop();
207 let multi2 = multi2.ptr;
208 let isl_rs_result = unsafe { isl_multi_union_pw_aff_add(multi1, multi2) };
209 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
210 should_free_on_drop: true };
211 let err = isl_rs_ctx.last_error();
212 if err != Error::None_ {
213 let err_msg = isl_rs_ctx.last_error_msg();
214 isl_rs_ctx.reset_error();
215 return Err(LibISLError::new(err, err_msg));
216 }
217 Ok(isl_rs_result)
218 }
219
220 pub fn align_params(self, model: Space) -> Result<MultiUnionPwAff, LibISLError> {
222 let multi = self;
223 let isl_rs_ctx = multi.get_ctx();
224 let mut multi = multi;
225 multi.do_not_free_on_drop();
226 let multi = multi.ptr;
227 let mut model = model;
228 model.do_not_free_on_drop();
229 let model = model.ptr;
230 let isl_rs_result = unsafe { isl_multi_union_pw_aff_align_params(multi, model) };
231 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
232 should_free_on_drop: true };
233 let err = isl_rs_ctx.last_error();
234 if err != Error::None_ {
235 let err_msg = isl_rs_ctx.last_error_msg();
236 isl_rs_ctx.reset_error();
237 return Err(LibISLError::new(err, err_msg));
238 }
239 Ok(isl_rs_result)
240 }
241
242 pub fn apply_aff(self, aff: Aff) -> Result<UnionPwAff, LibISLError> {
244 let mupa = self;
245 let isl_rs_ctx = mupa.get_ctx();
246 let mut mupa = mupa;
247 mupa.do_not_free_on_drop();
248 let mupa = mupa.ptr;
249 let mut aff = aff;
250 aff.do_not_free_on_drop();
251 let aff = aff.ptr;
252 let isl_rs_result = unsafe { isl_multi_union_pw_aff_apply_aff(mupa, aff) };
253 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
254 should_free_on_drop: true };
255 let err = isl_rs_ctx.last_error();
256 if err != Error::None_ {
257 let err_msg = isl_rs_ctx.last_error_msg();
258 isl_rs_ctx.reset_error();
259 return Err(LibISLError::new(err, err_msg));
260 }
261 Ok(isl_rs_result)
262 }
263
264 pub fn apply_multi_aff(self, ma: MultiAff) -> Result<MultiUnionPwAff, LibISLError> {
266 let mupa = self;
267 let isl_rs_ctx = mupa.get_ctx();
268 let mut mupa = mupa;
269 mupa.do_not_free_on_drop();
270 let mupa = mupa.ptr;
271 let mut ma = ma;
272 ma.do_not_free_on_drop();
273 let ma = ma.ptr;
274 let isl_rs_result = unsafe { isl_multi_union_pw_aff_apply_multi_aff(mupa, ma) };
275 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
276 should_free_on_drop: true };
277 let err = isl_rs_ctx.last_error();
278 if err != Error::None_ {
279 let err_msg = isl_rs_ctx.last_error_msg();
280 isl_rs_ctx.reset_error();
281 return Err(LibISLError::new(err, err_msg));
282 }
283 Ok(isl_rs_result)
284 }
285
286 pub fn apply_pw_aff(self, pa: PwAff) -> Result<UnionPwAff, LibISLError> {
288 let mupa = self;
289 let isl_rs_ctx = mupa.get_ctx();
290 let mut mupa = mupa;
291 mupa.do_not_free_on_drop();
292 let mupa = mupa.ptr;
293 let mut pa = pa;
294 pa.do_not_free_on_drop();
295 let pa = pa.ptr;
296 let isl_rs_result = unsafe { isl_multi_union_pw_aff_apply_pw_aff(mupa, pa) };
297 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
298 should_free_on_drop: true };
299 let err = isl_rs_ctx.last_error();
300 if err != Error::None_ {
301 let err_msg = isl_rs_ctx.last_error_msg();
302 isl_rs_ctx.reset_error();
303 return Err(LibISLError::new(err, err_msg));
304 }
305 Ok(isl_rs_result)
306 }
307
308 pub fn apply_pw_multi_aff(self, pma: PwMultiAff) -> Result<MultiUnionPwAff, LibISLError> {
310 let mupa = self;
311 let isl_rs_ctx = mupa.get_ctx();
312 let mut mupa = mupa;
313 mupa.do_not_free_on_drop();
314 let mupa = mupa.ptr;
315 let mut pma = pma;
316 pma.do_not_free_on_drop();
317 let pma = pma.ptr;
318 let isl_rs_result = unsafe { isl_multi_union_pw_aff_apply_pw_multi_aff(mupa, pma) };
319 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
320 should_free_on_drop: true };
321 let err = isl_rs_ctx.last_error();
322 if err != Error::None_ {
323 let err_msg = isl_rs_ctx.last_error_msg();
324 isl_rs_ctx.reset_error();
325 return Err(LibISLError::new(err, err_msg));
326 }
327 Ok(isl_rs_result)
328 }
329
330 pub fn bind(self, tuple: MultiId) -> Result<UnionSet, LibISLError> {
332 let mupa = self;
333 let isl_rs_ctx = mupa.get_ctx();
334 let mut mupa = mupa;
335 mupa.do_not_free_on_drop();
336 let mupa = mupa.ptr;
337 let mut tuple = tuple;
338 tuple.do_not_free_on_drop();
339 let tuple = tuple.ptr;
340 let isl_rs_result = unsafe { isl_multi_union_pw_aff_bind(mupa, tuple) };
341 let isl_rs_result = UnionSet { ptr: isl_rs_result,
342 should_free_on_drop: true };
343 let err = isl_rs_ctx.last_error();
344 if err != Error::None_ {
345 let err_msg = isl_rs_ctx.last_error_msg();
346 isl_rs_ctx.reset_error();
347 return Err(LibISLError::new(err, err_msg));
348 }
349 Ok(isl_rs_result)
350 }
351
352 pub fn coalesce(self) -> Result<MultiUnionPwAff, LibISLError> {
354 let mupa = self;
355 let isl_rs_ctx = mupa.get_ctx();
356 let mut mupa = mupa;
357 mupa.do_not_free_on_drop();
358 let mupa = mupa.ptr;
359 let isl_rs_result = unsafe { isl_multi_union_pw_aff_coalesce(mupa) };
360 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
361 should_free_on_drop: true };
362 let err = isl_rs_ctx.last_error();
363 if err != Error::None_ {
364 let err_msg = isl_rs_ctx.last_error_msg();
365 isl_rs_ctx.reset_error();
366 return Err(LibISLError::new(err, err_msg));
367 }
368 Ok(isl_rs_result)
369 }
370
371 pub fn copy(&self) -> Result<MultiUnionPwAff, LibISLError> {
373 let multi = self;
374 let isl_rs_ctx = multi.get_ctx();
375 let multi = multi.ptr;
376 let isl_rs_result = unsafe { isl_multi_union_pw_aff_copy(multi) };
377 let isl_rs_result = MultiUnionPwAff { 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 dim(&self, type_: DimType) -> Result<i32, LibISLError> {
390 let multi = self;
391 let isl_rs_ctx = multi.get_ctx();
392 let multi = multi.ptr;
393 let type_ = type_.to_i32();
394 let isl_rs_result = unsafe { isl_multi_union_pw_aff_dim(multi, type_) };
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 domain(self) -> Result<UnionSet, LibISLError> {
406 let mupa = self;
407 let isl_rs_ctx = mupa.get_ctx();
408 let mut mupa = mupa;
409 mupa.do_not_free_on_drop();
410 let mupa = mupa.ptr;
411 let isl_rs_result = unsafe { isl_multi_union_pw_aff_domain(mupa) };
412 let isl_rs_result = UnionSet { 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 drop_dims(self, type_: DimType, first: u32, n: u32)
425 -> Result<MultiUnionPwAff, LibISLError> {
426 let multi = self;
427 let isl_rs_ctx = multi.get_ctx();
428 let mut multi = multi;
429 multi.do_not_free_on_drop();
430 let multi = multi.ptr;
431 let type_ = type_.to_i32();
432 let isl_rs_result = unsafe { isl_multi_union_pw_aff_drop_dims(multi, type_, first, n) };
433 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
434 should_free_on_drop: true };
435 let err = isl_rs_ctx.last_error();
436 if err != Error::None_ {
437 let err_msg = isl_rs_ctx.last_error_msg();
438 isl_rs_ctx.reset_error();
439 return Err(LibISLError::new(err, err_msg));
440 }
441 Ok(isl_rs_result)
442 }
443
444 pub fn dump(&self) -> Result<(), LibISLError> {
446 let mupa = self;
447 let isl_rs_ctx = mupa.get_ctx();
448 let mupa = mupa.ptr;
449 let isl_rs_result = unsafe { isl_multi_union_pw_aff_dump(mupa) };
450 let err = isl_rs_ctx.last_error();
451 if err != Error::None_ {
452 let err_msg = isl_rs_ctx.last_error_msg();
453 isl_rs_ctx.reset_error();
454 return Err(LibISLError::new(err, err_msg));
455 }
456 Ok(isl_rs_result)
457 }
458
459 pub fn extract_multi_pw_aff(&self, space: Space) -> Result<MultiPwAff, LibISLError> {
461 let mupa = self;
462 let isl_rs_ctx = mupa.get_ctx();
463 let mupa = mupa.ptr;
464 let mut space = space;
465 space.do_not_free_on_drop();
466 let space = space.ptr;
467 let isl_rs_result = unsafe { isl_multi_union_pw_aff_extract_multi_pw_aff(mupa, space) };
468 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
469 should_free_on_drop: true };
470 let err = isl_rs_ctx.last_error();
471 if err != Error::None_ {
472 let err_msg = isl_rs_ctx.last_error_msg();
473 isl_rs_ctx.reset_error();
474 return Err(LibISLError::new(err, err_msg));
475 }
476 Ok(isl_rs_result)
477 }
478
479 pub fn factor_range(self) -> Result<MultiUnionPwAff, LibISLError> {
481 let multi = self;
482 let isl_rs_ctx = multi.get_ctx();
483 let mut multi = multi;
484 multi.do_not_free_on_drop();
485 let multi = multi.ptr;
486 let isl_rs_result = unsafe { isl_multi_union_pw_aff_factor_range(multi) };
487 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
488 should_free_on_drop: true };
489 let err = isl_rs_ctx.last_error();
490 if err != Error::None_ {
491 let err_msg = isl_rs_ctx.last_error_msg();
492 isl_rs_ctx.reset_error();
493 return Err(LibISLError::new(err, err_msg));
494 }
495 Ok(isl_rs_result)
496 }
497
498 pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
500 let multi = self;
501 let isl_rs_ctx = multi.get_ctx();
502 let multi = multi.ptr;
503 let type_ = type_.to_i32();
504 let id = id.ptr;
505 let isl_rs_result = unsafe { isl_multi_union_pw_aff_find_dim_by_id(multi, type_, id) };
506 let err = isl_rs_ctx.last_error();
507 if err != Error::None_ {
508 let err_msg = isl_rs_ctx.last_error_msg();
509 isl_rs_ctx.reset_error();
510 return Err(LibISLError::new(err, err_msg));
511 }
512 Ok(isl_rs_result)
513 }
514
515 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
517 let multi = self;
518 let isl_rs_ctx = multi.get_ctx();
519 let multi = multi.ptr;
520 let type_ = type_.to_i32();
521 let name = CString::new(name).unwrap();
522 let name = name.as_ptr();
523 let isl_rs_result = unsafe { isl_multi_union_pw_aff_find_dim_by_name(multi, type_, name) };
524 let err = isl_rs_ctx.last_error();
525 if err != Error::None_ {
526 let err_msg = isl_rs_ctx.last_error_msg();
527 isl_rs_ctx.reset_error();
528 return Err(LibISLError::new(err, err_msg));
529 }
530 Ok(isl_rs_result)
531 }
532
533 pub fn flat_range_product(self, multi2: MultiUnionPwAff)
535 -> Result<MultiUnionPwAff, LibISLError> {
536 let multi1 = self;
537 let isl_rs_ctx = multi1.get_ctx();
538 let mut multi1 = multi1;
539 multi1.do_not_free_on_drop();
540 let multi1 = multi1.ptr;
541 let mut multi2 = multi2;
542 multi2.do_not_free_on_drop();
543 let multi2 = multi2.ptr;
544 let isl_rs_result = unsafe { isl_multi_union_pw_aff_flat_range_product(multi1, multi2) };
545 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
546 should_free_on_drop: true };
547 let err = isl_rs_ctx.last_error();
548 if err != Error::None_ {
549 let err_msg = isl_rs_ctx.last_error_msg();
550 isl_rs_ctx.reset_error();
551 return Err(LibISLError::new(err, err_msg));
552 }
553 Ok(isl_rs_result)
554 }
555
556 pub fn flatten_range(self) -> Result<MultiUnionPwAff, LibISLError> {
558 let multi = self;
559 let isl_rs_ctx = multi.get_ctx();
560 let mut multi = multi;
561 multi.do_not_free_on_drop();
562 let multi = multi.ptr;
563 let isl_rs_result = unsafe { isl_multi_union_pw_aff_flatten_range(multi) };
564 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
565 should_free_on_drop: true };
566 let err = isl_rs_ctx.last_error();
567 if err != Error::None_ {
568 let err_msg = isl_rs_ctx.last_error_msg();
569 isl_rs_ctx.reset_error();
570 return Err(LibISLError::new(err, err_msg));
571 }
572 Ok(isl_rs_result)
573 }
574
575 pub fn floor(self) -> Result<MultiUnionPwAff, LibISLError> {
577 let mupa = self;
578 let isl_rs_ctx = mupa.get_ctx();
579 let mut mupa = mupa;
580 mupa.do_not_free_on_drop();
581 let mupa = mupa.ptr;
582 let isl_rs_result = unsafe { isl_multi_union_pw_aff_floor(mupa) };
583 let isl_rs_result = MultiUnionPwAff { 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 free(self) -> Result<MultiUnionPwAff, LibISLError> {
596 let multi = self;
597 let isl_rs_ctx = multi.get_ctx();
598 let mut multi = multi;
599 multi.do_not_free_on_drop();
600 let multi = multi.ptr;
601 let isl_rs_result = unsafe { isl_multi_union_pw_aff_free(multi) };
602 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
603 should_free_on_drop: true };
604 let err = isl_rs_ctx.last_error();
605 if err != Error::None_ {
606 let err_msg = isl_rs_ctx.last_error_msg();
607 isl_rs_ctx.reset_error();
608 return Err(LibISLError::new(err, err_msg));
609 }
610 Ok(isl_rs_result)
611 }
612
613 pub fn from_multi_aff(ma: MultiAff) -> Result<MultiUnionPwAff, LibISLError> {
615 let isl_rs_ctx = ma.get_ctx();
616 let mut ma = ma;
617 ma.do_not_free_on_drop();
618 let ma = ma.ptr;
619 let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_multi_aff(ma) };
620 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
621 should_free_on_drop: true };
622 let err = isl_rs_ctx.last_error();
623 if err != Error::None_ {
624 let err_msg = isl_rs_ctx.last_error_msg();
625 isl_rs_ctx.reset_error();
626 return Err(LibISLError::new(err, err_msg));
627 }
628 Ok(isl_rs_result)
629 }
630
631 pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<MultiUnionPwAff, LibISLError> {
633 let isl_rs_ctx = mpa.get_ctx();
634 let mut mpa = mpa;
635 mpa.do_not_free_on_drop();
636 let mpa = mpa.ptr;
637 let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_multi_pw_aff(mpa) };
638 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
639 should_free_on_drop: true };
640 let err = isl_rs_ctx.last_error();
641 if err != Error::None_ {
642 let err_msg = isl_rs_ctx.last_error_msg();
643 isl_rs_ctx.reset_error();
644 return Err(LibISLError::new(err, err_msg));
645 }
646 Ok(isl_rs_result)
647 }
648
649 pub fn from_range(self) -> Result<MultiUnionPwAff, LibISLError> {
651 let multi = self;
652 let isl_rs_ctx = multi.get_ctx();
653 let mut multi = multi;
654 multi.do_not_free_on_drop();
655 let multi = multi.ptr;
656 let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_range(multi) };
657 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
658 should_free_on_drop: true };
659 let err = isl_rs_ctx.last_error();
660 if err != Error::None_ {
661 let err_msg = isl_rs_ctx.last_error_msg();
662 isl_rs_ctx.reset_error();
663 return Err(LibISLError::new(err, err_msg));
664 }
665 Ok(isl_rs_result)
666 }
667
668 pub fn from_union_map(umap: UnionMap) -> Result<MultiUnionPwAff, LibISLError> {
670 let isl_rs_ctx = umap.get_ctx();
671 let mut umap = umap;
672 umap.do_not_free_on_drop();
673 let umap = umap.ptr;
674 let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_union_map(umap) };
675 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
676 should_free_on_drop: true };
677 let err = isl_rs_ctx.last_error();
678 if err != Error::None_ {
679 let err_msg = isl_rs_ctx.last_error_msg();
680 isl_rs_ctx.reset_error();
681 return Err(LibISLError::new(err, err_msg));
682 }
683 Ok(isl_rs_result)
684 }
685
686 pub fn from_union_pw_aff(upa: UnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
688 let isl_rs_ctx = upa.get_ctx();
689 let mut upa = upa;
690 upa.do_not_free_on_drop();
691 let upa = upa.ptr;
692 let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_union_pw_aff(upa) };
693 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
694 should_free_on_drop: true };
695 let err = isl_rs_ctx.last_error();
696 if err != Error::None_ {
697 let err_msg = isl_rs_ctx.last_error_msg();
698 isl_rs_ctx.reset_error();
699 return Err(LibISLError::new(err, err_msg));
700 }
701 Ok(isl_rs_result)
702 }
703
704 pub fn from_union_pw_aff_list(space: Space, list: UnionPwAffList)
706 -> Result<MultiUnionPwAff, LibISLError> {
707 let isl_rs_ctx = space.get_ctx();
708 let mut space = space;
709 space.do_not_free_on_drop();
710 let space = space.ptr;
711 let mut list = list;
712 list.do_not_free_on_drop();
713 let list = list.ptr;
714 let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_union_pw_aff_list(space, list) };
715 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
716 should_free_on_drop: true };
717 let err = isl_rs_ctx.last_error();
718 if err != Error::None_ {
719 let err_msg = isl_rs_ctx.last_error_msg();
720 isl_rs_ctx.reset_error();
721 return Err(LibISLError::new(err, err_msg));
722 }
723 Ok(isl_rs_result)
724 }
725
726 pub fn from_union_pw_multi_aff(upma: UnionPwMultiAff) -> Result<MultiUnionPwAff, LibISLError> {
728 let isl_rs_ctx = upma.get_ctx();
729 let mut upma = upma;
730 upma.do_not_free_on_drop();
731 let upma = upma.ptr;
732 let isl_rs_result = unsafe { isl_multi_union_pw_aff_from_union_pw_multi_aff(upma) };
733 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
734 should_free_on_drop: true };
735 let err = isl_rs_ctx.last_error();
736 if err != Error::None_ {
737 let err_msg = isl_rs_ctx.last_error_msg();
738 isl_rs_ctx.reset_error();
739 return Err(LibISLError::new(err, err_msg));
740 }
741 Ok(isl_rs_result)
742 }
743
744 pub fn get_at(&self, pos: i32) -> Result<UnionPwAff, LibISLError> {
746 let multi = self;
747 let isl_rs_ctx = multi.get_ctx();
748 let multi = multi.ptr;
749 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_at(multi, pos) };
750 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
751 should_free_on_drop: true };
752 let err = isl_rs_ctx.last_error();
753 if err != Error::None_ {
754 let err_msg = isl_rs_ctx.last_error_msg();
755 isl_rs_ctx.reset_error();
756 return Err(LibISLError::new(err, err_msg));
757 }
758 Ok(isl_rs_result)
759 }
760
761 pub fn get_ctx(&self) -> Context {
763 let multi = self;
764 let multi = multi.ptr;
765 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_ctx(multi) };
766 let isl_rs_result = Context { ptr: isl_rs_result,
767 should_free_on_drop: false };
768 isl_rs_result
769 }
770
771 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
773 let multi = self;
774 let isl_rs_ctx = multi.get_ctx();
775 let multi = multi.ptr;
776 let type_ = type_.to_i32();
777 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_dim_id(multi, type_, pos) };
778 let isl_rs_result = Id { 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 get_domain_space(&self) -> Result<Space, LibISLError> {
791 let multi = self;
792 let isl_rs_ctx = multi.get_ctx();
793 let multi = multi.ptr;
794 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_domain_space(multi) };
795 let isl_rs_result = Space { ptr: isl_rs_result,
796 should_free_on_drop: true };
797 let err = isl_rs_ctx.last_error();
798 if err != Error::None_ {
799 let err_msg = isl_rs_ctx.last_error_msg();
800 isl_rs_ctx.reset_error();
801 return Err(LibISLError::new(err, err_msg));
802 }
803 Ok(isl_rs_result)
804 }
805
806 pub fn get_list(&self) -> Result<UnionPwAffList, LibISLError> {
808 let multi = self;
809 let isl_rs_ctx = multi.get_ctx();
810 let multi = multi.ptr;
811 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_list(multi) };
812 let isl_rs_result = UnionPwAffList { ptr: isl_rs_result,
813 should_free_on_drop: true };
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 get_range_tuple_id(&self) -> Result<Id, LibISLError> {
825 let multi = self;
826 let isl_rs_ctx = multi.get_ctx();
827 let multi = multi.ptr;
828 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_range_tuple_id(multi) };
829 let isl_rs_result = Id { ptr: isl_rs_result,
830 should_free_on_drop: true };
831 let err = isl_rs_ctx.last_error();
832 if err != Error::None_ {
833 let err_msg = isl_rs_ctx.last_error_msg();
834 isl_rs_ctx.reset_error();
835 return Err(LibISLError::new(err, err_msg));
836 }
837 Ok(isl_rs_result)
838 }
839
840 pub fn get_space(&self) -> Result<Space, LibISLError> {
842 let multi = self;
843 let isl_rs_ctx = multi.get_ctx();
844 let multi = multi.ptr;
845 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_space(multi) };
846 let isl_rs_result = Space { ptr: isl_rs_result,
847 should_free_on_drop: true };
848 let err = isl_rs_ctx.last_error();
849 if err != Error::None_ {
850 let err_msg = isl_rs_ctx.last_error_msg();
851 isl_rs_ctx.reset_error();
852 return Err(LibISLError::new(err, err_msg));
853 }
854 Ok(isl_rs_result)
855 }
856
857 pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
859 let multi = self;
860 let isl_rs_ctx = multi.get_ctx();
861 let multi = multi.ptr;
862 let type_ = type_.to_i32();
863 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_tuple_id(multi, type_) };
864 let isl_rs_result = Id { ptr: isl_rs_result,
865 should_free_on_drop: true };
866 let err = isl_rs_ctx.last_error();
867 if err != Error::None_ {
868 let err_msg = isl_rs_ctx.last_error_msg();
869 isl_rs_ctx.reset_error();
870 return Err(LibISLError::new(err, err_msg));
871 }
872 Ok(isl_rs_result)
873 }
874
875 pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
877 let multi = self;
878 let isl_rs_ctx = multi.get_ctx();
879 let multi = multi.ptr;
880 let type_ = type_.to_i32();
881 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_tuple_name(multi, type_) };
882 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
883 let isl_rs_result = isl_rs_result.to_str().unwrap();
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 get_union_pw_aff(&self, pos: i32) -> Result<UnionPwAff, LibISLError> {
895 let multi = self;
896 let isl_rs_ctx = multi.get_ctx();
897 let multi = multi.ptr;
898 let isl_rs_result = unsafe { isl_multi_union_pw_aff_get_union_pw_aff(multi, pos) };
899 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
900 should_free_on_drop: true };
901 let err = isl_rs_ctx.last_error();
902 if err != Error::None_ {
903 let err_msg = isl_rs_ctx.last_error_msg();
904 isl_rs_ctx.reset_error();
905 return Err(LibISLError::new(err, err_msg));
906 }
907 Ok(isl_rs_result)
908 }
909
910 pub fn gist(self, context: UnionSet) -> Result<MultiUnionPwAff, LibISLError> {
912 let mupa = self;
913 let isl_rs_ctx = mupa.get_ctx();
914 let mut mupa = mupa;
915 mupa.do_not_free_on_drop();
916 let mupa = mupa.ptr;
917 let mut context = context;
918 context.do_not_free_on_drop();
919 let context = context.ptr;
920 let isl_rs_result = unsafe { isl_multi_union_pw_aff_gist(mupa, context) };
921 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
922 should_free_on_drop: true };
923 let err = isl_rs_ctx.last_error();
924 if err != Error::None_ {
925 let err_msg = isl_rs_ctx.last_error_msg();
926 isl_rs_ctx.reset_error();
927 return Err(LibISLError::new(err, err_msg));
928 }
929 Ok(isl_rs_result)
930 }
931
932 pub fn gist_params(self, context: Set) -> Result<MultiUnionPwAff, LibISLError> {
934 let mupa = self;
935 let isl_rs_ctx = mupa.get_ctx();
936 let mut mupa = mupa;
937 mupa.do_not_free_on_drop();
938 let mupa = mupa.ptr;
939 let mut context = context;
940 context.do_not_free_on_drop();
941 let context = context.ptr;
942 let isl_rs_result = unsafe { isl_multi_union_pw_aff_gist_params(mupa, context) };
943 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
944 should_free_on_drop: true };
945 let err = isl_rs_ctx.last_error();
946 if err != Error::None_ {
947 let err_msg = isl_rs_ctx.last_error_msg();
948 isl_rs_ctx.reset_error();
949 return Err(LibISLError::new(err, err_msg));
950 }
951 Ok(isl_rs_result)
952 }
953
954 pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
956 let multi = self;
957 let isl_rs_ctx = multi.get_ctx();
958 let multi = multi.ptr;
959 let isl_rs_result = unsafe { isl_multi_union_pw_aff_has_range_tuple_id(multi) };
960 let isl_rs_result = match isl_rs_result {
961 0 => false,
962 1 => true,
963 _ => {
964 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
965 }
966 };
967 let err = isl_rs_ctx.last_error();
968 if err != Error::None_ {
969 let err_msg = isl_rs_ctx.last_error_msg();
970 isl_rs_ctx.reset_error();
971 return Err(LibISLError::new(err, err_msg));
972 }
973 Ok(isl_rs_result)
974 }
975
976 pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
978 let multi = self;
979 let isl_rs_ctx = multi.get_ctx();
980 let multi = multi.ptr;
981 let type_ = type_.to_i32();
982 let isl_rs_result = unsafe { isl_multi_union_pw_aff_has_tuple_id(multi, type_) };
983 let isl_rs_result = match isl_rs_result {
984 0 => false,
985 1 => true,
986 _ => {
987 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
988 }
989 };
990 let err = isl_rs_ctx.last_error();
991 if err != Error::None_ {
992 let err_msg = isl_rs_ctx.last_error_msg();
993 isl_rs_ctx.reset_error();
994 return Err(LibISLError::new(err, err_msg));
995 }
996 Ok(isl_rs_result)
997 }
998
999 pub fn intersect_domain(self, uset: UnionSet) -> Result<MultiUnionPwAff, LibISLError> {
1001 let mupa = self;
1002 let isl_rs_ctx = mupa.get_ctx();
1003 let mut mupa = mupa;
1004 mupa.do_not_free_on_drop();
1005 let mupa = mupa.ptr;
1006 let mut uset = uset;
1007 uset.do_not_free_on_drop();
1008 let uset = uset.ptr;
1009 let isl_rs_result = unsafe { isl_multi_union_pw_aff_intersect_domain(mupa, uset) };
1010 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1011 should_free_on_drop: true };
1012 let err = isl_rs_ctx.last_error();
1013 if err != Error::None_ {
1014 let err_msg = isl_rs_ctx.last_error_msg();
1015 isl_rs_ctx.reset_error();
1016 return Err(LibISLError::new(err, err_msg));
1017 }
1018 Ok(isl_rs_result)
1019 }
1020
1021 pub fn intersect_params(self, params: Set) -> Result<MultiUnionPwAff, LibISLError> {
1023 let mupa = self;
1024 let isl_rs_ctx = mupa.get_ctx();
1025 let mut mupa = mupa;
1026 mupa.do_not_free_on_drop();
1027 let mupa = mupa.ptr;
1028 let mut params = params;
1029 params.do_not_free_on_drop();
1030 let params = params.ptr;
1031 let isl_rs_result = unsafe { isl_multi_union_pw_aff_intersect_params(mupa, params) };
1032 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1033 should_free_on_drop: true };
1034 let err = isl_rs_ctx.last_error();
1035 if err != Error::None_ {
1036 let err_msg = isl_rs_ctx.last_error_msg();
1037 isl_rs_ctx.reset_error();
1038 return Err(LibISLError::new(err, err_msg));
1039 }
1040 Ok(isl_rs_result)
1041 }
1042
1043 pub fn intersect_range(self, set: Set) -> Result<MultiUnionPwAff, LibISLError> {
1045 let mupa = self;
1046 let isl_rs_ctx = mupa.get_ctx();
1047 let mut mupa = mupa;
1048 mupa.do_not_free_on_drop();
1049 let mupa = mupa.ptr;
1050 let mut set = set;
1051 set.do_not_free_on_drop();
1052 let set = set.ptr;
1053 let isl_rs_result = unsafe { isl_multi_union_pw_aff_intersect_range(mupa, set) };
1054 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1055 should_free_on_drop: true };
1056 let err = isl_rs_ctx.last_error();
1057 if err != Error::None_ {
1058 let err_msg = isl_rs_ctx.last_error_msg();
1059 isl_rs_ctx.reset_error();
1060 return Err(LibISLError::new(err, err_msg));
1061 }
1062 Ok(isl_rs_result)
1063 }
1064
1065 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1067 let multi = self;
1068 let isl_rs_ctx = multi.get_ctx();
1069 let multi = multi.ptr;
1070 let isl_rs_result = unsafe { isl_multi_union_pw_aff_involves_nan(multi) };
1071 let isl_rs_result = match isl_rs_result {
1072 0 => false,
1073 1 => true,
1074 _ => {
1075 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1076 }
1077 };
1078 let err = isl_rs_ctx.last_error();
1079 if err != Error::None_ {
1080 let err_msg = isl_rs_ctx.last_error_msg();
1081 isl_rs_ctx.reset_error();
1082 return Err(LibISLError::new(err, err_msg));
1083 }
1084 Ok(isl_rs_result)
1085 }
1086
1087 pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1089 let mupa = self;
1090 let isl_rs_ctx = mupa.get_ctx();
1091 let mut mupa = mupa;
1092 mupa.do_not_free_on_drop();
1093 let mupa = mupa.ptr;
1094 let isl_rs_result = unsafe { isl_multi_union_pw_aff_max_multi_val(mupa) };
1095 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1096 should_free_on_drop: true };
1097 let err = isl_rs_ctx.last_error();
1098 if err != Error::None_ {
1099 let err_msg = isl_rs_ctx.last_error_msg();
1100 isl_rs_ctx.reset_error();
1101 return Err(LibISLError::new(err, err_msg));
1102 }
1103 Ok(isl_rs_result)
1104 }
1105
1106 pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1108 let mupa = self;
1109 let isl_rs_ctx = mupa.get_ctx();
1110 let mut mupa = mupa;
1111 mupa.do_not_free_on_drop();
1112 let mupa = mupa.ptr;
1113 let isl_rs_result = unsafe { isl_multi_union_pw_aff_min_multi_val(mupa) };
1114 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1115 should_free_on_drop: true };
1116 let err = isl_rs_ctx.last_error();
1117 if err != Error::None_ {
1118 let err_msg = isl_rs_ctx.last_error_msg();
1119 isl_rs_ctx.reset_error();
1120 return Err(LibISLError::new(err, err_msg));
1121 }
1122 Ok(isl_rs_result)
1123 }
1124
1125 pub fn mod_multi_val(self, mv: MultiVal) -> Result<MultiUnionPwAff, LibISLError> {
1127 let multi = self;
1128 let isl_rs_ctx = multi.get_ctx();
1129 let mut multi = multi;
1130 multi.do_not_free_on_drop();
1131 let multi = multi.ptr;
1132 let mut mv = mv;
1133 mv.do_not_free_on_drop();
1134 let mv = mv.ptr;
1135 let isl_rs_result = unsafe { isl_multi_union_pw_aff_mod_multi_val(multi, mv) };
1136 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1137 should_free_on_drop: true };
1138 let err = isl_rs_ctx.last_error();
1139 if err != Error::None_ {
1140 let err_msg = isl_rs_ctx.last_error_msg();
1141 isl_rs_ctx.reset_error();
1142 return Err(LibISLError::new(err, err_msg));
1143 }
1144 Ok(isl_rs_result)
1145 }
1146
1147 pub fn multi_aff_on_domain(domain: UnionSet, ma: MultiAff)
1149 -> Result<MultiUnionPwAff, LibISLError> {
1150 let isl_rs_ctx = domain.get_ctx();
1151 let mut domain = domain;
1152 domain.do_not_free_on_drop();
1153 let domain = domain.ptr;
1154 let mut ma = ma;
1155 ma.do_not_free_on_drop();
1156 let ma = ma.ptr;
1157 let isl_rs_result = unsafe { isl_multi_union_pw_aff_multi_aff_on_domain(domain, ma) };
1158 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1159 should_free_on_drop: true };
1160 let err = isl_rs_ctx.last_error();
1161 if err != Error::None_ {
1162 let err_msg = isl_rs_ctx.last_error_msg();
1163 isl_rs_ctx.reset_error();
1164 return Err(LibISLError::new(err, err_msg));
1165 }
1166 Ok(isl_rs_result)
1167 }
1168
1169 pub fn multi_val_on_domain(domain: UnionSet, mv: MultiVal)
1171 -> Result<MultiUnionPwAff, LibISLError> {
1172 let isl_rs_ctx = domain.get_ctx();
1173 let mut domain = domain;
1174 domain.do_not_free_on_drop();
1175 let domain = domain.ptr;
1176 let mut mv = mv;
1177 mv.do_not_free_on_drop();
1178 let mv = mv.ptr;
1179 let isl_rs_result = unsafe { isl_multi_union_pw_aff_multi_val_on_domain(domain, mv) };
1180 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1181 should_free_on_drop: true };
1182 let err = isl_rs_ctx.last_error();
1183 if err != Error::None_ {
1184 let err_msg = isl_rs_ctx.last_error_msg();
1185 isl_rs_ctx.reset_error();
1186 return Err(LibISLError::new(err, err_msg));
1187 }
1188 Ok(isl_rs_result)
1189 }
1190
1191 pub fn neg(self) -> Result<MultiUnionPwAff, LibISLError> {
1193 let multi = self;
1194 let isl_rs_ctx = multi.get_ctx();
1195 let mut multi = multi;
1196 multi.do_not_free_on_drop();
1197 let multi = multi.ptr;
1198 let isl_rs_result = unsafe { isl_multi_union_pw_aff_neg(multi) };
1199 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1200 should_free_on_drop: true };
1201 let err = isl_rs_ctx.last_error();
1202 if err != Error::None_ {
1203 let err_msg = isl_rs_ctx.last_error_msg();
1204 isl_rs_ctx.reset_error();
1205 return Err(LibISLError::new(err, err_msg));
1206 }
1207 Ok(isl_rs_result)
1208 }
1209
1210 pub fn plain_is_equal(&self, multi2: &MultiUnionPwAff) -> Result<bool, LibISLError> {
1212 let multi1 = self;
1213 let isl_rs_ctx = multi1.get_ctx();
1214 let multi1 = multi1.ptr;
1215 let multi2 = multi2.ptr;
1216 let isl_rs_result = unsafe { isl_multi_union_pw_aff_plain_is_equal(multi1, multi2) };
1217 let isl_rs_result = match isl_rs_result {
1218 0 => false,
1219 1 => true,
1220 _ => {
1221 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1222 }
1223 };
1224 let err = isl_rs_ctx.last_error();
1225 if err != Error::None_ {
1226 let err_msg = isl_rs_ctx.last_error_msg();
1227 isl_rs_ctx.reset_error();
1228 return Err(LibISLError::new(err, err_msg));
1229 }
1230 Ok(isl_rs_result)
1231 }
1232
1233 pub fn pullback_union_pw_multi_aff(self, upma: UnionPwMultiAff)
1235 -> Result<MultiUnionPwAff, LibISLError> {
1236 let mupa = self;
1237 let isl_rs_ctx = mupa.get_ctx();
1238 let mut mupa = mupa;
1239 mupa.do_not_free_on_drop();
1240 let mupa = mupa.ptr;
1241 let mut upma = upma;
1242 upma.do_not_free_on_drop();
1243 let upma = upma.ptr;
1244 let isl_rs_result =
1245 unsafe { isl_multi_union_pw_aff_pullback_union_pw_multi_aff(mupa, upma) };
1246 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1247 should_free_on_drop: true };
1248 let err = isl_rs_ctx.last_error();
1249 if err != Error::None_ {
1250 let err_msg = isl_rs_ctx.last_error_msg();
1251 isl_rs_ctx.reset_error();
1252 return Err(LibISLError::new(err, err_msg));
1253 }
1254 Ok(isl_rs_result)
1255 }
1256
1257 pub fn pw_multi_aff_on_domain(domain: UnionSet, pma: PwMultiAff)
1259 -> Result<MultiUnionPwAff, LibISLError> {
1260 let isl_rs_ctx = domain.get_ctx();
1261 let mut domain = domain;
1262 domain.do_not_free_on_drop();
1263 let domain = domain.ptr;
1264 let mut pma = pma;
1265 pma.do_not_free_on_drop();
1266 let pma = pma.ptr;
1267 let isl_rs_result = unsafe { isl_multi_union_pw_aff_pw_multi_aff_on_domain(domain, pma) };
1268 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1269 should_free_on_drop: true };
1270 let err = isl_rs_ctx.last_error();
1271 if err != Error::None_ {
1272 let err_msg = isl_rs_ctx.last_error_msg();
1273 isl_rs_ctx.reset_error();
1274 return Err(LibISLError::new(err, err_msg));
1275 }
1276 Ok(isl_rs_result)
1277 }
1278
1279 pub fn range_factor_domain(self) -> Result<MultiUnionPwAff, LibISLError> {
1281 let multi = self;
1282 let isl_rs_ctx = multi.get_ctx();
1283 let mut multi = multi;
1284 multi.do_not_free_on_drop();
1285 let multi = multi.ptr;
1286 let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_factor_domain(multi) };
1287 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1288 should_free_on_drop: true };
1289 let err = isl_rs_ctx.last_error();
1290 if err != Error::None_ {
1291 let err_msg = isl_rs_ctx.last_error_msg();
1292 isl_rs_ctx.reset_error();
1293 return Err(LibISLError::new(err, err_msg));
1294 }
1295 Ok(isl_rs_result)
1296 }
1297
1298 pub fn range_factor_range(self) -> Result<MultiUnionPwAff, LibISLError> {
1300 let multi = self;
1301 let isl_rs_ctx = multi.get_ctx();
1302 let mut multi = multi;
1303 multi.do_not_free_on_drop();
1304 let multi = multi.ptr;
1305 let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_factor_range(multi) };
1306 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1307 should_free_on_drop: true };
1308 let err = isl_rs_ctx.last_error();
1309 if err != Error::None_ {
1310 let err_msg = isl_rs_ctx.last_error_msg();
1311 isl_rs_ctx.reset_error();
1312 return Err(LibISLError::new(err, err_msg));
1313 }
1314 Ok(isl_rs_result)
1315 }
1316
1317 pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
1319 let multi = self;
1320 let isl_rs_ctx = multi.get_ctx();
1321 let multi = multi.ptr;
1322 let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_is_wrapping(multi) };
1323 let isl_rs_result = match isl_rs_result {
1324 0 => false,
1325 1 => true,
1326 _ => {
1327 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1328 }
1329 };
1330 let err = isl_rs_ctx.last_error();
1331 if err != Error::None_ {
1332 let err_msg = isl_rs_ctx.last_error_msg();
1333 isl_rs_ctx.reset_error();
1334 return Err(LibISLError::new(err, err_msg));
1335 }
1336 Ok(isl_rs_result)
1337 }
1338
1339 pub fn range_product(self, multi2: MultiUnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
1341 let multi1 = self;
1342 let isl_rs_ctx = multi1.get_ctx();
1343 let mut multi1 = multi1;
1344 multi1.do_not_free_on_drop();
1345 let multi1 = multi1.ptr;
1346 let mut multi2 = multi2;
1347 multi2.do_not_free_on_drop();
1348 let multi2 = multi2.ptr;
1349 let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_product(multi1, multi2) };
1350 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1351 should_free_on_drop: true };
1352 let err = isl_rs_ctx.last_error();
1353 if err != Error::None_ {
1354 let err_msg = isl_rs_ctx.last_error_msg();
1355 isl_rs_ctx.reset_error();
1356 return Err(LibISLError::new(err, err_msg));
1357 }
1358 Ok(isl_rs_result)
1359 }
1360
1361 pub fn range_splice(self, pos: u32, multi2: MultiUnionPwAff)
1363 -> Result<MultiUnionPwAff, LibISLError> {
1364 let multi1 = self;
1365 let isl_rs_ctx = multi1.get_ctx();
1366 let mut multi1 = multi1;
1367 multi1.do_not_free_on_drop();
1368 let multi1 = multi1.ptr;
1369 let mut multi2 = multi2;
1370 multi2.do_not_free_on_drop();
1371 let multi2 = multi2.ptr;
1372 let isl_rs_result = unsafe { isl_multi_union_pw_aff_range_splice(multi1, pos, multi2) };
1373 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1374 should_free_on_drop: true };
1375 let err = isl_rs_ctx.last_error();
1376 if err != Error::None_ {
1377 let err_msg = isl_rs_ctx.last_error_msg();
1378 isl_rs_ctx.reset_error();
1379 return Err(LibISLError::new(err, err_msg));
1380 }
1381 Ok(isl_rs_result)
1382 }
1383
1384 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<MultiUnionPwAff, LibISLError> {
1386 let isl_rs_ctx = Context { ptr: ctx.ptr,
1387 should_free_on_drop: false };
1388 let ctx = ctx.ptr;
1389 let str_ = CString::new(str_).unwrap();
1390 let str_ = str_.as_ptr();
1391 let isl_rs_result = unsafe { isl_multi_union_pw_aff_read_from_str(ctx, str_) };
1392 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1393 should_free_on_drop: true };
1394 let err = isl_rs_ctx.last_error();
1395 if err != Error::None_ {
1396 let err_msg = isl_rs_ctx.last_error_msg();
1397 isl_rs_ctx.reset_error();
1398 return Err(LibISLError::new(err, err_msg));
1399 }
1400 Ok(isl_rs_result)
1401 }
1402
1403 pub fn reset_range_tuple_id(self) -> Result<MultiUnionPwAff, LibISLError> {
1405 let multi = self;
1406 let isl_rs_ctx = multi.get_ctx();
1407 let mut multi = multi;
1408 multi.do_not_free_on_drop();
1409 let multi = multi.ptr;
1410 let isl_rs_result = unsafe { isl_multi_union_pw_aff_reset_range_tuple_id(multi) };
1411 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1412 should_free_on_drop: true };
1413 let err = isl_rs_ctx.last_error();
1414 if err != Error::None_ {
1415 let err_msg = isl_rs_ctx.last_error_msg();
1416 isl_rs_ctx.reset_error();
1417 return Err(LibISLError::new(err, err_msg));
1418 }
1419 Ok(isl_rs_result)
1420 }
1421
1422 pub fn reset_tuple_id(self, type_: DimType) -> Result<MultiUnionPwAff, LibISLError> {
1424 let multi = self;
1425 let isl_rs_ctx = multi.get_ctx();
1426 let mut multi = multi;
1427 multi.do_not_free_on_drop();
1428 let multi = multi.ptr;
1429 let type_ = type_.to_i32();
1430 let isl_rs_result = unsafe { isl_multi_union_pw_aff_reset_tuple_id(multi, type_) };
1431 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1432 should_free_on_drop: true };
1433 let err = isl_rs_ctx.last_error();
1434 if err != Error::None_ {
1435 let err_msg = isl_rs_ctx.last_error_msg();
1436 isl_rs_ctx.reset_error();
1437 return Err(LibISLError::new(err, err_msg));
1438 }
1439 Ok(isl_rs_result)
1440 }
1441
1442 pub fn reset_user(self) -> Result<MultiUnionPwAff, LibISLError> {
1444 let multi = self;
1445 let isl_rs_ctx = multi.get_ctx();
1446 let mut multi = multi;
1447 multi.do_not_free_on_drop();
1448 let multi = multi.ptr;
1449 let isl_rs_result = unsafe { isl_multi_union_pw_aff_reset_user(multi) };
1450 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1451 should_free_on_drop: true };
1452 let err = isl_rs_ctx.last_error();
1453 if err != Error::None_ {
1454 let err_msg = isl_rs_ctx.last_error_msg();
1455 isl_rs_ctx.reset_error();
1456 return Err(LibISLError::new(err, err_msg));
1457 }
1458 Ok(isl_rs_result)
1459 }
1460
1461 pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<MultiUnionPwAff, LibISLError> {
1463 let multi = self;
1464 let isl_rs_ctx = multi.get_ctx();
1465 let mut multi = multi;
1466 multi.do_not_free_on_drop();
1467 let multi = multi.ptr;
1468 let mut mv = mv;
1469 mv.do_not_free_on_drop();
1470 let mv = mv.ptr;
1471 let isl_rs_result = unsafe { isl_multi_union_pw_aff_scale_down_multi_val(multi, mv) };
1472 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1473 should_free_on_drop: true };
1474 let err = isl_rs_ctx.last_error();
1475 if err != Error::None_ {
1476 let err_msg = isl_rs_ctx.last_error_msg();
1477 isl_rs_ctx.reset_error();
1478 return Err(LibISLError::new(err, err_msg));
1479 }
1480 Ok(isl_rs_result)
1481 }
1482
1483 pub fn scale_down_val(self, v: Val) -> Result<MultiUnionPwAff, LibISLError> {
1485 let multi = self;
1486 let isl_rs_ctx = multi.get_ctx();
1487 let mut multi = multi;
1488 multi.do_not_free_on_drop();
1489 let multi = multi.ptr;
1490 let mut v = v;
1491 v.do_not_free_on_drop();
1492 let v = v.ptr;
1493 let isl_rs_result = unsafe { isl_multi_union_pw_aff_scale_down_val(multi, v) };
1494 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1495 should_free_on_drop: true };
1496 let err = isl_rs_ctx.last_error();
1497 if err != Error::None_ {
1498 let err_msg = isl_rs_ctx.last_error_msg();
1499 isl_rs_ctx.reset_error();
1500 return Err(LibISLError::new(err, err_msg));
1501 }
1502 Ok(isl_rs_result)
1503 }
1504
1505 pub fn scale_multi_val(self, mv: MultiVal) -> Result<MultiUnionPwAff, LibISLError> {
1507 let multi = self;
1508 let isl_rs_ctx = multi.get_ctx();
1509 let mut multi = multi;
1510 multi.do_not_free_on_drop();
1511 let multi = multi.ptr;
1512 let mut mv = mv;
1513 mv.do_not_free_on_drop();
1514 let mv = mv.ptr;
1515 let isl_rs_result = unsafe { isl_multi_union_pw_aff_scale_multi_val(multi, mv) };
1516 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1517 should_free_on_drop: true };
1518 let err = isl_rs_ctx.last_error();
1519 if err != Error::None_ {
1520 let err_msg = isl_rs_ctx.last_error_msg();
1521 isl_rs_ctx.reset_error();
1522 return Err(LibISLError::new(err, err_msg));
1523 }
1524 Ok(isl_rs_result)
1525 }
1526
1527 pub fn scale_val(self, v: Val) -> Result<MultiUnionPwAff, LibISLError> {
1529 let multi = self;
1530 let isl_rs_ctx = multi.get_ctx();
1531 let mut multi = multi;
1532 multi.do_not_free_on_drop();
1533 let multi = multi.ptr;
1534 let mut v = v;
1535 v.do_not_free_on_drop();
1536 let v = v.ptr;
1537 let isl_rs_result = unsafe { isl_multi_union_pw_aff_scale_val(multi, v) };
1538 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1539 should_free_on_drop: true };
1540 let err = isl_rs_ctx.last_error();
1541 if err != Error::None_ {
1542 let err_msg = isl_rs_ctx.last_error_msg();
1543 isl_rs_ctx.reset_error();
1544 return Err(LibISLError::new(err, err_msg));
1545 }
1546 Ok(isl_rs_result)
1547 }
1548
1549 pub fn set_at(self, pos: i32, el: UnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
1551 let multi = self;
1552 let isl_rs_ctx = multi.get_ctx();
1553 let mut multi = multi;
1554 multi.do_not_free_on_drop();
1555 let multi = multi.ptr;
1556 let mut el = el;
1557 el.do_not_free_on_drop();
1558 let el = el.ptr;
1559 let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_at(multi, pos, el) };
1560 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1561 should_free_on_drop: true };
1562 let err = isl_rs_ctx.last_error();
1563 if err != Error::None_ {
1564 let err_msg = isl_rs_ctx.last_error_msg();
1565 isl_rs_ctx.reset_error();
1566 return Err(LibISLError::new(err, err_msg));
1567 }
1568 Ok(isl_rs_result)
1569 }
1570
1571 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id)
1573 -> Result<MultiUnionPwAff, LibISLError> {
1574 let multi = self;
1575 let isl_rs_ctx = multi.get_ctx();
1576 let mut multi = multi;
1577 multi.do_not_free_on_drop();
1578 let multi = multi.ptr;
1579 let type_ = type_.to_i32();
1580 let mut id = id;
1581 id.do_not_free_on_drop();
1582 let id = id.ptr;
1583 let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_dim_id(multi, type_, pos, id) };
1584 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1585 should_free_on_drop: true };
1586 let err = isl_rs_ctx.last_error();
1587 if err != Error::None_ {
1588 let err_msg = isl_rs_ctx.last_error_msg();
1589 isl_rs_ctx.reset_error();
1590 return Err(LibISLError::new(err, err_msg));
1591 }
1592 Ok(isl_rs_result)
1593 }
1594
1595 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1597 -> Result<MultiUnionPwAff, LibISLError> {
1598 let multi = self;
1599 let isl_rs_ctx = multi.get_ctx();
1600 let mut multi = multi;
1601 multi.do_not_free_on_drop();
1602 let multi = multi.ptr;
1603 let type_ = type_.to_i32();
1604 let s = CString::new(s).unwrap();
1605 let s = s.as_ptr();
1606 let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_dim_name(multi, type_, pos, s) };
1607 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1608 should_free_on_drop: true };
1609 let err = isl_rs_ctx.last_error();
1610 if err != Error::None_ {
1611 let err_msg = isl_rs_ctx.last_error_msg();
1612 isl_rs_ctx.reset_error();
1613 return Err(LibISLError::new(err, err_msg));
1614 }
1615 Ok(isl_rs_result)
1616 }
1617
1618 pub fn set_range_tuple_id(self, id: Id) -> Result<MultiUnionPwAff, LibISLError> {
1620 let multi = self;
1621 let isl_rs_ctx = multi.get_ctx();
1622 let mut multi = multi;
1623 multi.do_not_free_on_drop();
1624 let multi = multi.ptr;
1625 let mut id = id;
1626 id.do_not_free_on_drop();
1627 let id = id.ptr;
1628 let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_range_tuple_id(multi, id) };
1629 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1630 should_free_on_drop: true };
1631 let err = isl_rs_ctx.last_error();
1632 if err != Error::None_ {
1633 let err_msg = isl_rs_ctx.last_error_msg();
1634 isl_rs_ctx.reset_error();
1635 return Err(LibISLError::new(err, err_msg));
1636 }
1637 Ok(isl_rs_result)
1638 }
1639
1640 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<MultiUnionPwAff, LibISLError> {
1642 let multi = self;
1643 let isl_rs_ctx = multi.get_ctx();
1644 let mut multi = multi;
1645 multi.do_not_free_on_drop();
1646 let multi = multi.ptr;
1647 let type_ = type_.to_i32();
1648 let mut id = id;
1649 id.do_not_free_on_drop();
1650 let id = id.ptr;
1651 let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_tuple_id(multi, type_, id) };
1652 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1653 should_free_on_drop: true };
1654 let err = isl_rs_ctx.last_error();
1655 if err != Error::None_ {
1656 let err_msg = isl_rs_ctx.last_error_msg();
1657 isl_rs_ctx.reset_error();
1658 return Err(LibISLError::new(err, err_msg));
1659 }
1660 Ok(isl_rs_result)
1661 }
1662
1663 pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<MultiUnionPwAff, LibISLError> {
1665 let multi = self;
1666 let isl_rs_ctx = multi.get_ctx();
1667 let mut multi = multi;
1668 multi.do_not_free_on_drop();
1669 let multi = multi.ptr;
1670 let type_ = type_.to_i32();
1671 let s = CString::new(s).unwrap();
1672 let s = s.as_ptr();
1673 let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_tuple_name(multi, type_, s) };
1674 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1675 should_free_on_drop: true };
1676 let err = isl_rs_ctx.last_error();
1677 if err != Error::None_ {
1678 let err_msg = isl_rs_ctx.last_error_msg();
1679 isl_rs_ctx.reset_error();
1680 return Err(LibISLError::new(err, err_msg));
1681 }
1682 Ok(isl_rs_result)
1683 }
1684
1685 pub fn set_union_pw_aff(self, pos: i32, el: UnionPwAff)
1687 -> Result<MultiUnionPwAff, LibISLError> {
1688 let multi = self;
1689 let isl_rs_ctx = multi.get_ctx();
1690 let mut multi = multi;
1691 multi.do_not_free_on_drop();
1692 let multi = multi.ptr;
1693 let mut el = el;
1694 el.do_not_free_on_drop();
1695 let el = el.ptr;
1696 let isl_rs_result = unsafe { isl_multi_union_pw_aff_set_union_pw_aff(multi, pos, el) };
1697 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1698 should_free_on_drop: true };
1699 let err = isl_rs_ctx.last_error();
1700 if err != Error::None_ {
1701 let err_msg = isl_rs_ctx.last_error_msg();
1702 isl_rs_ctx.reset_error();
1703 return Err(LibISLError::new(err, err_msg));
1704 }
1705 Ok(isl_rs_result)
1706 }
1707
1708 pub fn size(&self) -> Result<i32, LibISLError> {
1710 let multi = self;
1711 let isl_rs_ctx = multi.get_ctx();
1712 let multi = multi.ptr;
1713 let isl_rs_result = unsafe { isl_multi_union_pw_aff_size(multi) };
1714 let err = isl_rs_ctx.last_error();
1715 if err != Error::None_ {
1716 let err_msg = isl_rs_ctx.last_error_msg();
1717 isl_rs_ctx.reset_error();
1718 return Err(LibISLError::new(err, err_msg));
1719 }
1720 Ok(isl_rs_result)
1721 }
1722
1723 pub fn sub(self, multi2: MultiUnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
1725 let multi1 = self;
1726 let isl_rs_ctx = multi1.get_ctx();
1727 let mut multi1 = multi1;
1728 multi1.do_not_free_on_drop();
1729 let multi1 = multi1.ptr;
1730 let mut multi2 = multi2;
1731 multi2.do_not_free_on_drop();
1732 let multi2 = multi2.ptr;
1733 let isl_rs_result = unsafe { isl_multi_union_pw_aff_sub(multi1, multi2) };
1734 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1735 should_free_on_drop: true };
1736 let err = isl_rs_ctx.last_error();
1737 if err != Error::None_ {
1738 let err_msg = isl_rs_ctx.last_error_msg();
1739 isl_rs_ctx.reset_error();
1740 return Err(LibISLError::new(err, err_msg));
1741 }
1742 Ok(isl_rs_result)
1743 }
1744
1745 pub fn to_str(&self) -> Result<&str, LibISLError> {
1747 let mupa = self;
1748 let isl_rs_ctx = mupa.get_ctx();
1749 let mupa = mupa.ptr;
1750 let isl_rs_result = unsafe { isl_multi_union_pw_aff_to_str(mupa) };
1751 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1752 let isl_rs_result = isl_rs_result.to_str().unwrap();
1753 let err = isl_rs_ctx.last_error();
1754 if err != Error::None_ {
1755 let err_msg = isl_rs_ctx.last_error_msg();
1756 isl_rs_ctx.reset_error();
1757 return Err(LibISLError::new(err, err_msg));
1758 }
1759 Ok(isl_rs_result)
1760 }
1761
1762 pub fn union_add(self, mupa2: MultiUnionPwAff) -> Result<MultiUnionPwAff, LibISLError> {
1764 let mupa1 = self;
1765 let isl_rs_ctx = mupa1.get_ctx();
1766 let mut mupa1 = mupa1;
1767 mupa1.do_not_free_on_drop();
1768 let mupa1 = mupa1.ptr;
1769 let mut mupa2 = mupa2;
1770 mupa2.do_not_free_on_drop();
1771 let mupa2 = mupa2.ptr;
1772 let isl_rs_result = unsafe { isl_multi_union_pw_aff_union_add(mupa1, mupa2) };
1773 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1774 should_free_on_drop: true };
1775 let err = isl_rs_ctx.last_error();
1776 if err != Error::None_ {
1777 let err_msg = isl_rs_ctx.last_error_msg();
1778 isl_rs_ctx.reset_error();
1779 return Err(LibISLError::new(err, err_msg));
1780 }
1781 Ok(isl_rs_result)
1782 }
1783
1784 pub fn zero(space: Space) -> Result<MultiUnionPwAff, LibISLError> {
1786 let isl_rs_ctx = space.get_ctx();
1787 let mut space = space;
1788 space.do_not_free_on_drop();
1789 let space = space.ptr;
1790 let isl_rs_result = unsafe { isl_multi_union_pw_aff_zero(space) };
1791 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1792 should_free_on_drop: true };
1793 let err = isl_rs_ctx.last_error();
1794 if err != Error::None_ {
1795 let err_msg = isl_rs_ctx.last_error_msg();
1796 isl_rs_ctx.reset_error();
1797 return Err(LibISLError::new(err, err_msg));
1798 }
1799 Ok(isl_rs_result)
1800 }
1801
1802 pub fn zero_union_set(self) -> Result<UnionSet, LibISLError> {
1804 let mupa = self;
1805 let isl_rs_ctx = mupa.get_ctx();
1806 let mut mupa = mupa;
1807 mupa.do_not_free_on_drop();
1808 let mupa = mupa.ptr;
1809 let isl_rs_result = unsafe { isl_multi_union_pw_aff_zero_union_set(mupa) };
1810 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1811 should_free_on_drop: true };
1812 let err = isl_rs_ctx.last_error();
1813 if err != Error::None_ {
1814 let err_msg = isl_rs_ctx.last_error_msg();
1815 isl_rs_ctx.reset_error();
1816 return Err(LibISLError::new(err, err_msg));
1817 }
1818 Ok(isl_rs_result)
1819 }
1820
1821 pub fn do_not_free_on_drop(&mut self) {
1824 self.should_free_on_drop = false;
1825 }
1826}
1827
1828impl Drop for MultiUnionPwAff {
1829 fn drop(&mut self) {
1830 if self.should_free_on_drop {
1831 unsafe {
1832 isl_multi_union_pw_aff_free(self.ptr);
1833 }
1834 }
1835 }
1836}