1use super::{
5 AffList, BasicSet, Context, DimType, Error, Id, LibISLError, LocalSpace, MultiAff, MultiId,
6 Point, Set, Space, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct Aff {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_aff_add(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
21
22 fn isl_aff_add_coefficient_si(aff: uintptr_t, type_: i32, pos: i32, v: i32) -> uintptr_t;
23
24 fn isl_aff_add_coefficient_val(aff: uintptr_t, type_: i32, pos: i32, v: uintptr_t)
25 -> uintptr_t;
26
27 fn isl_aff_add_constant_num_si(aff: uintptr_t, v: i32) -> uintptr_t;
28
29 fn isl_aff_add_constant_si(aff: uintptr_t, v: i32) -> uintptr_t;
30
31 fn isl_aff_add_constant_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
32
33 fn isl_aff_add_dims(aff: uintptr_t, type_: i32, n: u32) -> uintptr_t;
34
35 fn isl_aff_align_params(aff: uintptr_t, model: uintptr_t) -> uintptr_t;
36
37 fn isl_aff_bind_id(aff: uintptr_t, id: uintptr_t) -> uintptr_t;
38
39 fn isl_aff_ceil(aff: uintptr_t) -> uintptr_t;
40
41 fn isl_aff_coefficient_sgn(aff: uintptr_t, type_: i32, pos: i32) -> i32;
42
43 fn isl_aff_copy(aff: uintptr_t) -> uintptr_t;
44
45 fn isl_aff_dim(aff: uintptr_t, type_: i32) -> i32;
46
47 fn isl_aff_div(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
48
49 fn isl_aff_domain_reverse(aff: uintptr_t) -> uintptr_t;
50
51 fn isl_aff_drop_dims(aff: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
52
53 fn isl_aff_dump(aff: uintptr_t) -> ();
54
55 fn isl_aff_eq_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
56
57 fn isl_aff_eq_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
58
59 fn isl_aff_eval(aff: uintptr_t, pnt: uintptr_t) -> uintptr_t;
60
61 fn isl_aff_find_dim_by_name(aff: uintptr_t, type_: i32, name: *const c_char) -> i32;
62
63 fn isl_aff_floor(aff: uintptr_t) -> uintptr_t;
64
65 fn isl_aff_free(aff: uintptr_t) -> uintptr_t;
66
67 fn isl_aff_from_range(aff: uintptr_t) -> uintptr_t;
68
69 fn isl_aff_ge_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
70
71 fn isl_aff_ge_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
72
73 fn isl_aff_get_coefficient_val(aff: uintptr_t, type_: i32, pos: i32) -> uintptr_t;
74
75 fn isl_aff_get_constant_val(aff: uintptr_t) -> uintptr_t;
76
77 fn isl_aff_get_ctx(aff: uintptr_t) -> uintptr_t;
78
79 fn isl_aff_get_denominator_val(aff: uintptr_t) -> uintptr_t;
80
81 fn isl_aff_get_dim_name(aff: uintptr_t, type_: i32, pos: u32) -> *const c_char;
82
83 fn isl_aff_get_div(aff: uintptr_t, pos: i32) -> uintptr_t;
84
85 fn isl_aff_get_domain_local_space(aff: uintptr_t) -> uintptr_t;
86
87 fn isl_aff_get_domain_space(aff: uintptr_t) -> uintptr_t;
88
89 fn isl_aff_get_hash(aff: uintptr_t) -> u32;
90
91 fn isl_aff_get_local_space(aff: uintptr_t) -> uintptr_t;
92
93 fn isl_aff_get_space(aff: uintptr_t) -> uintptr_t;
94
95 fn isl_aff_gist(aff: uintptr_t, context: uintptr_t) -> uintptr_t;
96
97 fn isl_aff_gist_params(aff: uintptr_t, context: uintptr_t) -> uintptr_t;
98
99 fn isl_aff_gt_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
100
101 fn isl_aff_gt_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
102
103 fn isl_aff_insert_dims(aff: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
104
105 fn isl_aff_involves_dims(aff: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
106
107 fn isl_aff_involves_locals(aff: uintptr_t) -> i32;
108
109 fn isl_aff_is_cst(aff: uintptr_t) -> i32;
110
111 fn isl_aff_is_nan(aff: uintptr_t) -> i32;
112
113 fn isl_aff_le_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
114
115 fn isl_aff_le_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
116
117 fn isl_aff_lt_basic_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
118
119 fn isl_aff_lt_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
120
121 fn isl_aff_mod_val(aff: uintptr_t, mod_: uintptr_t) -> uintptr_t;
122
123 fn isl_aff_move_dims(aff: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32, src_pos: u32,
124 n: u32)
125 -> uintptr_t;
126
127 fn isl_aff_mul(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
128
129 fn isl_aff_nan_on_domain(ls: uintptr_t) -> uintptr_t;
130
131 fn isl_aff_nan_on_domain_space(space: uintptr_t) -> uintptr_t;
132
133 fn isl_aff_ne_set(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
134
135 fn isl_aff_neg(aff: uintptr_t) -> uintptr_t;
136
137 fn isl_aff_neg_basic_set(aff: uintptr_t) -> uintptr_t;
138
139 fn isl_aff_param_on_domain_space_id(space: uintptr_t, id: uintptr_t) -> uintptr_t;
140
141 fn isl_aff_plain_is_equal(aff1: uintptr_t, aff2: uintptr_t) -> i32;
142
143 fn isl_aff_plain_is_zero(aff: uintptr_t) -> i32;
144
145 fn isl_aff_project_domain_on_params(aff: uintptr_t) -> uintptr_t;
146
147 fn isl_aff_pullback_aff(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
148
149 fn isl_aff_pullback_multi_aff(aff: uintptr_t, ma: uintptr_t) -> uintptr_t;
150
151 fn isl_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
152
153 fn isl_aff_scale_down_ui(aff: uintptr_t, f: u32) -> uintptr_t;
154
155 fn isl_aff_scale_down_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
156
157 fn isl_aff_scale_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
158
159 fn isl_aff_set_coefficient_si(aff: uintptr_t, type_: i32, pos: i32, v: i32) -> uintptr_t;
160
161 fn isl_aff_set_coefficient_val(aff: uintptr_t, type_: i32, pos: i32, v: uintptr_t)
162 -> uintptr_t;
163
164 fn isl_aff_set_constant_si(aff: uintptr_t, v: i32) -> uintptr_t;
165
166 fn isl_aff_set_constant_val(aff: uintptr_t, v: uintptr_t) -> uintptr_t;
167
168 fn isl_aff_set_dim_id(aff: uintptr_t, type_: i32, pos: u32, id: uintptr_t) -> uintptr_t;
169
170 fn isl_aff_set_dim_name(aff: uintptr_t, type_: i32, pos: u32, s: *const c_char) -> uintptr_t;
171
172 fn isl_aff_set_tuple_id(aff: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
173
174 fn isl_aff_sub(aff1: uintptr_t, aff2: uintptr_t) -> uintptr_t;
175
176 fn isl_aff_to_list(el: uintptr_t) -> uintptr_t;
177
178 fn isl_aff_to_str(aff: uintptr_t) -> *const c_char;
179
180 fn isl_aff_unbind_params_insert_domain(aff: uintptr_t, domain: uintptr_t) -> uintptr_t;
181
182 fn isl_aff_val_on_domain(ls: uintptr_t, val: uintptr_t) -> uintptr_t;
183
184 fn isl_aff_val_on_domain_space(space: uintptr_t, val: uintptr_t) -> uintptr_t;
185
186 fn isl_aff_var_on_domain(ls: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
187
188 fn isl_aff_zero_basic_set(aff: uintptr_t) -> uintptr_t;
189
190 fn isl_aff_zero_on_domain(ls: uintptr_t) -> uintptr_t;
191
192 fn isl_aff_zero_on_domain_space(space: uintptr_t) -> uintptr_t;
193
194}
195
196impl Aff {
197 pub fn add(self, aff2: Aff) -> Result<Aff, LibISLError> {
199 let aff1 = self;
200 let isl_rs_ctx = aff1.get_ctx();
201 let mut aff1 = aff1;
202 aff1.do_not_free_on_drop();
203 let aff1 = aff1.ptr;
204 let mut aff2 = aff2;
205 aff2.do_not_free_on_drop();
206 let aff2 = aff2.ptr;
207 let isl_rs_result = unsafe { isl_aff_add(aff1, aff2) };
208 let isl_rs_result = Aff { ptr: isl_rs_result,
209 should_free_on_drop: true };
210 let err = isl_rs_ctx.last_error();
211 if err != Error::None_ {
212 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
213 }
214 Ok(isl_rs_result)
215 }
216
217 pub fn add_coefficient_si(self, type_: DimType, pos: i32, v: i32) -> Result<Aff, LibISLError> {
219 let aff = self;
220 let isl_rs_ctx = aff.get_ctx();
221 let mut aff = aff;
222 aff.do_not_free_on_drop();
223 let aff = aff.ptr;
224 let type_ = type_.to_i32();
225 let isl_rs_result = unsafe { isl_aff_add_coefficient_si(aff, type_, pos, v) };
226 let isl_rs_result = Aff { ptr: isl_rs_result,
227 should_free_on_drop: true };
228 let err = isl_rs_ctx.last_error();
229 if err != Error::None_ {
230 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
231 }
232 Ok(isl_rs_result)
233 }
234
235 pub fn add_coefficient_val(self, type_: DimType, pos: i32, v: Val) -> Result<Aff, LibISLError> {
237 let aff = self;
238 let isl_rs_ctx = aff.get_ctx();
239 let mut aff = aff;
240 aff.do_not_free_on_drop();
241 let aff = aff.ptr;
242 let type_ = type_.to_i32();
243 let mut v = v;
244 v.do_not_free_on_drop();
245 let v = v.ptr;
246 let isl_rs_result = unsafe { isl_aff_add_coefficient_val(aff, type_, pos, v) };
247 let isl_rs_result = Aff { ptr: isl_rs_result,
248 should_free_on_drop: true };
249 let err = isl_rs_ctx.last_error();
250 if err != Error::None_ {
251 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
252 }
253 Ok(isl_rs_result)
254 }
255
256 pub fn add_constant_num_si(self, v: i32) -> Result<Aff, LibISLError> {
258 let aff = self;
259 let isl_rs_ctx = aff.get_ctx();
260 let mut aff = aff;
261 aff.do_not_free_on_drop();
262 let aff = aff.ptr;
263 let isl_rs_result = unsafe { isl_aff_add_constant_num_si(aff, v) };
264 let isl_rs_result = Aff { ptr: isl_rs_result,
265 should_free_on_drop: true };
266 let err = isl_rs_ctx.last_error();
267 if err != Error::None_ {
268 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
269 }
270 Ok(isl_rs_result)
271 }
272
273 pub fn add_constant_si(self, v: i32) -> Result<Aff, LibISLError> {
275 let aff = self;
276 let isl_rs_ctx = aff.get_ctx();
277 let mut aff = aff;
278 aff.do_not_free_on_drop();
279 let aff = aff.ptr;
280 let isl_rs_result = unsafe { isl_aff_add_constant_si(aff, v) };
281 let isl_rs_result = Aff { ptr: isl_rs_result,
282 should_free_on_drop: true };
283 let err = isl_rs_ctx.last_error();
284 if err != Error::None_ {
285 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
286 }
287 Ok(isl_rs_result)
288 }
289
290 pub fn add_constant_val(self, v: Val) -> Result<Aff, LibISLError> {
292 let aff = self;
293 let isl_rs_ctx = aff.get_ctx();
294 let mut aff = aff;
295 aff.do_not_free_on_drop();
296 let aff = aff.ptr;
297 let mut v = v;
298 v.do_not_free_on_drop();
299 let v = v.ptr;
300 let isl_rs_result = unsafe { isl_aff_add_constant_val(aff, v) };
301 let isl_rs_result = Aff { ptr: isl_rs_result,
302 should_free_on_drop: true };
303 let err = isl_rs_ctx.last_error();
304 if err != Error::None_ {
305 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
306 }
307 Ok(isl_rs_result)
308 }
309
310 pub fn add_dims(self, type_: DimType, n: u32) -> Result<Aff, LibISLError> {
312 let aff = self;
313 let isl_rs_ctx = aff.get_ctx();
314 let mut aff = aff;
315 aff.do_not_free_on_drop();
316 let aff = aff.ptr;
317 let type_ = type_.to_i32();
318 let isl_rs_result = unsafe { isl_aff_add_dims(aff, type_, n) };
319 let isl_rs_result = Aff { ptr: isl_rs_result,
320 should_free_on_drop: true };
321 let err = isl_rs_ctx.last_error();
322 if err != Error::None_ {
323 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
324 }
325 Ok(isl_rs_result)
326 }
327
328 pub fn align_params(self, model: Space) -> Result<Aff, LibISLError> {
330 let aff = self;
331 let isl_rs_ctx = aff.get_ctx();
332 let mut aff = aff;
333 aff.do_not_free_on_drop();
334 let aff = aff.ptr;
335 let mut model = model;
336 model.do_not_free_on_drop();
337 let model = model.ptr;
338 let isl_rs_result = unsafe { isl_aff_align_params(aff, model) };
339 let isl_rs_result = Aff { ptr: isl_rs_result,
340 should_free_on_drop: true };
341 let err = isl_rs_ctx.last_error();
342 if err != Error::None_ {
343 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
344 }
345 Ok(isl_rs_result)
346 }
347
348 pub fn bind_id(self, id: Id) -> Result<BasicSet, LibISLError> {
350 let aff = self;
351 let isl_rs_ctx = aff.get_ctx();
352 let mut aff = aff;
353 aff.do_not_free_on_drop();
354 let aff = aff.ptr;
355 let mut id = id;
356 id.do_not_free_on_drop();
357 let id = id.ptr;
358 let isl_rs_result = unsafe { isl_aff_bind_id(aff, id) };
359 let isl_rs_result = BasicSet { ptr: isl_rs_result,
360 should_free_on_drop: true };
361 let err = isl_rs_ctx.last_error();
362 if err != Error::None_ {
363 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
364 }
365 Ok(isl_rs_result)
366 }
367
368 pub fn ceil(self) -> Result<Aff, LibISLError> {
370 let aff = self;
371 let isl_rs_ctx = aff.get_ctx();
372 let mut aff = aff;
373 aff.do_not_free_on_drop();
374 let aff = aff.ptr;
375 let isl_rs_result = unsafe { isl_aff_ceil(aff) };
376 let isl_rs_result = Aff { ptr: isl_rs_result,
377 should_free_on_drop: true };
378 let err = isl_rs_ctx.last_error();
379 if err != Error::None_ {
380 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
381 }
382 Ok(isl_rs_result)
383 }
384
385 pub fn coefficient_sgn(&self, type_: DimType, pos: i32) -> Result<i32, LibISLError> {
387 let aff = self;
388 let isl_rs_ctx = aff.get_ctx();
389 let aff = aff.ptr;
390 let type_ = type_.to_i32();
391 let isl_rs_result = unsafe { isl_aff_coefficient_sgn(aff, type_, pos) };
392 let err = isl_rs_ctx.last_error();
393 if err != Error::None_ {
394 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
395 }
396 Ok(isl_rs_result)
397 }
398
399 pub fn copy(&self) -> Result<Aff, LibISLError> {
401 let aff = self;
402 let isl_rs_ctx = aff.get_ctx();
403 let aff = aff.ptr;
404 let isl_rs_result = unsafe { isl_aff_copy(aff) };
405 let isl_rs_result = Aff { ptr: isl_rs_result,
406 should_free_on_drop: true };
407 let err = isl_rs_ctx.last_error();
408 if err != Error::None_ {
409 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
410 }
411 Ok(isl_rs_result)
412 }
413
414 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
416 let aff = self;
417 let isl_rs_ctx = aff.get_ctx();
418 let aff = aff.ptr;
419 let type_ = type_.to_i32();
420 let isl_rs_result = unsafe { isl_aff_dim(aff, type_) };
421 let err = isl_rs_ctx.last_error();
422 if err != Error::None_ {
423 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
424 }
425 Ok(isl_rs_result)
426 }
427
428 pub fn div(self, aff2: Aff) -> Result<Aff, LibISLError> {
430 let aff1 = self;
431 let isl_rs_ctx = aff1.get_ctx();
432 let mut aff1 = aff1;
433 aff1.do_not_free_on_drop();
434 let aff1 = aff1.ptr;
435 let mut aff2 = aff2;
436 aff2.do_not_free_on_drop();
437 let aff2 = aff2.ptr;
438 let isl_rs_result = unsafe { isl_aff_div(aff1, aff2) };
439 let isl_rs_result = Aff { ptr: isl_rs_result,
440 should_free_on_drop: true };
441 let err = isl_rs_ctx.last_error();
442 if err != Error::None_ {
443 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
444 }
445 Ok(isl_rs_result)
446 }
447
448 pub fn domain_reverse(self) -> Result<Aff, LibISLError> {
450 let aff = self;
451 let isl_rs_ctx = aff.get_ctx();
452 let mut aff = aff;
453 aff.do_not_free_on_drop();
454 let aff = aff.ptr;
455 let isl_rs_result = unsafe { isl_aff_domain_reverse(aff) };
456 let isl_rs_result = Aff { ptr: isl_rs_result,
457 should_free_on_drop: true };
458 let err = isl_rs_ctx.last_error();
459 if err != Error::None_ {
460 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
461 }
462 Ok(isl_rs_result)
463 }
464
465 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<Aff, LibISLError> {
467 let aff = self;
468 let isl_rs_ctx = aff.get_ctx();
469 let mut aff = aff;
470 aff.do_not_free_on_drop();
471 let aff = aff.ptr;
472 let type_ = type_.to_i32();
473 let isl_rs_result = unsafe { isl_aff_drop_dims(aff, type_, first, n) };
474 let isl_rs_result = Aff { ptr: isl_rs_result,
475 should_free_on_drop: true };
476 let err = isl_rs_ctx.last_error();
477 if err != Error::None_ {
478 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
479 }
480 Ok(isl_rs_result)
481 }
482
483 pub fn dump(&self) -> Result<(), LibISLError> {
485 let aff = self;
486 let isl_rs_ctx = aff.get_ctx();
487 let aff = aff.ptr;
488 let isl_rs_result = unsafe { isl_aff_dump(aff) };
489 let err = isl_rs_ctx.last_error();
490 if err != Error::None_ {
491 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
492 }
493 Ok(isl_rs_result)
494 }
495
496 pub fn eq_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
498 let aff1 = self;
499 let isl_rs_ctx = aff1.get_ctx();
500 let mut aff1 = aff1;
501 aff1.do_not_free_on_drop();
502 let aff1 = aff1.ptr;
503 let mut aff2 = aff2;
504 aff2.do_not_free_on_drop();
505 let aff2 = aff2.ptr;
506 let isl_rs_result = unsafe { isl_aff_eq_basic_set(aff1, aff2) };
507 let isl_rs_result = BasicSet { ptr: isl_rs_result,
508 should_free_on_drop: true };
509 let err = isl_rs_ctx.last_error();
510 if err != Error::None_ {
511 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
512 }
513 Ok(isl_rs_result)
514 }
515
516 pub fn eq_set(self, aff2: Aff) -> Result<Set, LibISLError> {
518 let aff1 = self;
519 let isl_rs_ctx = aff1.get_ctx();
520 let mut aff1 = aff1;
521 aff1.do_not_free_on_drop();
522 let aff1 = aff1.ptr;
523 let mut aff2 = aff2;
524 aff2.do_not_free_on_drop();
525 let aff2 = aff2.ptr;
526 let isl_rs_result = unsafe { isl_aff_eq_set(aff1, aff2) };
527 let isl_rs_result = Set { ptr: isl_rs_result,
528 should_free_on_drop: true };
529 let err = isl_rs_ctx.last_error();
530 if err != Error::None_ {
531 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
532 }
533 Ok(isl_rs_result)
534 }
535
536 pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
538 let aff = self;
539 let isl_rs_ctx = aff.get_ctx();
540 let mut aff = aff;
541 aff.do_not_free_on_drop();
542 let aff = aff.ptr;
543 let mut pnt = pnt;
544 pnt.do_not_free_on_drop();
545 let pnt = pnt.ptr;
546 let isl_rs_result = unsafe { isl_aff_eval(aff, pnt) };
547 let isl_rs_result = Val { ptr: isl_rs_result,
548 should_free_on_drop: true };
549 let err = isl_rs_ctx.last_error();
550 if err != Error::None_ {
551 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
552 }
553 Ok(isl_rs_result)
554 }
555
556 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
558 let aff = self;
559 let isl_rs_ctx = aff.get_ctx();
560 let aff = aff.ptr;
561 let type_ = type_.to_i32();
562 let name = CString::new(name).unwrap();
563 let name = name.as_ptr();
564 let isl_rs_result = unsafe { isl_aff_find_dim_by_name(aff, type_, name) };
565 let err = isl_rs_ctx.last_error();
566 if err != Error::None_ {
567 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
568 }
569 Ok(isl_rs_result)
570 }
571
572 pub fn floor(self) -> Result<Aff, LibISLError> {
574 let aff = self;
575 let isl_rs_ctx = aff.get_ctx();
576 let mut aff = aff;
577 aff.do_not_free_on_drop();
578 let aff = aff.ptr;
579 let isl_rs_result = unsafe { isl_aff_floor(aff) };
580 let isl_rs_result = Aff { ptr: isl_rs_result,
581 should_free_on_drop: true };
582 let err = isl_rs_ctx.last_error();
583 if err != Error::None_ {
584 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
585 }
586 Ok(isl_rs_result)
587 }
588
589 pub fn free(self) -> Result<Aff, LibISLError> {
591 let aff = self;
592 let isl_rs_ctx = aff.get_ctx();
593 let mut aff = aff;
594 aff.do_not_free_on_drop();
595 let aff = aff.ptr;
596 let isl_rs_result = unsafe { isl_aff_free(aff) };
597 let isl_rs_result = Aff { ptr: isl_rs_result,
598 should_free_on_drop: true };
599 let err = isl_rs_ctx.last_error();
600 if err != Error::None_ {
601 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
602 }
603 Ok(isl_rs_result)
604 }
605
606 pub fn from_range(self) -> Result<Aff, LibISLError> {
608 let aff = self;
609 let isl_rs_ctx = aff.get_ctx();
610 let mut aff = aff;
611 aff.do_not_free_on_drop();
612 let aff = aff.ptr;
613 let isl_rs_result = unsafe { isl_aff_from_range(aff) };
614 let isl_rs_result = Aff { ptr: isl_rs_result,
615 should_free_on_drop: true };
616 let err = isl_rs_ctx.last_error();
617 if err != Error::None_ {
618 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
619 }
620 Ok(isl_rs_result)
621 }
622
623 pub fn ge_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
625 let aff1 = self;
626 let isl_rs_ctx = aff1.get_ctx();
627 let mut aff1 = aff1;
628 aff1.do_not_free_on_drop();
629 let aff1 = aff1.ptr;
630 let mut aff2 = aff2;
631 aff2.do_not_free_on_drop();
632 let aff2 = aff2.ptr;
633 let isl_rs_result = unsafe { isl_aff_ge_basic_set(aff1, aff2) };
634 let isl_rs_result = BasicSet { ptr: isl_rs_result,
635 should_free_on_drop: true };
636 let err = isl_rs_ctx.last_error();
637 if err != Error::None_ {
638 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
639 }
640 Ok(isl_rs_result)
641 }
642
643 pub fn ge_set(self, aff2: Aff) -> Result<Set, LibISLError> {
645 let aff1 = self;
646 let isl_rs_ctx = aff1.get_ctx();
647 let mut aff1 = aff1;
648 aff1.do_not_free_on_drop();
649 let aff1 = aff1.ptr;
650 let mut aff2 = aff2;
651 aff2.do_not_free_on_drop();
652 let aff2 = aff2.ptr;
653 let isl_rs_result = unsafe { isl_aff_ge_set(aff1, aff2) };
654 let isl_rs_result = Set { ptr: isl_rs_result,
655 should_free_on_drop: true };
656 let err = isl_rs_ctx.last_error();
657 if err != Error::None_ {
658 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
659 }
660 Ok(isl_rs_result)
661 }
662
663 pub fn get_coefficient_val(&self, type_: DimType, pos: i32) -> Result<Val, LibISLError> {
665 let aff = self;
666 let isl_rs_ctx = aff.get_ctx();
667 let aff = aff.ptr;
668 let type_ = type_.to_i32();
669 let isl_rs_result = unsafe { isl_aff_get_coefficient_val(aff, type_, pos) };
670 let isl_rs_result = Val { ptr: isl_rs_result,
671 should_free_on_drop: true };
672 let err = isl_rs_ctx.last_error();
673 if err != Error::None_ {
674 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
675 }
676 Ok(isl_rs_result)
677 }
678
679 pub fn get_constant_val(&self) -> Result<Val, LibISLError> {
681 let aff = self;
682 let isl_rs_ctx = aff.get_ctx();
683 let aff = aff.ptr;
684 let isl_rs_result = unsafe { isl_aff_get_constant_val(aff) };
685 let isl_rs_result = Val { ptr: isl_rs_result,
686 should_free_on_drop: true };
687 let err = isl_rs_ctx.last_error();
688 if err != Error::None_ {
689 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
690 }
691 Ok(isl_rs_result)
692 }
693
694 pub fn get_ctx(&self) -> Context {
696 let aff = self;
697 let aff = aff.ptr;
698 let isl_rs_result = unsafe { isl_aff_get_ctx(aff) };
699 let isl_rs_result = Context { ptr: isl_rs_result,
700 should_free_on_drop: false };
701 isl_rs_result
702 }
703
704 pub fn get_denominator_val(&self) -> Result<Val, LibISLError> {
706 let aff = self;
707 let isl_rs_ctx = aff.get_ctx();
708 let aff = aff.ptr;
709 let isl_rs_result = unsafe { isl_aff_get_denominator_val(aff) };
710 let isl_rs_result = Val { ptr: isl_rs_result,
711 should_free_on_drop: true };
712 let err = isl_rs_ctx.last_error();
713 if err != Error::None_ {
714 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
715 }
716 Ok(isl_rs_result)
717 }
718
719 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
721 let aff = self;
722 let isl_rs_ctx = aff.get_ctx();
723 let aff = aff.ptr;
724 let type_ = type_.to_i32();
725 let isl_rs_result = unsafe { isl_aff_get_dim_name(aff, type_, pos) };
726 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
727 let isl_rs_result = isl_rs_result.to_str().unwrap();
728 let err = isl_rs_ctx.last_error();
729 if err != Error::None_ {
730 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
731 }
732 Ok(isl_rs_result)
733 }
734
735 pub fn get_div(&self, pos: i32) -> Result<Aff, LibISLError> {
737 let aff = self;
738 let isl_rs_ctx = aff.get_ctx();
739 let aff = aff.ptr;
740 let isl_rs_result = unsafe { isl_aff_get_div(aff, pos) };
741 let isl_rs_result = Aff { ptr: isl_rs_result,
742 should_free_on_drop: true };
743 let err = isl_rs_ctx.last_error();
744 if err != Error::None_ {
745 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
746 }
747 Ok(isl_rs_result)
748 }
749
750 pub fn get_domain_local_space(&self) -> Result<LocalSpace, LibISLError> {
752 let aff = self;
753 let isl_rs_ctx = aff.get_ctx();
754 let aff = aff.ptr;
755 let isl_rs_result = unsafe { isl_aff_get_domain_local_space(aff) };
756 let isl_rs_result = LocalSpace { ptr: isl_rs_result,
757 should_free_on_drop: true };
758 let err = isl_rs_ctx.last_error();
759 if err != Error::None_ {
760 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
761 }
762 Ok(isl_rs_result)
763 }
764
765 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
767 let aff = self;
768 let isl_rs_ctx = aff.get_ctx();
769 let aff = aff.ptr;
770 let isl_rs_result = unsafe { isl_aff_get_domain_space(aff) };
771 let isl_rs_result = Space { ptr: isl_rs_result,
772 should_free_on_drop: true };
773 let err = isl_rs_ctx.last_error();
774 if err != Error::None_ {
775 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
776 }
777 Ok(isl_rs_result)
778 }
779
780 pub fn get_hash(&self) -> Result<u32, LibISLError> {
782 let aff = self;
783 let isl_rs_ctx = aff.get_ctx();
784 let aff = aff.ptr;
785 let isl_rs_result = unsafe { isl_aff_get_hash(aff) };
786 let err = isl_rs_ctx.last_error();
787 if err != Error::None_ {
788 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
789 }
790 Ok(isl_rs_result)
791 }
792
793 pub fn get_local_space(&self) -> Result<LocalSpace, LibISLError> {
795 let aff = self;
796 let isl_rs_ctx = aff.get_ctx();
797 let aff = aff.ptr;
798 let isl_rs_result = unsafe { isl_aff_get_local_space(aff) };
799 let isl_rs_result = LocalSpace { ptr: isl_rs_result,
800 should_free_on_drop: true };
801 let err = isl_rs_ctx.last_error();
802 if err != Error::None_ {
803 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
804 }
805 Ok(isl_rs_result)
806 }
807
808 pub fn get_space(&self) -> Result<Space, LibISLError> {
810 let aff = self;
811 let isl_rs_ctx = aff.get_ctx();
812 let aff = aff.ptr;
813 let isl_rs_result = unsafe { isl_aff_get_space(aff) };
814 let isl_rs_result = Space { ptr: isl_rs_result,
815 should_free_on_drop: true };
816 let err = isl_rs_ctx.last_error();
817 if err != Error::None_ {
818 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
819 }
820 Ok(isl_rs_result)
821 }
822
823 pub fn gist(self, context: Set) -> Result<Aff, LibISLError> {
825 let aff = self;
826 let isl_rs_ctx = aff.get_ctx();
827 let mut aff = aff;
828 aff.do_not_free_on_drop();
829 let aff = aff.ptr;
830 let mut context = context;
831 context.do_not_free_on_drop();
832 let context = context.ptr;
833 let isl_rs_result = unsafe { isl_aff_gist(aff, context) };
834 let isl_rs_result = Aff { ptr: isl_rs_result,
835 should_free_on_drop: true };
836 let err = isl_rs_ctx.last_error();
837 if err != Error::None_ {
838 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
839 }
840 Ok(isl_rs_result)
841 }
842
843 pub fn gist_params(self, context: Set) -> Result<Aff, LibISLError> {
845 let aff = self;
846 let isl_rs_ctx = aff.get_ctx();
847 let mut aff = aff;
848 aff.do_not_free_on_drop();
849 let aff = aff.ptr;
850 let mut context = context;
851 context.do_not_free_on_drop();
852 let context = context.ptr;
853 let isl_rs_result = unsafe { isl_aff_gist_params(aff, context) };
854 let isl_rs_result = Aff { ptr: isl_rs_result,
855 should_free_on_drop: true };
856 let err = isl_rs_ctx.last_error();
857 if err != Error::None_ {
858 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
859 }
860 Ok(isl_rs_result)
861 }
862
863 pub fn gt_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
865 let aff1 = self;
866 let isl_rs_ctx = aff1.get_ctx();
867 let mut aff1 = aff1;
868 aff1.do_not_free_on_drop();
869 let aff1 = aff1.ptr;
870 let mut aff2 = aff2;
871 aff2.do_not_free_on_drop();
872 let aff2 = aff2.ptr;
873 let isl_rs_result = unsafe { isl_aff_gt_basic_set(aff1, aff2) };
874 let isl_rs_result = BasicSet { ptr: isl_rs_result,
875 should_free_on_drop: true };
876 let err = isl_rs_ctx.last_error();
877 if err != Error::None_ {
878 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
879 }
880 Ok(isl_rs_result)
881 }
882
883 pub fn gt_set(self, aff2: Aff) -> Result<Set, LibISLError> {
885 let aff1 = self;
886 let isl_rs_ctx = aff1.get_ctx();
887 let mut aff1 = aff1;
888 aff1.do_not_free_on_drop();
889 let aff1 = aff1.ptr;
890 let mut aff2 = aff2;
891 aff2.do_not_free_on_drop();
892 let aff2 = aff2.ptr;
893 let isl_rs_result = unsafe { isl_aff_gt_set(aff1, aff2) };
894 let isl_rs_result = Set { ptr: isl_rs_result,
895 should_free_on_drop: true };
896 let err = isl_rs_ctx.last_error();
897 if err != Error::None_ {
898 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
899 }
900 Ok(isl_rs_result)
901 }
902
903 pub fn insert_dims(self, type_: DimType, first: u32, n: u32) -> Result<Aff, LibISLError> {
905 let aff = self;
906 let isl_rs_ctx = aff.get_ctx();
907 let mut aff = aff;
908 aff.do_not_free_on_drop();
909 let aff = aff.ptr;
910 let type_ = type_.to_i32();
911 let isl_rs_result = unsafe { isl_aff_insert_dims(aff, type_, first, n) };
912 let isl_rs_result = Aff { ptr: isl_rs_result,
913 should_free_on_drop: true };
914 let err = isl_rs_ctx.last_error();
915 if err != Error::None_ {
916 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
917 }
918 Ok(isl_rs_result)
919 }
920
921 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
923 let aff = self;
924 let isl_rs_ctx = aff.get_ctx();
925 let aff = aff.ptr;
926 let type_ = type_.to_i32();
927 let isl_rs_result = unsafe { isl_aff_involves_dims(aff, type_, first, n) };
928 let isl_rs_result = match isl_rs_result {
929 0 => false,
930 1 => true,
931 _ => panic!("Got isl_bool = -1"),
932 };
933 let err = isl_rs_ctx.last_error();
934 if err != Error::None_ {
935 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
936 }
937 Ok(isl_rs_result)
938 }
939
940 pub fn involves_locals(&self) -> Result<bool, LibISLError> {
942 let aff = self;
943 let isl_rs_ctx = aff.get_ctx();
944 let aff = aff.ptr;
945 let isl_rs_result = unsafe { isl_aff_involves_locals(aff) };
946 let isl_rs_result = match isl_rs_result {
947 0 => false,
948 1 => true,
949 _ => panic!("Got isl_bool = -1"),
950 };
951 let err = isl_rs_ctx.last_error();
952 if err != Error::None_ {
953 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
954 }
955 Ok(isl_rs_result)
956 }
957
958 pub fn is_cst(&self) -> Result<bool, LibISLError> {
960 let aff = self;
961 let isl_rs_ctx = aff.get_ctx();
962 let aff = aff.ptr;
963 let isl_rs_result = unsafe { isl_aff_is_cst(aff) };
964 let isl_rs_result = match isl_rs_result {
965 0 => false,
966 1 => true,
967 _ => panic!("Got isl_bool = -1"),
968 };
969 let err = isl_rs_ctx.last_error();
970 if err != Error::None_ {
971 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
972 }
973 Ok(isl_rs_result)
974 }
975
976 pub fn is_nan(&self) -> Result<bool, LibISLError> {
978 let aff = self;
979 let isl_rs_ctx = aff.get_ctx();
980 let aff = aff.ptr;
981 let isl_rs_result = unsafe { isl_aff_is_nan(aff) };
982 let isl_rs_result = match isl_rs_result {
983 0 => false,
984 1 => true,
985 _ => panic!("Got isl_bool = -1"),
986 };
987 let err = isl_rs_ctx.last_error();
988 if err != Error::None_ {
989 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
990 }
991 Ok(isl_rs_result)
992 }
993
994 pub fn le_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
996 let aff1 = self;
997 let isl_rs_ctx = aff1.get_ctx();
998 let mut aff1 = aff1;
999 aff1.do_not_free_on_drop();
1000 let aff1 = aff1.ptr;
1001 let mut aff2 = aff2;
1002 aff2.do_not_free_on_drop();
1003 let aff2 = aff2.ptr;
1004 let isl_rs_result = unsafe { isl_aff_le_basic_set(aff1, aff2) };
1005 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1006 should_free_on_drop: true };
1007 let err = isl_rs_ctx.last_error();
1008 if err != Error::None_ {
1009 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1010 }
1011 Ok(isl_rs_result)
1012 }
1013
1014 pub fn le_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1016 let aff1 = self;
1017 let isl_rs_ctx = aff1.get_ctx();
1018 let mut aff1 = aff1;
1019 aff1.do_not_free_on_drop();
1020 let aff1 = aff1.ptr;
1021 let mut aff2 = aff2;
1022 aff2.do_not_free_on_drop();
1023 let aff2 = aff2.ptr;
1024 let isl_rs_result = unsafe { isl_aff_le_set(aff1, aff2) };
1025 let isl_rs_result = Set { ptr: isl_rs_result,
1026 should_free_on_drop: true };
1027 let err = isl_rs_ctx.last_error();
1028 if err != Error::None_ {
1029 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1030 }
1031 Ok(isl_rs_result)
1032 }
1033
1034 pub fn lt_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
1036 let aff1 = self;
1037 let isl_rs_ctx = aff1.get_ctx();
1038 let mut aff1 = aff1;
1039 aff1.do_not_free_on_drop();
1040 let aff1 = aff1.ptr;
1041 let mut aff2 = aff2;
1042 aff2.do_not_free_on_drop();
1043 let aff2 = aff2.ptr;
1044 let isl_rs_result = unsafe { isl_aff_lt_basic_set(aff1, aff2) };
1045 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1046 should_free_on_drop: true };
1047 let err = isl_rs_ctx.last_error();
1048 if err != Error::None_ {
1049 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1050 }
1051 Ok(isl_rs_result)
1052 }
1053
1054 pub fn lt_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1056 let aff1 = self;
1057 let isl_rs_ctx = aff1.get_ctx();
1058 let mut aff1 = aff1;
1059 aff1.do_not_free_on_drop();
1060 let aff1 = aff1.ptr;
1061 let mut aff2 = aff2;
1062 aff2.do_not_free_on_drop();
1063 let aff2 = aff2.ptr;
1064 let isl_rs_result = unsafe { isl_aff_lt_set(aff1, aff2) };
1065 let isl_rs_result = Set { ptr: isl_rs_result,
1066 should_free_on_drop: true };
1067 let err = isl_rs_ctx.last_error();
1068 if err != Error::None_ {
1069 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1070 }
1071 Ok(isl_rs_result)
1072 }
1073
1074 pub fn mod_val(self, mod_: Val) -> Result<Aff, LibISLError> {
1076 let aff = self;
1077 let isl_rs_ctx = aff.get_ctx();
1078 let mut aff = aff;
1079 aff.do_not_free_on_drop();
1080 let aff = aff.ptr;
1081 let mut mod_ = mod_;
1082 mod_.do_not_free_on_drop();
1083 let mod_ = mod_.ptr;
1084 let isl_rs_result = unsafe { isl_aff_mod_val(aff, mod_) };
1085 let isl_rs_result = Aff { ptr: isl_rs_result,
1086 should_free_on_drop: true };
1087 let err = isl_rs_ctx.last_error();
1088 if err != Error::None_ {
1089 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1090 }
1091 Ok(isl_rs_result)
1092 }
1093
1094 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1096 n: u32)
1097 -> Result<Aff, LibISLError> {
1098 let aff = self;
1099 let isl_rs_ctx = aff.get_ctx();
1100 let mut aff = aff;
1101 aff.do_not_free_on_drop();
1102 let aff = aff.ptr;
1103 let dst_type = dst_type.to_i32();
1104 let src_type = src_type.to_i32();
1105 let isl_rs_result =
1106 unsafe { isl_aff_move_dims(aff, dst_type, dst_pos, src_type, src_pos, n) };
1107 let isl_rs_result = Aff { ptr: isl_rs_result,
1108 should_free_on_drop: true };
1109 let err = isl_rs_ctx.last_error();
1110 if err != Error::None_ {
1111 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1112 }
1113 Ok(isl_rs_result)
1114 }
1115
1116 pub fn mul(self, aff2: Aff) -> Result<Aff, LibISLError> {
1118 let aff1 = self;
1119 let isl_rs_ctx = aff1.get_ctx();
1120 let mut aff1 = aff1;
1121 aff1.do_not_free_on_drop();
1122 let aff1 = aff1.ptr;
1123 let mut aff2 = aff2;
1124 aff2.do_not_free_on_drop();
1125 let aff2 = aff2.ptr;
1126 let isl_rs_result = unsafe { isl_aff_mul(aff1, aff2) };
1127 let isl_rs_result = Aff { ptr: isl_rs_result,
1128 should_free_on_drop: true };
1129 let err = isl_rs_ctx.last_error();
1130 if err != Error::None_ {
1131 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1132 }
1133 Ok(isl_rs_result)
1134 }
1135
1136 pub fn nan_on_domain(ls: LocalSpace) -> Result<Aff, LibISLError> {
1138 let isl_rs_ctx = ls.get_ctx();
1139 let mut ls = ls;
1140 ls.do_not_free_on_drop();
1141 let ls = ls.ptr;
1142 let isl_rs_result = unsafe { isl_aff_nan_on_domain(ls) };
1143 let isl_rs_result = Aff { ptr: isl_rs_result,
1144 should_free_on_drop: true };
1145 let err = isl_rs_ctx.last_error();
1146 if err != Error::None_ {
1147 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1148 }
1149 Ok(isl_rs_result)
1150 }
1151
1152 pub fn nan_on_domain_space(space: Space) -> Result<Aff, LibISLError> {
1154 let isl_rs_ctx = space.get_ctx();
1155 let mut space = space;
1156 space.do_not_free_on_drop();
1157 let space = space.ptr;
1158 let isl_rs_result = unsafe { isl_aff_nan_on_domain_space(space) };
1159 let isl_rs_result = Aff { ptr: isl_rs_result,
1160 should_free_on_drop: true };
1161 let err = isl_rs_ctx.last_error();
1162 if err != Error::None_ {
1163 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1164 }
1165 Ok(isl_rs_result)
1166 }
1167
1168 pub fn ne_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1170 let aff1 = self;
1171 let isl_rs_ctx = aff1.get_ctx();
1172 let mut aff1 = aff1;
1173 aff1.do_not_free_on_drop();
1174 let aff1 = aff1.ptr;
1175 let mut aff2 = aff2;
1176 aff2.do_not_free_on_drop();
1177 let aff2 = aff2.ptr;
1178 let isl_rs_result = unsafe { isl_aff_ne_set(aff1, aff2) };
1179 let isl_rs_result = Set { ptr: isl_rs_result,
1180 should_free_on_drop: true };
1181 let err = isl_rs_ctx.last_error();
1182 if err != Error::None_ {
1183 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1184 }
1185 Ok(isl_rs_result)
1186 }
1187
1188 pub fn neg(self) -> Result<Aff, LibISLError> {
1190 let aff = self;
1191 let isl_rs_ctx = aff.get_ctx();
1192 let mut aff = aff;
1193 aff.do_not_free_on_drop();
1194 let aff = aff.ptr;
1195 let isl_rs_result = unsafe { isl_aff_neg(aff) };
1196 let isl_rs_result = Aff { ptr: isl_rs_result,
1197 should_free_on_drop: true };
1198 let err = isl_rs_ctx.last_error();
1199 if err != Error::None_ {
1200 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1201 }
1202 Ok(isl_rs_result)
1203 }
1204
1205 pub fn neg_basic_set(self) -> Result<BasicSet, LibISLError> {
1207 let aff = self;
1208 let isl_rs_ctx = aff.get_ctx();
1209 let mut aff = aff;
1210 aff.do_not_free_on_drop();
1211 let aff = aff.ptr;
1212 let isl_rs_result = unsafe { isl_aff_neg_basic_set(aff) };
1213 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1214 should_free_on_drop: true };
1215 let err = isl_rs_ctx.last_error();
1216 if err != Error::None_ {
1217 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1218 }
1219 Ok(isl_rs_result)
1220 }
1221
1222 pub fn param_on_domain_space_id(space: Space, id: Id) -> Result<Aff, LibISLError> {
1224 let isl_rs_ctx = space.get_ctx();
1225 let mut space = space;
1226 space.do_not_free_on_drop();
1227 let space = space.ptr;
1228 let mut id = id;
1229 id.do_not_free_on_drop();
1230 let id = id.ptr;
1231 let isl_rs_result = unsafe { isl_aff_param_on_domain_space_id(space, id) };
1232 let isl_rs_result = Aff { ptr: isl_rs_result,
1233 should_free_on_drop: true };
1234 let err = isl_rs_ctx.last_error();
1235 if err != Error::None_ {
1236 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1237 }
1238 Ok(isl_rs_result)
1239 }
1240
1241 pub fn plain_is_equal(&self, aff2: &Aff) -> Result<bool, LibISLError> {
1243 let aff1 = self;
1244 let isl_rs_ctx = aff1.get_ctx();
1245 let aff1 = aff1.ptr;
1246 let aff2 = aff2.ptr;
1247 let isl_rs_result = unsafe { isl_aff_plain_is_equal(aff1, aff2) };
1248 let isl_rs_result = match isl_rs_result {
1249 0 => false,
1250 1 => true,
1251 _ => panic!("Got isl_bool = -1"),
1252 };
1253 let err = isl_rs_ctx.last_error();
1254 if err != Error::None_ {
1255 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1256 }
1257 Ok(isl_rs_result)
1258 }
1259
1260 pub fn plain_is_zero(&self) -> Result<bool, LibISLError> {
1262 let aff = self;
1263 let isl_rs_ctx = aff.get_ctx();
1264 let aff = aff.ptr;
1265 let isl_rs_result = unsafe { isl_aff_plain_is_zero(aff) };
1266 let isl_rs_result = match isl_rs_result {
1267 0 => false,
1268 1 => true,
1269 _ => panic!("Got isl_bool = -1"),
1270 };
1271 let err = isl_rs_ctx.last_error();
1272 if err != Error::None_ {
1273 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1274 }
1275 Ok(isl_rs_result)
1276 }
1277
1278 pub fn project_domain_on_params(self) -> Result<Aff, LibISLError> {
1280 let aff = self;
1281 let isl_rs_ctx = aff.get_ctx();
1282 let mut aff = aff;
1283 aff.do_not_free_on_drop();
1284 let aff = aff.ptr;
1285 let isl_rs_result = unsafe { isl_aff_project_domain_on_params(aff) };
1286 let isl_rs_result = Aff { ptr: isl_rs_result,
1287 should_free_on_drop: true };
1288 let err = isl_rs_ctx.last_error();
1289 if err != Error::None_ {
1290 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1291 }
1292 Ok(isl_rs_result)
1293 }
1294
1295 pub fn pullback_aff(self, aff2: Aff) -> Result<Aff, LibISLError> {
1297 let aff1 = self;
1298 let isl_rs_ctx = aff1.get_ctx();
1299 let mut aff1 = aff1;
1300 aff1.do_not_free_on_drop();
1301 let aff1 = aff1.ptr;
1302 let mut aff2 = aff2;
1303 aff2.do_not_free_on_drop();
1304 let aff2 = aff2.ptr;
1305 let isl_rs_result = unsafe { isl_aff_pullback_aff(aff1, aff2) };
1306 let isl_rs_result = Aff { ptr: isl_rs_result,
1307 should_free_on_drop: true };
1308 let err = isl_rs_ctx.last_error();
1309 if err != Error::None_ {
1310 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1311 }
1312 Ok(isl_rs_result)
1313 }
1314
1315 pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<Aff, LibISLError> {
1317 let aff = self;
1318 let isl_rs_ctx = aff.get_ctx();
1319 let mut aff = aff;
1320 aff.do_not_free_on_drop();
1321 let aff = aff.ptr;
1322 let mut ma = ma;
1323 ma.do_not_free_on_drop();
1324 let ma = ma.ptr;
1325 let isl_rs_result = unsafe { isl_aff_pullback_multi_aff(aff, ma) };
1326 let isl_rs_result = Aff { ptr: isl_rs_result,
1327 should_free_on_drop: true };
1328 let err = isl_rs_ctx.last_error();
1329 if err != Error::None_ {
1330 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1331 }
1332 Ok(isl_rs_result)
1333 }
1334
1335 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<Aff, LibISLError> {
1337 let isl_rs_ctx = Context { ptr: ctx.ptr,
1338 should_free_on_drop: false };
1339 let ctx = ctx.ptr;
1340 let str_ = CString::new(str_).unwrap();
1341 let str_ = str_.as_ptr();
1342 let isl_rs_result = unsafe { isl_aff_read_from_str(ctx, str_) };
1343 let isl_rs_result = Aff { ptr: isl_rs_result,
1344 should_free_on_drop: true };
1345 let err = isl_rs_ctx.last_error();
1346 if err != Error::None_ {
1347 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1348 }
1349 Ok(isl_rs_result)
1350 }
1351
1352 pub fn scale_down_ui(self, f: u32) -> Result<Aff, LibISLError> {
1354 let aff = self;
1355 let isl_rs_ctx = aff.get_ctx();
1356 let mut aff = aff;
1357 aff.do_not_free_on_drop();
1358 let aff = aff.ptr;
1359 let isl_rs_result = unsafe { isl_aff_scale_down_ui(aff, f) };
1360 let isl_rs_result = Aff { ptr: isl_rs_result,
1361 should_free_on_drop: true };
1362 let err = isl_rs_ctx.last_error();
1363 if err != Error::None_ {
1364 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1365 }
1366 Ok(isl_rs_result)
1367 }
1368
1369 pub fn scale_down_val(self, v: Val) -> Result<Aff, LibISLError> {
1371 let aff = self;
1372 let isl_rs_ctx = aff.get_ctx();
1373 let mut aff = aff;
1374 aff.do_not_free_on_drop();
1375 let aff = aff.ptr;
1376 let mut v = v;
1377 v.do_not_free_on_drop();
1378 let v = v.ptr;
1379 let isl_rs_result = unsafe { isl_aff_scale_down_val(aff, v) };
1380 let isl_rs_result = Aff { ptr: isl_rs_result,
1381 should_free_on_drop: true };
1382 let err = isl_rs_ctx.last_error();
1383 if err != Error::None_ {
1384 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1385 }
1386 Ok(isl_rs_result)
1387 }
1388
1389 pub fn scale_val(self, v: Val) -> Result<Aff, LibISLError> {
1391 let aff = self;
1392 let isl_rs_ctx = aff.get_ctx();
1393 let mut aff = aff;
1394 aff.do_not_free_on_drop();
1395 let aff = aff.ptr;
1396 let mut v = v;
1397 v.do_not_free_on_drop();
1398 let v = v.ptr;
1399 let isl_rs_result = unsafe { isl_aff_scale_val(aff, v) };
1400 let isl_rs_result = Aff { ptr: isl_rs_result,
1401 should_free_on_drop: true };
1402 let err = isl_rs_ctx.last_error();
1403 if err != Error::None_ {
1404 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1405 }
1406 Ok(isl_rs_result)
1407 }
1408
1409 pub fn set_coefficient_si(self, type_: DimType, pos: i32, v: i32) -> Result<Aff, LibISLError> {
1411 let aff = self;
1412 let isl_rs_ctx = aff.get_ctx();
1413 let mut aff = aff;
1414 aff.do_not_free_on_drop();
1415 let aff = aff.ptr;
1416 let type_ = type_.to_i32();
1417 let isl_rs_result = unsafe { isl_aff_set_coefficient_si(aff, type_, pos, v) };
1418 let isl_rs_result = Aff { ptr: isl_rs_result,
1419 should_free_on_drop: true };
1420 let err = isl_rs_ctx.last_error();
1421 if err != Error::None_ {
1422 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1423 }
1424 Ok(isl_rs_result)
1425 }
1426
1427 pub fn set_coefficient_val(self, type_: DimType, pos: i32, v: Val) -> Result<Aff, LibISLError> {
1429 let aff = self;
1430 let isl_rs_ctx = aff.get_ctx();
1431 let mut aff = aff;
1432 aff.do_not_free_on_drop();
1433 let aff = aff.ptr;
1434 let type_ = type_.to_i32();
1435 let mut v = v;
1436 v.do_not_free_on_drop();
1437 let v = v.ptr;
1438 let isl_rs_result = unsafe { isl_aff_set_coefficient_val(aff, type_, pos, v) };
1439 let isl_rs_result = Aff { ptr: isl_rs_result,
1440 should_free_on_drop: true };
1441 let err = isl_rs_ctx.last_error();
1442 if err != Error::None_ {
1443 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1444 }
1445 Ok(isl_rs_result)
1446 }
1447
1448 pub fn set_constant_si(self, v: i32) -> Result<Aff, LibISLError> {
1450 let aff = self;
1451 let isl_rs_ctx = aff.get_ctx();
1452 let mut aff = aff;
1453 aff.do_not_free_on_drop();
1454 let aff = aff.ptr;
1455 let isl_rs_result = unsafe { isl_aff_set_constant_si(aff, v) };
1456 let isl_rs_result = Aff { ptr: isl_rs_result,
1457 should_free_on_drop: true };
1458 let err = isl_rs_ctx.last_error();
1459 if err != Error::None_ {
1460 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1461 }
1462 Ok(isl_rs_result)
1463 }
1464
1465 pub fn set_constant_val(self, v: Val) -> Result<Aff, LibISLError> {
1467 let aff = self;
1468 let isl_rs_ctx = aff.get_ctx();
1469 let mut aff = aff;
1470 aff.do_not_free_on_drop();
1471 let aff = aff.ptr;
1472 let mut v = v;
1473 v.do_not_free_on_drop();
1474 let v = v.ptr;
1475 let isl_rs_result = unsafe { isl_aff_set_constant_val(aff, v) };
1476 let isl_rs_result = Aff { ptr: isl_rs_result,
1477 should_free_on_drop: true };
1478 let err = isl_rs_ctx.last_error();
1479 if err != Error::None_ {
1480 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1481 }
1482 Ok(isl_rs_result)
1483 }
1484
1485 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<Aff, LibISLError> {
1487 let aff = self;
1488 let isl_rs_ctx = aff.get_ctx();
1489 let mut aff = aff;
1490 aff.do_not_free_on_drop();
1491 let aff = aff.ptr;
1492 let type_ = type_.to_i32();
1493 let mut id = id;
1494 id.do_not_free_on_drop();
1495 let id = id.ptr;
1496 let isl_rs_result = unsafe { isl_aff_set_dim_id(aff, type_, pos, id) };
1497 let isl_rs_result = Aff { ptr: isl_rs_result,
1498 should_free_on_drop: true };
1499 let err = isl_rs_ctx.last_error();
1500 if err != Error::None_ {
1501 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1502 }
1503 Ok(isl_rs_result)
1504 }
1505
1506 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<Aff, LibISLError> {
1508 let aff = self;
1509 let isl_rs_ctx = aff.get_ctx();
1510 let mut aff = aff;
1511 aff.do_not_free_on_drop();
1512 let aff = aff.ptr;
1513 let type_ = type_.to_i32();
1514 let s = CString::new(s).unwrap();
1515 let s = s.as_ptr();
1516 let isl_rs_result = unsafe { isl_aff_set_dim_name(aff, type_, pos, s) };
1517 let isl_rs_result = Aff { ptr: isl_rs_result,
1518 should_free_on_drop: true };
1519 let err = isl_rs_ctx.last_error();
1520 if err != Error::None_ {
1521 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1522 }
1523 Ok(isl_rs_result)
1524 }
1525
1526 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<Aff, LibISLError> {
1528 let aff = self;
1529 let isl_rs_ctx = aff.get_ctx();
1530 let mut aff = aff;
1531 aff.do_not_free_on_drop();
1532 let aff = aff.ptr;
1533 let type_ = type_.to_i32();
1534 let mut id = id;
1535 id.do_not_free_on_drop();
1536 let id = id.ptr;
1537 let isl_rs_result = unsafe { isl_aff_set_tuple_id(aff, type_, id) };
1538 let isl_rs_result = Aff { ptr: isl_rs_result,
1539 should_free_on_drop: true };
1540 let err = isl_rs_ctx.last_error();
1541 if err != Error::None_ {
1542 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1543 }
1544 Ok(isl_rs_result)
1545 }
1546
1547 pub fn sub(self, aff2: Aff) -> Result<Aff, LibISLError> {
1549 let aff1 = self;
1550 let isl_rs_ctx = aff1.get_ctx();
1551 let mut aff1 = aff1;
1552 aff1.do_not_free_on_drop();
1553 let aff1 = aff1.ptr;
1554 let mut aff2 = aff2;
1555 aff2.do_not_free_on_drop();
1556 let aff2 = aff2.ptr;
1557 let isl_rs_result = unsafe { isl_aff_sub(aff1, aff2) };
1558 let isl_rs_result = Aff { ptr: isl_rs_result,
1559 should_free_on_drop: true };
1560 let err = isl_rs_ctx.last_error();
1561 if err != Error::None_ {
1562 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1563 }
1564 Ok(isl_rs_result)
1565 }
1566
1567 pub fn to_list(self) -> Result<AffList, LibISLError> {
1569 let el = self;
1570 let isl_rs_ctx = el.get_ctx();
1571 let mut el = el;
1572 el.do_not_free_on_drop();
1573 let el = el.ptr;
1574 let isl_rs_result = unsafe { isl_aff_to_list(el) };
1575 let isl_rs_result = AffList { ptr: isl_rs_result,
1576 should_free_on_drop: true };
1577 let err = isl_rs_ctx.last_error();
1578 if err != Error::None_ {
1579 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1580 }
1581 Ok(isl_rs_result)
1582 }
1583
1584 pub fn to_str(&self) -> Result<&str, LibISLError> {
1586 let aff = self;
1587 let isl_rs_ctx = aff.get_ctx();
1588 let aff = aff.ptr;
1589 let isl_rs_result = unsafe { isl_aff_to_str(aff) };
1590 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1591 let isl_rs_result = isl_rs_result.to_str().unwrap();
1592 let err = isl_rs_ctx.last_error();
1593 if err != Error::None_ {
1594 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1595 }
1596 Ok(isl_rs_result)
1597 }
1598
1599 pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<Aff, LibISLError> {
1601 let aff = self;
1602 let isl_rs_ctx = aff.get_ctx();
1603 let mut aff = aff;
1604 aff.do_not_free_on_drop();
1605 let aff = aff.ptr;
1606 let mut domain = domain;
1607 domain.do_not_free_on_drop();
1608 let domain = domain.ptr;
1609 let isl_rs_result = unsafe { isl_aff_unbind_params_insert_domain(aff, domain) };
1610 let isl_rs_result = Aff { ptr: isl_rs_result,
1611 should_free_on_drop: true };
1612 let err = isl_rs_ctx.last_error();
1613 if err != Error::None_ {
1614 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1615 }
1616 Ok(isl_rs_result)
1617 }
1618
1619 pub fn val_on_domain(ls: LocalSpace, val: Val) -> Result<Aff, LibISLError> {
1621 let isl_rs_ctx = ls.get_ctx();
1622 let mut ls = ls;
1623 ls.do_not_free_on_drop();
1624 let ls = ls.ptr;
1625 let mut val = val;
1626 val.do_not_free_on_drop();
1627 let val = val.ptr;
1628 let isl_rs_result = unsafe { isl_aff_val_on_domain(ls, val) };
1629 let isl_rs_result = Aff { ptr: isl_rs_result,
1630 should_free_on_drop: true };
1631 let err = isl_rs_ctx.last_error();
1632 if err != Error::None_ {
1633 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1634 }
1635 Ok(isl_rs_result)
1636 }
1637
1638 pub fn val_on_domain_space(space: Space, val: Val) -> Result<Aff, LibISLError> {
1640 let isl_rs_ctx = space.get_ctx();
1641 let mut space = space;
1642 space.do_not_free_on_drop();
1643 let space = space.ptr;
1644 let mut val = val;
1645 val.do_not_free_on_drop();
1646 let val = val.ptr;
1647 let isl_rs_result = unsafe { isl_aff_val_on_domain_space(space, val) };
1648 let isl_rs_result = Aff { ptr: isl_rs_result,
1649 should_free_on_drop: true };
1650 let err = isl_rs_ctx.last_error();
1651 if err != Error::None_ {
1652 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1653 }
1654 Ok(isl_rs_result)
1655 }
1656
1657 pub fn var_on_domain(ls: LocalSpace, type_: DimType, pos: u32) -> Result<Aff, LibISLError> {
1659 let isl_rs_ctx = ls.get_ctx();
1660 let mut ls = ls;
1661 ls.do_not_free_on_drop();
1662 let ls = ls.ptr;
1663 let type_ = type_.to_i32();
1664 let isl_rs_result = unsafe { isl_aff_var_on_domain(ls, type_, pos) };
1665 let isl_rs_result = Aff { ptr: isl_rs_result,
1666 should_free_on_drop: true };
1667 let err = isl_rs_ctx.last_error();
1668 if err != Error::None_ {
1669 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1670 }
1671 Ok(isl_rs_result)
1672 }
1673
1674 pub fn zero_basic_set(self) -> Result<BasicSet, LibISLError> {
1676 let aff = self;
1677 let isl_rs_ctx = aff.get_ctx();
1678 let mut aff = aff;
1679 aff.do_not_free_on_drop();
1680 let aff = aff.ptr;
1681 let isl_rs_result = unsafe { isl_aff_zero_basic_set(aff) };
1682 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1683 should_free_on_drop: true };
1684 let err = isl_rs_ctx.last_error();
1685 if err != Error::None_ {
1686 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1687 }
1688 Ok(isl_rs_result)
1689 }
1690
1691 pub fn zero_on_domain(ls: LocalSpace) -> Result<Aff, LibISLError> {
1693 let isl_rs_ctx = ls.get_ctx();
1694 let mut ls = ls;
1695 ls.do_not_free_on_drop();
1696 let ls = ls.ptr;
1697 let isl_rs_result = unsafe { isl_aff_zero_on_domain(ls) };
1698 let isl_rs_result = Aff { ptr: isl_rs_result,
1699 should_free_on_drop: true };
1700 let err = isl_rs_ctx.last_error();
1701 if err != Error::None_ {
1702 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1703 }
1704 Ok(isl_rs_result)
1705 }
1706
1707 pub fn zero_on_domain_space(space: Space) -> Result<Aff, LibISLError> {
1709 let isl_rs_ctx = space.get_ctx();
1710 let mut space = space;
1711 space.do_not_free_on_drop();
1712 let space = space.ptr;
1713 let isl_rs_result = unsafe { isl_aff_zero_on_domain_space(space) };
1714 let isl_rs_result = Aff { ptr: isl_rs_result,
1715 should_free_on_drop: true };
1716 let err = isl_rs_ctx.last_error();
1717 if err != Error::None_ {
1718 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1719 }
1720 Ok(isl_rs_result)
1721 }
1722
1723 pub fn do_not_free_on_drop(&mut self) {
1725 self.should_free_on_drop = false;
1726 }
1727}
1728
1729impl Drop for Aff {
1730 fn drop(&mut self) {
1731 if self.should_free_on_drop {
1732 unsafe {
1733 isl_aff_free(self.ptr);
1734 }
1735 }
1736 }
1737}