1use super::{
5 Aff, Context, DimType, Error, Id, LibISLError, PwAff, PwAffList, Set, Space, UnionPwAffList,
6 UnionPwMultiAff, UnionSet, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct UnionPwAff {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_union_pw_aff_add(upa1: uintptr_t, upa2: uintptr_t) -> uintptr_t;
21
22 fn isl_union_pw_aff_add_pw_aff(upa: uintptr_t, pa: uintptr_t) -> uintptr_t;
23
24 fn isl_union_pw_aff_aff_on_domain(domain: uintptr_t, aff: uintptr_t) -> uintptr_t;
25
26 fn isl_union_pw_aff_align_params(upa: uintptr_t, model: uintptr_t) -> uintptr_t;
27
28 fn isl_union_pw_aff_bind_id(upa: uintptr_t, id: uintptr_t) -> uintptr_t;
29
30 fn isl_union_pw_aff_coalesce(upa: uintptr_t) -> uintptr_t;
31
32 fn isl_union_pw_aff_copy(upa: uintptr_t) -> uintptr_t;
33
34 fn isl_union_pw_aff_dim(upa: uintptr_t, type_: i32) -> i32;
35
36 fn isl_union_pw_aff_domain(upa: uintptr_t) -> uintptr_t;
37
38 fn isl_union_pw_aff_drop_dims(upa: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
39
40 fn isl_union_pw_aff_drop_unused_params(upa: uintptr_t) -> uintptr_t;
41
42 fn isl_union_pw_aff_dump(upa: uintptr_t) -> ();
43
44 fn isl_union_pw_aff_empty(space: uintptr_t) -> uintptr_t;
45
46 fn isl_union_pw_aff_empty_ctx(ctx: uintptr_t) -> uintptr_t;
47
48 fn isl_union_pw_aff_empty_space(space: uintptr_t) -> uintptr_t;
49
50 fn isl_union_pw_aff_extract_pw_aff(upa: uintptr_t, space: uintptr_t) -> uintptr_t;
51
52 fn isl_union_pw_aff_find_dim_by_name(upa: uintptr_t, type_: i32, name: *const c_char) -> i32;
53
54 fn isl_union_pw_aff_floor(upa: uintptr_t) -> uintptr_t;
55
56 fn isl_union_pw_aff_free(upa: uintptr_t) -> uintptr_t;
57
58 fn isl_union_pw_aff_from_aff(aff: uintptr_t) -> uintptr_t;
59
60 fn isl_union_pw_aff_from_pw_aff(pa: uintptr_t) -> uintptr_t;
61
62 fn isl_union_pw_aff_get_ctx(upa: uintptr_t) -> uintptr_t;
63
64 fn isl_union_pw_aff_get_pw_aff_list(upa: uintptr_t) -> uintptr_t;
65
66 fn isl_union_pw_aff_get_space(upa: uintptr_t) -> uintptr_t;
67
68 fn isl_union_pw_aff_gist(upa: uintptr_t, context: uintptr_t) -> uintptr_t;
69
70 fn isl_union_pw_aff_gist_params(upa: uintptr_t, context: uintptr_t) -> uintptr_t;
71
72 fn isl_union_pw_aff_intersect_domain(upa: uintptr_t, uset: uintptr_t) -> uintptr_t;
73
74 fn isl_union_pw_aff_intersect_domain_space(upa: uintptr_t, space: uintptr_t) -> uintptr_t;
75
76 fn isl_union_pw_aff_intersect_domain_union_set(upa: uintptr_t, uset: uintptr_t) -> uintptr_t;
77
78 fn isl_union_pw_aff_intersect_domain_wrapped_domain(upa: uintptr_t, uset: uintptr_t)
79 -> uintptr_t;
80
81 fn isl_union_pw_aff_intersect_domain_wrapped_range(upa: uintptr_t, uset: uintptr_t)
82 -> uintptr_t;
83
84 fn isl_union_pw_aff_intersect_params(upa: uintptr_t, set: uintptr_t) -> uintptr_t;
85
86 fn isl_union_pw_aff_involves_nan(upa: uintptr_t) -> i32;
87
88 fn isl_union_pw_aff_max_val(upa: uintptr_t) -> uintptr_t;
89
90 fn isl_union_pw_aff_min_val(upa: uintptr_t) -> uintptr_t;
91
92 fn isl_union_pw_aff_mod_val(upa: uintptr_t, f: uintptr_t) -> uintptr_t;
93
94 fn isl_union_pw_aff_n_pw_aff(upa: uintptr_t) -> i32;
95
96 fn isl_union_pw_aff_neg(upa: uintptr_t) -> uintptr_t;
97
98 fn isl_union_pw_aff_param_on_domain_id(domain: uintptr_t, id: uintptr_t) -> uintptr_t;
99
100 fn isl_union_pw_aff_plain_is_equal(upa1: uintptr_t, upa2: uintptr_t) -> i32;
101
102 fn isl_union_pw_aff_pullback_union_pw_multi_aff(upa: uintptr_t, upma: uintptr_t) -> uintptr_t;
103
104 fn isl_union_pw_aff_pw_aff_on_domain(domain: uintptr_t, pa: uintptr_t) -> uintptr_t;
105
106 fn isl_union_pw_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
107
108 fn isl_union_pw_aff_reset_user(upa: uintptr_t) -> uintptr_t;
109
110 fn isl_union_pw_aff_scale_down_val(upa: uintptr_t, v: uintptr_t) -> uintptr_t;
111
112 fn isl_union_pw_aff_scale_val(upa: uintptr_t, v: uintptr_t) -> uintptr_t;
113
114 fn isl_union_pw_aff_set_dim_name(upa: uintptr_t, type_: i32, pos: u32, s: *const c_char)
115 -> uintptr_t;
116
117 fn isl_union_pw_aff_sub(upa1: uintptr_t, upa2: uintptr_t) -> uintptr_t;
118
119 fn isl_union_pw_aff_subtract_domain(upa: uintptr_t, uset: uintptr_t) -> uintptr_t;
120
121 fn isl_union_pw_aff_subtract_domain_space(upa: uintptr_t, space: uintptr_t) -> uintptr_t;
122
123 fn isl_union_pw_aff_subtract_domain_union_set(upa: uintptr_t, uset: uintptr_t) -> uintptr_t;
124
125 fn isl_union_pw_aff_to_list(el: uintptr_t) -> uintptr_t;
126
127 fn isl_union_pw_aff_to_str(upa: uintptr_t) -> *const c_char;
128
129 fn isl_union_pw_aff_union_add(upa1: uintptr_t, upa2: uintptr_t) -> uintptr_t;
130
131 fn isl_union_pw_aff_val_on_domain(domain: uintptr_t, v: uintptr_t) -> uintptr_t;
132
133 fn isl_union_pw_aff_zero_union_set(upa: uintptr_t) -> uintptr_t;
134
135}
136
137impl UnionPwAff {
138 pub fn add(self, upa2: UnionPwAff) -> Result<UnionPwAff, LibISLError> {
140 let upa1 = self;
141 let isl_rs_ctx = upa1.get_ctx();
142 let mut upa1 = upa1;
143 upa1.do_not_free_on_drop();
144 let upa1 = upa1.ptr;
145 let mut upa2 = upa2;
146 upa2.do_not_free_on_drop();
147 let upa2 = upa2.ptr;
148 let isl_rs_result = unsafe { isl_union_pw_aff_add(upa1, upa2) };
149 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
150 should_free_on_drop: true };
151 let err = isl_rs_ctx.last_error();
152 if err != Error::None_ {
153 let err_msg = isl_rs_ctx.last_error_msg();
154 isl_rs_ctx.reset_error();
155 return Err(LibISLError::new(err, err_msg));
156 }
157 Ok(isl_rs_result)
158 }
159
160 pub fn add_pw_aff(self, pa: PwAff) -> Result<UnionPwAff, LibISLError> {
162 let upa = self;
163 let isl_rs_ctx = upa.get_ctx();
164 let mut upa = upa;
165 upa.do_not_free_on_drop();
166 let upa = upa.ptr;
167 let mut pa = pa;
168 pa.do_not_free_on_drop();
169 let pa = pa.ptr;
170 let isl_rs_result = unsafe { isl_union_pw_aff_add_pw_aff(upa, pa) };
171 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
172 should_free_on_drop: true };
173 let err = isl_rs_ctx.last_error();
174 if err != Error::None_ {
175 let err_msg = isl_rs_ctx.last_error_msg();
176 isl_rs_ctx.reset_error();
177 return Err(LibISLError::new(err, err_msg));
178 }
179 Ok(isl_rs_result)
180 }
181
182 pub fn aff_on_domain(domain: UnionSet, aff: Aff) -> Result<UnionPwAff, LibISLError> {
184 let isl_rs_ctx = domain.get_ctx();
185 let mut domain = domain;
186 domain.do_not_free_on_drop();
187 let domain = domain.ptr;
188 let mut aff = aff;
189 aff.do_not_free_on_drop();
190 let aff = aff.ptr;
191 let isl_rs_result = unsafe { isl_union_pw_aff_aff_on_domain(domain, aff) };
192 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
193 should_free_on_drop: true };
194 let err = isl_rs_ctx.last_error();
195 if err != Error::None_ {
196 let err_msg = isl_rs_ctx.last_error_msg();
197 isl_rs_ctx.reset_error();
198 return Err(LibISLError::new(err, err_msg));
199 }
200 Ok(isl_rs_result)
201 }
202
203 pub fn align_params(self, model: Space) -> Result<UnionPwAff, LibISLError> {
205 let upa = self;
206 let isl_rs_ctx = upa.get_ctx();
207 let mut upa = upa;
208 upa.do_not_free_on_drop();
209 let upa = upa.ptr;
210 let mut model = model;
211 model.do_not_free_on_drop();
212 let model = model.ptr;
213 let isl_rs_result = unsafe { isl_union_pw_aff_align_params(upa, model) };
214 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
215 should_free_on_drop: true };
216 let err = isl_rs_ctx.last_error();
217 if err != Error::None_ {
218 let err_msg = isl_rs_ctx.last_error_msg();
219 isl_rs_ctx.reset_error();
220 return Err(LibISLError::new(err, err_msg));
221 }
222 Ok(isl_rs_result)
223 }
224
225 pub fn bind_id(self, id: Id) -> Result<UnionSet, LibISLError> {
227 let upa = self;
228 let isl_rs_ctx = upa.get_ctx();
229 let mut upa = upa;
230 upa.do_not_free_on_drop();
231 let upa = upa.ptr;
232 let mut id = id;
233 id.do_not_free_on_drop();
234 let id = id.ptr;
235 let isl_rs_result = unsafe { isl_union_pw_aff_bind_id(upa, id) };
236 let isl_rs_result = UnionSet { ptr: isl_rs_result,
237 should_free_on_drop: true };
238 let err = isl_rs_ctx.last_error();
239 if err != Error::None_ {
240 let err_msg = isl_rs_ctx.last_error_msg();
241 isl_rs_ctx.reset_error();
242 return Err(LibISLError::new(err, err_msg));
243 }
244 Ok(isl_rs_result)
245 }
246
247 pub fn coalesce(self) -> Result<UnionPwAff, LibISLError> {
249 let upa = self;
250 let isl_rs_ctx = upa.get_ctx();
251 let mut upa = upa;
252 upa.do_not_free_on_drop();
253 let upa = upa.ptr;
254 let isl_rs_result = unsafe { isl_union_pw_aff_coalesce(upa) };
255 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
256 should_free_on_drop: true };
257 let err = isl_rs_ctx.last_error();
258 if err != Error::None_ {
259 let err_msg = isl_rs_ctx.last_error_msg();
260 isl_rs_ctx.reset_error();
261 return Err(LibISLError::new(err, err_msg));
262 }
263 Ok(isl_rs_result)
264 }
265
266 pub fn copy(&self) -> Result<UnionPwAff, LibISLError> {
268 let upa = self;
269 let isl_rs_ctx = upa.get_ctx();
270 let upa = upa.ptr;
271 let isl_rs_result = unsafe { isl_union_pw_aff_copy(upa) };
272 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
273 should_free_on_drop: true };
274 let err = isl_rs_ctx.last_error();
275 if err != Error::None_ {
276 let err_msg = isl_rs_ctx.last_error_msg();
277 isl_rs_ctx.reset_error();
278 return Err(LibISLError::new(err, err_msg));
279 }
280 Ok(isl_rs_result)
281 }
282
283 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
285 let upa = self;
286 let isl_rs_ctx = upa.get_ctx();
287 let upa = upa.ptr;
288 let type_ = type_.to_i32();
289 let isl_rs_result = unsafe { isl_union_pw_aff_dim(upa, type_) };
290 let err = isl_rs_ctx.last_error();
291 if err != Error::None_ {
292 let err_msg = isl_rs_ctx.last_error_msg();
293 isl_rs_ctx.reset_error();
294 return Err(LibISLError::new(err, err_msg));
295 }
296 Ok(isl_rs_result)
297 }
298
299 pub fn domain(self) -> Result<UnionSet, LibISLError> {
301 let upa = self;
302 let isl_rs_ctx = upa.get_ctx();
303 let mut upa = upa;
304 upa.do_not_free_on_drop();
305 let upa = upa.ptr;
306 let isl_rs_result = unsafe { isl_union_pw_aff_domain(upa) };
307 let isl_rs_result = UnionSet { ptr: isl_rs_result,
308 should_free_on_drop: true };
309 let err = isl_rs_ctx.last_error();
310 if err != Error::None_ {
311 let err_msg = isl_rs_ctx.last_error_msg();
312 isl_rs_ctx.reset_error();
313 return Err(LibISLError::new(err, err_msg));
314 }
315 Ok(isl_rs_result)
316 }
317
318 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<UnionPwAff, LibISLError> {
320 let upa = self;
321 let isl_rs_ctx = upa.get_ctx();
322 let mut upa = upa;
323 upa.do_not_free_on_drop();
324 let upa = upa.ptr;
325 let type_ = type_.to_i32();
326 let isl_rs_result = unsafe { isl_union_pw_aff_drop_dims(upa, type_, first, n) };
327 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
328 should_free_on_drop: true };
329 let err = isl_rs_ctx.last_error();
330 if err != Error::None_ {
331 let err_msg = isl_rs_ctx.last_error_msg();
332 isl_rs_ctx.reset_error();
333 return Err(LibISLError::new(err, err_msg));
334 }
335 Ok(isl_rs_result)
336 }
337
338 pub fn drop_unused_params(self) -> Result<UnionPwAff, LibISLError> {
340 let upa = self;
341 let isl_rs_ctx = upa.get_ctx();
342 let mut upa = upa;
343 upa.do_not_free_on_drop();
344 let upa = upa.ptr;
345 let isl_rs_result = unsafe { isl_union_pw_aff_drop_unused_params(upa) };
346 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
347 should_free_on_drop: true };
348 let err = isl_rs_ctx.last_error();
349 if err != Error::None_ {
350 let err_msg = isl_rs_ctx.last_error_msg();
351 isl_rs_ctx.reset_error();
352 return Err(LibISLError::new(err, err_msg));
353 }
354 Ok(isl_rs_result)
355 }
356
357 pub fn dump(&self) -> Result<(), LibISLError> {
359 let upa = self;
360 let isl_rs_ctx = upa.get_ctx();
361 let upa = upa.ptr;
362 let isl_rs_result = unsafe { isl_union_pw_aff_dump(upa) };
363 let err = isl_rs_ctx.last_error();
364 if err != Error::None_ {
365 let err_msg = isl_rs_ctx.last_error_msg();
366 isl_rs_ctx.reset_error();
367 return Err(LibISLError::new(err, err_msg));
368 }
369 Ok(isl_rs_result)
370 }
371
372 pub fn empty(space: Space) -> Result<UnionPwAff, LibISLError> {
374 let isl_rs_ctx = space.get_ctx();
375 let mut space = space;
376 space.do_not_free_on_drop();
377 let space = space.ptr;
378 let isl_rs_result = unsafe { isl_union_pw_aff_empty(space) };
379 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
380 should_free_on_drop: true };
381 let err = isl_rs_ctx.last_error();
382 if err != Error::None_ {
383 let err_msg = isl_rs_ctx.last_error_msg();
384 isl_rs_ctx.reset_error();
385 return Err(LibISLError::new(err, err_msg));
386 }
387 Ok(isl_rs_result)
388 }
389
390 pub fn empty_ctx(ctx: &Context) -> Result<UnionPwAff, LibISLError> {
392 let isl_rs_ctx = Context { ptr: ctx.ptr,
393 should_free_on_drop: false };
394 let ctx = ctx.ptr;
395 let isl_rs_result = unsafe { isl_union_pw_aff_empty_ctx(ctx) };
396 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
397 should_free_on_drop: true };
398 let err = isl_rs_ctx.last_error();
399 if err != Error::None_ {
400 let err_msg = isl_rs_ctx.last_error_msg();
401 isl_rs_ctx.reset_error();
402 return Err(LibISLError::new(err, err_msg));
403 }
404 Ok(isl_rs_result)
405 }
406
407 pub fn empty_space(space: Space) -> Result<UnionPwAff, LibISLError> {
409 let isl_rs_ctx = space.get_ctx();
410 let mut space = space;
411 space.do_not_free_on_drop();
412 let space = space.ptr;
413 let isl_rs_result = unsafe { isl_union_pw_aff_empty_space(space) };
414 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
415 should_free_on_drop: true };
416 let err = isl_rs_ctx.last_error();
417 if err != Error::None_ {
418 let err_msg = isl_rs_ctx.last_error_msg();
419 isl_rs_ctx.reset_error();
420 return Err(LibISLError::new(err, err_msg));
421 }
422 Ok(isl_rs_result)
423 }
424
425 pub fn extract_pw_aff(&self, space: Space) -> Result<PwAff, LibISLError> {
427 let upa = self;
428 let isl_rs_ctx = upa.get_ctx();
429 let upa = upa.ptr;
430 let mut space = space;
431 space.do_not_free_on_drop();
432 let space = space.ptr;
433 let isl_rs_result = unsafe { isl_union_pw_aff_extract_pw_aff(upa, space) };
434 let isl_rs_result = PwAff { ptr: isl_rs_result,
435 should_free_on_drop: true };
436 let err = isl_rs_ctx.last_error();
437 if err != Error::None_ {
438 let err_msg = isl_rs_ctx.last_error_msg();
439 isl_rs_ctx.reset_error();
440 return Err(LibISLError::new(err, err_msg));
441 }
442 Ok(isl_rs_result)
443 }
444
445 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
447 let upa = self;
448 let isl_rs_ctx = upa.get_ctx();
449 let upa = upa.ptr;
450 let type_ = type_.to_i32();
451 let name = CString::new(name).unwrap();
452 let name = name.as_ptr();
453 let isl_rs_result = unsafe { isl_union_pw_aff_find_dim_by_name(upa, type_, name) };
454 let err = isl_rs_ctx.last_error();
455 if err != Error::None_ {
456 let err_msg = isl_rs_ctx.last_error_msg();
457 isl_rs_ctx.reset_error();
458 return Err(LibISLError::new(err, err_msg));
459 }
460 Ok(isl_rs_result)
461 }
462
463 pub fn floor(self) -> Result<UnionPwAff, LibISLError> {
465 let upa = self;
466 let isl_rs_ctx = upa.get_ctx();
467 let mut upa = upa;
468 upa.do_not_free_on_drop();
469 let upa = upa.ptr;
470 let isl_rs_result = unsafe { isl_union_pw_aff_floor(upa) };
471 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
472 should_free_on_drop: true };
473 let err = isl_rs_ctx.last_error();
474 if err != Error::None_ {
475 let err_msg = isl_rs_ctx.last_error_msg();
476 isl_rs_ctx.reset_error();
477 return Err(LibISLError::new(err, err_msg));
478 }
479 Ok(isl_rs_result)
480 }
481
482 pub fn free(self) -> Result<UnionPwAff, LibISLError> {
484 let upa = self;
485 let isl_rs_ctx = upa.get_ctx();
486 let mut upa = upa;
487 upa.do_not_free_on_drop();
488 let upa = upa.ptr;
489 let isl_rs_result = unsafe { isl_union_pw_aff_free(upa) };
490 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
491 should_free_on_drop: true };
492 let err = isl_rs_ctx.last_error();
493 if err != Error::None_ {
494 let err_msg = isl_rs_ctx.last_error_msg();
495 isl_rs_ctx.reset_error();
496 return Err(LibISLError::new(err, err_msg));
497 }
498 Ok(isl_rs_result)
499 }
500
501 pub fn from_aff(aff: Aff) -> Result<UnionPwAff, LibISLError> {
503 let isl_rs_ctx = aff.get_ctx();
504 let mut aff = aff;
505 aff.do_not_free_on_drop();
506 let aff = aff.ptr;
507 let isl_rs_result = unsafe { isl_union_pw_aff_from_aff(aff) };
508 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
509 should_free_on_drop: true };
510 let err = isl_rs_ctx.last_error();
511 if err != Error::None_ {
512 let err_msg = isl_rs_ctx.last_error_msg();
513 isl_rs_ctx.reset_error();
514 return Err(LibISLError::new(err, err_msg));
515 }
516 Ok(isl_rs_result)
517 }
518
519 pub fn from_pw_aff(pa: PwAff) -> Result<UnionPwAff, LibISLError> {
521 let isl_rs_ctx = pa.get_ctx();
522 let mut pa = pa;
523 pa.do_not_free_on_drop();
524 let pa = pa.ptr;
525 let isl_rs_result = unsafe { isl_union_pw_aff_from_pw_aff(pa) };
526 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
527 should_free_on_drop: true };
528 let err = isl_rs_ctx.last_error();
529 if err != Error::None_ {
530 let err_msg = isl_rs_ctx.last_error_msg();
531 isl_rs_ctx.reset_error();
532 return Err(LibISLError::new(err, err_msg));
533 }
534 Ok(isl_rs_result)
535 }
536
537 pub fn get_ctx(&self) -> Context {
539 let upa = self;
540 let upa = upa.ptr;
541 let isl_rs_result = unsafe { isl_union_pw_aff_get_ctx(upa) };
542 let isl_rs_result = Context { ptr: isl_rs_result,
543 should_free_on_drop: false };
544 isl_rs_result
545 }
546
547 pub fn get_pw_aff_list(&self) -> Result<PwAffList, LibISLError> {
549 let upa = self;
550 let isl_rs_ctx = upa.get_ctx();
551 let upa = upa.ptr;
552 let isl_rs_result = unsafe { isl_union_pw_aff_get_pw_aff_list(upa) };
553 let isl_rs_result = PwAffList { ptr: isl_rs_result,
554 should_free_on_drop: true };
555 let err = isl_rs_ctx.last_error();
556 if err != Error::None_ {
557 let err_msg = isl_rs_ctx.last_error_msg();
558 isl_rs_ctx.reset_error();
559 return Err(LibISLError::new(err, err_msg));
560 }
561 Ok(isl_rs_result)
562 }
563
564 pub fn get_space(&self) -> Result<Space, LibISLError> {
566 let upa = self;
567 let isl_rs_ctx = upa.get_ctx();
568 let upa = upa.ptr;
569 let isl_rs_result = unsafe { isl_union_pw_aff_get_space(upa) };
570 let isl_rs_result = Space { ptr: isl_rs_result,
571 should_free_on_drop: true };
572 let err = isl_rs_ctx.last_error();
573 if err != Error::None_ {
574 let err_msg = isl_rs_ctx.last_error_msg();
575 isl_rs_ctx.reset_error();
576 return Err(LibISLError::new(err, err_msg));
577 }
578 Ok(isl_rs_result)
579 }
580
581 pub fn gist(self, context: UnionSet) -> Result<UnionPwAff, LibISLError> {
583 let upa = self;
584 let isl_rs_ctx = upa.get_ctx();
585 let mut upa = upa;
586 upa.do_not_free_on_drop();
587 let upa = upa.ptr;
588 let mut context = context;
589 context.do_not_free_on_drop();
590 let context = context.ptr;
591 let isl_rs_result = unsafe { isl_union_pw_aff_gist(upa, context) };
592 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
593 should_free_on_drop: true };
594 let err = isl_rs_ctx.last_error();
595 if err != Error::None_ {
596 let err_msg = isl_rs_ctx.last_error_msg();
597 isl_rs_ctx.reset_error();
598 return Err(LibISLError::new(err, err_msg));
599 }
600 Ok(isl_rs_result)
601 }
602
603 pub fn gist_params(self, context: Set) -> Result<UnionPwAff, LibISLError> {
605 let upa = self;
606 let isl_rs_ctx = upa.get_ctx();
607 let mut upa = upa;
608 upa.do_not_free_on_drop();
609 let upa = upa.ptr;
610 let mut context = context;
611 context.do_not_free_on_drop();
612 let context = context.ptr;
613 let isl_rs_result = unsafe { isl_union_pw_aff_gist_params(upa, context) };
614 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
615 should_free_on_drop: true };
616 let err = isl_rs_ctx.last_error();
617 if err != Error::None_ {
618 let err_msg = isl_rs_ctx.last_error_msg();
619 isl_rs_ctx.reset_error();
620 return Err(LibISLError::new(err, err_msg));
621 }
622 Ok(isl_rs_result)
623 }
624
625 pub fn intersect_domain(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
627 let upa = self;
628 let isl_rs_ctx = upa.get_ctx();
629 let mut upa = upa;
630 upa.do_not_free_on_drop();
631 let upa = upa.ptr;
632 let mut uset = uset;
633 uset.do_not_free_on_drop();
634 let uset = uset.ptr;
635 let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain(upa, uset) };
636 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
637 should_free_on_drop: true };
638 let err = isl_rs_ctx.last_error();
639 if err != Error::None_ {
640 let err_msg = isl_rs_ctx.last_error_msg();
641 isl_rs_ctx.reset_error();
642 return Err(LibISLError::new(err, err_msg));
643 }
644 Ok(isl_rs_result)
645 }
646
647 pub fn intersect_domain_space(self, space: Space) -> Result<UnionPwAff, LibISLError> {
649 let upa = self;
650 let isl_rs_ctx = upa.get_ctx();
651 let mut upa = upa;
652 upa.do_not_free_on_drop();
653 let upa = upa.ptr;
654 let mut space = space;
655 space.do_not_free_on_drop();
656 let space = space.ptr;
657 let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain_space(upa, space) };
658 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
659 should_free_on_drop: true };
660 let err = isl_rs_ctx.last_error();
661 if err != Error::None_ {
662 let err_msg = isl_rs_ctx.last_error_msg();
663 isl_rs_ctx.reset_error();
664 return Err(LibISLError::new(err, err_msg));
665 }
666 Ok(isl_rs_result)
667 }
668
669 pub fn intersect_domain_union_set(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
671 let upa = self;
672 let isl_rs_ctx = upa.get_ctx();
673 let mut upa = upa;
674 upa.do_not_free_on_drop();
675 let upa = upa.ptr;
676 let mut uset = uset;
677 uset.do_not_free_on_drop();
678 let uset = uset.ptr;
679 let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain_union_set(upa, uset) };
680 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
681 should_free_on_drop: true };
682 let err = isl_rs_ctx.last_error();
683 if err != Error::None_ {
684 let err_msg = isl_rs_ctx.last_error_msg();
685 isl_rs_ctx.reset_error();
686 return Err(LibISLError::new(err, err_msg));
687 }
688 Ok(isl_rs_result)
689 }
690
691 pub fn intersect_domain_wrapped_domain(self, uset: UnionSet)
693 -> Result<UnionPwAff, LibISLError> {
694 let upa = self;
695 let isl_rs_ctx = upa.get_ctx();
696 let mut upa = upa;
697 upa.do_not_free_on_drop();
698 let upa = upa.ptr;
699 let mut uset = uset;
700 uset.do_not_free_on_drop();
701 let uset = uset.ptr;
702 let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain_wrapped_domain(upa, uset) };
703 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
704 should_free_on_drop: true };
705 let err = isl_rs_ctx.last_error();
706 if err != Error::None_ {
707 let err_msg = isl_rs_ctx.last_error_msg();
708 isl_rs_ctx.reset_error();
709 return Err(LibISLError::new(err, err_msg));
710 }
711 Ok(isl_rs_result)
712 }
713
714 pub fn intersect_domain_wrapped_range(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
716 let upa = self;
717 let isl_rs_ctx = upa.get_ctx();
718 let mut upa = upa;
719 upa.do_not_free_on_drop();
720 let upa = upa.ptr;
721 let mut uset = uset;
722 uset.do_not_free_on_drop();
723 let uset = uset.ptr;
724 let isl_rs_result = unsafe { isl_union_pw_aff_intersect_domain_wrapped_range(upa, uset) };
725 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
726 should_free_on_drop: true };
727 let err = isl_rs_ctx.last_error();
728 if err != Error::None_ {
729 let err_msg = isl_rs_ctx.last_error_msg();
730 isl_rs_ctx.reset_error();
731 return Err(LibISLError::new(err, err_msg));
732 }
733 Ok(isl_rs_result)
734 }
735
736 pub fn intersect_params(self, set: Set) -> Result<UnionPwAff, LibISLError> {
738 let upa = self;
739 let isl_rs_ctx = upa.get_ctx();
740 let mut upa = upa;
741 upa.do_not_free_on_drop();
742 let upa = upa.ptr;
743 let mut set = set;
744 set.do_not_free_on_drop();
745 let set = set.ptr;
746 let isl_rs_result = unsafe { isl_union_pw_aff_intersect_params(upa, set) };
747 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
748 should_free_on_drop: true };
749 let err = isl_rs_ctx.last_error();
750 if err != Error::None_ {
751 let err_msg = isl_rs_ctx.last_error_msg();
752 isl_rs_ctx.reset_error();
753 return Err(LibISLError::new(err, err_msg));
754 }
755 Ok(isl_rs_result)
756 }
757
758 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
760 let upa = self;
761 let isl_rs_ctx = upa.get_ctx();
762 let upa = upa.ptr;
763 let isl_rs_result = unsafe { isl_union_pw_aff_involves_nan(upa) };
764 let isl_rs_result = match isl_rs_result {
765 0 => false,
766 1 => true,
767 _ => {
768 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
769 }
770 };
771 let err = isl_rs_ctx.last_error();
772 if err != Error::None_ {
773 let err_msg = isl_rs_ctx.last_error_msg();
774 isl_rs_ctx.reset_error();
775 return Err(LibISLError::new(err, err_msg));
776 }
777 Ok(isl_rs_result)
778 }
779
780 pub fn max_val(self) -> Result<Val, LibISLError> {
782 let upa = self;
783 let isl_rs_ctx = upa.get_ctx();
784 let mut upa = upa;
785 upa.do_not_free_on_drop();
786 let upa = upa.ptr;
787 let isl_rs_result = unsafe { isl_union_pw_aff_max_val(upa) };
788 let isl_rs_result = Val { ptr: isl_rs_result,
789 should_free_on_drop: true };
790 let err = isl_rs_ctx.last_error();
791 if err != Error::None_ {
792 let err_msg = isl_rs_ctx.last_error_msg();
793 isl_rs_ctx.reset_error();
794 return Err(LibISLError::new(err, err_msg));
795 }
796 Ok(isl_rs_result)
797 }
798
799 pub fn min_val(self) -> Result<Val, LibISLError> {
801 let upa = self;
802 let isl_rs_ctx = upa.get_ctx();
803 let mut upa = upa;
804 upa.do_not_free_on_drop();
805 let upa = upa.ptr;
806 let isl_rs_result = unsafe { isl_union_pw_aff_min_val(upa) };
807 let isl_rs_result = Val { ptr: isl_rs_result,
808 should_free_on_drop: true };
809 let err = isl_rs_ctx.last_error();
810 if err != Error::None_ {
811 let err_msg = isl_rs_ctx.last_error_msg();
812 isl_rs_ctx.reset_error();
813 return Err(LibISLError::new(err, err_msg));
814 }
815 Ok(isl_rs_result)
816 }
817
818 pub fn mod_val(self, f: Val) -> Result<UnionPwAff, LibISLError> {
820 let upa = self;
821 let isl_rs_ctx = upa.get_ctx();
822 let mut upa = upa;
823 upa.do_not_free_on_drop();
824 let upa = upa.ptr;
825 let mut f = f;
826 f.do_not_free_on_drop();
827 let f = f.ptr;
828 let isl_rs_result = unsafe { isl_union_pw_aff_mod_val(upa, f) };
829 let isl_rs_result = UnionPwAff { 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 n_pw_aff(&self) -> Result<i32, LibISLError> {
842 let upa = self;
843 let isl_rs_ctx = upa.get_ctx();
844 let upa = upa.ptr;
845 let isl_rs_result = unsafe { isl_union_pw_aff_n_pw_aff(upa) };
846 let err = isl_rs_ctx.last_error();
847 if err != Error::None_ {
848 let err_msg = isl_rs_ctx.last_error_msg();
849 isl_rs_ctx.reset_error();
850 return Err(LibISLError::new(err, err_msg));
851 }
852 Ok(isl_rs_result)
853 }
854
855 pub fn neg(self) -> Result<UnionPwAff, LibISLError> {
857 let upa = self;
858 let isl_rs_ctx = upa.get_ctx();
859 let mut upa = upa;
860 upa.do_not_free_on_drop();
861 let upa = upa.ptr;
862 let isl_rs_result = unsafe { isl_union_pw_aff_neg(upa) };
863 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
864 should_free_on_drop: true };
865 let err = isl_rs_ctx.last_error();
866 if err != Error::None_ {
867 let err_msg = isl_rs_ctx.last_error_msg();
868 isl_rs_ctx.reset_error();
869 return Err(LibISLError::new(err, err_msg));
870 }
871 Ok(isl_rs_result)
872 }
873
874 pub fn param_on_domain_id(domain: UnionSet, id: Id) -> Result<UnionPwAff, LibISLError> {
876 let isl_rs_ctx = domain.get_ctx();
877 let mut domain = domain;
878 domain.do_not_free_on_drop();
879 let domain = domain.ptr;
880 let mut id = id;
881 id.do_not_free_on_drop();
882 let id = id.ptr;
883 let isl_rs_result = unsafe { isl_union_pw_aff_param_on_domain_id(domain, id) };
884 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
885 should_free_on_drop: true };
886 let err = isl_rs_ctx.last_error();
887 if err != Error::None_ {
888 let err_msg = isl_rs_ctx.last_error_msg();
889 isl_rs_ctx.reset_error();
890 return Err(LibISLError::new(err, err_msg));
891 }
892 Ok(isl_rs_result)
893 }
894
895 pub fn plain_is_equal(&self, upa2: &UnionPwAff) -> Result<bool, LibISLError> {
897 let upa1 = self;
898 let isl_rs_ctx = upa1.get_ctx();
899 let upa1 = upa1.ptr;
900 let upa2 = upa2.ptr;
901 let isl_rs_result = unsafe { isl_union_pw_aff_plain_is_equal(upa1, upa2) };
902 let isl_rs_result = match isl_rs_result {
903 0 => false,
904 1 => true,
905 _ => {
906 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
907 }
908 };
909 let err = isl_rs_ctx.last_error();
910 if err != Error::None_ {
911 let err_msg = isl_rs_ctx.last_error_msg();
912 isl_rs_ctx.reset_error();
913 return Err(LibISLError::new(err, err_msg));
914 }
915 Ok(isl_rs_result)
916 }
917
918 pub fn pullback_union_pw_multi_aff(self, upma: UnionPwMultiAff)
920 -> Result<UnionPwAff, LibISLError> {
921 let upa = self;
922 let isl_rs_ctx = upa.get_ctx();
923 let mut upa = upa;
924 upa.do_not_free_on_drop();
925 let upa = upa.ptr;
926 let mut upma = upma;
927 upma.do_not_free_on_drop();
928 let upma = upma.ptr;
929 let isl_rs_result = unsafe { isl_union_pw_aff_pullback_union_pw_multi_aff(upa, upma) };
930 let isl_rs_result = UnionPwAff { 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 pw_aff_on_domain(domain: UnionSet, pa: PwAff) -> Result<UnionPwAff, LibISLError> {
943 let isl_rs_ctx = domain.get_ctx();
944 let mut domain = domain;
945 domain.do_not_free_on_drop();
946 let domain = domain.ptr;
947 let mut pa = pa;
948 pa.do_not_free_on_drop();
949 let pa = pa.ptr;
950 let isl_rs_result = unsafe { isl_union_pw_aff_pw_aff_on_domain(domain, pa) };
951 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
952 should_free_on_drop: true };
953 let err = isl_rs_ctx.last_error();
954 if err != Error::None_ {
955 let err_msg = isl_rs_ctx.last_error_msg();
956 isl_rs_ctx.reset_error();
957 return Err(LibISLError::new(err, err_msg));
958 }
959 Ok(isl_rs_result)
960 }
961
962 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<UnionPwAff, LibISLError> {
964 let isl_rs_ctx = Context { ptr: ctx.ptr,
965 should_free_on_drop: false };
966 let ctx = ctx.ptr;
967 let str_ = CString::new(str_).unwrap();
968 let str_ = str_.as_ptr();
969 let isl_rs_result = unsafe { isl_union_pw_aff_read_from_str(ctx, str_) };
970 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
971 should_free_on_drop: true };
972 let err = isl_rs_ctx.last_error();
973 if err != Error::None_ {
974 let err_msg = isl_rs_ctx.last_error_msg();
975 isl_rs_ctx.reset_error();
976 return Err(LibISLError::new(err, err_msg));
977 }
978 Ok(isl_rs_result)
979 }
980
981 pub fn reset_user(self) -> Result<UnionPwAff, LibISLError> {
983 let upa = self;
984 let isl_rs_ctx = upa.get_ctx();
985 let mut upa = upa;
986 upa.do_not_free_on_drop();
987 let upa = upa.ptr;
988 let isl_rs_result = unsafe { isl_union_pw_aff_reset_user(upa) };
989 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
990 should_free_on_drop: true };
991 let err = isl_rs_ctx.last_error();
992 if err != Error::None_ {
993 let err_msg = isl_rs_ctx.last_error_msg();
994 isl_rs_ctx.reset_error();
995 return Err(LibISLError::new(err, err_msg));
996 }
997 Ok(isl_rs_result)
998 }
999
1000 pub fn scale_down_val(self, v: Val) -> Result<UnionPwAff, LibISLError> {
1002 let upa = self;
1003 let isl_rs_ctx = upa.get_ctx();
1004 let mut upa = upa;
1005 upa.do_not_free_on_drop();
1006 let upa = upa.ptr;
1007 let mut v = v;
1008 v.do_not_free_on_drop();
1009 let v = v.ptr;
1010 let isl_rs_result = unsafe { isl_union_pw_aff_scale_down_val(upa, v) };
1011 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1012 should_free_on_drop: true };
1013 let err = isl_rs_ctx.last_error();
1014 if err != Error::None_ {
1015 let err_msg = isl_rs_ctx.last_error_msg();
1016 isl_rs_ctx.reset_error();
1017 return Err(LibISLError::new(err, err_msg));
1018 }
1019 Ok(isl_rs_result)
1020 }
1021
1022 pub fn scale_val(self, v: Val) -> Result<UnionPwAff, LibISLError> {
1024 let upa = self;
1025 let isl_rs_ctx = upa.get_ctx();
1026 let mut upa = upa;
1027 upa.do_not_free_on_drop();
1028 let upa = upa.ptr;
1029 let mut v = v;
1030 v.do_not_free_on_drop();
1031 let v = v.ptr;
1032 let isl_rs_result = unsafe { isl_union_pw_aff_scale_val(upa, v) };
1033 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1034 should_free_on_drop: true };
1035 let err = isl_rs_ctx.last_error();
1036 if err != Error::None_ {
1037 let err_msg = isl_rs_ctx.last_error_msg();
1038 isl_rs_ctx.reset_error();
1039 return Err(LibISLError::new(err, err_msg));
1040 }
1041 Ok(isl_rs_result)
1042 }
1043
1044 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1046 -> Result<UnionPwAff, LibISLError> {
1047 let upa = self;
1048 let isl_rs_ctx = upa.get_ctx();
1049 let mut upa = upa;
1050 upa.do_not_free_on_drop();
1051 let upa = upa.ptr;
1052 let type_ = type_.to_i32();
1053 let s = CString::new(s).unwrap();
1054 let s = s.as_ptr();
1055 let isl_rs_result = unsafe { isl_union_pw_aff_set_dim_name(upa, type_, pos, s) };
1056 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1057 should_free_on_drop: true };
1058 let err = isl_rs_ctx.last_error();
1059 if err != Error::None_ {
1060 let err_msg = isl_rs_ctx.last_error_msg();
1061 isl_rs_ctx.reset_error();
1062 return Err(LibISLError::new(err, err_msg));
1063 }
1064 Ok(isl_rs_result)
1065 }
1066
1067 pub fn sub(self, upa2: UnionPwAff) -> Result<UnionPwAff, LibISLError> {
1069 let upa1 = self;
1070 let isl_rs_ctx = upa1.get_ctx();
1071 let mut upa1 = upa1;
1072 upa1.do_not_free_on_drop();
1073 let upa1 = upa1.ptr;
1074 let mut upa2 = upa2;
1075 upa2.do_not_free_on_drop();
1076 let upa2 = upa2.ptr;
1077 let isl_rs_result = unsafe { isl_union_pw_aff_sub(upa1, upa2) };
1078 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1079 should_free_on_drop: true };
1080 let err = isl_rs_ctx.last_error();
1081 if err != Error::None_ {
1082 let err_msg = isl_rs_ctx.last_error_msg();
1083 isl_rs_ctx.reset_error();
1084 return Err(LibISLError::new(err, err_msg));
1085 }
1086 Ok(isl_rs_result)
1087 }
1088
1089 pub fn subtract_domain(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
1091 let upa = self;
1092 let isl_rs_ctx = upa.get_ctx();
1093 let mut upa = upa;
1094 upa.do_not_free_on_drop();
1095 let upa = upa.ptr;
1096 let mut uset = uset;
1097 uset.do_not_free_on_drop();
1098 let uset = uset.ptr;
1099 let isl_rs_result = unsafe { isl_union_pw_aff_subtract_domain(upa, uset) };
1100 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1101 should_free_on_drop: true };
1102 let err = isl_rs_ctx.last_error();
1103 if err != Error::None_ {
1104 let err_msg = isl_rs_ctx.last_error_msg();
1105 isl_rs_ctx.reset_error();
1106 return Err(LibISLError::new(err, err_msg));
1107 }
1108 Ok(isl_rs_result)
1109 }
1110
1111 pub fn subtract_domain_space(self, space: Space) -> Result<UnionPwAff, LibISLError> {
1113 let upa = self;
1114 let isl_rs_ctx = upa.get_ctx();
1115 let mut upa = upa;
1116 upa.do_not_free_on_drop();
1117 let upa = upa.ptr;
1118 let mut space = space;
1119 space.do_not_free_on_drop();
1120 let space = space.ptr;
1121 let isl_rs_result = unsafe { isl_union_pw_aff_subtract_domain_space(upa, space) };
1122 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1123 should_free_on_drop: true };
1124 let err = isl_rs_ctx.last_error();
1125 if err != Error::None_ {
1126 let err_msg = isl_rs_ctx.last_error_msg();
1127 isl_rs_ctx.reset_error();
1128 return Err(LibISLError::new(err, err_msg));
1129 }
1130 Ok(isl_rs_result)
1131 }
1132
1133 pub fn subtract_domain_union_set(self, uset: UnionSet) -> Result<UnionPwAff, LibISLError> {
1135 let upa = self;
1136 let isl_rs_ctx = upa.get_ctx();
1137 let mut upa = upa;
1138 upa.do_not_free_on_drop();
1139 let upa = upa.ptr;
1140 let mut uset = uset;
1141 uset.do_not_free_on_drop();
1142 let uset = uset.ptr;
1143 let isl_rs_result = unsafe { isl_union_pw_aff_subtract_domain_union_set(upa, uset) };
1144 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1145 should_free_on_drop: true };
1146 let err = isl_rs_ctx.last_error();
1147 if err != Error::None_ {
1148 let err_msg = isl_rs_ctx.last_error_msg();
1149 isl_rs_ctx.reset_error();
1150 return Err(LibISLError::new(err, err_msg));
1151 }
1152 Ok(isl_rs_result)
1153 }
1154
1155 pub fn to_list(self) -> Result<UnionPwAffList, LibISLError> {
1157 let el = self;
1158 let isl_rs_ctx = el.get_ctx();
1159 let mut el = el;
1160 el.do_not_free_on_drop();
1161 let el = el.ptr;
1162 let isl_rs_result = unsafe { isl_union_pw_aff_to_list(el) };
1163 let isl_rs_result = UnionPwAffList { ptr: isl_rs_result,
1164 should_free_on_drop: true };
1165 let err = isl_rs_ctx.last_error();
1166 if err != Error::None_ {
1167 let err_msg = isl_rs_ctx.last_error_msg();
1168 isl_rs_ctx.reset_error();
1169 return Err(LibISLError::new(err, err_msg));
1170 }
1171 Ok(isl_rs_result)
1172 }
1173
1174 pub fn to_str(&self) -> Result<&str, LibISLError> {
1176 let upa = self;
1177 let isl_rs_ctx = upa.get_ctx();
1178 let upa = upa.ptr;
1179 let isl_rs_result = unsafe { isl_union_pw_aff_to_str(upa) };
1180 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1181 let isl_rs_result = isl_rs_result.to_str().unwrap();
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 union_add(self, upa2: UnionPwAff) -> Result<UnionPwAff, LibISLError> {
1193 let upa1 = self;
1194 let isl_rs_ctx = upa1.get_ctx();
1195 let mut upa1 = upa1;
1196 upa1.do_not_free_on_drop();
1197 let upa1 = upa1.ptr;
1198 let mut upa2 = upa2;
1199 upa2.do_not_free_on_drop();
1200 let upa2 = upa2.ptr;
1201 let isl_rs_result = unsafe { isl_union_pw_aff_union_add(upa1, upa2) };
1202 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1203 should_free_on_drop: true };
1204 let err = isl_rs_ctx.last_error();
1205 if err != Error::None_ {
1206 let err_msg = isl_rs_ctx.last_error_msg();
1207 isl_rs_ctx.reset_error();
1208 return Err(LibISLError::new(err, err_msg));
1209 }
1210 Ok(isl_rs_result)
1211 }
1212
1213 pub fn val_on_domain(domain: UnionSet, v: Val) -> Result<UnionPwAff, LibISLError> {
1215 let isl_rs_ctx = domain.get_ctx();
1216 let mut domain = domain;
1217 domain.do_not_free_on_drop();
1218 let domain = domain.ptr;
1219 let mut v = v;
1220 v.do_not_free_on_drop();
1221 let v = v.ptr;
1222 let isl_rs_result = unsafe { isl_union_pw_aff_val_on_domain(domain, v) };
1223 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
1224 should_free_on_drop: true };
1225 let err = isl_rs_ctx.last_error();
1226 if err != Error::None_ {
1227 let err_msg = isl_rs_ctx.last_error_msg();
1228 isl_rs_ctx.reset_error();
1229 return Err(LibISLError::new(err, err_msg));
1230 }
1231 Ok(isl_rs_result)
1232 }
1233
1234 pub fn zero_union_set(self) -> Result<UnionSet, LibISLError> {
1236 let upa = self;
1237 let isl_rs_ctx = upa.get_ctx();
1238 let mut upa = upa;
1239 upa.do_not_free_on_drop();
1240 let upa = upa.ptr;
1241 let isl_rs_result = unsafe { isl_union_pw_aff_zero_union_set(upa) };
1242 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1243 should_free_on_drop: true };
1244 let err = isl_rs_ctx.last_error();
1245 if err != Error::None_ {
1246 let err_msg = isl_rs_ctx.last_error_msg();
1247 isl_rs_ctx.reset_error();
1248 return Err(LibISLError::new(err, err_msg));
1249 }
1250 Ok(isl_rs_result)
1251 }
1252
1253 pub fn do_not_free_on_drop(&mut self) {
1256 self.should_free_on_drop = false;
1257 }
1258}
1259
1260impl Drop for UnionPwAff {
1261 fn drop(&mut self) {
1262 if self.should_free_on_drop {
1263 unsafe {
1264 isl_union_pw_aff_free(self.ptr);
1265 }
1266 }
1267 }
1268}