1use super::{
5 Aff, Context, DimType, Error, Id, LibISLError, LocalSpace, Map, MultiAff, MultiId, MultiPwAff,
6 Point, PwAffList, PwMultiAff, Set, Space, UnionPwAff, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct PwAff {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_pw_aff_add(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
21
22 fn isl_pw_aff_add_constant_val(pa: uintptr_t, v: uintptr_t) -> uintptr_t;
23
24 fn isl_pw_aff_add_dims(pwaff: uintptr_t, type_: i32, n: u32) -> uintptr_t;
25
26 fn isl_pw_aff_align_params(pwaff: uintptr_t, model: uintptr_t) -> uintptr_t;
27
28 fn isl_pw_aff_alloc(set: uintptr_t, aff: uintptr_t) -> uintptr_t;
29
30 fn isl_pw_aff_as_aff(pa: uintptr_t) -> uintptr_t;
31
32 fn isl_pw_aff_as_map(pa: uintptr_t) -> uintptr_t;
33
34 fn isl_pw_aff_bind_domain(pa: uintptr_t, tuple: uintptr_t) -> uintptr_t;
35
36 fn isl_pw_aff_bind_domain_wrapped_domain(pa: uintptr_t, tuple: uintptr_t) -> uintptr_t;
37
38 fn isl_pw_aff_bind_id(pa: uintptr_t, id: uintptr_t) -> uintptr_t;
39
40 fn isl_pw_aff_ceil(pwaff: uintptr_t) -> uintptr_t;
41
42 fn isl_pw_aff_coalesce(pa: uintptr_t) -> uintptr_t;
43
44 fn isl_pw_aff_cond(cond: uintptr_t, pwaff_true: uintptr_t, pwaff_false: uintptr_t)
45 -> uintptr_t;
46
47 fn isl_pw_aff_copy(pwaff: uintptr_t) -> uintptr_t;
48
49 fn isl_pw_aff_dim(pwaff: uintptr_t, type_: i32) -> i32;
50
51 fn isl_pw_aff_div(pa1: uintptr_t, pa2: uintptr_t) -> uintptr_t;
52
53 fn isl_pw_aff_domain(pwaff: uintptr_t) -> uintptr_t;
54
55 fn isl_pw_aff_domain_reverse(pa: uintptr_t) -> uintptr_t;
56
57 fn isl_pw_aff_drop_dims(pwaff: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
58
59 fn isl_pw_aff_drop_unused_params(pa: uintptr_t) -> uintptr_t;
60
61 fn isl_pw_aff_dump(pwaff: uintptr_t) -> ();
62
63 fn isl_pw_aff_empty(space: uintptr_t) -> uintptr_t;
64
65 fn isl_pw_aff_eq_map(pa1: uintptr_t, pa2: uintptr_t) -> uintptr_t;
66
67 fn isl_pw_aff_eq_set(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
68
69 fn isl_pw_aff_eval(pa: uintptr_t, pnt: uintptr_t) -> uintptr_t;
70
71 fn isl_pw_aff_find_dim_by_name(pa: uintptr_t, type_: i32, name: *const c_char) -> i32;
72
73 fn isl_pw_aff_floor(pwaff: uintptr_t) -> uintptr_t;
74
75 fn isl_pw_aff_free(pwaff: uintptr_t) -> uintptr_t;
76
77 fn isl_pw_aff_from_aff(aff: uintptr_t) -> uintptr_t;
78
79 fn isl_pw_aff_from_range(pwa: uintptr_t) -> uintptr_t;
80
81 fn isl_pw_aff_ge_map(pa1: uintptr_t, pa2: uintptr_t) -> uintptr_t;
82
83 fn isl_pw_aff_ge_set(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
84
85 fn isl_pw_aff_get_ctx(pwaff: uintptr_t) -> uintptr_t;
86
87 fn isl_pw_aff_get_dim_id(pa: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
88
89 fn isl_pw_aff_get_dim_name(pa: uintptr_t, type_: i32, pos: u32) -> *const c_char;
90
91 fn isl_pw_aff_get_domain_space(pwaff: uintptr_t) -> uintptr_t;
92
93 fn isl_pw_aff_get_hash(pa: uintptr_t) -> u32;
94
95 fn isl_pw_aff_get_space(pwaff: uintptr_t) -> uintptr_t;
96
97 fn isl_pw_aff_get_tuple_id(pa: uintptr_t, type_: i32) -> uintptr_t;
98
99 fn isl_pw_aff_gist(pwaff: uintptr_t, context: uintptr_t) -> uintptr_t;
100
101 fn isl_pw_aff_gist_params(pwaff: uintptr_t, context: uintptr_t) -> uintptr_t;
102
103 fn isl_pw_aff_gt_map(pa1: uintptr_t, pa2: uintptr_t) -> uintptr_t;
104
105 fn isl_pw_aff_gt_set(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
106
107 fn isl_pw_aff_has_dim_id(pa: uintptr_t, type_: i32, pos: u32) -> i32;
108
109 fn isl_pw_aff_has_tuple_id(pa: uintptr_t, type_: i32) -> i32;
110
111 fn isl_pw_aff_insert_dims(pwaff: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
112
113 fn isl_pw_aff_insert_domain(pa: uintptr_t, domain: uintptr_t) -> uintptr_t;
114
115 fn isl_pw_aff_intersect_domain(pa: uintptr_t, set: uintptr_t) -> uintptr_t;
116
117 fn isl_pw_aff_intersect_domain_wrapped_domain(pa: uintptr_t, set: uintptr_t) -> uintptr_t;
118
119 fn isl_pw_aff_intersect_domain_wrapped_range(pa: uintptr_t, set: uintptr_t) -> uintptr_t;
120
121 fn isl_pw_aff_intersect_params(pa: uintptr_t, set: uintptr_t) -> uintptr_t;
122
123 fn isl_pw_aff_involves_dims(pwaff: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
124
125 fn isl_pw_aff_involves_nan(pa: uintptr_t) -> i32;
126
127 fn isl_pw_aff_involves_param_id(pa: uintptr_t, id: uintptr_t) -> i32;
128
129 fn isl_pw_aff_is_cst(pwaff: uintptr_t) -> i32;
130
131 fn isl_pw_aff_is_empty(pwaff: uintptr_t) -> i32;
132
133 fn isl_pw_aff_is_equal(pa1: uintptr_t, pa2: uintptr_t) -> i32;
134
135 fn isl_pw_aff_isa_aff(pa: uintptr_t) -> i32;
136
137 fn isl_pw_aff_le_map(pa1: uintptr_t, pa2: uintptr_t) -> uintptr_t;
138
139 fn isl_pw_aff_le_set(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
140
141 fn isl_pw_aff_lt_map(pa1: uintptr_t, pa2: uintptr_t) -> uintptr_t;
142
143 fn isl_pw_aff_lt_set(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
144
145 fn isl_pw_aff_max(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
146
147 fn isl_pw_aff_max_val(pa: uintptr_t) -> uintptr_t;
148
149 fn isl_pw_aff_min(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
150
151 fn isl_pw_aff_min_val(pa: uintptr_t) -> uintptr_t;
152
153 fn isl_pw_aff_mod_val(pa: uintptr_t, mod_: uintptr_t) -> uintptr_t;
154
155 fn isl_pw_aff_move_dims(pa: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32,
156 src_pos: u32, n: u32)
157 -> uintptr_t;
158
159 fn isl_pw_aff_mul(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
160
161 fn isl_pw_aff_n_piece(pwaff: uintptr_t) -> i32;
162
163 fn isl_pw_aff_nan_on_domain(ls: uintptr_t) -> uintptr_t;
164
165 fn isl_pw_aff_nan_on_domain_space(space: uintptr_t) -> uintptr_t;
166
167 fn isl_pw_aff_ne_set(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
168
169 fn isl_pw_aff_neg(pwaff: uintptr_t) -> uintptr_t;
170
171 fn isl_pw_aff_non_zero_set(pwaff: uintptr_t) -> uintptr_t;
172
173 fn isl_pw_aff_nonneg_set(pwaff: uintptr_t) -> uintptr_t;
174
175 fn isl_pw_aff_param_on_domain_id(domain: uintptr_t, id: uintptr_t) -> uintptr_t;
176
177 fn isl_pw_aff_params(pwa: uintptr_t) -> uintptr_t;
178
179 fn isl_pw_aff_plain_cmp(pa1: uintptr_t, pa2: uintptr_t) -> i32;
180
181 fn isl_pw_aff_plain_is_equal(pwaff1: uintptr_t, pwaff2: uintptr_t) -> i32;
182
183 fn isl_pw_aff_pos_set(pa: uintptr_t) -> uintptr_t;
184
185 fn isl_pw_aff_project_domain_on_params(pa: uintptr_t) -> uintptr_t;
186
187 fn isl_pw_aff_pullback_multi_aff(pa: uintptr_t, ma: uintptr_t) -> uintptr_t;
188
189 fn isl_pw_aff_pullback_multi_pw_aff(pa: uintptr_t, mpa: uintptr_t) -> uintptr_t;
190
191 fn isl_pw_aff_pullback_pw_multi_aff(pa: uintptr_t, pma: uintptr_t) -> uintptr_t;
192
193 fn isl_pw_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
194
195 fn isl_pw_aff_reset_tuple_id(pa: uintptr_t, type_: i32) -> uintptr_t;
196
197 fn isl_pw_aff_reset_user(pa: uintptr_t) -> uintptr_t;
198
199 fn isl_pw_aff_scale_down_val(pa: uintptr_t, f: uintptr_t) -> uintptr_t;
200
201 fn isl_pw_aff_scale_val(pa: uintptr_t, v: uintptr_t) -> uintptr_t;
202
203 fn isl_pw_aff_set_dim_id(pma: uintptr_t, type_: i32, pos: u32, id: uintptr_t) -> uintptr_t;
204
205 fn isl_pw_aff_set_tuple_id(pwaff: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
206
207 fn isl_pw_aff_sub(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
208
209 fn isl_pw_aff_subtract_domain(pa: uintptr_t, set: uintptr_t) -> uintptr_t;
210
211 fn isl_pw_aff_tdiv_q(pa1: uintptr_t, pa2: uintptr_t) -> uintptr_t;
212
213 fn isl_pw_aff_tdiv_r(pa1: uintptr_t, pa2: uintptr_t) -> uintptr_t;
214
215 fn isl_pw_aff_to_list(el: uintptr_t) -> uintptr_t;
216
217 fn isl_pw_aff_to_str(pa: uintptr_t) -> *const c_char;
218
219 fn isl_pw_aff_to_union_pw_aff(pa: uintptr_t) -> uintptr_t;
220
221 fn isl_pw_aff_union_add(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
222
223 fn isl_pw_aff_union_max(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
224
225 fn isl_pw_aff_union_min(pwaff1: uintptr_t, pwaff2: uintptr_t) -> uintptr_t;
226
227 fn isl_pw_aff_val_on_domain(domain: uintptr_t, v: uintptr_t) -> uintptr_t;
228
229 fn isl_pw_aff_var_on_domain(ls: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
230
231 fn isl_pw_aff_zero_on_domain(ls: uintptr_t) -> uintptr_t;
232
233 fn isl_pw_aff_zero_set(pwaff: uintptr_t) -> uintptr_t;
234
235}
236
237impl PwAff {
238 pub fn add(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
240 let pwaff1 = self;
241 let isl_rs_ctx = pwaff1.get_ctx();
242 let mut pwaff1 = pwaff1;
243 pwaff1.do_not_free_on_drop();
244 let pwaff1 = pwaff1.ptr;
245 let mut pwaff2 = pwaff2;
246 pwaff2.do_not_free_on_drop();
247 let pwaff2 = pwaff2.ptr;
248 let isl_rs_result = unsafe { isl_pw_aff_add(pwaff1, pwaff2) };
249 let isl_rs_result = PwAff { ptr: isl_rs_result,
250 should_free_on_drop: true };
251 let err = isl_rs_ctx.last_error();
252 if err != Error::None_ {
253 let err_msg = isl_rs_ctx.last_error_msg();
254 isl_rs_ctx.reset_error();
255 return Err(LibISLError::new(err, err_msg));
256 }
257 Ok(isl_rs_result)
258 }
259
260 pub fn add_constant_val(self, v: Val) -> Result<PwAff, LibISLError> {
262 let pa = self;
263 let isl_rs_ctx = pa.get_ctx();
264 let mut pa = pa;
265 pa.do_not_free_on_drop();
266 let pa = pa.ptr;
267 let mut v = v;
268 v.do_not_free_on_drop();
269 let v = v.ptr;
270 let isl_rs_result = unsafe { isl_pw_aff_add_constant_val(pa, v) };
271 let isl_rs_result = PwAff { ptr: isl_rs_result,
272 should_free_on_drop: true };
273 let err = isl_rs_ctx.last_error();
274 if err != Error::None_ {
275 let err_msg = isl_rs_ctx.last_error_msg();
276 isl_rs_ctx.reset_error();
277 return Err(LibISLError::new(err, err_msg));
278 }
279 Ok(isl_rs_result)
280 }
281
282 pub fn add_dims(self, type_: DimType, n: u32) -> Result<PwAff, LibISLError> {
284 let pwaff = self;
285 let isl_rs_ctx = pwaff.get_ctx();
286 let mut pwaff = pwaff;
287 pwaff.do_not_free_on_drop();
288 let pwaff = pwaff.ptr;
289 let type_ = type_.to_i32();
290 let isl_rs_result = unsafe { isl_pw_aff_add_dims(pwaff, type_, n) };
291 let isl_rs_result = PwAff { ptr: isl_rs_result,
292 should_free_on_drop: true };
293 let err = isl_rs_ctx.last_error();
294 if err != Error::None_ {
295 let err_msg = isl_rs_ctx.last_error_msg();
296 isl_rs_ctx.reset_error();
297 return Err(LibISLError::new(err, err_msg));
298 }
299 Ok(isl_rs_result)
300 }
301
302 pub fn align_params(self, model: Space) -> Result<PwAff, LibISLError> {
304 let pwaff = self;
305 let isl_rs_ctx = pwaff.get_ctx();
306 let mut pwaff = pwaff;
307 pwaff.do_not_free_on_drop();
308 let pwaff = pwaff.ptr;
309 let mut model = model;
310 model.do_not_free_on_drop();
311 let model = model.ptr;
312 let isl_rs_result = unsafe { isl_pw_aff_align_params(pwaff, model) };
313 let isl_rs_result = PwAff { ptr: isl_rs_result,
314 should_free_on_drop: true };
315 let err = isl_rs_ctx.last_error();
316 if err != Error::None_ {
317 let err_msg = isl_rs_ctx.last_error_msg();
318 isl_rs_ctx.reset_error();
319 return Err(LibISLError::new(err, err_msg));
320 }
321 Ok(isl_rs_result)
322 }
323
324 pub fn alloc(set: Set, aff: Aff) -> Result<PwAff, LibISLError> {
326 let isl_rs_ctx = set.get_ctx();
327 let mut set = set;
328 set.do_not_free_on_drop();
329 let set = set.ptr;
330 let mut aff = aff;
331 aff.do_not_free_on_drop();
332 let aff = aff.ptr;
333 let isl_rs_result = unsafe { isl_pw_aff_alloc(set, aff) };
334 let isl_rs_result = PwAff { ptr: isl_rs_result,
335 should_free_on_drop: true };
336 let err = isl_rs_ctx.last_error();
337 if err != Error::None_ {
338 let err_msg = isl_rs_ctx.last_error_msg();
339 isl_rs_ctx.reset_error();
340 return Err(LibISLError::new(err, err_msg));
341 }
342 Ok(isl_rs_result)
343 }
344
345 pub fn as_aff(self) -> Result<Aff, LibISLError> {
347 let pa = self;
348 let isl_rs_ctx = pa.get_ctx();
349 let mut pa = pa;
350 pa.do_not_free_on_drop();
351 let pa = pa.ptr;
352 let isl_rs_result = unsafe { isl_pw_aff_as_aff(pa) };
353 let isl_rs_result = Aff { ptr: isl_rs_result,
354 should_free_on_drop: true };
355 let err = isl_rs_ctx.last_error();
356 if err != Error::None_ {
357 let err_msg = isl_rs_ctx.last_error_msg();
358 isl_rs_ctx.reset_error();
359 return Err(LibISLError::new(err, err_msg));
360 }
361 Ok(isl_rs_result)
362 }
363
364 pub fn as_map(self) -> Result<Map, LibISLError> {
366 let pa = self;
367 let isl_rs_ctx = pa.get_ctx();
368 let mut pa = pa;
369 pa.do_not_free_on_drop();
370 let pa = pa.ptr;
371 let isl_rs_result = unsafe { isl_pw_aff_as_map(pa) };
372 let isl_rs_result = Map { ptr: isl_rs_result,
373 should_free_on_drop: true };
374 let err = isl_rs_ctx.last_error();
375 if err != Error::None_ {
376 let err_msg = isl_rs_ctx.last_error_msg();
377 isl_rs_ctx.reset_error();
378 return Err(LibISLError::new(err, err_msg));
379 }
380 Ok(isl_rs_result)
381 }
382
383 pub fn bind_domain(self, tuple: MultiId) -> Result<PwAff, LibISLError> {
385 let pa = self;
386 let isl_rs_ctx = pa.get_ctx();
387 let mut pa = pa;
388 pa.do_not_free_on_drop();
389 let pa = pa.ptr;
390 let mut tuple = tuple;
391 tuple.do_not_free_on_drop();
392 let tuple = tuple.ptr;
393 let isl_rs_result = unsafe { isl_pw_aff_bind_domain(pa, tuple) };
394 let isl_rs_result = PwAff { ptr: isl_rs_result,
395 should_free_on_drop: true };
396 let err = isl_rs_ctx.last_error();
397 if err != Error::None_ {
398 let err_msg = isl_rs_ctx.last_error_msg();
399 isl_rs_ctx.reset_error();
400 return Err(LibISLError::new(err, err_msg));
401 }
402 Ok(isl_rs_result)
403 }
404
405 pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<PwAff, LibISLError> {
407 let pa = self;
408 let isl_rs_ctx = pa.get_ctx();
409 let mut pa = pa;
410 pa.do_not_free_on_drop();
411 let pa = pa.ptr;
412 let mut tuple = tuple;
413 tuple.do_not_free_on_drop();
414 let tuple = tuple.ptr;
415 let isl_rs_result = unsafe { isl_pw_aff_bind_domain_wrapped_domain(pa, tuple) };
416 let isl_rs_result = PwAff { ptr: isl_rs_result,
417 should_free_on_drop: true };
418 let err = isl_rs_ctx.last_error();
419 if err != Error::None_ {
420 let err_msg = isl_rs_ctx.last_error_msg();
421 isl_rs_ctx.reset_error();
422 return Err(LibISLError::new(err, err_msg));
423 }
424 Ok(isl_rs_result)
425 }
426
427 pub fn bind_id(self, id: Id) -> Result<Set, LibISLError> {
429 let pa = self;
430 let isl_rs_ctx = pa.get_ctx();
431 let mut pa = pa;
432 pa.do_not_free_on_drop();
433 let pa = pa.ptr;
434 let mut id = id;
435 id.do_not_free_on_drop();
436 let id = id.ptr;
437 let isl_rs_result = unsafe { isl_pw_aff_bind_id(pa, id) };
438 let isl_rs_result = Set { ptr: isl_rs_result,
439 should_free_on_drop: true };
440 let err = isl_rs_ctx.last_error();
441 if err != Error::None_ {
442 let err_msg = isl_rs_ctx.last_error_msg();
443 isl_rs_ctx.reset_error();
444 return Err(LibISLError::new(err, err_msg));
445 }
446 Ok(isl_rs_result)
447 }
448
449 pub fn ceil(self) -> Result<PwAff, LibISLError> {
451 let pwaff = self;
452 let isl_rs_ctx = pwaff.get_ctx();
453 let mut pwaff = pwaff;
454 pwaff.do_not_free_on_drop();
455 let pwaff = pwaff.ptr;
456 let isl_rs_result = unsafe { isl_pw_aff_ceil(pwaff) };
457 let isl_rs_result = PwAff { ptr: isl_rs_result,
458 should_free_on_drop: true };
459 let err = isl_rs_ctx.last_error();
460 if err != Error::None_ {
461 let err_msg = isl_rs_ctx.last_error_msg();
462 isl_rs_ctx.reset_error();
463 return Err(LibISLError::new(err, err_msg));
464 }
465 Ok(isl_rs_result)
466 }
467
468 pub fn coalesce(self) -> Result<PwAff, LibISLError> {
470 let pa = self;
471 let isl_rs_ctx = pa.get_ctx();
472 let mut pa = pa;
473 pa.do_not_free_on_drop();
474 let pa = pa.ptr;
475 let isl_rs_result = unsafe { isl_pw_aff_coalesce(pa) };
476 let isl_rs_result = PwAff { ptr: isl_rs_result,
477 should_free_on_drop: true };
478 let err = isl_rs_ctx.last_error();
479 if err != Error::None_ {
480 let err_msg = isl_rs_ctx.last_error_msg();
481 isl_rs_ctx.reset_error();
482 return Err(LibISLError::new(err, err_msg));
483 }
484 Ok(isl_rs_result)
485 }
486
487 pub fn cond(self, pwaff_true: PwAff, pwaff_false: PwAff) -> Result<PwAff, LibISLError> {
489 let cond = self;
490 let isl_rs_ctx = cond.get_ctx();
491 let mut cond = cond;
492 cond.do_not_free_on_drop();
493 let cond = cond.ptr;
494 let mut pwaff_true = pwaff_true;
495 pwaff_true.do_not_free_on_drop();
496 let pwaff_true = pwaff_true.ptr;
497 let mut pwaff_false = pwaff_false;
498 pwaff_false.do_not_free_on_drop();
499 let pwaff_false = pwaff_false.ptr;
500 let isl_rs_result = unsafe { isl_pw_aff_cond(cond, pwaff_true, pwaff_false) };
501 let isl_rs_result = PwAff { ptr: isl_rs_result,
502 should_free_on_drop: true };
503 let err = isl_rs_ctx.last_error();
504 if err != Error::None_ {
505 let err_msg = isl_rs_ctx.last_error_msg();
506 isl_rs_ctx.reset_error();
507 return Err(LibISLError::new(err, err_msg));
508 }
509 Ok(isl_rs_result)
510 }
511
512 pub fn copy(&self) -> Result<PwAff, LibISLError> {
514 let pwaff = self;
515 let isl_rs_ctx = pwaff.get_ctx();
516 let pwaff = pwaff.ptr;
517 let isl_rs_result = unsafe { isl_pw_aff_copy(pwaff) };
518 let isl_rs_result = PwAff { ptr: isl_rs_result,
519 should_free_on_drop: true };
520 let err = isl_rs_ctx.last_error();
521 if err != Error::None_ {
522 let err_msg = isl_rs_ctx.last_error_msg();
523 isl_rs_ctx.reset_error();
524 return Err(LibISLError::new(err, err_msg));
525 }
526 Ok(isl_rs_result)
527 }
528
529 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
531 let pwaff = self;
532 let isl_rs_ctx = pwaff.get_ctx();
533 let pwaff = pwaff.ptr;
534 let type_ = type_.to_i32();
535 let isl_rs_result = unsafe { isl_pw_aff_dim(pwaff, type_) };
536 let err = isl_rs_ctx.last_error();
537 if err != Error::None_ {
538 let err_msg = isl_rs_ctx.last_error_msg();
539 isl_rs_ctx.reset_error();
540 return Err(LibISLError::new(err, err_msg));
541 }
542 Ok(isl_rs_result)
543 }
544
545 pub fn div(self, pa2: PwAff) -> Result<PwAff, LibISLError> {
547 let pa1 = self;
548 let isl_rs_ctx = pa1.get_ctx();
549 let mut pa1 = pa1;
550 pa1.do_not_free_on_drop();
551 let pa1 = pa1.ptr;
552 let mut pa2 = pa2;
553 pa2.do_not_free_on_drop();
554 let pa2 = pa2.ptr;
555 let isl_rs_result = unsafe { isl_pw_aff_div(pa1, pa2) };
556 let isl_rs_result = PwAff { ptr: isl_rs_result,
557 should_free_on_drop: true };
558 let err = isl_rs_ctx.last_error();
559 if err != Error::None_ {
560 let err_msg = isl_rs_ctx.last_error_msg();
561 isl_rs_ctx.reset_error();
562 return Err(LibISLError::new(err, err_msg));
563 }
564 Ok(isl_rs_result)
565 }
566
567 pub fn domain(self) -> Result<Set, LibISLError> {
569 let pwaff = self;
570 let isl_rs_ctx = pwaff.get_ctx();
571 let mut pwaff = pwaff;
572 pwaff.do_not_free_on_drop();
573 let pwaff = pwaff.ptr;
574 let isl_rs_result = unsafe { isl_pw_aff_domain(pwaff) };
575 let isl_rs_result = Set { ptr: isl_rs_result,
576 should_free_on_drop: true };
577 let err = isl_rs_ctx.last_error();
578 if err != Error::None_ {
579 let err_msg = isl_rs_ctx.last_error_msg();
580 isl_rs_ctx.reset_error();
581 return Err(LibISLError::new(err, err_msg));
582 }
583 Ok(isl_rs_result)
584 }
585
586 pub fn domain_reverse(self) -> Result<PwAff, LibISLError> {
588 let pa = self;
589 let isl_rs_ctx = pa.get_ctx();
590 let mut pa = pa;
591 pa.do_not_free_on_drop();
592 let pa = pa.ptr;
593 let isl_rs_result = unsafe { isl_pw_aff_domain_reverse(pa) };
594 let isl_rs_result = PwAff { ptr: isl_rs_result,
595 should_free_on_drop: true };
596 let err = isl_rs_ctx.last_error();
597 if err != Error::None_ {
598 let err_msg = isl_rs_ctx.last_error_msg();
599 isl_rs_ctx.reset_error();
600 return Err(LibISLError::new(err, err_msg));
601 }
602 Ok(isl_rs_result)
603 }
604
605 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<PwAff, LibISLError> {
607 let pwaff = self;
608 let isl_rs_ctx = pwaff.get_ctx();
609 let mut pwaff = pwaff;
610 pwaff.do_not_free_on_drop();
611 let pwaff = pwaff.ptr;
612 let type_ = type_.to_i32();
613 let isl_rs_result = unsafe { isl_pw_aff_drop_dims(pwaff, type_, first, n) };
614 let isl_rs_result = PwAff { 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 drop_unused_params(self) -> Result<PwAff, LibISLError> {
627 let pa = self;
628 let isl_rs_ctx = pa.get_ctx();
629 let mut pa = pa;
630 pa.do_not_free_on_drop();
631 let pa = pa.ptr;
632 let isl_rs_result = unsafe { isl_pw_aff_drop_unused_params(pa) };
633 let isl_rs_result = PwAff { ptr: isl_rs_result,
634 should_free_on_drop: true };
635 let err = isl_rs_ctx.last_error();
636 if err != Error::None_ {
637 let err_msg = isl_rs_ctx.last_error_msg();
638 isl_rs_ctx.reset_error();
639 return Err(LibISLError::new(err, err_msg));
640 }
641 Ok(isl_rs_result)
642 }
643
644 pub fn dump(&self) -> Result<(), LibISLError> {
646 let pwaff = self;
647 let isl_rs_ctx = pwaff.get_ctx();
648 let pwaff = pwaff.ptr;
649 let isl_rs_result = unsafe { isl_pw_aff_dump(pwaff) };
650 let err = isl_rs_ctx.last_error();
651 if err != Error::None_ {
652 let err_msg = isl_rs_ctx.last_error_msg();
653 isl_rs_ctx.reset_error();
654 return Err(LibISLError::new(err, err_msg));
655 }
656 Ok(isl_rs_result)
657 }
658
659 pub fn empty(space: Space) -> Result<PwAff, LibISLError> {
661 let isl_rs_ctx = space.get_ctx();
662 let mut space = space;
663 space.do_not_free_on_drop();
664 let space = space.ptr;
665 let isl_rs_result = unsafe { isl_pw_aff_empty(space) };
666 let isl_rs_result = PwAff { ptr: isl_rs_result,
667 should_free_on_drop: true };
668 let err = isl_rs_ctx.last_error();
669 if err != Error::None_ {
670 let err_msg = isl_rs_ctx.last_error_msg();
671 isl_rs_ctx.reset_error();
672 return Err(LibISLError::new(err, err_msg));
673 }
674 Ok(isl_rs_result)
675 }
676
677 pub fn eq_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
679 let pa1 = self;
680 let isl_rs_ctx = pa1.get_ctx();
681 let mut pa1 = pa1;
682 pa1.do_not_free_on_drop();
683 let pa1 = pa1.ptr;
684 let mut pa2 = pa2;
685 pa2.do_not_free_on_drop();
686 let pa2 = pa2.ptr;
687 let isl_rs_result = unsafe { isl_pw_aff_eq_map(pa1, pa2) };
688 let isl_rs_result = Map { ptr: isl_rs_result,
689 should_free_on_drop: true };
690 let err = isl_rs_ctx.last_error();
691 if err != Error::None_ {
692 let err_msg = isl_rs_ctx.last_error_msg();
693 isl_rs_ctx.reset_error();
694 return Err(LibISLError::new(err, err_msg));
695 }
696 Ok(isl_rs_result)
697 }
698
699 pub fn eq_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
701 let pwaff1 = self;
702 let isl_rs_ctx = pwaff1.get_ctx();
703 let mut pwaff1 = pwaff1;
704 pwaff1.do_not_free_on_drop();
705 let pwaff1 = pwaff1.ptr;
706 let mut pwaff2 = pwaff2;
707 pwaff2.do_not_free_on_drop();
708 let pwaff2 = pwaff2.ptr;
709 let isl_rs_result = unsafe { isl_pw_aff_eq_set(pwaff1, pwaff2) };
710 let isl_rs_result = Set { ptr: isl_rs_result,
711 should_free_on_drop: true };
712 let err = isl_rs_ctx.last_error();
713 if err != Error::None_ {
714 let err_msg = isl_rs_ctx.last_error_msg();
715 isl_rs_ctx.reset_error();
716 return Err(LibISLError::new(err, err_msg));
717 }
718 Ok(isl_rs_result)
719 }
720
721 pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
723 let pa = self;
724 let isl_rs_ctx = pa.get_ctx();
725 let mut pa = pa;
726 pa.do_not_free_on_drop();
727 let pa = pa.ptr;
728 let mut pnt = pnt;
729 pnt.do_not_free_on_drop();
730 let pnt = pnt.ptr;
731 let isl_rs_result = unsafe { isl_pw_aff_eval(pa, pnt) };
732 let isl_rs_result = Val { ptr: isl_rs_result,
733 should_free_on_drop: true };
734 let err = isl_rs_ctx.last_error();
735 if err != Error::None_ {
736 let err_msg = isl_rs_ctx.last_error_msg();
737 isl_rs_ctx.reset_error();
738 return Err(LibISLError::new(err, err_msg));
739 }
740 Ok(isl_rs_result)
741 }
742
743 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
745 let pa = self;
746 let isl_rs_ctx = pa.get_ctx();
747 let pa = pa.ptr;
748 let type_ = type_.to_i32();
749 let name = CString::new(name).unwrap();
750 let name = name.as_ptr();
751 let isl_rs_result = unsafe { isl_pw_aff_find_dim_by_name(pa, type_, name) };
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 floor(self) -> Result<PwAff, LibISLError> {
763 let pwaff = self;
764 let isl_rs_ctx = pwaff.get_ctx();
765 let mut pwaff = pwaff;
766 pwaff.do_not_free_on_drop();
767 let pwaff = pwaff.ptr;
768 let isl_rs_result = unsafe { isl_pw_aff_floor(pwaff) };
769 let isl_rs_result = PwAff { ptr: isl_rs_result,
770 should_free_on_drop: true };
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 free(self) -> Result<PwAff, LibISLError> {
782 let pwaff = self;
783 let isl_rs_ctx = pwaff.get_ctx();
784 let mut pwaff = pwaff;
785 pwaff.do_not_free_on_drop();
786 let pwaff = pwaff.ptr;
787 let isl_rs_result = unsafe { isl_pw_aff_free(pwaff) };
788 let isl_rs_result = PwAff { 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 from_aff(aff: Aff) -> Result<PwAff, LibISLError> {
801 let isl_rs_ctx = aff.get_ctx();
802 let mut aff = aff;
803 aff.do_not_free_on_drop();
804 let aff = aff.ptr;
805 let isl_rs_result = unsafe { isl_pw_aff_from_aff(aff) };
806 let isl_rs_result = PwAff { ptr: isl_rs_result,
807 should_free_on_drop: true };
808 let err = isl_rs_ctx.last_error();
809 if err != Error::None_ {
810 let err_msg = isl_rs_ctx.last_error_msg();
811 isl_rs_ctx.reset_error();
812 return Err(LibISLError::new(err, err_msg));
813 }
814 Ok(isl_rs_result)
815 }
816
817 pub fn from_range(self) -> Result<PwAff, LibISLError> {
819 let pwa = self;
820 let isl_rs_ctx = pwa.get_ctx();
821 let mut pwa = pwa;
822 pwa.do_not_free_on_drop();
823 let pwa = pwa.ptr;
824 let isl_rs_result = unsafe { isl_pw_aff_from_range(pwa) };
825 let isl_rs_result = PwAff { ptr: isl_rs_result,
826 should_free_on_drop: true };
827 let err = isl_rs_ctx.last_error();
828 if err != Error::None_ {
829 let err_msg = isl_rs_ctx.last_error_msg();
830 isl_rs_ctx.reset_error();
831 return Err(LibISLError::new(err, err_msg));
832 }
833 Ok(isl_rs_result)
834 }
835
836 pub fn ge_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
838 let pa1 = self;
839 let isl_rs_ctx = pa1.get_ctx();
840 let mut pa1 = pa1;
841 pa1.do_not_free_on_drop();
842 let pa1 = pa1.ptr;
843 let mut pa2 = pa2;
844 pa2.do_not_free_on_drop();
845 let pa2 = pa2.ptr;
846 let isl_rs_result = unsafe { isl_pw_aff_ge_map(pa1, pa2) };
847 let isl_rs_result = Map { ptr: isl_rs_result,
848 should_free_on_drop: true };
849 let err = isl_rs_ctx.last_error();
850 if err != Error::None_ {
851 let err_msg = isl_rs_ctx.last_error_msg();
852 isl_rs_ctx.reset_error();
853 return Err(LibISLError::new(err, err_msg));
854 }
855 Ok(isl_rs_result)
856 }
857
858 pub fn ge_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
860 let pwaff1 = self;
861 let isl_rs_ctx = pwaff1.get_ctx();
862 let mut pwaff1 = pwaff1;
863 pwaff1.do_not_free_on_drop();
864 let pwaff1 = pwaff1.ptr;
865 let mut pwaff2 = pwaff2;
866 pwaff2.do_not_free_on_drop();
867 let pwaff2 = pwaff2.ptr;
868 let isl_rs_result = unsafe { isl_pw_aff_ge_set(pwaff1, pwaff2) };
869 let isl_rs_result = Set { ptr: isl_rs_result,
870 should_free_on_drop: true };
871 let err = isl_rs_ctx.last_error();
872 if err != Error::None_ {
873 let err_msg = isl_rs_ctx.last_error_msg();
874 isl_rs_ctx.reset_error();
875 return Err(LibISLError::new(err, err_msg));
876 }
877 Ok(isl_rs_result)
878 }
879
880 pub fn get_ctx(&self) -> Context {
882 let pwaff = self;
883 let pwaff = pwaff.ptr;
884 let isl_rs_result = unsafe { isl_pw_aff_get_ctx(pwaff) };
885 let isl_rs_result = Context { ptr: isl_rs_result,
886 should_free_on_drop: false };
887 isl_rs_result
888 }
889
890 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
892 let pa = self;
893 let isl_rs_ctx = pa.get_ctx();
894 let pa = pa.ptr;
895 let type_ = type_.to_i32();
896 let isl_rs_result = unsafe { isl_pw_aff_get_dim_id(pa, type_, pos) };
897 let isl_rs_result = Id { ptr: isl_rs_result,
898 should_free_on_drop: true };
899 let err = isl_rs_ctx.last_error();
900 if err != Error::None_ {
901 let err_msg = isl_rs_ctx.last_error_msg();
902 isl_rs_ctx.reset_error();
903 return Err(LibISLError::new(err, err_msg));
904 }
905 Ok(isl_rs_result)
906 }
907
908 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
910 let pa = self;
911 let isl_rs_ctx = pa.get_ctx();
912 let pa = pa.ptr;
913 let type_ = type_.to_i32();
914 let isl_rs_result = unsafe { isl_pw_aff_get_dim_name(pa, type_, pos) };
915 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
916 let isl_rs_result = isl_rs_result.to_str().unwrap();
917 let err = isl_rs_ctx.last_error();
918 if err != Error::None_ {
919 let err_msg = isl_rs_ctx.last_error_msg();
920 isl_rs_ctx.reset_error();
921 return Err(LibISLError::new(err, err_msg));
922 }
923 Ok(isl_rs_result)
924 }
925
926 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
928 let pwaff = self;
929 let isl_rs_ctx = pwaff.get_ctx();
930 let pwaff = pwaff.ptr;
931 let isl_rs_result = unsafe { isl_pw_aff_get_domain_space(pwaff) };
932 let isl_rs_result = Space { ptr: isl_rs_result,
933 should_free_on_drop: true };
934 let err = isl_rs_ctx.last_error();
935 if err != Error::None_ {
936 let err_msg = isl_rs_ctx.last_error_msg();
937 isl_rs_ctx.reset_error();
938 return Err(LibISLError::new(err, err_msg));
939 }
940 Ok(isl_rs_result)
941 }
942
943 pub fn get_hash(&self) -> Result<u32, LibISLError> {
945 let pa = self;
946 let isl_rs_ctx = pa.get_ctx();
947 let pa = pa.ptr;
948 let isl_rs_result = unsafe { isl_pw_aff_get_hash(pa) };
949 let err = isl_rs_ctx.last_error();
950 if err != Error::None_ {
951 let err_msg = isl_rs_ctx.last_error_msg();
952 isl_rs_ctx.reset_error();
953 return Err(LibISLError::new(err, err_msg));
954 }
955 Ok(isl_rs_result)
956 }
957
958 pub fn get_space(&self) -> Result<Space, LibISLError> {
960 let pwaff = self;
961 let isl_rs_ctx = pwaff.get_ctx();
962 let pwaff = pwaff.ptr;
963 let isl_rs_result = unsafe { isl_pw_aff_get_space(pwaff) };
964 let isl_rs_result = Space { ptr: isl_rs_result,
965 should_free_on_drop: true };
966 let err = isl_rs_ctx.last_error();
967 if err != Error::None_ {
968 let err_msg = isl_rs_ctx.last_error_msg();
969 isl_rs_ctx.reset_error();
970 return Err(LibISLError::new(err, err_msg));
971 }
972 Ok(isl_rs_result)
973 }
974
975 pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
977 let pa = self;
978 let isl_rs_ctx = pa.get_ctx();
979 let pa = pa.ptr;
980 let type_ = type_.to_i32();
981 let isl_rs_result = unsafe { isl_pw_aff_get_tuple_id(pa, type_) };
982 let isl_rs_result = Id { ptr: isl_rs_result,
983 should_free_on_drop: true };
984 let err = isl_rs_ctx.last_error();
985 if err != Error::None_ {
986 let err_msg = isl_rs_ctx.last_error_msg();
987 isl_rs_ctx.reset_error();
988 return Err(LibISLError::new(err, err_msg));
989 }
990 Ok(isl_rs_result)
991 }
992
993 pub fn gist(self, context: Set) -> Result<PwAff, LibISLError> {
995 let pwaff = self;
996 let isl_rs_ctx = pwaff.get_ctx();
997 let mut pwaff = pwaff;
998 pwaff.do_not_free_on_drop();
999 let pwaff = pwaff.ptr;
1000 let mut context = context;
1001 context.do_not_free_on_drop();
1002 let context = context.ptr;
1003 let isl_rs_result = unsafe { isl_pw_aff_gist(pwaff, context) };
1004 let isl_rs_result = PwAff { ptr: isl_rs_result,
1005 should_free_on_drop: true };
1006 let err = isl_rs_ctx.last_error();
1007 if err != Error::None_ {
1008 let err_msg = isl_rs_ctx.last_error_msg();
1009 isl_rs_ctx.reset_error();
1010 return Err(LibISLError::new(err, err_msg));
1011 }
1012 Ok(isl_rs_result)
1013 }
1014
1015 pub fn gist_params(self, context: Set) -> Result<PwAff, LibISLError> {
1017 let pwaff = self;
1018 let isl_rs_ctx = pwaff.get_ctx();
1019 let mut pwaff = pwaff;
1020 pwaff.do_not_free_on_drop();
1021 let pwaff = pwaff.ptr;
1022 let mut context = context;
1023 context.do_not_free_on_drop();
1024 let context = context.ptr;
1025 let isl_rs_result = unsafe { isl_pw_aff_gist_params(pwaff, context) };
1026 let isl_rs_result = PwAff { ptr: isl_rs_result,
1027 should_free_on_drop: true };
1028 let err = isl_rs_ctx.last_error();
1029 if err != Error::None_ {
1030 let err_msg = isl_rs_ctx.last_error_msg();
1031 isl_rs_ctx.reset_error();
1032 return Err(LibISLError::new(err, err_msg));
1033 }
1034 Ok(isl_rs_result)
1035 }
1036
1037 pub fn gt_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
1039 let pa1 = self;
1040 let isl_rs_ctx = pa1.get_ctx();
1041 let mut pa1 = pa1;
1042 pa1.do_not_free_on_drop();
1043 let pa1 = pa1.ptr;
1044 let mut pa2 = pa2;
1045 pa2.do_not_free_on_drop();
1046 let pa2 = pa2.ptr;
1047 let isl_rs_result = unsafe { isl_pw_aff_gt_map(pa1, pa2) };
1048 let isl_rs_result = Map { ptr: isl_rs_result,
1049 should_free_on_drop: true };
1050 let err = isl_rs_ctx.last_error();
1051 if err != Error::None_ {
1052 let err_msg = isl_rs_ctx.last_error_msg();
1053 isl_rs_ctx.reset_error();
1054 return Err(LibISLError::new(err, err_msg));
1055 }
1056 Ok(isl_rs_result)
1057 }
1058
1059 pub fn gt_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
1061 let pwaff1 = self;
1062 let isl_rs_ctx = pwaff1.get_ctx();
1063 let mut pwaff1 = pwaff1;
1064 pwaff1.do_not_free_on_drop();
1065 let pwaff1 = pwaff1.ptr;
1066 let mut pwaff2 = pwaff2;
1067 pwaff2.do_not_free_on_drop();
1068 let pwaff2 = pwaff2.ptr;
1069 let isl_rs_result = unsafe { isl_pw_aff_gt_set(pwaff1, pwaff2) };
1070 let isl_rs_result = Set { ptr: isl_rs_result,
1071 should_free_on_drop: true };
1072 let err = isl_rs_ctx.last_error();
1073 if err != Error::None_ {
1074 let err_msg = isl_rs_ctx.last_error_msg();
1075 isl_rs_ctx.reset_error();
1076 return Err(LibISLError::new(err, err_msg));
1077 }
1078 Ok(isl_rs_result)
1079 }
1080
1081 pub fn has_dim_id(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1083 let pa = self;
1084 let isl_rs_ctx = pa.get_ctx();
1085 let pa = pa.ptr;
1086 let type_ = type_.to_i32();
1087 let isl_rs_result = unsafe { isl_pw_aff_has_dim_id(pa, type_, pos) };
1088 let isl_rs_result = match isl_rs_result {
1089 0 => false,
1090 1 => true,
1091 _ => {
1092 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1093 }
1094 };
1095 let err = isl_rs_ctx.last_error();
1096 if err != Error::None_ {
1097 let err_msg = isl_rs_ctx.last_error_msg();
1098 isl_rs_ctx.reset_error();
1099 return Err(LibISLError::new(err, err_msg));
1100 }
1101 Ok(isl_rs_result)
1102 }
1103
1104 pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1106 let pa = self;
1107 let isl_rs_ctx = pa.get_ctx();
1108 let pa = pa.ptr;
1109 let type_ = type_.to_i32();
1110 let isl_rs_result = unsafe { isl_pw_aff_has_tuple_id(pa, type_) };
1111 let isl_rs_result = match isl_rs_result {
1112 0 => false,
1113 1 => true,
1114 _ => {
1115 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1116 }
1117 };
1118 let err = isl_rs_ctx.last_error();
1119 if err != Error::None_ {
1120 let err_msg = isl_rs_ctx.last_error_msg();
1121 isl_rs_ctx.reset_error();
1122 return Err(LibISLError::new(err, err_msg));
1123 }
1124 Ok(isl_rs_result)
1125 }
1126
1127 pub fn insert_dims(self, type_: DimType, first: u32, n: u32) -> Result<PwAff, LibISLError> {
1129 let pwaff = self;
1130 let isl_rs_ctx = pwaff.get_ctx();
1131 let mut pwaff = pwaff;
1132 pwaff.do_not_free_on_drop();
1133 let pwaff = pwaff.ptr;
1134 let type_ = type_.to_i32();
1135 let isl_rs_result = unsafe { isl_pw_aff_insert_dims(pwaff, type_, first, n) };
1136 let isl_rs_result = PwAff { 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 insert_domain(self, domain: Space) -> Result<PwAff, LibISLError> {
1149 let pa = self;
1150 let isl_rs_ctx = pa.get_ctx();
1151 let mut pa = pa;
1152 pa.do_not_free_on_drop();
1153 let pa = pa.ptr;
1154 let mut domain = domain;
1155 domain.do_not_free_on_drop();
1156 let domain = domain.ptr;
1157 let isl_rs_result = unsafe { isl_pw_aff_insert_domain(pa, domain) };
1158 let isl_rs_result = PwAff { 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 intersect_domain(self, set: Set) -> Result<PwAff, LibISLError> {
1171 let pa = self;
1172 let isl_rs_ctx = pa.get_ctx();
1173 let mut pa = pa;
1174 pa.do_not_free_on_drop();
1175 let pa = pa.ptr;
1176 let mut set = set;
1177 set.do_not_free_on_drop();
1178 let set = set.ptr;
1179 let isl_rs_result = unsafe { isl_pw_aff_intersect_domain(pa, set) };
1180 let isl_rs_result = PwAff { 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 intersect_domain_wrapped_domain(self, set: Set) -> Result<PwAff, LibISLError> {
1193 let pa = self;
1194 let isl_rs_ctx = pa.get_ctx();
1195 let mut pa = pa;
1196 pa.do_not_free_on_drop();
1197 let pa = pa.ptr;
1198 let mut set = set;
1199 set.do_not_free_on_drop();
1200 let set = set.ptr;
1201 let isl_rs_result = unsafe { isl_pw_aff_intersect_domain_wrapped_domain(pa, set) };
1202 let isl_rs_result = PwAff { 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 intersect_domain_wrapped_range(self, set: Set) -> Result<PwAff, LibISLError> {
1215 let pa = self;
1216 let isl_rs_ctx = pa.get_ctx();
1217 let mut pa = pa;
1218 pa.do_not_free_on_drop();
1219 let pa = pa.ptr;
1220 let mut set = set;
1221 set.do_not_free_on_drop();
1222 let set = set.ptr;
1223 let isl_rs_result = unsafe { isl_pw_aff_intersect_domain_wrapped_range(pa, set) };
1224 let isl_rs_result = PwAff { ptr: isl_rs_result,
1225 should_free_on_drop: true };
1226 let err = isl_rs_ctx.last_error();
1227 if err != Error::None_ {
1228 let err_msg = isl_rs_ctx.last_error_msg();
1229 isl_rs_ctx.reset_error();
1230 return Err(LibISLError::new(err, err_msg));
1231 }
1232 Ok(isl_rs_result)
1233 }
1234
1235 pub fn intersect_params(self, set: Set) -> Result<PwAff, LibISLError> {
1237 let pa = self;
1238 let isl_rs_ctx = pa.get_ctx();
1239 let mut pa = pa;
1240 pa.do_not_free_on_drop();
1241 let pa = pa.ptr;
1242 let mut set = set;
1243 set.do_not_free_on_drop();
1244 let set = set.ptr;
1245 let isl_rs_result = unsafe { isl_pw_aff_intersect_params(pa, set) };
1246 let isl_rs_result = PwAff { 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 involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1259 let pwaff = self;
1260 let isl_rs_ctx = pwaff.get_ctx();
1261 let pwaff = pwaff.ptr;
1262 let type_ = type_.to_i32();
1263 let isl_rs_result = unsafe { isl_pw_aff_involves_dims(pwaff, type_, first, n) };
1264 let isl_rs_result = match isl_rs_result {
1265 0 => false,
1266 1 => true,
1267 _ => {
1268 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1269 }
1270 };
1271 let err = isl_rs_ctx.last_error();
1272 if err != Error::None_ {
1273 let err_msg = isl_rs_ctx.last_error_msg();
1274 isl_rs_ctx.reset_error();
1275 return Err(LibISLError::new(err, err_msg));
1276 }
1277 Ok(isl_rs_result)
1278 }
1279
1280 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1282 let pa = self;
1283 let isl_rs_ctx = pa.get_ctx();
1284 let pa = pa.ptr;
1285 let isl_rs_result = unsafe { isl_pw_aff_involves_nan(pa) };
1286 let isl_rs_result = match isl_rs_result {
1287 0 => false,
1288 1 => true,
1289 _ => {
1290 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1291 }
1292 };
1293 let err = isl_rs_ctx.last_error();
1294 if err != Error::None_ {
1295 let err_msg = isl_rs_ctx.last_error_msg();
1296 isl_rs_ctx.reset_error();
1297 return Err(LibISLError::new(err, err_msg));
1298 }
1299 Ok(isl_rs_result)
1300 }
1301
1302 pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1304 let pa = self;
1305 let isl_rs_ctx = pa.get_ctx();
1306 let pa = pa.ptr;
1307 let id = id.ptr;
1308 let isl_rs_result = unsafe { isl_pw_aff_involves_param_id(pa, id) };
1309 let isl_rs_result = match isl_rs_result {
1310 0 => false,
1311 1 => true,
1312 _ => {
1313 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1314 }
1315 };
1316 let err = isl_rs_ctx.last_error();
1317 if err != Error::None_ {
1318 let err_msg = isl_rs_ctx.last_error_msg();
1319 isl_rs_ctx.reset_error();
1320 return Err(LibISLError::new(err, err_msg));
1321 }
1322 Ok(isl_rs_result)
1323 }
1324
1325 pub fn is_cst(&self) -> Result<bool, LibISLError> {
1327 let pwaff = self;
1328 let isl_rs_ctx = pwaff.get_ctx();
1329 let pwaff = pwaff.ptr;
1330 let isl_rs_result = unsafe { isl_pw_aff_is_cst(pwaff) };
1331 let isl_rs_result = match isl_rs_result {
1332 0 => false,
1333 1 => true,
1334 _ => {
1335 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1336 }
1337 };
1338 let err = isl_rs_ctx.last_error();
1339 if err != Error::None_ {
1340 let err_msg = isl_rs_ctx.last_error_msg();
1341 isl_rs_ctx.reset_error();
1342 return Err(LibISLError::new(err, err_msg));
1343 }
1344 Ok(isl_rs_result)
1345 }
1346
1347 pub fn is_empty(&self) -> Result<bool, LibISLError> {
1349 let pwaff = self;
1350 let isl_rs_ctx = pwaff.get_ctx();
1351 let pwaff = pwaff.ptr;
1352 let isl_rs_result = unsafe { isl_pw_aff_is_empty(pwaff) };
1353 let isl_rs_result = match isl_rs_result {
1354 0 => false,
1355 1 => true,
1356 _ => {
1357 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1358 }
1359 };
1360 let err = isl_rs_ctx.last_error();
1361 if err != Error::None_ {
1362 let err_msg = isl_rs_ctx.last_error_msg();
1363 isl_rs_ctx.reset_error();
1364 return Err(LibISLError::new(err, err_msg));
1365 }
1366 Ok(isl_rs_result)
1367 }
1368
1369 pub fn is_equal(&self, pa2: &PwAff) -> Result<bool, LibISLError> {
1371 let pa1 = self;
1372 let isl_rs_ctx = pa1.get_ctx();
1373 let pa1 = pa1.ptr;
1374 let pa2 = pa2.ptr;
1375 let isl_rs_result = unsafe { isl_pw_aff_is_equal(pa1, pa2) };
1376 let isl_rs_result = match isl_rs_result {
1377 0 => false,
1378 1 => true,
1379 _ => {
1380 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1381 }
1382 };
1383 let err = isl_rs_ctx.last_error();
1384 if err != Error::None_ {
1385 let err_msg = isl_rs_ctx.last_error_msg();
1386 isl_rs_ctx.reset_error();
1387 return Err(LibISLError::new(err, err_msg));
1388 }
1389 Ok(isl_rs_result)
1390 }
1391
1392 pub fn isa_aff(&self) -> Result<bool, LibISLError> {
1394 let pa = self;
1395 let isl_rs_ctx = pa.get_ctx();
1396 let pa = pa.ptr;
1397 let isl_rs_result = unsafe { isl_pw_aff_isa_aff(pa) };
1398 let isl_rs_result = match isl_rs_result {
1399 0 => false,
1400 1 => true,
1401 _ => {
1402 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1403 }
1404 };
1405 let err = isl_rs_ctx.last_error();
1406 if err != Error::None_ {
1407 let err_msg = isl_rs_ctx.last_error_msg();
1408 isl_rs_ctx.reset_error();
1409 return Err(LibISLError::new(err, err_msg));
1410 }
1411 Ok(isl_rs_result)
1412 }
1413
1414 pub fn le_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
1416 let pa1 = self;
1417 let isl_rs_ctx = pa1.get_ctx();
1418 let mut pa1 = pa1;
1419 pa1.do_not_free_on_drop();
1420 let pa1 = pa1.ptr;
1421 let mut pa2 = pa2;
1422 pa2.do_not_free_on_drop();
1423 let pa2 = pa2.ptr;
1424 let isl_rs_result = unsafe { isl_pw_aff_le_map(pa1, pa2) };
1425 let isl_rs_result = Map { ptr: isl_rs_result,
1426 should_free_on_drop: true };
1427 let err = isl_rs_ctx.last_error();
1428 if err != Error::None_ {
1429 let err_msg = isl_rs_ctx.last_error_msg();
1430 isl_rs_ctx.reset_error();
1431 return Err(LibISLError::new(err, err_msg));
1432 }
1433 Ok(isl_rs_result)
1434 }
1435
1436 pub fn le_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
1438 let pwaff1 = self;
1439 let isl_rs_ctx = pwaff1.get_ctx();
1440 let mut pwaff1 = pwaff1;
1441 pwaff1.do_not_free_on_drop();
1442 let pwaff1 = pwaff1.ptr;
1443 let mut pwaff2 = pwaff2;
1444 pwaff2.do_not_free_on_drop();
1445 let pwaff2 = pwaff2.ptr;
1446 let isl_rs_result = unsafe { isl_pw_aff_le_set(pwaff1, pwaff2) };
1447 let isl_rs_result = Set { ptr: isl_rs_result,
1448 should_free_on_drop: true };
1449 let err = isl_rs_ctx.last_error();
1450 if err != Error::None_ {
1451 let err_msg = isl_rs_ctx.last_error_msg();
1452 isl_rs_ctx.reset_error();
1453 return Err(LibISLError::new(err, err_msg));
1454 }
1455 Ok(isl_rs_result)
1456 }
1457
1458 pub fn lt_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
1460 let pa1 = self;
1461 let isl_rs_ctx = pa1.get_ctx();
1462 let mut pa1 = pa1;
1463 pa1.do_not_free_on_drop();
1464 let pa1 = pa1.ptr;
1465 let mut pa2 = pa2;
1466 pa2.do_not_free_on_drop();
1467 let pa2 = pa2.ptr;
1468 let isl_rs_result = unsafe { isl_pw_aff_lt_map(pa1, pa2) };
1469 let isl_rs_result = Map { ptr: isl_rs_result,
1470 should_free_on_drop: true };
1471 let err = isl_rs_ctx.last_error();
1472 if err != Error::None_ {
1473 let err_msg = isl_rs_ctx.last_error_msg();
1474 isl_rs_ctx.reset_error();
1475 return Err(LibISLError::new(err, err_msg));
1476 }
1477 Ok(isl_rs_result)
1478 }
1479
1480 pub fn lt_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
1482 let pwaff1 = self;
1483 let isl_rs_ctx = pwaff1.get_ctx();
1484 let mut pwaff1 = pwaff1;
1485 pwaff1.do_not_free_on_drop();
1486 let pwaff1 = pwaff1.ptr;
1487 let mut pwaff2 = pwaff2;
1488 pwaff2.do_not_free_on_drop();
1489 let pwaff2 = pwaff2.ptr;
1490 let isl_rs_result = unsafe { isl_pw_aff_lt_set(pwaff1, pwaff2) };
1491 let isl_rs_result = Set { ptr: isl_rs_result,
1492 should_free_on_drop: true };
1493 let err = isl_rs_ctx.last_error();
1494 if err != Error::None_ {
1495 let err_msg = isl_rs_ctx.last_error_msg();
1496 isl_rs_ctx.reset_error();
1497 return Err(LibISLError::new(err, err_msg));
1498 }
1499 Ok(isl_rs_result)
1500 }
1501
1502 pub fn max(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
1504 let pwaff1 = self;
1505 let isl_rs_ctx = pwaff1.get_ctx();
1506 let mut pwaff1 = pwaff1;
1507 pwaff1.do_not_free_on_drop();
1508 let pwaff1 = pwaff1.ptr;
1509 let mut pwaff2 = pwaff2;
1510 pwaff2.do_not_free_on_drop();
1511 let pwaff2 = pwaff2.ptr;
1512 let isl_rs_result = unsafe { isl_pw_aff_max(pwaff1, pwaff2) };
1513 let isl_rs_result = PwAff { ptr: isl_rs_result,
1514 should_free_on_drop: true };
1515 let err = isl_rs_ctx.last_error();
1516 if err != Error::None_ {
1517 let err_msg = isl_rs_ctx.last_error_msg();
1518 isl_rs_ctx.reset_error();
1519 return Err(LibISLError::new(err, err_msg));
1520 }
1521 Ok(isl_rs_result)
1522 }
1523
1524 pub fn max_val(self) -> Result<Val, LibISLError> {
1526 let pa = self;
1527 let isl_rs_ctx = pa.get_ctx();
1528 let mut pa = pa;
1529 pa.do_not_free_on_drop();
1530 let pa = pa.ptr;
1531 let isl_rs_result = unsafe { isl_pw_aff_max_val(pa) };
1532 let isl_rs_result = Val { ptr: isl_rs_result,
1533 should_free_on_drop: true };
1534 let err = isl_rs_ctx.last_error();
1535 if err != Error::None_ {
1536 let err_msg = isl_rs_ctx.last_error_msg();
1537 isl_rs_ctx.reset_error();
1538 return Err(LibISLError::new(err, err_msg));
1539 }
1540 Ok(isl_rs_result)
1541 }
1542
1543 pub fn min(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
1545 let pwaff1 = self;
1546 let isl_rs_ctx = pwaff1.get_ctx();
1547 let mut pwaff1 = pwaff1;
1548 pwaff1.do_not_free_on_drop();
1549 let pwaff1 = pwaff1.ptr;
1550 let mut pwaff2 = pwaff2;
1551 pwaff2.do_not_free_on_drop();
1552 let pwaff2 = pwaff2.ptr;
1553 let isl_rs_result = unsafe { isl_pw_aff_min(pwaff1, pwaff2) };
1554 let isl_rs_result = PwAff { ptr: isl_rs_result,
1555 should_free_on_drop: true };
1556 let err = isl_rs_ctx.last_error();
1557 if err != Error::None_ {
1558 let err_msg = isl_rs_ctx.last_error_msg();
1559 isl_rs_ctx.reset_error();
1560 return Err(LibISLError::new(err, err_msg));
1561 }
1562 Ok(isl_rs_result)
1563 }
1564
1565 pub fn min_val(self) -> Result<Val, LibISLError> {
1567 let pa = self;
1568 let isl_rs_ctx = pa.get_ctx();
1569 let mut pa = pa;
1570 pa.do_not_free_on_drop();
1571 let pa = pa.ptr;
1572 let isl_rs_result = unsafe { isl_pw_aff_min_val(pa) };
1573 let isl_rs_result = Val { ptr: isl_rs_result,
1574 should_free_on_drop: true };
1575 let err = isl_rs_ctx.last_error();
1576 if err != Error::None_ {
1577 let err_msg = isl_rs_ctx.last_error_msg();
1578 isl_rs_ctx.reset_error();
1579 return Err(LibISLError::new(err, err_msg));
1580 }
1581 Ok(isl_rs_result)
1582 }
1583
1584 pub fn mod_val(self, mod_: Val) -> Result<PwAff, LibISLError> {
1586 let pa = self;
1587 let isl_rs_ctx = pa.get_ctx();
1588 let mut pa = pa;
1589 pa.do_not_free_on_drop();
1590 let pa = pa.ptr;
1591 let mut mod_ = mod_;
1592 mod_.do_not_free_on_drop();
1593 let mod_ = mod_.ptr;
1594 let isl_rs_result = unsafe { isl_pw_aff_mod_val(pa, mod_) };
1595 let isl_rs_result = PwAff { ptr: isl_rs_result,
1596 should_free_on_drop: true };
1597 let err = isl_rs_ctx.last_error();
1598 if err != Error::None_ {
1599 let err_msg = isl_rs_ctx.last_error_msg();
1600 isl_rs_ctx.reset_error();
1601 return Err(LibISLError::new(err, err_msg));
1602 }
1603 Ok(isl_rs_result)
1604 }
1605
1606 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1608 n: u32)
1609 -> Result<PwAff, LibISLError> {
1610 let pa = self;
1611 let isl_rs_ctx = pa.get_ctx();
1612 let mut pa = pa;
1613 pa.do_not_free_on_drop();
1614 let pa = pa.ptr;
1615 let dst_type = dst_type.to_i32();
1616 let src_type = src_type.to_i32();
1617 let isl_rs_result =
1618 unsafe { isl_pw_aff_move_dims(pa, dst_type, dst_pos, src_type, src_pos, n) };
1619 let isl_rs_result = PwAff { ptr: isl_rs_result,
1620 should_free_on_drop: true };
1621 let err = isl_rs_ctx.last_error();
1622 if err != Error::None_ {
1623 let err_msg = isl_rs_ctx.last_error_msg();
1624 isl_rs_ctx.reset_error();
1625 return Err(LibISLError::new(err, err_msg));
1626 }
1627 Ok(isl_rs_result)
1628 }
1629
1630 pub fn mul(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
1632 let pwaff1 = self;
1633 let isl_rs_ctx = pwaff1.get_ctx();
1634 let mut pwaff1 = pwaff1;
1635 pwaff1.do_not_free_on_drop();
1636 let pwaff1 = pwaff1.ptr;
1637 let mut pwaff2 = pwaff2;
1638 pwaff2.do_not_free_on_drop();
1639 let pwaff2 = pwaff2.ptr;
1640 let isl_rs_result = unsafe { isl_pw_aff_mul(pwaff1, pwaff2) };
1641 let isl_rs_result = PwAff { ptr: isl_rs_result,
1642 should_free_on_drop: true };
1643 let err = isl_rs_ctx.last_error();
1644 if err != Error::None_ {
1645 let err_msg = isl_rs_ctx.last_error_msg();
1646 isl_rs_ctx.reset_error();
1647 return Err(LibISLError::new(err, err_msg));
1648 }
1649 Ok(isl_rs_result)
1650 }
1651
1652 pub fn n_piece(&self) -> Result<i32, LibISLError> {
1654 let pwaff = self;
1655 let isl_rs_ctx = pwaff.get_ctx();
1656 let pwaff = pwaff.ptr;
1657 let isl_rs_result = unsafe { isl_pw_aff_n_piece(pwaff) };
1658 let err = isl_rs_ctx.last_error();
1659 if err != Error::None_ {
1660 let err_msg = isl_rs_ctx.last_error_msg();
1661 isl_rs_ctx.reset_error();
1662 return Err(LibISLError::new(err, err_msg));
1663 }
1664 Ok(isl_rs_result)
1665 }
1666
1667 pub fn nan_on_domain(ls: LocalSpace) -> Result<PwAff, LibISLError> {
1669 let isl_rs_ctx = ls.get_ctx();
1670 let mut ls = ls;
1671 ls.do_not_free_on_drop();
1672 let ls = ls.ptr;
1673 let isl_rs_result = unsafe { isl_pw_aff_nan_on_domain(ls) };
1674 let isl_rs_result = PwAff { 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 nan_on_domain_space(space: Space) -> Result<PwAff, LibISLError> {
1687 let isl_rs_ctx = space.get_ctx();
1688 let mut space = space;
1689 space.do_not_free_on_drop();
1690 let space = space.ptr;
1691 let isl_rs_result = unsafe { isl_pw_aff_nan_on_domain_space(space) };
1692 let isl_rs_result = PwAff { ptr: isl_rs_result,
1693 should_free_on_drop: true };
1694 let err = isl_rs_ctx.last_error();
1695 if err != Error::None_ {
1696 let err_msg = isl_rs_ctx.last_error_msg();
1697 isl_rs_ctx.reset_error();
1698 return Err(LibISLError::new(err, err_msg));
1699 }
1700 Ok(isl_rs_result)
1701 }
1702
1703 pub fn ne_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
1705 let pwaff1 = self;
1706 let isl_rs_ctx = pwaff1.get_ctx();
1707 let mut pwaff1 = pwaff1;
1708 pwaff1.do_not_free_on_drop();
1709 let pwaff1 = pwaff1.ptr;
1710 let mut pwaff2 = pwaff2;
1711 pwaff2.do_not_free_on_drop();
1712 let pwaff2 = pwaff2.ptr;
1713 let isl_rs_result = unsafe { isl_pw_aff_ne_set(pwaff1, pwaff2) };
1714 let isl_rs_result = Set { ptr: isl_rs_result,
1715 should_free_on_drop: true };
1716 let err = isl_rs_ctx.last_error();
1717 if err != Error::None_ {
1718 let err_msg = isl_rs_ctx.last_error_msg();
1719 isl_rs_ctx.reset_error();
1720 return Err(LibISLError::new(err, err_msg));
1721 }
1722 Ok(isl_rs_result)
1723 }
1724
1725 pub fn neg(self) -> Result<PwAff, LibISLError> {
1727 let pwaff = self;
1728 let isl_rs_ctx = pwaff.get_ctx();
1729 let mut pwaff = pwaff;
1730 pwaff.do_not_free_on_drop();
1731 let pwaff = pwaff.ptr;
1732 let isl_rs_result = unsafe { isl_pw_aff_neg(pwaff) };
1733 let isl_rs_result = PwAff { ptr: isl_rs_result,
1734 should_free_on_drop: true };
1735 let err = isl_rs_ctx.last_error();
1736 if err != Error::None_ {
1737 let err_msg = isl_rs_ctx.last_error_msg();
1738 isl_rs_ctx.reset_error();
1739 return Err(LibISLError::new(err, err_msg));
1740 }
1741 Ok(isl_rs_result)
1742 }
1743
1744 pub fn non_zero_set(self) -> Result<Set, LibISLError> {
1746 let pwaff = self;
1747 let isl_rs_ctx = pwaff.get_ctx();
1748 let mut pwaff = pwaff;
1749 pwaff.do_not_free_on_drop();
1750 let pwaff = pwaff.ptr;
1751 let isl_rs_result = unsafe { isl_pw_aff_non_zero_set(pwaff) };
1752 let isl_rs_result = Set { ptr: isl_rs_result,
1753 should_free_on_drop: true };
1754 let err = isl_rs_ctx.last_error();
1755 if err != Error::None_ {
1756 let err_msg = isl_rs_ctx.last_error_msg();
1757 isl_rs_ctx.reset_error();
1758 return Err(LibISLError::new(err, err_msg));
1759 }
1760 Ok(isl_rs_result)
1761 }
1762
1763 pub fn nonneg_set(self) -> Result<Set, LibISLError> {
1765 let pwaff = self;
1766 let isl_rs_ctx = pwaff.get_ctx();
1767 let mut pwaff = pwaff;
1768 pwaff.do_not_free_on_drop();
1769 let pwaff = pwaff.ptr;
1770 let isl_rs_result = unsafe { isl_pw_aff_nonneg_set(pwaff) };
1771 let isl_rs_result = Set { ptr: isl_rs_result,
1772 should_free_on_drop: true };
1773 let err = isl_rs_ctx.last_error();
1774 if err != Error::None_ {
1775 let err_msg = isl_rs_ctx.last_error_msg();
1776 isl_rs_ctx.reset_error();
1777 return Err(LibISLError::new(err, err_msg));
1778 }
1779 Ok(isl_rs_result)
1780 }
1781
1782 pub fn param_on_domain_id(domain: Set, id: Id) -> Result<PwAff, LibISLError> {
1784 let isl_rs_ctx = domain.get_ctx();
1785 let mut domain = domain;
1786 domain.do_not_free_on_drop();
1787 let domain = domain.ptr;
1788 let mut id = id;
1789 id.do_not_free_on_drop();
1790 let id = id.ptr;
1791 let isl_rs_result = unsafe { isl_pw_aff_param_on_domain_id(domain, id) };
1792 let isl_rs_result = PwAff { ptr: isl_rs_result,
1793 should_free_on_drop: true };
1794 let err = isl_rs_ctx.last_error();
1795 if err != Error::None_ {
1796 let err_msg = isl_rs_ctx.last_error_msg();
1797 isl_rs_ctx.reset_error();
1798 return Err(LibISLError::new(err, err_msg));
1799 }
1800 Ok(isl_rs_result)
1801 }
1802
1803 pub fn params(self) -> Result<Set, LibISLError> {
1805 let pwa = self;
1806 let isl_rs_ctx = pwa.get_ctx();
1807 let mut pwa = pwa;
1808 pwa.do_not_free_on_drop();
1809 let pwa = pwa.ptr;
1810 let isl_rs_result = unsafe { isl_pw_aff_params(pwa) };
1811 let isl_rs_result = Set { ptr: isl_rs_result,
1812 should_free_on_drop: true };
1813 let err = isl_rs_ctx.last_error();
1814 if err != Error::None_ {
1815 let err_msg = isl_rs_ctx.last_error_msg();
1816 isl_rs_ctx.reset_error();
1817 return Err(LibISLError::new(err, err_msg));
1818 }
1819 Ok(isl_rs_result)
1820 }
1821
1822 pub fn plain_cmp(&self, pa2: &PwAff) -> Result<i32, LibISLError> {
1824 let pa1 = self;
1825 let isl_rs_ctx = pa1.get_ctx();
1826 let pa1 = pa1.ptr;
1827 let pa2 = pa2.ptr;
1828 let isl_rs_result = unsafe { isl_pw_aff_plain_cmp(pa1, pa2) };
1829 let err = isl_rs_ctx.last_error();
1830 if err != Error::None_ {
1831 let err_msg = isl_rs_ctx.last_error_msg();
1832 isl_rs_ctx.reset_error();
1833 return Err(LibISLError::new(err, err_msg));
1834 }
1835 Ok(isl_rs_result)
1836 }
1837
1838 pub fn plain_is_equal(&self, pwaff2: &PwAff) -> Result<bool, LibISLError> {
1840 let pwaff1 = self;
1841 let isl_rs_ctx = pwaff1.get_ctx();
1842 let pwaff1 = pwaff1.ptr;
1843 let pwaff2 = pwaff2.ptr;
1844 let isl_rs_result = unsafe { isl_pw_aff_plain_is_equal(pwaff1, pwaff2) };
1845 let isl_rs_result = match isl_rs_result {
1846 0 => false,
1847 1 => true,
1848 _ => {
1849 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1850 }
1851 };
1852 let err = isl_rs_ctx.last_error();
1853 if err != Error::None_ {
1854 let err_msg = isl_rs_ctx.last_error_msg();
1855 isl_rs_ctx.reset_error();
1856 return Err(LibISLError::new(err, err_msg));
1857 }
1858 Ok(isl_rs_result)
1859 }
1860
1861 pub fn pos_set(self) -> Result<Set, LibISLError> {
1863 let pa = self;
1864 let isl_rs_ctx = pa.get_ctx();
1865 let mut pa = pa;
1866 pa.do_not_free_on_drop();
1867 let pa = pa.ptr;
1868 let isl_rs_result = unsafe { isl_pw_aff_pos_set(pa) };
1869 let isl_rs_result = Set { ptr: isl_rs_result,
1870 should_free_on_drop: true };
1871 let err = isl_rs_ctx.last_error();
1872 if err != Error::None_ {
1873 let err_msg = isl_rs_ctx.last_error_msg();
1874 isl_rs_ctx.reset_error();
1875 return Err(LibISLError::new(err, err_msg));
1876 }
1877 Ok(isl_rs_result)
1878 }
1879
1880 pub fn project_domain_on_params(self) -> Result<PwAff, LibISLError> {
1882 let pa = self;
1883 let isl_rs_ctx = pa.get_ctx();
1884 let mut pa = pa;
1885 pa.do_not_free_on_drop();
1886 let pa = pa.ptr;
1887 let isl_rs_result = unsafe { isl_pw_aff_project_domain_on_params(pa) };
1888 let isl_rs_result = PwAff { ptr: isl_rs_result,
1889 should_free_on_drop: true };
1890 let err = isl_rs_ctx.last_error();
1891 if err != Error::None_ {
1892 let err_msg = isl_rs_ctx.last_error_msg();
1893 isl_rs_ctx.reset_error();
1894 return Err(LibISLError::new(err, err_msg));
1895 }
1896 Ok(isl_rs_result)
1897 }
1898
1899 pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<PwAff, LibISLError> {
1901 let pa = self;
1902 let isl_rs_ctx = pa.get_ctx();
1903 let mut pa = pa;
1904 pa.do_not_free_on_drop();
1905 let pa = pa.ptr;
1906 let mut ma = ma;
1907 ma.do_not_free_on_drop();
1908 let ma = ma.ptr;
1909 let isl_rs_result = unsafe { isl_pw_aff_pullback_multi_aff(pa, ma) };
1910 let isl_rs_result = PwAff { ptr: isl_rs_result,
1911 should_free_on_drop: true };
1912 let err = isl_rs_ctx.last_error();
1913 if err != Error::None_ {
1914 let err_msg = isl_rs_ctx.last_error_msg();
1915 isl_rs_ctx.reset_error();
1916 return Err(LibISLError::new(err, err_msg));
1917 }
1918 Ok(isl_rs_result)
1919 }
1920
1921 pub fn pullback_multi_pw_aff(self, mpa: MultiPwAff) -> Result<PwAff, LibISLError> {
1923 let pa = self;
1924 let isl_rs_ctx = pa.get_ctx();
1925 let mut pa = pa;
1926 pa.do_not_free_on_drop();
1927 let pa = pa.ptr;
1928 let mut mpa = mpa;
1929 mpa.do_not_free_on_drop();
1930 let mpa = mpa.ptr;
1931 let isl_rs_result = unsafe { isl_pw_aff_pullback_multi_pw_aff(pa, mpa) };
1932 let isl_rs_result = PwAff { ptr: isl_rs_result,
1933 should_free_on_drop: true };
1934 let err = isl_rs_ctx.last_error();
1935 if err != Error::None_ {
1936 let err_msg = isl_rs_ctx.last_error_msg();
1937 isl_rs_ctx.reset_error();
1938 return Err(LibISLError::new(err, err_msg));
1939 }
1940 Ok(isl_rs_result)
1941 }
1942
1943 pub fn pullback_pw_multi_aff(self, pma: PwMultiAff) -> Result<PwAff, LibISLError> {
1945 let pa = self;
1946 let isl_rs_ctx = pa.get_ctx();
1947 let mut pa = pa;
1948 pa.do_not_free_on_drop();
1949 let pa = pa.ptr;
1950 let mut pma = pma;
1951 pma.do_not_free_on_drop();
1952 let pma = pma.ptr;
1953 let isl_rs_result = unsafe { isl_pw_aff_pullback_pw_multi_aff(pa, pma) };
1954 let isl_rs_result = PwAff { ptr: isl_rs_result,
1955 should_free_on_drop: true };
1956 let err = isl_rs_ctx.last_error();
1957 if err != Error::None_ {
1958 let err_msg = isl_rs_ctx.last_error_msg();
1959 isl_rs_ctx.reset_error();
1960 return Err(LibISLError::new(err, err_msg));
1961 }
1962 Ok(isl_rs_result)
1963 }
1964
1965 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwAff, LibISLError> {
1967 let isl_rs_ctx = Context { ptr: ctx.ptr,
1968 should_free_on_drop: false };
1969 let ctx = ctx.ptr;
1970 let str_ = CString::new(str_).unwrap();
1971 let str_ = str_.as_ptr();
1972 let isl_rs_result = unsafe { isl_pw_aff_read_from_str(ctx, str_) };
1973 let isl_rs_result = PwAff { ptr: isl_rs_result,
1974 should_free_on_drop: true };
1975 let err = isl_rs_ctx.last_error();
1976 if err != Error::None_ {
1977 let err_msg = isl_rs_ctx.last_error_msg();
1978 isl_rs_ctx.reset_error();
1979 return Err(LibISLError::new(err, err_msg));
1980 }
1981 Ok(isl_rs_result)
1982 }
1983
1984 pub fn reset_tuple_id(self, type_: DimType) -> Result<PwAff, LibISLError> {
1986 let pa = self;
1987 let isl_rs_ctx = pa.get_ctx();
1988 let mut pa = pa;
1989 pa.do_not_free_on_drop();
1990 let pa = pa.ptr;
1991 let type_ = type_.to_i32();
1992 let isl_rs_result = unsafe { isl_pw_aff_reset_tuple_id(pa, type_) };
1993 let isl_rs_result = PwAff { ptr: isl_rs_result,
1994 should_free_on_drop: true };
1995 let err = isl_rs_ctx.last_error();
1996 if err != Error::None_ {
1997 let err_msg = isl_rs_ctx.last_error_msg();
1998 isl_rs_ctx.reset_error();
1999 return Err(LibISLError::new(err, err_msg));
2000 }
2001 Ok(isl_rs_result)
2002 }
2003
2004 pub fn reset_user(self) -> Result<PwAff, LibISLError> {
2006 let pa = self;
2007 let isl_rs_ctx = pa.get_ctx();
2008 let mut pa = pa;
2009 pa.do_not_free_on_drop();
2010 let pa = pa.ptr;
2011 let isl_rs_result = unsafe { isl_pw_aff_reset_user(pa) };
2012 let isl_rs_result = PwAff { ptr: isl_rs_result,
2013 should_free_on_drop: true };
2014 let err = isl_rs_ctx.last_error();
2015 if err != Error::None_ {
2016 let err_msg = isl_rs_ctx.last_error_msg();
2017 isl_rs_ctx.reset_error();
2018 return Err(LibISLError::new(err, err_msg));
2019 }
2020 Ok(isl_rs_result)
2021 }
2022
2023 pub fn scale_down_val(self, f: Val) -> Result<PwAff, LibISLError> {
2025 let pa = self;
2026 let isl_rs_ctx = pa.get_ctx();
2027 let mut pa = pa;
2028 pa.do_not_free_on_drop();
2029 let pa = pa.ptr;
2030 let mut f = f;
2031 f.do_not_free_on_drop();
2032 let f = f.ptr;
2033 let isl_rs_result = unsafe { isl_pw_aff_scale_down_val(pa, f) };
2034 let isl_rs_result = PwAff { ptr: isl_rs_result,
2035 should_free_on_drop: true };
2036 let err = isl_rs_ctx.last_error();
2037 if err != Error::None_ {
2038 let err_msg = isl_rs_ctx.last_error_msg();
2039 isl_rs_ctx.reset_error();
2040 return Err(LibISLError::new(err, err_msg));
2041 }
2042 Ok(isl_rs_result)
2043 }
2044
2045 pub fn scale_val(self, v: Val) -> Result<PwAff, LibISLError> {
2047 let pa = self;
2048 let isl_rs_ctx = pa.get_ctx();
2049 let mut pa = pa;
2050 pa.do_not_free_on_drop();
2051 let pa = pa.ptr;
2052 let mut v = v;
2053 v.do_not_free_on_drop();
2054 let v = v.ptr;
2055 let isl_rs_result = unsafe { isl_pw_aff_scale_val(pa, v) };
2056 let isl_rs_result = PwAff { ptr: isl_rs_result,
2057 should_free_on_drop: true };
2058 let err = isl_rs_ctx.last_error();
2059 if err != Error::None_ {
2060 let err_msg = isl_rs_ctx.last_error_msg();
2061 isl_rs_ctx.reset_error();
2062 return Err(LibISLError::new(err, err_msg));
2063 }
2064 Ok(isl_rs_result)
2065 }
2066
2067 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<PwAff, LibISLError> {
2069 let pma = self;
2070 let isl_rs_ctx = pma.get_ctx();
2071 let mut pma = pma;
2072 pma.do_not_free_on_drop();
2073 let pma = pma.ptr;
2074 let type_ = type_.to_i32();
2075 let mut id = id;
2076 id.do_not_free_on_drop();
2077 let id = id.ptr;
2078 let isl_rs_result = unsafe { isl_pw_aff_set_dim_id(pma, type_, pos, id) };
2079 let isl_rs_result = PwAff { ptr: isl_rs_result,
2080 should_free_on_drop: true };
2081 let err = isl_rs_ctx.last_error();
2082 if err != Error::None_ {
2083 let err_msg = isl_rs_ctx.last_error_msg();
2084 isl_rs_ctx.reset_error();
2085 return Err(LibISLError::new(err, err_msg));
2086 }
2087 Ok(isl_rs_result)
2088 }
2089
2090 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<PwAff, LibISLError> {
2092 let pwaff = self;
2093 let isl_rs_ctx = pwaff.get_ctx();
2094 let mut pwaff = pwaff;
2095 pwaff.do_not_free_on_drop();
2096 let pwaff = pwaff.ptr;
2097 let type_ = type_.to_i32();
2098 let mut id = id;
2099 id.do_not_free_on_drop();
2100 let id = id.ptr;
2101 let isl_rs_result = unsafe { isl_pw_aff_set_tuple_id(pwaff, type_, id) };
2102 let isl_rs_result = PwAff { ptr: isl_rs_result,
2103 should_free_on_drop: true };
2104 let err = isl_rs_ctx.last_error();
2105 if err != Error::None_ {
2106 let err_msg = isl_rs_ctx.last_error_msg();
2107 isl_rs_ctx.reset_error();
2108 return Err(LibISLError::new(err, err_msg));
2109 }
2110 Ok(isl_rs_result)
2111 }
2112
2113 pub fn sub(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
2115 let pwaff1 = self;
2116 let isl_rs_ctx = pwaff1.get_ctx();
2117 let mut pwaff1 = pwaff1;
2118 pwaff1.do_not_free_on_drop();
2119 let pwaff1 = pwaff1.ptr;
2120 let mut pwaff2 = pwaff2;
2121 pwaff2.do_not_free_on_drop();
2122 let pwaff2 = pwaff2.ptr;
2123 let isl_rs_result = unsafe { isl_pw_aff_sub(pwaff1, pwaff2) };
2124 let isl_rs_result = PwAff { ptr: isl_rs_result,
2125 should_free_on_drop: true };
2126 let err = isl_rs_ctx.last_error();
2127 if err != Error::None_ {
2128 let err_msg = isl_rs_ctx.last_error_msg();
2129 isl_rs_ctx.reset_error();
2130 return Err(LibISLError::new(err, err_msg));
2131 }
2132 Ok(isl_rs_result)
2133 }
2134
2135 pub fn subtract_domain(self, set: Set) -> Result<PwAff, LibISLError> {
2137 let pa = self;
2138 let isl_rs_ctx = pa.get_ctx();
2139 let mut pa = pa;
2140 pa.do_not_free_on_drop();
2141 let pa = pa.ptr;
2142 let mut set = set;
2143 set.do_not_free_on_drop();
2144 let set = set.ptr;
2145 let isl_rs_result = unsafe { isl_pw_aff_subtract_domain(pa, set) };
2146 let isl_rs_result = PwAff { ptr: isl_rs_result,
2147 should_free_on_drop: true };
2148 let err = isl_rs_ctx.last_error();
2149 if err != Error::None_ {
2150 let err_msg = isl_rs_ctx.last_error_msg();
2151 isl_rs_ctx.reset_error();
2152 return Err(LibISLError::new(err, err_msg));
2153 }
2154 Ok(isl_rs_result)
2155 }
2156
2157 pub fn tdiv_q(self, pa2: PwAff) -> Result<PwAff, LibISLError> {
2159 let pa1 = self;
2160 let isl_rs_ctx = pa1.get_ctx();
2161 let mut pa1 = pa1;
2162 pa1.do_not_free_on_drop();
2163 let pa1 = pa1.ptr;
2164 let mut pa2 = pa2;
2165 pa2.do_not_free_on_drop();
2166 let pa2 = pa2.ptr;
2167 let isl_rs_result = unsafe { isl_pw_aff_tdiv_q(pa1, pa2) };
2168 let isl_rs_result = PwAff { ptr: isl_rs_result,
2169 should_free_on_drop: true };
2170 let err = isl_rs_ctx.last_error();
2171 if err != Error::None_ {
2172 let err_msg = isl_rs_ctx.last_error_msg();
2173 isl_rs_ctx.reset_error();
2174 return Err(LibISLError::new(err, err_msg));
2175 }
2176 Ok(isl_rs_result)
2177 }
2178
2179 pub fn tdiv_r(self, pa2: PwAff) -> Result<PwAff, LibISLError> {
2181 let pa1 = self;
2182 let isl_rs_ctx = pa1.get_ctx();
2183 let mut pa1 = pa1;
2184 pa1.do_not_free_on_drop();
2185 let pa1 = pa1.ptr;
2186 let mut pa2 = pa2;
2187 pa2.do_not_free_on_drop();
2188 let pa2 = pa2.ptr;
2189 let isl_rs_result = unsafe { isl_pw_aff_tdiv_r(pa1, pa2) };
2190 let isl_rs_result = PwAff { ptr: isl_rs_result,
2191 should_free_on_drop: true };
2192 let err = isl_rs_ctx.last_error();
2193 if err != Error::None_ {
2194 let err_msg = isl_rs_ctx.last_error_msg();
2195 isl_rs_ctx.reset_error();
2196 return Err(LibISLError::new(err, err_msg));
2197 }
2198 Ok(isl_rs_result)
2199 }
2200
2201 pub fn to_list(self) -> Result<PwAffList, LibISLError> {
2203 let el = self;
2204 let isl_rs_ctx = el.get_ctx();
2205 let mut el = el;
2206 el.do_not_free_on_drop();
2207 let el = el.ptr;
2208 let isl_rs_result = unsafe { isl_pw_aff_to_list(el) };
2209 let isl_rs_result = PwAffList { ptr: isl_rs_result,
2210 should_free_on_drop: true };
2211 let err = isl_rs_ctx.last_error();
2212 if err != Error::None_ {
2213 let err_msg = isl_rs_ctx.last_error_msg();
2214 isl_rs_ctx.reset_error();
2215 return Err(LibISLError::new(err, err_msg));
2216 }
2217 Ok(isl_rs_result)
2218 }
2219
2220 pub fn to_str(&self) -> Result<&str, LibISLError> {
2222 let pa = self;
2223 let isl_rs_ctx = pa.get_ctx();
2224 let pa = pa.ptr;
2225 let isl_rs_result = unsafe { isl_pw_aff_to_str(pa) };
2226 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2227 let isl_rs_result = isl_rs_result.to_str().unwrap();
2228 let err = isl_rs_ctx.last_error();
2229 if err != Error::None_ {
2230 let err_msg = isl_rs_ctx.last_error_msg();
2231 isl_rs_ctx.reset_error();
2232 return Err(LibISLError::new(err, err_msg));
2233 }
2234 Ok(isl_rs_result)
2235 }
2236
2237 pub fn to_union_pw_aff(self) -> Result<UnionPwAff, LibISLError> {
2239 let pa = self;
2240 let isl_rs_ctx = pa.get_ctx();
2241 let mut pa = pa;
2242 pa.do_not_free_on_drop();
2243 let pa = pa.ptr;
2244 let isl_rs_result = unsafe { isl_pw_aff_to_union_pw_aff(pa) };
2245 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
2246 should_free_on_drop: true };
2247 let err = isl_rs_ctx.last_error();
2248 if err != Error::None_ {
2249 let err_msg = isl_rs_ctx.last_error_msg();
2250 isl_rs_ctx.reset_error();
2251 return Err(LibISLError::new(err, err_msg));
2252 }
2253 Ok(isl_rs_result)
2254 }
2255
2256 pub fn union_add(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
2258 let pwaff1 = self;
2259 let isl_rs_ctx = pwaff1.get_ctx();
2260 let mut pwaff1 = pwaff1;
2261 pwaff1.do_not_free_on_drop();
2262 let pwaff1 = pwaff1.ptr;
2263 let mut pwaff2 = pwaff2;
2264 pwaff2.do_not_free_on_drop();
2265 let pwaff2 = pwaff2.ptr;
2266 let isl_rs_result = unsafe { isl_pw_aff_union_add(pwaff1, pwaff2) };
2267 let isl_rs_result = PwAff { ptr: isl_rs_result,
2268 should_free_on_drop: true };
2269 let err = isl_rs_ctx.last_error();
2270 if err != Error::None_ {
2271 let err_msg = isl_rs_ctx.last_error_msg();
2272 isl_rs_ctx.reset_error();
2273 return Err(LibISLError::new(err, err_msg));
2274 }
2275 Ok(isl_rs_result)
2276 }
2277
2278 pub fn union_max(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
2280 let pwaff1 = self;
2281 let isl_rs_ctx = pwaff1.get_ctx();
2282 let mut pwaff1 = pwaff1;
2283 pwaff1.do_not_free_on_drop();
2284 let pwaff1 = pwaff1.ptr;
2285 let mut pwaff2 = pwaff2;
2286 pwaff2.do_not_free_on_drop();
2287 let pwaff2 = pwaff2.ptr;
2288 let isl_rs_result = unsafe { isl_pw_aff_union_max(pwaff1, pwaff2) };
2289 let isl_rs_result = PwAff { ptr: isl_rs_result,
2290 should_free_on_drop: true };
2291 let err = isl_rs_ctx.last_error();
2292 if err != Error::None_ {
2293 let err_msg = isl_rs_ctx.last_error_msg();
2294 isl_rs_ctx.reset_error();
2295 return Err(LibISLError::new(err, err_msg));
2296 }
2297 Ok(isl_rs_result)
2298 }
2299
2300 pub fn union_min(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
2302 let pwaff1 = self;
2303 let isl_rs_ctx = pwaff1.get_ctx();
2304 let mut pwaff1 = pwaff1;
2305 pwaff1.do_not_free_on_drop();
2306 let pwaff1 = pwaff1.ptr;
2307 let mut pwaff2 = pwaff2;
2308 pwaff2.do_not_free_on_drop();
2309 let pwaff2 = pwaff2.ptr;
2310 let isl_rs_result = unsafe { isl_pw_aff_union_min(pwaff1, pwaff2) };
2311 let isl_rs_result = PwAff { ptr: isl_rs_result,
2312 should_free_on_drop: true };
2313 let err = isl_rs_ctx.last_error();
2314 if err != Error::None_ {
2315 let err_msg = isl_rs_ctx.last_error_msg();
2316 isl_rs_ctx.reset_error();
2317 return Err(LibISLError::new(err, err_msg));
2318 }
2319 Ok(isl_rs_result)
2320 }
2321
2322 pub fn val_on_domain(domain: Set, v: Val) -> Result<PwAff, LibISLError> {
2324 let isl_rs_ctx = domain.get_ctx();
2325 let mut domain = domain;
2326 domain.do_not_free_on_drop();
2327 let domain = domain.ptr;
2328 let mut v = v;
2329 v.do_not_free_on_drop();
2330 let v = v.ptr;
2331 let isl_rs_result = unsafe { isl_pw_aff_val_on_domain(domain, v) };
2332 let isl_rs_result = PwAff { ptr: isl_rs_result,
2333 should_free_on_drop: true };
2334 let err = isl_rs_ctx.last_error();
2335 if err != Error::None_ {
2336 let err_msg = isl_rs_ctx.last_error_msg();
2337 isl_rs_ctx.reset_error();
2338 return Err(LibISLError::new(err, err_msg));
2339 }
2340 Ok(isl_rs_result)
2341 }
2342
2343 pub fn var_on_domain(ls: LocalSpace, type_: DimType, pos: u32) -> Result<PwAff, LibISLError> {
2345 let isl_rs_ctx = ls.get_ctx();
2346 let mut ls = ls;
2347 ls.do_not_free_on_drop();
2348 let ls = ls.ptr;
2349 let type_ = type_.to_i32();
2350 let isl_rs_result = unsafe { isl_pw_aff_var_on_domain(ls, type_, pos) };
2351 let isl_rs_result = PwAff { ptr: isl_rs_result,
2352 should_free_on_drop: true };
2353 let err = isl_rs_ctx.last_error();
2354 if err != Error::None_ {
2355 let err_msg = isl_rs_ctx.last_error_msg();
2356 isl_rs_ctx.reset_error();
2357 return Err(LibISLError::new(err, err_msg));
2358 }
2359 Ok(isl_rs_result)
2360 }
2361
2362 pub fn zero_on_domain(ls: LocalSpace) -> Result<PwAff, LibISLError> {
2364 let isl_rs_ctx = ls.get_ctx();
2365 let mut ls = ls;
2366 ls.do_not_free_on_drop();
2367 let ls = ls.ptr;
2368 let isl_rs_result = unsafe { isl_pw_aff_zero_on_domain(ls) };
2369 let isl_rs_result = PwAff { ptr: isl_rs_result,
2370 should_free_on_drop: true };
2371 let err = isl_rs_ctx.last_error();
2372 if err != Error::None_ {
2373 let err_msg = isl_rs_ctx.last_error_msg();
2374 isl_rs_ctx.reset_error();
2375 return Err(LibISLError::new(err, err_msg));
2376 }
2377 Ok(isl_rs_result)
2378 }
2379
2380 pub fn zero_set(self) -> Result<Set, LibISLError> {
2382 let pwaff = self;
2383 let isl_rs_ctx = pwaff.get_ctx();
2384 let mut pwaff = pwaff;
2385 pwaff.do_not_free_on_drop();
2386 let pwaff = pwaff.ptr;
2387 let isl_rs_result = unsafe { isl_pw_aff_zero_set(pwaff) };
2388 let isl_rs_result = Set { ptr: isl_rs_result,
2389 should_free_on_drop: true };
2390 let err = isl_rs_ctx.last_error();
2391 if err != Error::None_ {
2392 let err_msg = isl_rs_ctx.last_error_msg();
2393 isl_rs_ctx.reset_error();
2394 return Err(LibISLError::new(err, err_msg));
2395 }
2396 Ok(isl_rs_result)
2397 }
2398
2399 pub fn do_not_free_on_drop(&mut self) {
2402 self.should_free_on_drop = false;
2403 }
2404}
2405
2406impl Drop for PwAff {
2407 fn drop(&mut self) {
2408 if self.should_free_on_drop {
2409 unsafe {
2410 isl_pw_aff_free(self.ptr);
2411 }
2412 }
2413 }
2414}