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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
254 }
255 Ok(isl_rs_result)
256 }
257
258 pub fn add_constant_val(self, v: Val) -> Result<PwAff, LibISLError> {
260 let pa = self;
261 let isl_rs_ctx = pa.get_ctx();
262 let mut pa = pa;
263 pa.do_not_free_on_drop();
264 let pa = pa.ptr;
265 let mut v = v;
266 v.do_not_free_on_drop();
267 let v = v.ptr;
268 let isl_rs_result = unsafe { isl_pw_aff_add_constant_val(pa, v) };
269 let isl_rs_result = PwAff { ptr: isl_rs_result,
270 should_free_on_drop: true };
271 let err = isl_rs_ctx.last_error();
272 if err != Error::None_ {
273 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
274 }
275 Ok(isl_rs_result)
276 }
277
278 pub fn add_dims(self, type_: DimType, n: u32) -> Result<PwAff, LibISLError> {
280 let pwaff = self;
281 let isl_rs_ctx = pwaff.get_ctx();
282 let mut pwaff = pwaff;
283 pwaff.do_not_free_on_drop();
284 let pwaff = pwaff.ptr;
285 let type_ = type_.to_i32();
286 let isl_rs_result = unsafe { isl_pw_aff_add_dims(pwaff, type_, n) };
287 let isl_rs_result = PwAff { ptr: isl_rs_result,
288 should_free_on_drop: true };
289 let err = isl_rs_ctx.last_error();
290 if err != Error::None_ {
291 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
292 }
293 Ok(isl_rs_result)
294 }
295
296 pub fn align_params(self, model: Space) -> Result<PwAff, LibISLError> {
298 let pwaff = self;
299 let isl_rs_ctx = pwaff.get_ctx();
300 let mut pwaff = pwaff;
301 pwaff.do_not_free_on_drop();
302 let pwaff = pwaff.ptr;
303 let mut model = model;
304 model.do_not_free_on_drop();
305 let model = model.ptr;
306 let isl_rs_result = unsafe { isl_pw_aff_align_params(pwaff, model) };
307 let isl_rs_result = PwAff { ptr: isl_rs_result,
308 should_free_on_drop: true };
309 let err = isl_rs_ctx.last_error();
310 if err != Error::None_ {
311 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
312 }
313 Ok(isl_rs_result)
314 }
315
316 pub fn alloc(set: Set, aff: Aff) -> Result<PwAff, LibISLError> {
318 let isl_rs_ctx = set.get_ctx();
319 let mut set = set;
320 set.do_not_free_on_drop();
321 let set = set.ptr;
322 let mut aff = aff;
323 aff.do_not_free_on_drop();
324 let aff = aff.ptr;
325 let isl_rs_result = unsafe { isl_pw_aff_alloc(set, aff) };
326 let isl_rs_result = PwAff { ptr: isl_rs_result,
327 should_free_on_drop: true };
328 let err = isl_rs_ctx.last_error();
329 if err != Error::None_ {
330 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
331 }
332 Ok(isl_rs_result)
333 }
334
335 pub fn as_aff(self) -> Result<Aff, LibISLError> {
337 let pa = self;
338 let isl_rs_ctx = pa.get_ctx();
339 let mut pa = pa;
340 pa.do_not_free_on_drop();
341 let pa = pa.ptr;
342 let isl_rs_result = unsafe { isl_pw_aff_as_aff(pa) };
343 let isl_rs_result = Aff { ptr: isl_rs_result,
344 should_free_on_drop: true };
345 let err = isl_rs_ctx.last_error();
346 if err != Error::None_ {
347 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
348 }
349 Ok(isl_rs_result)
350 }
351
352 pub fn as_map(self) -> Result<Map, LibISLError> {
354 let pa = self;
355 let isl_rs_ctx = pa.get_ctx();
356 let mut pa = pa;
357 pa.do_not_free_on_drop();
358 let pa = pa.ptr;
359 let isl_rs_result = unsafe { isl_pw_aff_as_map(pa) };
360 let isl_rs_result = Map { ptr: isl_rs_result,
361 should_free_on_drop: true };
362 let err = isl_rs_ctx.last_error();
363 if err != Error::None_ {
364 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
365 }
366 Ok(isl_rs_result)
367 }
368
369 pub fn bind_domain(self, tuple: MultiId) -> Result<PwAff, LibISLError> {
371 let pa = self;
372 let isl_rs_ctx = pa.get_ctx();
373 let mut pa = pa;
374 pa.do_not_free_on_drop();
375 let pa = pa.ptr;
376 let mut tuple = tuple;
377 tuple.do_not_free_on_drop();
378 let tuple = tuple.ptr;
379 let isl_rs_result = unsafe { isl_pw_aff_bind_domain(pa, tuple) };
380 let isl_rs_result = PwAff { ptr: isl_rs_result,
381 should_free_on_drop: true };
382 let err = isl_rs_ctx.last_error();
383 if err != Error::None_ {
384 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
385 }
386 Ok(isl_rs_result)
387 }
388
389 pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<PwAff, LibISLError> {
391 let pa = self;
392 let isl_rs_ctx = pa.get_ctx();
393 let mut pa = pa;
394 pa.do_not_free_on_drop();
395 let pa = pa.ptr;
396 let mut tuple = tuple;
397 tuple.do_not_free_on_drop();
398 let tuple = tuple.ptr;
399 let isl_rs_result = unsafe { isl_pw_aff_bind_domain_wrapped_domain(pa, tuple) };
400 let isl_rs_result = PwAff { ptr: isl_rs_result,
401 should_free_on_drop: true };
402 let err = isl_rs_ctx.last_error();
403 if err != Error::None_ {
404 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
405 }
406 Ok(isl_rs_result)
407 }
408
409 pub fn bind_id(self, id: Id) -> Result<Set, LibISLError> {
411 let pa = self;
412 let isl_rs_ctx = pa.get_ctx();
413 let mut pa = pa;
414 pa.do_not_free_on_drop();
415 let pa = pa.ptr;
416 let mut id = id;
417 id.do_not_free_on_drop();
418 let id = id.ptr;
419 let isl_rs_result = unsafe { isl_pw_aff_bind_id(pa, id) };
420 let isl_rs_result = Set { ptr: isl_rs_result,
421 should_free_on_drop: true };
422 let err = isl_rs_ctx.last_error();
423 if err != Error::None_ {
424 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
425 }
426 Ok(isl_rs_result)
427 }
428
429 pub fn ceil(self) -> Result<PwAff, LibISLError> {
431 let pwaff = self;
432 let isl_rs_ctx = pwaff.get_ctx();
433 let mut pwaff = pwaff;
434 pwaff.do_not_free_on_drop();
435 let pwaff = pwaff.ptr;
436 let isl_rs_result = unsafe { isl_pw_aff_ceil(pwaff) };
437 let isl_rs_result = PwAff { ptr: isl_rs_result,
438 should_free_on_drop: true };
439 let err = isl_rs_ctx.last_error();
440 if err != Error::None_ {
441 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
442 }
443 Ok(isl_rs_result)
444 }
445
446 pub fn coalesce(self) -> Result<PwAff, LibISLError> {
448 let pa = self;
449 let isl_rs_ctx = pa.get_ctx();
450 let mut pa = pa;
451 pa.do_not_free_on_drop();
452 let pa = pa.ptr;
453 let isl_rs_result = unsafe { isl_pw_aff_coalesce(pa) };
454 let isl_rs_result = PwAff { ptr: isl_rs_result,
455 should_free_on_drop: true };
456 let err = isl_rs_ctx.last_error();
457 if err != Error::None_ {
458 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
459 }
460 Ok(isl_rs_result)
461 }
462
463 pub fn cond(self, pwaff_true: PwAff, pwaff_false: PwAff) -> Result<PwAff, LibISLError> {
465 let cond = self;
466 let isl_rs_ctx = cond.get_ctx();
467 let mut cond = cond;
468 cond.do_not_free_on_drop();
469 let cond = cond.ptr;
470 let mut pwaff_true = pwaff_true;
471 pwaff_true.do_not_free_on_drop();
472 let pwaff_true = pwaff_true.ptr;
473 let mut pwaff_false = pwaff_false;
474 pwaff_false.do_not_free_on_drop();
475 let pwaff_false = pwaff_false.ptr;
476 let isl_rs_result = unsafe { isl_pw_aff_cond(cond, pwaff_true, pwaff_false) };
477 let isl_rs_result = PwAff { ptr: isl_rs_result,
478 should_free_on_drop: true };
479 let err = isl_rs_ctx.last_error();
480 if err != Error::None_ {
481 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
482 }
483 Ok(isl_rs_result)
484 }
485
486 pub fn copy(&self) -> Result<PwAff, LibISLError> {
488 let pwaff = self;
489 let isl_rs_ctx = pwaff.get_ctx();
490 let pwaff = pwaff.ptr;
491 let isl_rs_result = unsafe { isl_pw_aff_copy(pwaff) };
492 let isl_rs_result = PwAff { ptr: isl_rs_result,
493 should_free_on_drop: true };
494 let err = isl_rs_ctx.last_error();
495 if err != Error::None_ {
496 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
497 }
498 Ok(isl_rs_result)
499 }
500
501 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
503 let pwaff = self;
504 let isl_rs_ctx = pwaff.get_ctx();
505 let pwaff = pwaff.ptr;
506 let type_ = type_.to_i32();
507 let isl_rs_result = unsafe { isl_pw_aff_dim(pwaff, type_) };
508 let err = isl_rs_ctx.last_error();
509 if err != Error::None_ {
510 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
511 }
512 Ok(isl_rs_result)
513 }
514
515 pub fn div(self, pa2: PwAff) -> Result<PwAff, LibISLError> {
517 let pa1 = self;
518 let isl_rs_ctx = pa1.get_ctx();
519 let mut pa1 = pa1;
520 pa1.do_not_free_on_drop();
521 let pa1 = pa1.ptr;
522 let mut pa2 = pa2;
523 pa2.do_not_free_on_drop();
524 let pa2 = pa2.ptr;
525 let isl_rs_result = unsafe { isl_pw_aff_div(pa1, pa2) };
526 let isl_rs_result = PwAff { ptr: isl_rs_result,
527 should_free_on_drop: true };
528 let err = isl_rs_ctx.last_error();
529 if err != Error::None_ {
530 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
531 }
532 Ok(isl_rs_result)
533 }
534
535 pub fn domain(self) -> Result<Set, LibISLError> {
537 let pwaff = self;
538 let isl_rs_ctx = pwaff.get_ctx();
539 let mut pwaff = pwaff;
540 pwaff.do_not_free_on_drop();
541 let pwaff = pwaff.ptr;
542 let isl_rs_result = unsafe { isl_pw_aff_domain(pwaff) };
543 let isl_rs_result = Set { ptr: isl_rs_result,
544 should_free_on_drop: true };
545 let err = isl_rs_ctx.last_error();
546 if err != Error::None_ {
547 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
548 }
549 Ok(isl_rs_result)
550 }
551
552 pub fn domain_reverse(self) -> Result<PwAff, LibISLError> {
554 let pa = self;
555 let isl_rs_ctx = pa.get_ctx();
556 let mut pa = pa;
557 pa.do_not_free_on_drop();
558 let pa = pa.ptr;
559 let isl_rs_result = unsafe { isl_pw_aff_domain_reverse(pa) };
560 let isl_rs_result = PwAff { ptr: isl_rs_result,
561 should_free_on_drop: true };
562 let err = isl_rs_ctx.last_error();
563 if err != Error::None_ {
564 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
565 }
566 Ok(isl_rs_result)
567 }
568
569 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<PwAff, LibISLError> {
571 let pwaff = self;
572 let isl_rs_ctx = pwaff.get_ctx();
573 let mut pwaff = pwaff;
574 pwaff.do_not_free_on_drop();
575 let pwaff = pwaff.ptr;
576 let type_ = type_.to_i32();
577 let isl_rs_result = unsafe { isl_pw_aff_drop_dims(pwaff, type_, first, n) };
578 let isl_rs_result = PwAff { ptr: isl_rs_result,
579 should_free_on_drop: true };
580 let err = isl_rs_ctx.last_error();
581 if err != Error::None_ {
582 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
583 }
584 Ok(isl_rs_result)
585 }
586
587 pub fn drop_unused_params(self) -> Result<PwAff, LibISLError> {
589 let pa = self;
590 let isl_rs_ctx = pa.get_ctx();
591 let mut pa = pa;
592 pa.do_not_free_on_drop();
593 let pa = pa.ptr;
594 let isl_rs_result = unsafe { isl_pw_aff_drop_unused_params(pa) };
595 let isl_rs_result = PwAff { ptr: isl_rs_result,
596 should_free_on_drop: true };
597 let err = isl_rs_ctx.last_error();
598 if err != Error::None_ {
599 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
600 }
601 Ok(isl_rs_result)
602 }
603
604 pub fn dump(&self) -> Result<(), LibISLError> {
606 let pwaff = self;
607 let isl_rs_ctx = pwaff.get_ctx();
608 let pwaff = pwaff.ptr;
609 let isl_rs_result = unsafe { isl_pw_aff_dump(pwaff) };
610 let err = isl_rs_ctx.last_error();
611 if err != Error::None_ {
612 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
613 }
614 Ok(isl_rs_result)
615 }
616
617 pub fn empty(space: Space) -> Result<PwAff, LibISLError> {
619 let isl_rs_ctx = space.get_ctx();
620 let mut space = space;
621 space.do_not_free_on_drop();
622 let space = space.ptr;
623 let isl_rs_result = unsafe { isl_pw_aff_empty(space) };
624 let isl_rs_result = PwAff { ptr: isl_rs_result,
625 should_free_on_drop: true };
626 let err = isl_rs_ctx.last_error();
627 if err != Error::None_ {
628 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
629 }
630 Ok(isl_rs_result)
631 }
632
633 pub fn eq_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
635 let pa1 = self;
636 let isl_rs_ctx = pa1.get_ctx();
637 let mut pa1 = pa1;
638 pa1.do_not_free_on_drop();
639 let pa1 = pa1.ptr;
640 let mut pa2 = pa2;
641 pa2.do_not_free_on_drop();
642 let pa2 = pa2.ptr;
643 let isl_rs_result = unsafe { isl_pw_aff_eq_map(pa1, pa2) };
644 let isl_rs_result = Map { ptr: isl_rs_result,
645 should_free_on_drop: true };
646 let err = isl_rs_ctx.last_error();
647 if err != Error::None_ {
648 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
649 }
650 Ok(isl_rs_result)
651 }
652
653 pub fn eq_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
655 let pwaff1 = self;
656 let isl_rs_ctx = pwaff1.get_ctx();
657 let mut pwaff1 = pwaff1;
658 pwaff1.do_not_free_on_drop();
659 let pwaff1 = pwaff1.ptr;
660 let mut pwaff2 = pwaff2;
661 pwaff2.do_not_free_on_drop();
662 let pwaff2 = pwaff2.ptr;
663 let isl_rs_result = unsafe { isl_pw_aff_eq_set(pwaff1, pwaff2) };
664 let isl_rs_result = Set { ptr: isl_rs_result,
665 should_free_on_drop: true };
666 let err = isl_rs_ctx.last_error();
667 if err != Error::None_ {
668 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
669 }
670 Ok(isl_rs_result)
671 }
672
673 pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
675 let pa = self;
676 let isl_rs_ctx = pa.get_ctx();
677 let mut pa = pa;
678 pa.do_not_free_on_drop();
679 let pa = pa.ptr;
680 let mut pnt = pnt;
681 pnt.do_not_free_on_drop();
682 let pnt = pnt.ptr;
683 let isl_rs_result = unsafe { isl_pw_aff_eval(pa, pnt) };
684 let isl_rs_result = Val { ptr: isl_rs_result,
685 should_free_on_drop: true };
686 let err = isl_rs_ctx.last_error();
687 if err != Error::None_ {
688 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
689 }
690 Ok(isl_rs_result)
691 }
692
693 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
695 let pa = self;
696 let isl_rs_ctx = pa.get_ctx();
697 let pa = pa.ptr;
698 let type_ = type_.to_i32();
699 let name = CString::new(name).unwrap();
700 let name = name.as_ptr();
701 let isl_rs_result = unsafe { isl_pw_aff_find_dim_by_name(pa, type_, name) };
702 let err = isl_rs_ctx.last_error();
703 if err != Error::None_ {
704 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
705 }
706 Ok(isl_rs_result)
707 }
708
709 pub fn floor(self) -> Result<PwAff, LibISLError> {
711 let pwaff = self;
712 let isl_rs_ctx = pwaff.get_ctx();
713 let mut pwaff = pwaff;
714 pwaff.do_not_free_on_drop();
715 let pwaff = pwaff.ptr;
716 let isl_rs_result = unsafe { isl_pw_aff_floor(pwaff) };
717 let isl_rs_result = PwAff { ptr: isl_rs_result,
718 should_free_on_drop: true };
719 let err = isl_rs_ctx.last_error();
720 if err != Error::None_ {
721 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
722 }
723 Ok(isl_rs_result)
724 }
725
726 pub fn free(self) -> Result<PwAff, LibISLError> {
728 let pwaff = self;
729 let isl_rs_ctx = pwaff.get_ctx();
730 let mut pwaff = pwaff;
731 pwaff.do_not_free_on_drop();
732 let pwaff = pwaff.ptr;
733 let isl_rs_result = unsafe { isl_pw_aff_free(pwaff) };
734 let isl_rs_result = PwAff { ptr: isl_rs_result,
735 should_free_on_drop: true };
736 let err = isl_rs_ctx.last_error();
737 if err != Error::None_ {
738 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
739 }
740 Ok(isl_rs_result)
741 }
742
743 pub fn from_aff(aff: Aff) -> Result<PwAff, LibISLError> {
745 let isl_rs_ctx = aff.get_ctx();
746 let mut aff = aff;
747 aff.do_not_free_on_drop();
748 let aff = aff.ptr;
749 let isl_rs_result = unsafe { isl_pw_aff_from_aff(aff) };
750 let isl_rs_result = PwAff { ptr: isl_rs_result,
751 should_free_on_drop: true };
752 let err = isl_rs_ctx.last_error();
753 if err != Error::None_ {
754 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
755 }
756 Ok(isl_rs_result)
757 }
758
759 pub fn from_range(self) -> Result<PwAff, LibISLError> {
761 let pwa = self;
762 let isl_rs_ctx = pwa.get_ctx();
763 let mut pwa = pwa;
764 pwa.do_not_free_on_drop();
765 let pwa = pwa.ptr;
766 let isl_rs_result = unsafe { isl_pw_aff_from_range(pwa) };
767 let isl_rs_result = PwAff { ptr: isl_rs_result,
768 should_free_on_drop: true };
769 let err = isl_rs_ctx.last_error();
770 if err != Error::None_ {
771 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
772 }
773 Ok(isl_rs_result)
774 }
775
776 pub fn ge_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
778 let pa1 = self;
779 let isl_rs_ctx = pa1.get_ctx();
780 let mut pa1 = pa1;
781 pa1.do_not_free_on_drop();
782 let pa1 = pa1.ptr;
783 let mut pa2 = pa2;
784 pa2.do_not_free_on_drop();
785 let pa2 = pa2.ptr;
786 let isl_rs_result = unsafe { isl_pw_aff_ge_map(pa1, pa2) };
787 let isl_rs_result = Map { ptr: isl_rs_result,
788 should_free_on_drop: true };
789 let err = isl_rs_ctx.last_error();
790 if err != Error::None_ {
791 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
792 }
793 Ok(isl_rs_result)
794 }
795
796 pub fn ge_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
798 let pwaff1 = self;
799 let isl_rs_ctx = pwaff1.get_ctx();
800 let mut pwaff1 = pwaff1;
801 pwaff1.do_not_free_on_drop();
802 let pwaff1 = pwaff1.ptr;
803 let mut pwaff2 = pwaff2;
804 pwaff2.do_not_free_on_drop();
805 let pwaff2 = pwaff2.ptr;
806 let isl_rs_result = unsafe { isl_pw_aff_ge_set(pwaff1, pwaff2) };
807 let isl_rs_result = Set { ptr: isl_rs_result,
808 should_free_on_drop: true };
809 let err = isl_rs_ctx.last_error();
810 if err != Error::None_ {
811 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
812 }
813 Ok(isl_rs_result)
814 }
815
816 pub fn get_ctx(&self) -> Context {
818 let pwaff = self;
819 let pwaff = pwaff.ptr;
820 let isl_rs_result = unsafe { isl_pw_aff_get_ctx(pwaff) };
821 let isl_rs_result = Context { ptr: isl_rs_result,
822 should_free_on_drop: false };
823 isl_rs_result
824 }
825
826 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
828 let pa = self;
829 let isl_rs_ctx = pa.get_ctx();
830 let pa = pa.ptr;
831 let type_ = type_.to_i32();
832 let isl_rs_result = unsafe { isl_pw_aff_get_dim_id(pa, type_, pos) };
833 let isl_rs_result = Id { ptr: isl_rs_result,
834 should_free_on_drop: true };
835 let err = isl_rs_ctx.last_error();
836 if err != Error::None_ {
837 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
838 }
839 Ok(isl_rs_result)
840 }
841
842 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
844 let pa = self;
845 let isl_rs_ctx = pa.get_ctx();
846 let pa = pa.ptr;
847 let type_ = type_.to_i32();
848 let isl_rs_result = unsafe { isl_pw_aff_get_dim_name(pa, type_, pos) };
849 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
850 let isl_rs_result = isl_rs_result.to_str().unwrap();
851 let err = isl_rs_ctx.last_error();
852 if err != Error::None_ {
853 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
854 }
855 Ok(isl_rs_result)
856 }
857
858 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
860 let pwaff = self;
861 let isl_rs_ctx = pwaff.get_ctx();
862 let pwaff = pwaff.ptr;
863 let isl_rs_result = unsafe { isl_pw_aff_get_domain_space(pwaff) };
864 let isl_rs_result = Space { ptr: isl_rs_result,
865 should_free_on_drop: true };
866 let err = isl_rs_ctx.last_error();
867 if err != Error::None_ {
868 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
869 }
870 Ok(isl_rs_result)
871 }
872
873 pub fn get_hash(&self) -> Result<u32, LibISLError> {
875 let pa = self;
876 let isl_rs_ctx = pa.get_ctx();
877 let pa = pa.ptr;
878 let isl_rs_result = unsafe { isl_pw_aff_get_hash(pa) };
879 let err = isl_rs_ctx.last_error();
880 if err != Error::None_ {
881 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
882 }
883 Ok(isl_rs_result)
884 }
885
886 pub fn get_space(&self) -> Result<Space, LibISLError> {
888 let pwaff = self;
889 let isl_rs_ctx = pwaff.get_ctx();
890 let pwaff = pwaff.ptr;
891 let isl_rs_result = unsafe { isl_pw_aff_get_space(pwaff) };
892 let isl_rs_result = Space { ptr: isl_rs_result,
893 should_free_on_drop: true };
894 let err = isl_rs_ctx.last_error();
895 if err != Error::None_ {
896 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
897 }
898 Ok(isl_rs_result)
899 }
900
901 pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
903 let pa = self;
904 let isl_rs_ctx = pa.get_ctx();
905 let pa = pa.ptr;
906 let type_ = type_.to_i32();
907 let isl_rs_result = unsafe { isl_pw_aff_get_tuple_id(pa, type_) };
908 let isl_rs_result = Id { ptr: isl_rs_result,
909 should_free_on_drop: true };
910 let err = isl_rs_ctx.last_error();
911 if err != Error::None_ {
912 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
913 }
914 Ok(isl_rs_result)
915 }
916
917 pub fn gist(self, context: Set) -> Result<PwAff, LibISLError> {
919 let pwaff = self;
920 let isl_rs_ctx = pwaff.get_ctx();
921 let mut pwaff = pwaff;
922 pwaff.do_not_free_on_drop();
923 let pwaff = pwaff.ptr;
924 let mut context = context;
925 context.do_not_free_on_drop();
926 let context = context.ptr;
927 let isl_rs_result = unsafe { isl_pw_aff_gist(pwaff, context) };
928 let isl_rs_result = PwAff { ptr: isl_rs_result,
929 should_free_on_drop: true };
930 let err = isl_rs_ctx.last_error();
931 if err != Error::None_ {
932 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
933 }
934 Ok(isl_rs_result)
935 }
936
937 pub fn gist_params(self, context: Set) -> Result<PwAff, LibISLError> {
939 let pwaff = self;
940 let isl_rs_ctx = pwaff.get_ctx();
941 let mut pwaff = pwaff;
942 pwaff.do_not_free_on_drop();
943 let pwaff = pwaff.ptr;
944 let mut context = context;
945 context.do_not_free_on_drop();
946 let context = context.ptr;
947 let isl_rs_result = unsafe { isl_pw_aff_gist_params(pwaff, context) };
948 let isl_rs_result = PwAff { ptr: isl_rs_result,
949 should_free_on_drop: true };
950 let err = isl_rs_ctx.last_error();
951 if err != Error::None_ {
952 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
953 }
954 Ok(isl_rs_result)
955 }
956
957 pub fn gt_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
959 let pa1 = self;
960 let isl_rs_ctx = pa1.get_ctx();
961 let mut pa1 = pa1;
962 pa1.do_not_free_on_drop();
963 let pa1 = pa1.ptr;
964 let mut pa2 = pa2;
965 pa2.do_not_free_on_drop();
966 let pa2 = pa2.ptr;
967 let isl_rs_result = unsafe { isl_pw_aff_gt_map(pa1, pa2) };
968 let isl_rs_result = Map { ptr: isl_rs_result,
969 should_free_on_drop: true };
970 let err = isl_rs_ctx.last_error();
971 if err != Error::None_ {
972 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
973 }
974 Ok(isl_rs_result)
975 }
976
977 pub fn gt_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
979 let pwaff1 = self;
980 let isl_rs_ctx = pwaff1.get_ctx();
981 let mut pwaff1 = pwaff1;
982 pwaff1.do_not_free_on_drop();
983 let pwaff1 = pwaff1.ptr;
984 let mut pwaff2 = pwaff2;
985 pwaff2.do_not_free_on_drop();
986 let pwaff2 = pwaff2.ptr;
987 let isl_rs_result = unsafe { isl_pw_aff_gt_set(pwaff1, pwaff2) };
988 let isl_rs_result = Set { ptr: isl_rs_result,
989 should_free_on_drop: true };
990 let err = isl_rs_ctx.last_error();
991 if err != Error::None_ {
992 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
993 }
994 Ok(isl_rs_result)
995 }
996
997 pub fn has_dim_id(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
999 let pa = self;
1000 let isl_rs_ctx = pa.get_ctx();
1001 let pa = pa.ptr;
1002 let type_ = type_.to_i32();
1003 let isl_rs_result = unsafe { isl_pw_aff_has_dim_id(pa, type_, pos) };
1004 let isl_rs_result = match isl_rs_result {
1005 0 => false,
1006 1 => true,
1007 _ => panic!("Got isl_bool = -1"),
1008 };
1009 let err = isl_rs_ctx.last_error();
1010 if err != Error::None_ {
1011 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1012 }
1013 Ok(isl_rs_result)
1014 }
1015
1016 pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1018 let pa = self;
1019 let isl_rs_ctx = pa.get_ctx();
1020 let pa = pa.ptr;
1021 let type_ = type_.to_i32();
1022 let isl_rs_result = unsafe { isl_pw_aff_has_tuple_id(pa, type_) };
1023 let isl_rs_result = match isl_rs_result {
1024 0 => false,
1025 1 => true,
1026 _ => panic!("Got isl_bool = -1"),
1027 };
1028 let err = isl_rs_ctx.last_error();
1029 if err != Error::None_ {
1030 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1031 }
1032 Ok(isl_rs_result)
1033 }
1034
1035 pub fn insert_dims(self, type_: DimType, first: u32, n: u32) -> Result<PwAff, LibISLError> {
1037 let pwaff = self;
1038 let isl_rs_ctx = pwaff.get_ctx();
1039 let mut pwaff = pwaff;
1040 pwaff.do_not_free_on_drop();
1041 let pwaff = pwaff.ptr;
1042 let type_ = type_.to_i32();
1043 let isl_rs_result = unsafe { isl_pw_aff_insert_dims(pwaff, type_, first, n) };
1044 let isl_rs_result = PwAff { ptr: isl_rs_result,
1045 should_free_on_drop: true };
1046 let err = isl_rs_ctx.last_error();
1047 if err != Error::None_ {
1048 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1049 }
1050 Ok(isl_rs_result)
1051 }
1052
1053 pub fn insert_domain(self, domain: Space) -> Result<PwAff, LibISLError> {
1055 let pa = self;
1056 let isl_rs_ctx = pa.get_ctx();
1057 let mut pa = pa;
1058 pa.do_not_free_on_drop();
1059 let pa = pa.ptr;
1060 let mut domain = domain;
1061 domain.do_not_free_on_drop();
1062 let domain = domain.ptr;
1063 let isl_rs_result = unsafe { isl_pw_aff_insert_domain(pa, domain) };
1064 let isl_rs_result = PwAff { ptr: isl_rs_result,
1065 should_free_on_drop: true };
1066 let err = isl_rs_ctx.last_error();
1067 if err != Error::None_ {
1068 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1069 }
1070 Ok(isl_rs_result)
1071 }
1072
1073 pub fn intersect_domain(self, set: Set) -> Result<PwAff, LibISLError> {
1075 let pa = self;
1076 let isl_rs_ctx = pa.get_ctx();
1077 let mut pa = pa;
1078 pa.do_not_free_on_drop();
1079 let pa = pa.ptr;
1080 let mut set = set;
1081 set.do_not_free_on_drop();
1082 let set = set.ptr;
1083 let isl_rs_result = unsafe { isl_pw_aff_intersect_domain(pa, set) };
1084 let isl_rs_result = PwAff { ptr: isl_rs_result,
1085 should_free_on_drop: true };
1086 let err = isl_rs_ctx.last_error();
1087 if err != Error::None_ {
1088 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1089 }
1090 Ok(isl_rs_result)
1091 }
1092
1093 pub fn intersect_domain_wrapped_domain(self, set: Set) -> Result<PwAff, LibISLError> {
1095 let pa = self;
1096 let isl_rs_ctx = pa.get_ctx();
1097 let mut pa = pa;
1098 pa.do_not_free_on_drop();
1099 let pa = pa.ptr;
1100 let mut set = set;
1101 set.do_not_free_on_drop();
1102 let set = set.ptr;
1103 let isl_rs_result = unsafe { isl_pw_aff_intersect_domain_wrapped_domain(pa, set) };
1104 let isl_rs_result = PwAff { ptr: isl_rs_result,
1105 should_free_on_drop: true };
1106 let err = isl_rs_ctx.last_error();
1107 if err != Error::None_ {
1108 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1109 }
1110 Ok(isl_rs_result)
1111 }
1112
1113 pub fn intersect_domain_wrapped_range(self, set: Set) -> Result<PwAff, LibISLError> {
1115 let pa = self;
1116 let isl_rs_ctx = pa.get_ctx();
1117 let mut pa = pa;
1118 pa.do_not_free_on_drop();
1119 let pa = pa.ptr;
1120 let mut set = set;
1121 set.do_not_free_on_drop();
1122 let set = set.ptr;
1123 let isl_rs_result = unsafe { isl_pw_aff_intersect_domain_wrapped_range(pa, set) };
1124 let isl_rs_result = PwAff { ptr: isl_rs_result,
1125 should_free_on_drop: true };
1126 let err = isl_rs_ctx.last_error();
1127 if err != Error::None_ {
1128 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1129 }
1130 Ok(isl_rs_result)
1131 }
1132
1133 pub fn intersect_params(self, set: Set) -> Result<PwAff, LibISLError> {
1135 let pa = self;
1136 let isl_rs_ctx = pa.get_ctx();
1137 let mut pa = pa;
1138 pa.do_not_free_on_drop();
1139 let pa = pa.ptr;
1140 let mut set = set;
1141 set.do_not_free_on_drop();
1142 let set = set.ptr;
1143 let isl_rs_result = unsafe { isl_pw_aff_intersect_params(pa, set) };
1144 let isl_rs_result = PwAff { ptr: isl_rs_result,
1145 should_free_on_drop: true };
1146 let err = isl_rs_ctx.last_error();
1147 if err != Error::None_ {
1148 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1149 }
1150 Ok(isl_rs_result)
1151 }
1152
1153 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1155 let pwaff = self;
1156 let isl_rs_ctx = pwaff.get_ctx();
1157 let pwaff = pwaff.ptr;
1158 let type_ = type_.to_i32();
1159 let isl_rs_result = unsafe { isl_pw_aff_involves_dims(pwaff, type_, first, n) };
1160 let isl_rs_result = match isl_rs_result {
1161 0 => false,
1162 1 => true,
1163 _ => panic!("Got isl_bool = -1"),
1164 };
1165 let err = isl_rs_ctx.last_error();
1166 if err != Error::None_ {
1167 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1168 }
1169 Ok(isl_rs_result)
1170 }
1171
1172 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1174 let pa = self;
1175 let isl_rs_ctx = pa.get_ctx();
1176 let pa = pa.ptr;
1177 let isl_rs_result = unsafe { isl_pw_aff_involves_nan(pa) };
1178 let isl_rs_result = match isl_rs_result {
1179 0 => false,
1180 1 => true,
1181 _ => panic!("Got isl_bool = -1"),
1182 };
1183 let err = isl_rs_ctx.last_error();
1184 if err != Error::None_ {
1185 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1186 }
1187 Ok(isl_rs_result)
1188 }
1189
1190 pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1192 let pa = self;
1193 let isl_rs_ctx = pa.get_ctx();
1194 let pa = pa.ptr;
1195 let id = id.ptr;
1196 let isl_rs_result = unsafe { isl_pw_aff_involves_param_id(pa, id) };
1197 let isl_rs_result = match isl_rs_result {
1198 0 => false,
1199 1 => true,
1200 _ => panic!("Got isl_bool = -1"),
1201 };
1202 let err = isl_rs_ctx.last_error();
1203 if err != Error::None_ {
1204 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1205 }
1206 Ok(isl_rs_result)
1207 }
1208
1209 pub fn is_cst(&self) -> Result<bool, LibISLError> {
1211 let pwaff = self;
1212 let isl_rs_ctx = pwaff.get_ctx();
1213 let pwaff = pwaff.ptr;
1214 let isl_rs_result = unsafe { isl_pw_aff_is_cst(pwaff) };
1215 let isl_rs_result = match isl_rs_result {
1216 0 => false,
1217 1 => true,
1218 _ => panic!("Got isl_bool = -1"),
1219 };
1220 let err = isl_rs_ctx.last_error();
1221 if err != Error::None_ {
1222 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1223 }
1224 Ok(isl_rs_result)
1225 }
1226
1227 pub fn is_empty(&self) -> Result<bool, LibISLError> {
1229 let pwaff = self;
1230 let isl_rs_ctx = pwaff.get_ctx();
1231 let pwaff = pwaff.ptr;
1232 let isl_rs_result = unsafe { isl_pw_aff_is_empty(pwaff) };
1233 let isl_rs_result = match isl_rs_result {
1234 0 => false,
1235 1 => true,
1236 _ => panic!("Got isl_bool = -1"),
1237 };
1238 let err = isl_rs_ctx.last_error();
1239 if err != Error::None_ {
1240 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1241 }
1242 Ok(isl_rs_result)
1243 }
1244
1245 pub fn is_equal(&self, pa2: &PwAff) -> Result<bool, LibISLError> {
1247 let pa1 = self;
1248 let isl_rs_ctx = pa1.get_ctx();
1249 let pa1 = pa1.ptr;
1250 let pa2 = pa2.ptr;
1251 let isl_rs_result = unsafe { isl_pw_aff_is_equal(pa1, pa2) };
1252 let isl_rs_result = match isl_rs_result {
1253 0 => false,
1254 1 => true,
1255 _ => panic!("Got isl_bool = -1"),
1256 };
1257 let err = isl_rs_ctx.last_error();
1258 if err != Error::None_ {
1259 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1260 }
1261 Ok(isl_rs_result)
1262 }
1263
1264 pub fn isa_aff(&self) -> Result<bool, LibISLError> {
1266 let pa = self;
1267 let isl_rs_ctx = pa.get_ctx();
1268 let pa = pa.ptr;
1269 let isl_rs_result = unsafe { isl_pw_aff_isa_aff(pa) };
1270 let isl_rs_result = match isl_rs_result {
1271 0 => false,
1272 1 => true,
1273 _ => panic!("Got isl_bool = -1"),
1274 };
1275 let err = isl_rs_ctx.last_error();
1276 if err != Error::None_ {
1277 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1278 }
1279 Ok(isl_rs_result)
1280 }
1281
1282 pub fn le_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
1284 let pa1 = self;
1285 let isl_rs_ctx = pa1.get_ctx();
1286 let mut pa1 = pa1;
1287 pa1.do_not_free_on_drop();
1288 let pa1 = pa1.ptr;
1289 let mut pa2 = pa2;
1290 pa2.do_not_free_on_drop();
1291 let pa2 = pa2.ptr;
1292 let isl_rs_result = unsafe { isl_pw_aff_le_map(pa1, pa2) };
1293 let isl_rs_result = Map { ptr: isl_rs_result,
1294 should_free_on_drop: true };
1295 let err = isl_rs_ctx.last_error();
1296 if err != Error::None_ {
1297 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1298 }
1299 Ok(isl_rs_result)
1300 }
1301
1302 pub fn le_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
1304 let pwaff1 = self;
1305 let isl_rs_ctx = pwaff1.get_ctx();
1306 let mut pwaff1 = pwaff1;
1307 pwaff1.do_not_free_on_drop();
1308 let pwaff1 = pwaff1.ptr;
1309 let mut pwaff2 = pwaff2;
1310 pwaff2.do_not_free_on_drop();
1311 let pwaff2 = pwaff2.ptr;
1312 let isl_rs_result = unsafe { isl_pw_aff_le_set(pwaff1, pwaff2) };
1313 let isl_rs_result = Set { ptr: isl_rs_result,
1314 should_free_on_drop: true };
1315 let err = isl_rs_ctx.last_error();
1316 if err != Error::None_ {
1317 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1318 }
1319 Ok(isl_rs_result)
1320 }
1321
1322 pub fn lt_map(self, pa2: PwAff) -> Result<Map, LibISLError> {
1324 let pa1 = self;
1325 let isl_rs_ctx = pa1.get_ctx();
1326 let mut pa1 = pa1;
1327 pa1.do_not_free_on_drop();
1328 let pa1 = pa1.ptr;
1329 let mut pa2 = pa2;
1330 pa2.do_not_free_on_drop();
1331 let pa2 = pa2.ptr;
1332 let isl_rs_result = unsafe { isl_pw_aff_lt_map(pa1, pa2) };
1333 let isl_rs_result = Map { ptr: isl_rs_result,
1334 should_free_on_drop: true };
1335 let err = isl_rs_ctx.last_error();
1336 if err != Error::None_ {
1337 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1338 }
1339 Ok(isl_rs_result)
1340 }
1341
1342 pub fn lt_set(self, pwaff2: PwAff) -> Result<Set, LibISLError> {
1344 let pwaff1 = self;
1345 let isl_rs_ctx = pwaff1.get_ctx();
1346 let mut pwaff1 = pwaff1;
1347 pwaff1.do_not_free_on_drop();
1348 let pwaff1 = pwaff1.ptr;
1349 let mut pwaff2 = pwaff2;
1350 pwaff2.do_not_free_on_drop();
1351 let pwaff2 = pwaff2.ptr;
1352 let isl_rs_result = unsafe { isl_pw_aff_lt_set(pwaff1, pwaff2) };
1353 let isl_rs_result = Set { ptr: isl_rs_result,
1354 should_free_on_drop: true };
1355 let err = isl_rs_ctx.last_error();
1356 if err != Error::None_ {
1357 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1358 }
1359 Ok(isl_rs_result)
1360 }
1361
1362 pub fn max(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
1364 let pwaff1 = self;
1365 let isl_rs_ctx = pwaff1.get_ctx();
1366 let mut pwaff1 = pwaff1;
1367 pwaff1.do_not_free_on_drop();
1368 let pwaff1 = pwaff1.ptr;
1369 let mut pwaff2 = pwaff2;
1370 pwaff2.do_not_free_on_drop();
1371 let pwaff2 = pwaff2.ptr;
1372 let isl_rs_result = unsafe { isl_pw_aff_max(pwaff1, pwaff2) };
1373 let isl_rs_result = PwAff { ptr: isl_rs_result,
1374 should_free_on_drop: true };
1375 let err = isl_rs_ctx.last_error();
1376 if err != Error::None_ {
1377 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1378 }
1379 Ok(isl_rs_result)
1380 }
1381
1382 pub fn max_val(self) -> Result<Val, LibISLError> {
1384 let pa = self;
1385 let isl_rs_ctx = pa.get_ctx();
1386 let mut pa = pa;
1387 pa.do_not_free_on_drop();
1388 let pa = pa.ptr;
1389 let isl_rs_result = unsafe { isl_pw_aff_max_val(pa) };
1390 let isl_rs_result = Val { ptr: isl_rs_result,
1391 should_free_on_drop: true };
1392 let err = isl_rs_ctx.last_error();
1393 if err != Error::None_ {
1394 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1395 }
1396 Ok(isl_rs_result)
1397 }
1398
1399 pub fn min(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
1401 let pwaff1 = self;
1402 let isl_rs_ctx = pwaff1.get_ctx();
1403 let mut pwaff1 = pwaff1;
1404 pwaff1.do_not_free_on_drop();
1405 let pwaff1 = pwaff1.ptr;
1406 let mut pwaff2 = pwaff2;
1407 pwaff2.do_not_free_on_drop();
1408 let pwaff2 = pwaff2.ptr;
1409 let isl_rs_result = unsafe { isl_pw_aff_min(pwaff1, pwaff2) };
1410 let isl_rs_result = PwAff { ptr: isl_rs_result,
1411 should_free_on_drop: true };
1412 let err = isl_rs_ctx.last_error();
1413 if err != Error::None_ {
1414 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1415 }
1416 Ok(isl_rs_result)
1417 }
1418
1419 pub fn min_val(self) -> Result<Val, LibISLError> {
1421 let pa = self;
1422 let isl_rs_ctx = pa.get_ctx();
1423 let mut pa = pa;
1424 pa.do_not_free_on_drop();
1425 let pa = pa.ptr;
1426 let isl_rs_result = unsafe { isl_pw_aff_min_val(pa) };
1427 let isl_rs_result = Val { ptr: isl_rs_result,
1428 should_free_on_drop: true };
1429 let err = isl_rs_ctx.last_error();
1430 if err != Error::None_ {
1431 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1432 }
1433 Ok(isl_rs_result)
1434 }
1435
1436 pub fn mod_val(self, mod_: Val) -> Result<PwAff, LibISLError> {
1438 let pa = self;
1439 let isl_rs_ctx = pa.get_ctx();
1440 let mut pa = pa;
1441 pa.do_not_free_on_drop();
1442 let pa = pa.ptr;
1443 let mut mod_ = mod_;
1444 mod_.do_not_free_on_drop();
1445 let mod_ = mod_.ptr;
1446 let isl_rs_result = unsafe { isl_pw_aff_mod_val(pa, mod_) };
1447 let isl_rs_result = PwAff { ptr: isl_rs_result,
1448 should_free_on_drop: true };
1449 let err = isl_rs_ctx.last_error();
1450 if err != Error::None_ {
1451 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1452 }
1453 Ok(isl_rs_result)
1454 }
1455
1456 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1458 n: u32)
1459 -> Result<PwAff, LibISLError> {
1460 let pa = self;
1461 let isl_rs_ctx = pa.get_ctx();
1462 let mut pa = pa;
1463 pa.do_not_free_on_drop();
1464 let pa = pa.ptr;
1465 let dst_type = dst_type.to_i32();
1466 let src_type = src_type.to_i32();
1467 let isl_rs_result =
1468 unsafe { isl_pw_aff_move_dims(pa, dst_type, dst_pos, src_type, src_pos, n) };
1469 let isl_rs_result = PwAff { ptr: isl_rs_result,
1470 should_free_on_drop: true };
1471 let err = isl_rs_ctx.last_error();
1472 if err != Error::None_ {
1473 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1474 }
1475 Ok(isl_rs_result)
1476 }
1477
1478 pub fn mul(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
1480 let pwaff1 = self;
1481 let isl_rs_ctx = pwaff1.get_ctx();
1482 let mut pwaff1 = pwaff1;
1483 pwaff1.do_not_free_on_drop();
1484 let pwaff1 = pwaff1.ptr;
1485 let mut pwaff2 = pwaff2;
1486 pwaff2.do_not_free_on_drop();
1487 let pwaff2 = pwaff2.ptr;
1488 let isl_rs_result = unsafe { isl_pw_aff_mul(pwaff1, pwaff2) };
1489 let isl_rs_result = PwAff { ptr: isl_rs_result,
1490 should_free_on_drop: true };
1491 let err = isl_rs_ctx.last_error();
1492 if err != Error::None_ {
1493 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1494 }
1495 Ok(isl_rs_result)
1496 }
1497
1498 pub fn n_piece(&self) -> Result<i32, LibISLError> {
1500 let pwaff = self;
1501 let isl_rs_ctx = pwaff.get_ctx();
1502 let pwaff = pwaff.ptr;
1503 let isl_rs_result = unsafe { isl_pw_aff_n_piece(pwaff) };
1504 let err = isl_rs_ctx.last_error();
1505 if err != Error::None_ {
1506 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1507 }
1508 Ok(isl_rs_result)
1509 }
1510
1511 pub fn nan_on_domain(ls: LocalSpace) -> Result<PwAff, LibISLError> {
1513 let isl_rs_ctx = ls.get_ctx();
1514 let mut ls = ls;
1515 ls.do_not_free_on_drop();
1516 let ls = ls.ptr;
1517 let isl_rs_result = unsafe { isl_pw_aff_nan_on_domain(ls) };
1518 let isl_rs_result = PwAff { ptr: isl_rs_result,
1519 should_free_on_drop: true };
1520 let err = isl_rs_ctx.last_error();
1521 if err != Error::None_ {
1522 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1523 }
1524 Ok(isl_rs_result)
1525 }
1526
1527 pub fn nan_on_domain_space(space: Space) -> Result<PwAff, LibISLError> {
1529 let isl_rs_ctx = space.get_ctx();
1530 let mut space = space;
1531 space.do_not_free_on_drop();
1532 let space = space.ptr;
1533 let isl_rs_result = unsafe { isl_pw_aff_nan_on_domain_space(space) };
1534 let isl_rs_result = PwAff { ptr: isl_rs_result,
1535 should_free_on_drop: true };
1536 let err = isl_rs_ctx.last_error();
1537 if err != Error::None_ {
1538 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1539 }
1540 Ok(isl_rs_result)
1541 }
1542
1543 pub fn ne_set(self, pwaff2: PwAff) -> Result<Set, 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_ne_set(pwaff1, pwaff2) };
1554 let isl_rs_result = Set { ptr: isl_rs_result,
1555 should_free_on_drop: true };
1556 let err = isl_rs_ctx.last_error();
1557 if err != Error::None_ {
1558 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1559 }
1560 Ok(isl_rs_result)
1561 }
1562
1563 pub fn neg(self) -> Result<PwAff, LibISLError> {
1565 let pwaff = self;
1566 let isl_rs_ctx = pwaff.get_ctx();
1567 let mut pwaff = pwaff;
1568 pwaff.do_not_free_on_drop();
1569 let pwaff = pwaff.ptr;
1570 let isl_rs_result = unsafe { isl_pw_aff_neg(pwaff) };
1571 let isl_rs_result = PwAff { ptr: isl_rs_result,
1572 should_free_on_drop: true };
1573 let err = isl_rs_ctx.last_error();
1574 if err != Error::None_ {
1575 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1576 }
1577 Ok(isl_rs_result)
1578 }
1579
1580 pub fn non_zero_set(self) -> Result<Set, LibISLError> {
1582 let pwaff = self;
1583 let isl_rs_ctx = pwaff.get_ctx();
1584 let mut pwaff = pwaff;
1585 pwaff.do_not_free_on_drop();
1586 let pwaff = pwaff.ptr;
1587 let isl_rs_result = unsafe { isl_pw_aff_non_zero_set(pwaff) };
1588 let isl_rs_result = Set { ptr: isl_rs_result,
1589 should_free_on_drop: true };
1590 let err = isl_rs_ctx.last_error();
1591 if err != Error::None_ {
1592 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1593 }
1594 Ok(isl_rs_result)
1595 }
1596
1597 pub fn nonneg_set(self) -> Result<Set, LibISLError> {
1599 let pwaff = self;
1600 let isl_rs_ctx = pwaff.get_ctx();
1601 let mut pwaff = pwaff;
1602 pwaff.do_not_free_on_drop();
1603 let pwaff = pwaff.ptr;
1604 let isl_rs_result = unsafe { isl_pw_aff_nonneg_set(pwaff) };
1605 let isl_rs_result = Set { ptr: isl_rs_result,
1606 should_free_on_drop: true };
1607 let err = isl_rs_ctx.last_error();
1608 if err != Error::None_ {
1609 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1610 }
1611 Ok(isl_rs_result)
1612 }
1613
1614 pub fn param_on_domain_id(domain: Set, id: Id) -> Result<PwAff, LibISLError> {
1616 let isl_rs_ctx = domain.get_ctx();
1617 let mut domain = domain;
1618 domain.do_not_free_on_drop();
1619 let domain = domain.ptr;
1620 let mut id = id;
1621 id.do_not_free_on_drop();
1622 let id = id.ptr;
1623 let isl_rs_result = unsafe { isl_pw_aff_param_on_domain_id(domain, id) };
1624 let isl_rs_result = PwAff { ptr: isl_rs_result,
1625 should_free_on_drop: true };
1626 let err = isl_rs_ctx.last_error();
1627 if err != Error::None_ {
1628 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1629 }
1630 Ok(isl_rs_result)
1631 }
1632
1633 pub fn params(self) -> Result<Set, LibISLError> {
1635 let pwa = self;
1636 let isl_rs_ctx = pwa.get_ctx();
1637 let mut pwa = pwa;
1638 pwa.do_not_free_on_drop();
1639 let pwa = pwa.ptr;
1640 let isl_rs_result = unsafe { isl_pw_aff_params(pwa) };
1641 let isl_rs_result = Set { ptr: isl_rs_result,
1642 should_free_on_drop: true };
1643 let err = isl_rs_ctx.last_error();
1644 if err != Error::None_ {
1645 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1646 }
1647 Ok(isl_rs_result)
1648 }
1649
1650 pub fn plain_cmp(&self, pa2: &PwAff) -> Result<i32, LibISLError> {
1652 let pa1 = self;
1653 let isl_rs_ctx = pa1.get_ctx();
1654 let pa1 = pa1.ptr;
1655 let pa2 = pa2.ptr;
1656 let isl_rs_result = unsafe { isl_pw_aff_plain_cmp(pa1, pa2) };
1657 let err = isl_rs_ctx.last_error();
1658 if err != Error::None_ {
1659 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1660 }
1661 Ok(isl_rs_result)
1662 }
1663
1664 pub fn plain_is_equal(&self, pwaff2: &PwAff) -> Result<bool, LibISLError> {
1666 let pwaff1 = self;
1667 let isl_rs_ctx = pwaff1.get_ctx();
1668 let pwaff1 = pwaff1.ptr;
1669 let pwaff2 = pwaff2.ptr;
1670 let isl_rs_result = unsafe { isl_pw_aff_plain_is_equal(pwaff1, pwaff2) };
1671 let isl_rs_result = match isl_rs_result {
1672 0 => false,
1673 1 => true,
1674 _ => panic!("Got isl_bool = -1"),
1675 };
1676 let err = isl_rs_ctx.last_error();
1677 if err != Error::None_ {
1678 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1679 }
1680 Ok(isl_rs_result)
1681 }
1682
1683 pub fn pos_set(self) -> Result<Set, LibISLError> {
1685 let pa = self;
1686 let isl_rs_ctx = pa.get_ctx();
1687 let mut pa = pa;
1688 pa.do_not_free_on_drop();
1689 let pa = pa.ptr;
1690 let isl_rs_result = unsafe { isl_pw_aff_pos_set(pa) };
1691 let isl_rs_result = Set { ptr: isl_rs_result,
1692 should_free_on_drop: true };
1693 let err = isl_rs_ctx.last_error();
1694 if err != Error::None_ {
1695 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1696 }
1697 Ok(isl_rs_result)
1698 }
1699
1700 pub fn project_domain_on_params(self) -> Result<PwAff, LibISLError> {
1702 let pa = self;
1703 let isl_rs_ctx = pa.get_ctx();
1704 let mut pa = pa;
1705 pa.do_not_free_on_drop();
1706 let pa = pa.ptr;
1707 let isl_rs_result = unsafe { isl_pw_aff_project_domain_on_params(pa) };
1708 let isl_rs_result = PwAff { ptr: isl_rs_result,
1709 should_free_on_drop: true };
1710 let err = isl_rs_ctx.last_error();
1711 if err != Error::None_ {
1712 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1713 }
1714 Ok(isl_rs_result)
1715 }
1716
1717 pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<PwAff, LibISLError> {
1719 let pa = self;
1720 let isl_rs_ctx = pa.get_ctx();
1721 let mut pa = pa;
1722 pa.do_not_free_on_drop();
1723 let pa = pa.ptr;
1724 let mut ma = ma;
1725 ma.do_not_free_on_drop();
1726 let ma = ma.ptr;
1727 let isl_rs_result = unsafe { isl_pw_aff_pullback_multi_aff(pa, ma) };
1728 let isl_rs_result = PwAff { ptr: isl_rs_result,
1729 should_free_on_drop: true };
1730 let err = isl_rs_ctx.last_error();
1731 if err != Error::None_ {
1732 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1733 }
1734 Ok(isl_rs_result)
1735 }
1736
1737 pub fn pullback_multi_pw_aff(self, mpa: MultiPwAff) -> Result<PwAff, LibISLError> {
1739 let pa = self;
1740 let isl_rs_ctx = pa.get_ctx();
1741 let mut pa = pa;
1742 pa.do_not_free_on_drop();
1743 let pa = pa.ptr;
1744 let mut mpa = mpa;
1745 mpa.do_not_free_on_drop();
1746 let mpa = mpa.ptr;
1747 let isl_rs_result = unsafe { isl_pw_aff_pullback_multi_pw_aff(pa, mpa) };
1748 let isl_rs_result = PwAff { ptr: isl_rs_result,
1749 should_free_on_drop: true };
1750 let err = isl_rs_ctx.last_error();
1751 if err != Error::None_ {
1752 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1753 }
1754 Ok(isl_rs_result)
1755 }
1756
1757 pub fn pullback_pw_multi_aff(self, pma: PwMultiAff) -> Result<PwAff, LibISLError> {
1759 let pa = self;
1760 let isl_rs_ctx = pa.get_ctx();
1761 let mut pa = pa;
1762 pa.do_not_free_on_drop();
1763 let pa = pa.ptr;
1764 let mut pma = pma;
1765 pma.do_not_free_on_drop();
1766 let pma = pma.ptr;
1767 let isl_rs_result = unsafe { isl_pw_aff_pullback_pw_multi_aff(pa, pma) };
1768 let isl_rs_result = PwAff { ptr: isl_rs_result,
1769 should_free_on_drop: true };
1770 let err = isl_rs_ctx.last_error();
1771 if err != Error::None_ {
1772 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1773 }
1774 Ok(isl_rs_result)
1775 }
1776
1777 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwAff, LibISLError> {
1779 let isl_rs_ctx = Context { ptr: ctx.ptr,
1780 should_free_on_drop: false };
1781 let ctx = ctx.ptr;
1782 let str_ = CString::new(str_).unwrap();
1783 let str_ = str_.as_ptr();
1784 let isl_rs_result = unsafe { isl_pw_aff_read_from_str(ctx, str_) };
1785 let isl_rs_result = PwAff { ptr: isl_rs_result,
1786 should_free_on_drop: true };
1787 let err = isl_rs_ctx.last_error();
1788 if err != Error::None_ {
1789 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1790 }
1791 Ok(isl_rs_result)
1792 }
1793
1794 pub fn reset_tuple_id(self, type_: DimType) -> Result<PwAff, LibISLError> {
1796 let pa = self;
1797 let isl_rs_ctx = pa.get_ctx();
1798 let mut pa = pa;
1799 pa.do_not_free_on_drop();
1800 let pa = pa.ptr;
1801 let type_ = type_.to_i32();
1802 let isl_rs_result = unsafe { isl_pw_aff_reset_tuple_id(pa, type_) };
1803 let isl_rs_result = PwAff { ptr: isl_rs_result,
1804 should_free_on_drop: true };
1805 let err = isl_rs_ctx.last_error();
1806 if err != Error::None_ {
1807 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1808 }
1809 Ok(isl_rs_result)
1810 }
1811
1812 pub fn reset_user(self) -> Result<PwAff, LibISLError> {
1814 let pa = self;
1815 let isl_rs_ctx = pa.get_ctx();
1816 let mut pa = pa;
1817 pa.do_not_free_on_drop();
1818 let pa = pa.ptr;
1819 let isl_rs_result = unsafe { isl_pw_aff_reset_user(pa) };
1820 let isl_rs_result = PwAff { ptr: isl_rs_result,
1821 should_free_on_drop: true };
1822 let err = isl_rs_ctx.last_error();
1823 if err != Error::None_ {
1824 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1825 }
1826 Ok(isl_rs_result)
1827 }
1828
1829 pub fn scale_down_val(self, f: Val) -> Result<PwAff, LibISLError> {
1831 let pa = self;
1832 let isl_rs_ctx = pa.get_ctx();
1833 let mut pa = pa;
1834 pa.do_not_free_on_drop();
1835 let pa = pa.ptr;
1836 let mut f = f;
1837 f.do_not_free_on_drop();
1838 let f = f.ptr;
1839 let isl_rs_result = unsafe { isl_pw_aff_scale_down_val(pa, f) };
1840 let isl_rs_result = PwAff { ptr: isl_rs_result,
1841 should_free_on_drop: true };
1842 let err = isl_rs_ctx.last_error();
1843 if err != Error::None_ {
1844 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1845 }
1846 Ok(isl_rs_result)
1847 }
1848
1849 pub fn scale_val(self, v: Val) -> Result<PwAff, LibISLError> {
1851 let pa = self;
1852 let isl_rs_ctx = pa.get_ctx();
1853 let mut pa = pa;
1854 pa.do_not_free_on_drop();
1855 let pa = pa.ptr;
1856 let mut v = v;
1857 v.do_not_free_on_drop();
1858 let v = v.ptr;
1859 let isl_rs_result = unsafe { isl_pw_aff_scale_val(pa, v) };
1860 let isl_rs_result = PwAff { ptr: isl_rs_result,
1861 should_free_on_drop: true };
1862 let err = isl_rs_ctx.last_error();
1863 if err != Error::None_ {
1864 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1865 }
1866 Ok(isl_rs_result)
1867 }
1868
1869 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<PwAff, LibISLError> {
1871 let pma = self;
1872 let isl_rs_ctx = pma.get_ctx();
1873 let mut pma = pma;
1874 pma.do_not_free_on_drop();
1875 let pma = pma.ptr;
1876 let type_ = type_.to_i32();
1877 let mut id = id;
1878 id.do_not_free_on_drop();
1879 let id = id.ptr;
1880 let isl_rs_result = unsafe { isl_pw_aff_set_dim_id(pma, type_, pos, id) };
1881 let isl_rs_result = PwAff { ptr: isl_rs_result,
1882 should_free_on_drop: true };
1883 let err = isl_rs_ctx.last_error();
1884 if err != Error::None_ {
1885 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1886 }
1887 Ok(isl_rs_result)
1888 }
1889
1890 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<PwAff, LibISLError> {
1892 let pwaff = self;
1893 let isl_rs_ctx = pwaff.get_ctx();
1894 let mut pwaff = pwaff;
1895 pwaff.do_not_free_on_drop();
1896 let pwaff = pwaff.ptr;
1897 let type_ = type_.to_i32();
1898 let mut id = id;
1899 id.do_not_free_on_drop();
1900 let id = id.ptr;
1901 let isl_rs_result = unsafe { isl_pw_aff_set_tuple_id(pwaff, type_, id) };
1902 let isl_rs_result = PwAff { ptr: isl_rs_result,
1903 should_free_on_drop: true };
1904 let err = isl_rs_ctx.last_error();
1905 if err != Error::None_ {
1906 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1907 }
1908 Ok(isl_rs_result)
1909 }
1910
1911 pub fn sub(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
1913 let pwaff1 = self;
1914 let isl_rs_ctx = pwaff1.get_ctx();
1915 let mut pwaff1 = pwaff1;
1916 pwaff1.do_not_free_on_drop();
1917 let pwaff1 = pwaff1.ptr;
1918 let mut pwaff2 = pwaff2;
1919 pwaff2.do_not_free_on_drop();
1920 let pwaff2 = pwaff2.ptr;
1921 let isl_rs_result = unsafe { isl_pw_aff_sub(pwaff1, pwaff2) };
1922 let isl_rs_result = PwAff { ptr: isl_rs_result,
1923 should_free_on_drop: true };
1924 let err = isl_rs_ctx.last_error();
1925 if err != Error::None_ {
1926 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1927 }
1928 Ok(isl_rs_result)
1929 }
1930
1931 pub fn subtract_domain(self, set: Set) -> Result<PwAff, LibISLError> {
1933 let pa = self;
1934 let isl_rs_ctx = pa.get_ctx();
1935 let mut pa = pa;
1936 pa.do_not_free_on_drop();
1937 let pa = pa.ptr;
1938 let mut set = set;
1939 set.do_not_free_on_drop();
1940 let set = set.ptr;
1941 let isl_rs_result = unsafe { isl_pw_aff_subtract_domain(pa, set) };
1942 let isl_rs_result = PwAff { ptr: isl_rs_result,
1943 should_free_on_drop: true };
1944 let err = isl_rs_ctx.last_error();
1945 if err != Error::None_ {
1946 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1947 }
1948 Ok(isl_rs_result)
1949 }
1950
1951 pub fn tdiv_q(self, pa2: PwAff) -> Result<PwAff, LibISLError> {
1953 let pa1 = self;
1954 let isl_rs_ctx = pa1.get_ctx();
1955 let mut pa1 = pa1;
1956 pa1.do_not_free_on_drop();
1957 let pa1 = pa1.ptr;
1958 let mut pa2 = pa2;
1959 pa2.do_not_free_on_drop();
1960 let pa2 = pa2.ptr;
1961 let isl_rs_result = unsafe { isl_pw_aff_tdiv_q(pa1, pa2) };
1962 let isl_rs_result = PwAff { ptr: isl_rs_result,
1963 should_free_on_drop: true };
1964 let err = isl_rs_ctx.last_error();
1965 if err != Error::None_ {
1966 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1967 }
1968 Ok(isl_rs_result)
1969 }
1970
1971 pub fn tdiv_r(self, pa2: PwAff) -> Result<PwAff, LibISLError> {
1973 let pa1 = self;
1974 let isl_rs_ctx = pa1.get_ctx();
1975 let mut pa1 = pa1;
1976 pa1.do_not_free_on_drop();
1977 let pa1 = pa1.ptr;
1978 let mut pa2 = pa2;
1979 pa2.do_not_free_on_drop();
1980 let pa2 = pa2.ptr;
1981 let isl_rs_result = unsafe { isl_pw_aff_tdiv_r(pa1, pa2) };
1982 let isl_rs_result = PwAff { ptr: isl_rs_result,
1983 should_free_on_drop: true };
1984 let err = isl_rs_ctx.last_error();
1985 if err != Error::None_ {
1986 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1987 }
1988 Ok(isl_rs_result)
1989 }
1990
1991 pub fn to_list(self) -> Result<PwAffList, LibISLError> {
1993 let el = self;
1994 let isl_rs_ctx = el.get_ctx();
1995 let mut el = el;
1996 el.do_not_free_on_drop();
1997 let el = el.ptr;
1998 let isl_rs_result = unsafe { isl_pw_aff_to_list(el) };
1999 let isl_rs_result = PwAffList { ptr: isl_rs_result,
2000 should_free_on_drop: true };
2001 let err = isl_rs_ctx.last_error();
2002 if err != Error::None_ {
2003 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2004 }
2005 Ok(isl_rs_result)
2006 }
2007
2008 pub fn to_str(&self) -> Result<&str, LibISLError> {
2010 let pa = self;
2011 let isl_rs_ctx = pa.get_ctx();
2012 let pa = pa.ptr;
2013 let isl_rs_result = unsafe { isl_pw_aff_to_str(pa) };
2014 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2015 let isl_rs_result = isl_rs_result.to_str().unwrap();
2016 let err = isl_rs_ctx.last_error();
2017 if err != Error::None_ {
2018 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2019 }
2020 Ok(isl_rs_result)
2021 }
2022
2023 pub fn to_union_pw_aff(self) -> Result<UnionPwAff, 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 isl_rs_result = unsafe { isl_pw_aff_to_union_pw_aff(pa) };
2031 let isl_rs_result = UnionPwAff { ptr: isl_rs_result,
2032 should_free_on_drop: true };
2033 let err = isl_rs_ctx.last_error();
2034 if err != Error::None_ {
2035 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2036 }
2037 Ok(isl_rs_result)
2038 }
2039
2040 pub fn union_add(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
2042 let pwaff1 = self;
2043 let isl_rs_ctx = pwaff1.get_ctx();
2044 let mut pwaff1 = pwaff1;
2045 pwaff1.do_not_free_on_drop();
2046 let pwaff1 = pwaff1.ptr;
2047 let mut pwaff2 = pwaff2;
2048 pwaff2.do_not_free_on_drop();
2049 let pwaff2 = pwaff2.ptr;
2050 let isl_rs_result = unsafe { isl_pw_aff_union_add(pwaff1, pwaff2) };
2051 let isl_rs_result = PwAff { ptr: isl_rs_result,
2052 should_free_on_drop: true };
2053 let err = isl_rs_ctx.last_error();
2054 if err != Error::None_ {
2055 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2056 }
2057 Ok(isl_rs_result)
2058 }
2059
2060 pub fn union_max(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
2062 let pwaff1 = self;
2063 let isl_rs_ctx = pwaff1.get_ctx();
2064 let mut pwaff1 = pwaff1;
2065 pwaff1.do_not_free_on_drop();
2066 let pwaff1 = pwaff1.ptr;
2067 let mut pwaff2 = pwaff2;
2068 pwaff2.do_not_free_on_drop();
2069 let pwaff2 = pwaff2.ptr;
2070 let isl_rs_result = unsafe { isl_pw_aff_union_max(pwaff1, pwaff2) };
2071 let isl_rs_result = PwAff { ptr: isl_rs_result,
2072 should_free_on_drop: true };
2073 let err = isl_rs_ctx.last_error();
2074 if err != Error::None_ {
2075 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2076 }
2077 Ok(isl_rs_result)
2078 }
2079
2080 pub fn union_min(self, pwaff2: PwAff) -> Result<PwAff, LibISLError> {
2082 let pwaff1 = self;
2083 let isl_rs_ctx = pwaff1.get_ctx();
2084 let mut pwaff1 = pwaff1;
2085 pwaff1.do_not_free_on_drop();
2086 let pwaff1 = pwaff1.ptr;
2087 let mut pwaff2 = pwaff2;
2088 pwaff2.do_not_free_on_drop();
2089 let pwaff2 = pwaff2.ptr;
2090 let isl_rs_result = unsafe { isl_pw_aff_union_min(pwaff1, pwaff2) };
2091 let isl_rs_result = PwAff { ptr: isl_rs_result,
2092 should_free_on_drop: true };
2093 let err = isl_rs_ctx.last_error();
2094 if err != Error::None_ {
2095 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2096 }
2097 Ok(isl_rs_result)
2098 }
2099
2100 pub fn val_on_domain(domain: Set, v: Val) -> Result<PwAff, LibISLError> {
2102 let isl_rs_ctx = domain.get_ctx();
2103 let mut domain = domain;
2104 domain.do_not_free_on_drop();
2105 let domain = domain.ptr;
2106 let mut v = v;
2107 v.do_not_free_on_drop();
2108 let v = v.ptr;
2109 let isl_rs_result = unsafe { isl_pw_aff_val_on_domain(domain, v) };
2110 let isl_rs_result = PwAff { ptr: isl_rs_result,
2111 should_free_on_drop: true };
2112 let err = isl_rs_ctx.last_error();
2113 if err != Error::None_ {
2114 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2115 }
2116 Ok(isl_rs_result)
2117 }
2118
2119 pub fn var_on_domain(ls: LocalSpace, type_: DimType, pos: u32) -> Result<PwAff, LibISLError> {
2121 let isl_rs_ctx = ls.get_ctx();
2122 let mut ls = ls;
2123 ls.do_not_free_on_drop();
2124 let ls = ls.ptr;
2125 let type_ = type_.to_i32();
2126 let isl_rs_result = unsafe { isl_pw_aff_var_on_domain(ls, type_, pos) };
2127 let isl_rs_result = PwAff { ptr: isl_rs_result,
2128 should_free_on_drop: true };
2129 let err = isl_rs_ctx.last_error();
2130 if err != Error::None_ {
2131 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2132 }
2133 Ok(isl_rs_result)
2134 }
2135
2136 pub fn zero_on_domain(ls: LocalSpace) -> Result<PwAff, LibISLError> {
2138 let isl_rs_ctx = ls.get_ctx();
2139 let mut ls = ls;
2140 ls.do_not_free_on_drop();
2141 let ls = ls.ptr;
2142 let isl_rs_result = unsafe { isl_pw_aff_zero_on_domain(ls) };
2143 let isl_rs_result = PwAff { ptr: isl_rs_result,
2144 should_free_on_drop: true };
2145 let err = isl_rs_ctx.last_error();
2146 if err != Error::None_ {
2147 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2148 }
2149 Ok(isl_rs_result)
2150 }
2151
2152 pub fn zero_set(self) -> Result<Set, LibISLError> {
2154 let pwaff = self;
2155 let isl_rs_ctx = pwaff.get_ctx();
2156 let mut pwaff = pwaff;
2157 pwaff.do_not_free_on_drop();
2158 let pwaff = pwaff.ptr;
2159 let isl_rs_result = unsafe { isl_pw_aff_zero_set(pwaff) };
2160 let isl_rs_result = Set { ptr: isl_rs_result,
2161 should_free_on_drop: true };
2162 let err = isl_rs_ctx.last_error();
2163 if err != Error::None_ {
2164 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2165 }
2166 Ok(isl_rs_result)
2167 }
2168
2169 pub fn do_not_free_on_drop(&mut self) {
2172 self.should_free_on_drop = false;
2173 }
2174}
2175
2176impl Drop for PwAff {
2177 fn drop(&mut self) {
2178 if self.should_free_on_drop {
2179 unsafe {
2180 isl_pw_aff_free(self.ptr);
2181 }
2182 }
2183 }
2184}