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 let err_msg = isl_rs_ctx.last_error_msg();
213 isl_rs_ctx.reset_error();
214 return Err(LibISLError::new(err, err_msg));
215 }
216 Ok(isl_rs_result)
217 }
218
219 pub fn add_coefficient_si(self, type_: DimType, pos: i32, v: i32) -> Result<Aff, LibISLError> {
221 let aff = self;
222 let isl_rs_ctx = aff.get_ctx();
223 let mut aff = aff;
224 aff.do_not_free_on_drop();
225 let aff = aff.ptr;
226 let type_ = type_.to_i32();
227 let isl_rs_result = unsafe { isl_aff_add_coefficient_si(aff, type_, pos, v) };
228 let isl_rs_result = Aff { ptr: isl_rs_result,
229 should_free_on_drop: true };
230 let err = isl_rs_ctx.last_error();
231 if err != Error::None_ {
232 let err_msg = isl_rs_ctx.last_error_msg();
233 isl_rs_ctx.reset_error();
234 return Err(LibISLError::new(err, err_msg));
235 }
236 Ok(isl_rs_result)
237 }
238
239 pub fn add_coefficient_val(self, type_: DimType, pos: i32, v: Val) -> Result<Aff, LibISLError> {
241 let aff = self;
242 let isl_rs_ctx = aff.get_ctx();
243 let mut aff = aff;
244 aff.do_not_free_on_drop();
245 let aff = aff.ptr;
246 let type_ = type_.to_i32();
247 let mut v = v;
248 v.do_not_free_on_drop();
249 let v = v.ptr;
250 let isl_rs_result = unsafe { isl_aff_add_coefficient_val(aff, type_, pos, v) };
251 let isl_rs_result = Aff { ptr: isl_rs_result,
252 should_free_on_drop: true };
253 let err = isl_rs_ctx.last_error();
254 if err != Error::None_ {
255 let err_msg = isl_rs_ctx.last_error_msg();
256 isl_rs_ctx.reset_error();
257 return Err(LibISLError::new(err, err_msg));
258 }
259 Ok(isl_rs_result)
260 }
261
262 pub fn add_constant_num_si(self, v: i32) -> Result<Aff, LibISLError> {
264 let aff = self;
265 let isl_rs_ctx = aff.get_ctx();
266 let mut aff = aff;
267 aff.do_not_free_on_drop();
268 let aff = aff.ptr;
269 let isl_rs_result = unsafe { isl_aff_add_constant_num_si(aff, v) };
270 let isl_rs_result = Aff { ptr: isl_rs_result,
271 should_free_on_drop: true };
272 let err = isl_rs_ctx.last_error();
273 if err != Error::None_ {
274 let err_msg = isl_rs_ctx.last_error_msg();
275 isl_rs_ctx.reset_error();
276 return Err(LibISLError::new(err, err_msg));
277 }
278 Ok(isl_rs_result)
279 }
280
281 pub fn add_constant_si(self, v: i32) -> Result<Aff, LibISLError> {
283 let aff = self;
284 let isl_rs_ctx = aff.get_ctx();
285 let mut aff = aff;
286 aff.do_not_free_on_drop();
287 let aff = aff.ptr;
288 let isl_rs_result = unsafe { isl_aff_add_constant_si(aff, v) };
289 let isl_rs_result = Aff { ptr: isl_rs_result,
290 should_free_on_drop: true };
291 let err = isl_rs_ctx.last_error();
292 if err != Error::None_ {
293 let err_msg = isl_rs_ctx.last_error_msg();
294 isl_rs_ctx.reset_error();
295 return Err(LibISLError::new(err, err_msg));
296 }
297 Ok(isl_rs_result)
298 }
299
300 pub fn add_constant_val(self, v: Val) -> Result<Aff, LibISLError> {
302 let aff = self;
303 let isl_rs_ctx = aff.get_ctx();
304 let mut aff = aff;
305 aff.do_not_free_on_drop();
306 let aff = aff.ptr;
307 let mut v = v;
308 v.do_not_free_on_drop();
309 let v = v.ptr;
310 let isl_rs_result = unsafe { isl_aff_add_constant_val(aff, v) };
311 let isl_rs_result = Aff { ptr: isl_rs_result,
312 should_free_on_drop: true };
313 let err = isl_rs_ctx.last_error();
314 if err != Error::None_ {
315 let err_msg = isl_rs_ctx.last_error_msg();
316 isl_rs_ctx.reset_error();
317 return Err(LibISLError::new(err, err_msg));
318 }
319 Ok(isl_rs_result)
320 }
321
322 pub fn add_dims(self, type_: DimType, n: u32) -> Result<Aff, LibISLError> {
324 let aff = self;
325 let isl_rs_ctx = aff.get_ctx();
326 let mut aff = aff;
327 aff.do_not_free_on_drop();
328 let aff = aff.ptr;
329 let type_ = type_.to_i32();
330 let isl_rs_result = unsafe { isl_aff_add_dims(aff, type_, n) };
331 let isl_rs_result = Aff { ptr: isl_rs_result,
332 should_free_on_drop: true };
333 let err = isl_rs_ctx.last_error();
334 if err != Error::None_ {
335 let err_msg = isl_rs_ctx.last_error_msg();
336 isl_rs_ctx.reset_error();
337 return Err(LibISLError::new(err, err_msg));
338 }
339 Ok(isl_rs_result)
340 }
341
342 pub fn align_params(self, model: Space) -> Result<Aff, LibISLError> {
344 let aff = self;
345 let isl_rs_ctx = aff.get_ctx();
346 let mut aff = aff;
347 aff.do_not_free_on_drop();
348 let aff = aff.ptr;
349 let mut model = model;
350 model.do_not_free_on_drop();
351 let model = model.ptr;
352 let isl_rs_result = unsafe { isl_aff_align_params(aff, model) };
353 let isl_rs_result = Aff { ptr: isl_rs_result,
354 should_free_on_drop: true };
355 let err = isl_rs_ctx.last_error();
356 if err != Error::None_ {
357 let err_msg = isl_rs_ctx.last_error_msg();
358 isl_rs_ctx.reset_error();
359 return Err(LibISLError::new(err, err_msg));
360 }
361 Ok(isl_rs_result)
362 }
363
364 pub fn bind_id(self, id: Id) -> Result<BasicSet, LibISLError> {
366 let aff = self;
367 let isl_rs_ctx = aff.get_ctx();
368 let mut aff = aff;
369 aff.do_not_free_on_drop();
370 let aff = aff.ptr;
371 let mut id = id;
372 id.do_not_free_on_drop();
373 let id = id.ptr;
374 let isl_rs_result = unsafe { isl_aff_bind_id(aff, id) };
375 let isl_rs_result = BasicSet { ptr: isl_rs_result,
376 should_free_on_drop: true };
377 let err = isl_rs_ctx.last_error();
378 if err != Error::None_ {
379 let err_msg = isl_rs_ctx.last_error_msg();
380 isl_rs_ctx.reset_error();
381 return Err(LibISLError::new(err, err_msg));
382 }
383 Ok(isl_rs_result)
384 }
385
386 pub fn ceil(self) -> Result<Aff, LibISLError> {
388 let aff = self;
389 let isl_rs_ctx = aff.get_ctx();
390 let mut aff = aff;
391 aff.do_not_free_on_drop();
392 let aff = aff.ptr;
393 let isl_rs_result = unsafe { isl_aff_ceil(aff) };
394 let isl_rs_result = Aff { ptr: isl_rs_result,
395 should_free_on_drop: true };
396 let err = isl_rs_ctx.last_error();
397 if err != Error::None_ {
398 let err_msg = isl_rs_ctx.last_error_msg();
399 isl_rs_ctx.reset_error();
400 return Err(LibISLError::new(err, err_msg));
401 }
402 Ok(isl_rs_result)
403 }
404
405 pub fn coefficient_sgn(&self, type_: DimType, pos: i32) -> Result<i32, LibISLError> {
407 let aff = self;
408 let isl_rs_ctx = aff.get_ctx();
409 let aff = aff.ptr;
410 let type_ = type_.to_i32();
411 let isl_rs_result = unsafe { isl_aff_coefficient_sgn(aff, type_, pos) };
412 let err = isl_rs_ctx.last_error();
413 if err != Error::None_ {
414 let err_msg = isl_rs_ctx.last_error_msg();
415 isl_rs_ctx.reset_error();
416 return Err(LibISLError::new(err, err_msg));
417 }
418 Ok(isl_rs_result)
419 }
420
421 pub fn copy(&self) -> Result<Aff, LibISLError> {
423 let aff = self;
424 let isl_rs_ctx = aff.get_ctx();
425 let aff = aff.ptr;
426 let isl_rs_result = unsafe { isl_aff_copy(aff) };
427 let isl_rs_result = Aff { ptr: isl_rs_result,
428 should_free_on_drop: true };
429 let err = isl_rs_ctx.last_error();
430 if err != Error::None_ {
431 let err_msg = isl_rs_ctx.last_error_msg();
432 isl_rs_ctx.reset_error();
433 return Err(LibISLError::new(err, err_msg));
434 }
435 Ok(isl_rs_result)
436 }
437
438 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
440 let aff = self;
441 let isl_rs_ctx = aff.get_ctx();
442 let aff = aff.ptr;
443 let type_ = type_.to_i32();
444 let isl_rs_result = unsafe { isl_aff_dim(aff, type_) };
445 let err = isl_rs_ctx.last_error();
446 if err != Error::None_ {
447 let err_msg = isl_rs_ctx.last_error_msg();
448 isl_rs_ctx.reset_error();
449 return Err(LibISLError::new(err, err_msg));
450 }
451 Ok(isl_rs_result)
452 }
453
454 pub fn div(self, aff2: Aff) -> Result<Aff, LibISLError> {
456 let aff1 = self;
457 let isl_rs_ctx = aff1.get_ctx();
458 let mut aff1 = aff1;
459 aff1.do_not_free_on_drop();
460 let aff1 = aff1.ptr;
461 let mut aff2 = aff2;
462 aff2.do_not_free_on_drop();
463 let aff2 = aff2.ptr;
464 let isl_rs_result = unsafe { isl_aff_div(aff1, aff2) };
465 let isl_rs_result = Aff { ptr: isl_rs_result,
466 should_free_on_drop: true };
467 let err = isl_rs_ctx.last_error();
468 if err != Error::None_ {
469 let err_msg = isl_rs_ctx.last_error_msg();
470 isl_rs_ctx.reset_error();
471 return Err(LibISLError::new(err, err_msg));
472 }
473 Ok(isl_rs_result)
474 }
475
476 pub fn domain_reverse(self) -> Result<Aff, LibISLError> {
478 let aff = self;
479 let isl_rs_ctx = aff.get_ctx();
480 let mut aff = aff;
481 aff.do_not_free_on_drop();
482 let aff = aff.ptr;
483 let isl_rs_result = unsafe { isl_aff_domain_reverse(aff) };
484 let isl_rs_result = Aff { ptr: isl_rs_result,
485 should_free_on_drop: true };
486 let err = isl_rs_ctx.last_error();
487 if err != Error::None_ {
488 let err_msg = isl_rs_ctx.last_error_msg();
489 isl_rs_ctx.reset_error();
490 return Err(LibISLError::new(err, err_msg));
491 }
492 Ok(isl_rs_result)
493 }
494
495 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<Aff, LibISLError> {
497 let aff = self;
498 let isl_rs_ctx = aff.get_ctx();
499 let mut aff = aff;
500 aff.do_not_free_on_drop();
501 let aff = aff.ptr;
502 let type_ = type_.to_i32();
503 let isl_rs_result = unsafe { isl_aff_drop_dims(aff, type_, first, n) };
504 let isl_rs_result = Aff { ptr: isl_rs_result,
505 should_free_on_drop: true };
506 let err = isl_rs_ctx.last_error();
507 if err != Error::None_ {
508 let err_msg = isl_rs_ctx.last_error_msg();
509 isl_rs_ctx.reset_error();
510 return Err(LibISLError::new(err, err_msg));
511 }
512 Ok(isl_rs_result)
513 }
514
515 pub fn dump(&self) -> Result<(), LibISLError> {
517 let aff = self;
518 let isl_rs_ctx = aff.get_ctx();
519 let aff = aff.ptr;
520 let isl_rs_result = unsafe { isl_aff_dump(aff) };
521 let err = isl_rs_ctx.last_error();
522 if err != Error::None_ {
523 let err_msg = isl_rs_ctx.last_error_msg();
524 isl_rs_ctx.reset_error();
525 return Err(LibISLError::new(err, err_msg));
526 }
527 Ok(isl_rs_result)
528 }
529
530 pub fn eq_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
532 let aff1 = self;
533 let isl_rs_ctx = aff1.get_ctx();
534 let mut aff1 = aff1;
535 aff1.do_not_free_on_drop();
536 let aff1 = aff1.ptr;
537 let mut aff2 = aff2;
538 aff2.do_not_free_on_drop();
539 let aff2 = aff2.ptr;
540 let isl_rs_result = unsafe { isl_aff_eq_basic_set(aff1, aff2) };
541 let isl_rs_result = BasicSet { ptr: isl_rs_result,
542 should_free_on_drop: true };
543 let err = isl_rs_ctx.last_error();
544 if err != Error::None_ {
545 let err_msg = isl_rs_ctx.last_error_msg();
546 isl_rs_ctx.reset_error();
547 return Err(LibISLError::new(err, err_msg));
548 }
549 Ok(isl_rs_result)
550 }
551
552 pub fn eq_set(self, aff2: Aff) -> Result<Set, LibISLError> {
554 let aff1 = self;
555 let isl_rs_ctx = aff1.get_ctx();
556 let mut aff1 = aff1;
557 aff1.do_not_free_on_drop();
558 let aff1 = aff1.ptr;
559 let mut aff2 = aff2;
560 aff2.do_not_free_on_drop();
561 let aff2 = aff2.ptr;
562 let isl_rs_result = unsafe { isl_aff_eq_set(aff1, aff2) };
563 let isl_rs_result = Set { ptr: isl_rs_result,
564 should_free_on_drop: true };
565 let err = isl_rs_ctx.last_error();
566 if err != Error::None_ {
567 let err_msg = isl_rs_ctx.last_error_msg();
568 isl_rs_ctx.reset_error();
569 return Err(LibISLError::new(err, err_msg));
570 }
571 Ok(isl_rs_result)
572 }
573
574 pub fn eval(self, pnt: Point) -> Result<Val, LibISLError> {
576 let aff = self;
577 let isl_rs_ctx = aff.get_ctx();
578 let mut aff = aff;
579 aff.do_not_free_on_drop();
580 let aff = aff.ptr;
581 let mut pnt = pnt;
582 pnt.do_not_free_on_drop();
583 let pnt = pnt.ptr;
584 let isl_rs_result = unsafe { isl_aff_eval(aff, pnt) };
585 let isl_rs_result = Val { ptr: isl_rs_result,
586 should_free_on_drop: true };
587 let err = isl_rs_ctx.last_error();
588 if err != Error::None_ {
589 let err_msg = isl_rs_ctx.last_error_msg();
590 isl_rs_ctx.reset_error();
591 return Err(LibISLError::new(err, err_msg));
592 }
593 Ok(isl_rs_result)
594 }
595
596 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
598 let aff = self;
599 let isl_rs_ctx = aff.get_ctx();
600 let aff = aff.ptr;
601 let type_ = type_.to_i32();
602 let name = CString::new(name).unwrap();
603 let name = name.as_ptr();
604 let isl_rs_result = unsafe { isl_aff_find_dim_by_name(aff, type_, name) };
605 let err = isl_rs_ctx.last_error();
606 if err != Error::None_ {
607 let err_msg = isl_rs_ctx.last_error_msg();
608 isl_rs_ctx.reset_error();
609 return Err(LibISLError::new(err, err_msg));
610 }
611 Ok(isl_rs_result)
612 }
613
614 pub fn floor(self) -> Result<Aff, LibISLError> {
616 let aff = self;
617 let isl_rs_ctx = aff.get_ctx();
618 let mut aff = aff;
619 aff.do_not_free_on_drop();
620 let aff = aff.ptr;
621 let isl_rs_result = unsafe { isl_aff_floor(aff) };
622 let isl_rs_result = Aff { ptr: isl_rs_result,
623 should_free_on_drop: true };
624 let err = isl_rs_ctx.last_error();
625 if err != Error::None_ {
626 let err_msg = isl_rs_ctx.last_error_msg();
627 isl_rs_ctx.reset_error();
628 return Err(LibISLError::new(err, err_msg));
629 }
630 Ok(isl_rs_result)
631 }
632
633 pub fn free(self) -> Result<Aff, LibISLError> {
635 let aff = self;
636 let isl_rs_ctx = aff.get_ctx();
637 let mut aff = aff;
638 aff.do_not_free_on_drop();
639 let aff = aff.ptr;
640 let isl_rs_result = unsafe { isl_aff_free(aff) };
641 let isl_rs_result = Aff { ptr: isl_rs_result,
642 should_free_on_drop: true };
643 let err = isl_rs_ctx.last_error();
644 if err != Error::None_ {
645 let err_msg = isl_rs_ctx.last_error_msg();
646 isl_rs_ctx.reset_error();
647 return Err(LibISLError::new(err, err_msg));
648 }
649 Ok(isl_rs_result)
650 }
651
652 pub fn from_range(self) -> Result<Aff, LibISLError> {
654 let aff = self;
655 let isl_rs_ctx = aff.get_ctx();
656 let mut aff = aff;
657 aff.do_not_free_on_drop();
658 let aff = aff.ptr;
659 let isl_rs_result = unsafe { isl_aff_from_range(aff) };
660 let isl_rs_result = Aff { ptr: isl_rs_result,
661 should_free_on_drop: true };
662 let err = isl_rs_ctx.last_error();
663 if err != Error::None_ {
664 let err_msg = isl_rs_ctx.last_error_msg();
665 isl_rs_ctx.reset_error();
666 return Err(LibISLError::new(err, err_msg));
667 }
668 Ok(isl_rs_result)
669 }
670
671 pub fn ge_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
673 let aff1 = self;
674 let isl_rs_ctx = aff1.get_ctx();
675 let mut aff1 = aff1;
676 aff1.do_not_free_on_drop();
677 let aff1 = aff1.ptr;
678 let mut aff2 = aff2;
679 aff2.do_not_free_on_drop();
680 let aff2 = aff2.ptr;
681 let isl_rs_result = unsafe { isl_aff_ge_basic_set(aff1, aff2) };
682 let isl_rs_result = BasicSet { ptr: isl_rs_result,
683 should_free_on_drop: true };
684 let err = isl_rs_ctx.last_error();
685 if err != Error::None_ {
686 let err_msg = isl_rs_ctx.last_error_msg();
687 isl_rs_ctx.reset_error();
688 return Err(LibISLError::new(err, err_msg));
689 }
690 Ok(isl_rs_result)
691 }
692
693 pub fn ge_set(self, aff2: Aff) -> Result<Set, LibISLError> {
695 let aff1 = self;
696 let isl_rs_ctx = aff1.get_ctx();
697 let mut aff1 = aff1;
698 aff1.do_not_free_on_drop();
699 let aff1 = aff1.ptr;
700 let mut aff2 = aff2;
701 aff2.do_not_free_on_drop();
702 let aff2 = aff2.ptr;
703 let isl_rs_result = unsafe { isl_aff_ge_set(aff1, aff2) };
704 let isl_rs_result = Set { ptr: isl_rs_result,
705 should_free_on_drop: true };
706 let err = isl_rs_ctx.last_error();
707 if err != Error::None_ {
708 let err_msg = isl_rs_ctx.last_error_msg();
709 isl_rs_ctx.reset_error();
710 return Err(LibISLError::new(err, err_msg));
711 }
712 Ok(isl_rs_result)
713 }
714
715 pub fn get_coefficient_val(&self, type_: DimType, pos: i32) -> Result<Val, LibISLError> {
717 let aff = self;
718 let isl_rs_ctx = aff.get_ctx();
719 let aff = aff.ptr;
720 let type_ = type_.to_i32();
721 let isl_rs_result = unsafe { isl_aff_get_coefficient_val(aff, type_, pos) };
722 let isl_rs_result = Val { ptr: isl_rs_result,
723 should_free_on_drop: true };
724 let err = isl_rs_ctx.last_error();
725 if err != Error::None_ {
726 let err_msg = isl_rs_ctx.last_error_msg();
727 isl_rs_ctx.reset_error();
728 return Err(LibISLError::new(err, err_msg));
729 }
730 Ok(isl_rs_result)
731 }
732
733 pub fn get_constant_val(&self) -> Result<Val, LibISLError> {
735 let aff = self;
736 let isl_rs_ctx = aff.get_ctx();
737 let aff = aff.ptr;
738 let isl_rs_result = unsafe { isl_aff_get_constant_val(aff) };
739 let isl_rs_result = Val { ptr: isl_rs_result,
740 should_free_on_drop: true };
741 let err = isl_rs_ctx.last_error();
742 if err != Error::None_ {
743 let err_msg = isl_rs_ctx.last_error_msg();
744 isl_rs_ctx.reset_error();
745 return Err(LibISLError::new(err, err_msg));
746 }
747 Ok(isl_rs_result)
748 }
749
750 pub fn get_ctx(&self) -> Context {
752 let aff = self;
753 let aff = aff.ptr;
754 let isl_rs_result = unsafe { isl_aff_get_ctx(aff) };
755 let isl_rs_result = Context { ptr: isl_rs_result,
756 should_free_on_drop: false };
757 isl_rs_result
758 }
759
760 pub fn get_denominator_val(&self) -> Result<Val, LibISLError> {
762 let aff = self;
763 let isl_rs_ctx = aff.get_ctx();
764 let aff = aff.ptr;
765 let isl_rs_result = unsafe { isl_aff_get_denominator_val(aff) };
766 let isl_rs_result = Val { ptr: isl_rs_result,
767 should_free_on_drop: true };
768 let err = isl_rs_ctx.last_error();
769 if err != Error::None_ {
770 let err_msg = isl_rs_ctx.last_error_msg();
771 isl_rs_ctx.reset_error();
772 return Err(LibISLError::new(err, err_msg));
773 }
774 Ok(isl_rs_result)
775 }
776
777 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
779 let aff = self;
780 let isl_rs_ctx = aff.get_ctx();
781 let aff = aff.ptr;
782 let type_ = type_.to_i32();
783 let isl_rs_result = unsafe { isl_aff_get_dim_name(aff, type_, pos) };
784 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
785 let isl_rs_result = isl_rs_result.to_str().unwrap();
786 let err = isl_rs_ctx.last_error();
787 if err != Error::None_ {
788 let err_msg = isl_rs_ctx.last_error_msg();
789 isl_rs_ctx.reset_error();
790 return Err(LibISLError::new(err, err_msg));
791 }
792 Ok(isl_rs_result)
793 }
794
795 pub fn get_div(&self, pos: i32) -> Result<Aff, LibISLError> {
797 let aff = self;
798 let isl_rs_ctx = aff.get_ctx();
799 let aff = aff.ptr;
800 let isl_rs_result = unsafe { isl_aff_get_div(aff, pos) };
801 let isl_rs_result = Aff { ptr: isl_rs_result,
802 should_free_on_drop: true };
803 let err = isl_rs_ctx.last_error();
804 if err != Error::None_ {
805 let err_msg = isl_rs_ctx.last_error_msg();
806 isl_rs_ctx.reset_error();
807 return Err(LibISLError::new(err, err_msg));
808 }
809 Ok(isl_rs_result)
810 }
811
812 pub fn get_domain_local_space(&self) -> Result<LocalSpace, LibISLError> {
814 let aff = self;
815 let isl_rs_ctx = aff.get_ctx();
816 let aff = aff.ptr;
817 let isl_rs_result = unsafe { isl_aff_get_domain_local_space(aff) };
818 let isl_rs_result = LocalSpace { ptr: isl_rs_result,
819 should_free_on_drop: true };
820 let err = isl_rs_ctx.last_error();
821 if err != Error::None_ {
822 let err_msg = isl_rs_ctx.last_error_msg();
823 isl_rs_ctx.reset_error();
824 return Err(LibISLError::new(err, err_msg));
825 }
826 Ok(isl_rs_result)
827 }
828
829 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
831 let aff = self;
832 let isl_rs_ctx = aff.get_ctx();
833 let aff = aff.ptr;
834 let isl_rs_result = unsafe { isl_aff_get_domain_space(aff) };
835 let isl_rs_result = Space { ptr: isl_rs_result,
836 should_free_on_drop: true };
837 let err = isl_rs_ctx.last_error();
838 if err != Error::None_ {
839 let err_msg = isl_rs_ctx.last_error_msg();
840 isl_rs_ctx.reset_error();
841 return Err(LibISLError::new(err, err_msg));
842 }
843 Ok(isl_rs_result)
844 }
845
846 pub fn get_hash(&self) -> Result<u32, LibISLError> {
848 let aff = self;
849 let isl_rs_ctx = aff.get_ctx();
850 let aff = aff.ptr;
851 let isl_rs_result = unsafe { isl_aff_get_hash(aff) };
852 let err = isl_rs_ctx.last_error();
853 if err != Error::None_ {
854 let err_msg = isl_rs_ctx.last_error_msg();
855 isl_rs_ctx.reset_error();
856 return Err(LibISLError::new(err, err_msg));
857 }
858 Ok(isl_rs_result)
859 }
860
861 pub fn get_local_space(&self) -> Result<LocalSpace, LibISLError> {
863 let aff = self;
864 let isl_rs_ctx = aff.get_ctx();
865 let aff = aff.ptr;
866 let isl_rs_result = unsafe { isl_aff_get_local_space(aff) };
867 let isl_rs_result = LocalSpace { ptr: isl_rs_result,
868 should_free_on_drop: true };
869 let err = isl_rs_ctx.last_error();
870 if err != Error::None_ {
871 let err_msg = isl_rs_ctx.last_error_msg();
872 isl_rs_ctx.reset_error();
873 return Err(LibISLError::new(err, err_msg));
874 }
875 Ok(isl_rs_result)
876 }
877
878 pub fn get_space(&self) -> Result<Space, LibISLError> {
880 let aff = self;
881 let isl_rs_ctx = aff.get_ctx();
882 let aff = aff.ptr;
883 let isl_rs_result = unsafe { isl_aff_get_space(aff) };
884 let isl_rs_result = Space { ptr: isl_rs_result,
885 should_free_on_drop: true };
886 let err = isl_rs_ctx.last_error();
887 if err != Error::None_ {
888 let err_msg = isl_rs_ctx.last_error_msg();
889 isl_rs_ctx.reset_error();
890 return Err(LibISLError::new(err, err_msg));
891 }
892 Ok(isl_rs_result)
893 }
894
895 pub fn gist(self, context: Set) -> Result<Aff, LibISLError> {
897 let aff = self;
898 let isl_rs_ctx = aff.get_ctx();
899 let mut aff = aff;
900 aff.do_not_free_on_drop();
901 let aff = aff.ptr;
902 let mut context = context;
903 context.do_not_free_on_drop();
904 let context = context.ptr;
905 let isl_rs_result = unsafe { isl_aff_gist(aff, context) };
906 let isl_rs_result = Aff { ptr: isl_rs_result,
907 should_free_on_drop: true };
908 let err = isl_rs_ctx.last_error();
909 if err != Error::None_ {
910 let err_msg = isl_rs_ctx.last_error_msg();
911 isl_rs_ctx.reset_error();
912 return Err(LibISLError::new(err, err_msg));
913 }
914 Ok(isl_rs_result)
915 }
916
917 pub fn gist_params(self, context: Set) -> Result<Aff, LibISLError> {
919 let aff = self;
920 let isl_rs_ctx = aff.get_ctx();
921 let mut aff = aff;
922 aff.do_not_free_on_drop();
923 let aff = aff.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_aff_gist_params(aff, context) };
928 let isl_rs_result = Aff { ptr: isl_rs_result,
929 should_free_on_drop: true };
930 let err = isl_rs_ctx.last_error();
931 if err != Error::None_ {
932 let err_msg = isl_rs_ctx.last_error_msg();
933 isl_rs_ctx.reset_error();
934 return Err(LibISLError::new(err, err_msg));
935 }
936 Ok(isl_rs_result)
937 }
938
939 pub fn gt_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
941 let aff1 = self;
942 let isl_rs_ctx = aff1.get_ctx();
943 let mut aff1 = aff1;
944 aff1.do_not_free_on_drop();
945 let aff1 = aff1.ptr;
946 let mut aff2 = aff2;
947 aff2.do_not_free_on_drop();
948 let aff2 = aff2.ptr;
949 let isl_rs_result = unsafe { isl_aff_gt_basic_set(aff1, aff2) };
950 let isl_rs_result = BasicSet { ptr: isl_rs_result,
951 should_free_on_drop: true };
952 let err = isl_rs_ctx.last_error();
953 if err != Error::None_ {
954 let err_msg = isl_rs_ctx.last_error_msg();
955 isl_rs_ctx.reset_error();
956 return Err(LibISLError::new(err, err_msg));
957 }
958 Ok(isl_rs_result)
959 }
960
961 pub fn gt_set(self, aff2: Aff) -> Result<Set, LibISLError> {
963 let aff1 = self;
964 let isl_rs_ctx = aff1.get_ctx();
965 let mut aff1 = aff1;
966 aff1.do_not_free_on_drop();
967 let aff1 = aff1.ptr;
968 let mut aff2 = aff2;
969 aff2.do_not_free_on_drop();
970 let aff2 = aff2.ptr;
971 let isl_rs_result = unsafe { isl_aff_gt_set(aff1, aff2) };
972 let isl_rs_result = Set { ptr: isl_rs_result,
973 should_free_on_drop: true };
974 let err = isl_rs_ctx.last_error();
975 if err != Error::None_ {
976 let err_msg = isl_rs_ctx.last_error_msg();
977 isl_rs_ctx.reset_error();
978 return Err(LibISLError::new(err, err_msg));
979 }
980 Ok(isl_rs_result)
981 }
982
983 pub fn insert_dims(self, type_: DimType, first: u32, n: u32) -> Result<Aff, LibISLError> {
985 let aff = self;
986 let isl_rs_ctx = aff.get_ctx();
987 let mut aff = aff;
988 aff.do_not_free_on_drop();
989 let aff = aff.ptr;
990 let type_ = type_.to_i32();
991 let isl_rs_result = unsafe { isl_aff_insert_dims(aff, type_, first, n) };
992 let isl_rs_result = Aff { ptr: isl_rs_result,
993 should_free_on_drop: true };
994 let err = isl_rs_ctx.last_error();
995 if err != Error::None_ {
996 let err_msg = isl_rs_ctx.last_error_msg();
997 isl_rs_ctx.reset_error();
998 return Err(LibISLError::new(err, err_msg));
999 }
1000 Ok(isl_rs_result)
1001 }
1002
1003 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1005 let aff = self;
1006 let isl_rs_ctx = aff.get_ctx();
1007 let aff = aff.ptr;
1008 let type_ = type_.to_i32();
1009 let isl_rs_result = unsafe { isl_aff_involves_dims(aff, type_, first, n) };
1010 let isl_rs_result = match isl_rs_result {
1011 0 => false,
1012 1 => true,
1013 _ => {
1014 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1015 }
1016 };
1017 let err = isl_rs_ctx.last_error();
1018 if err != Error::None_ {
1019 let err_msg = isl_rs_ctx.last_error_msg();
1020 isl_rs_ctx.reset_error();
1021 return Err(LibISLError::new(err, err_msg));
1022 }
1023 Ok(isl_rs_result)
1024 }
1025
1026 pub fn involves_locals(&self) -> Result<bool, LibISLError> {
1028 let aff = self;
1029 let isl_rs_ctx = aff.get_ctx();
1030 let aff = aff.ptr;
1031 let isl_rs_result = unsafe { isl_aff_involves_locals(aff) };
1032 let isl_rs_result = match isl_rs_result {
1033 0 => false,
1034 1 => true,
1035 _ => {
1036 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1037 }
1038 };
1039 let err = isl_rs_ctx.last_error();
1040 if err != Error::None_ {
1041 let err_msg = isl_rs_ctx.last_error_msg();
1042 isl_rs_ctx.reset_error();
1043 return Err(LibISLError::new(err, err_msg));
1044 }
1045 Ok(isl_rs_result)
1046 }
1047
1048 pub fn is_cst(&self) -> Result<bool, LibISLError> {
1050 let aff = self;
1051 let isl_rs_ctx = aff.get_ctx();
1052 let aff = aff.ptr;
1053 let isl_rs_result = unsafe { isl_aff_is_cst(aff) };
1054 let isl_rs_result = match isl_rs_result {
1055 0 => false,
1056 1 => true,
1057 _ => {
1058 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1059 }
1060 };
1061 let err = isl_rs_ctx.last_error();
1062 if err != Error::None_ {
1063 let err_msg = isl_rs_ctx.last_error_msg();
1064 isl_rs_ctx.reset_error();
1065 return Err(LibISLError::new(err, err_msg));
1066 }
1067 Ok(isl_rs_result)
1068 }
1069
1070 pub fn is_nan(&self) -> Result<bool, LibISLError> {
1072 let aff = self;
1073 let isl_rs_ctx = aff.get_ctx();
1074 let aff = aff.ptr;
1075 let isl_rs_result = unsafe { isl_aff_is_nan(aff) };
1076 let isl_rs_result = match isl_rs_result {
1077 0 => false,
1078 1 => true,
1079 _ => {
1080 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1081 }
1082 };
1083 let err = isl_rs_ctx.last_error();
1084 if err != Error::None_ {
1085 let err_msg = isl_rs_ctx.last_error_msg();
1086 isl_rs_ctx.reset_error();
1087 return Err(LibISLError::new(err, err_msg));
1088 }
1089 Ok(isl_rs_result)
1090 }
1091
1092 pub fn le_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
1094 let aff1 = self;
1095 let isl_rs_ctx = aff1.get_ctx();
1096 let mut aff1 = aff1;
1097 aff1.do_not_free_on_drop();
1098 let aff1 = aff1.ptr;
1099 let mut aff2 = aff2;
1100 aff2.do_not_free_on_drop();
1101 let aff2 = aff2.ptr;
1102 let isl_rs_result = unsafe { isl_aff_le_basic_set(aff1, aff2) };
1103 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1104 should_free_on_drop: true };
1105 let err = isl_rs_ctx.last_error();
1106 if err != Error::None_ {
1107 let err_msg = isl_rs_ctx.last_error_msg();
1108 isl_rs_ctx.reset_error();
1109 return Err(LibISLError::new(err, err_msg));
1110 }
1111 Ok(isl_rs_result)
1112 }
1113
1114 pub fn le_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1116 let aff1 = self;
1117 let isl_rs_ctx = aff1.get_ctx();
1118 let mut aff1 = aff1;
1119 aff1.do_not_free_on_drop();
1120 let aff1 = aff1.ptr;
1121 let mut aff2 = aff2;
1122 aff2.do_not_free_on_drop();
1123 let aff2 = aff2.ptr;
1124 let isl_rs_result = unsafe { isl_aff_le_set(aff1, aff2) };
1125 let isl_rs_result = Set { ptr: isl_rs_result,
1126 should_free_on_drop: true };
1127 let err = isl_rs_ctx.last_error();
1128 if err != Error::None_ {
1129 let err_msg = isl_rs_ctx.last_error_msg();
1130 isl_rs_ctx.reset_error();
1131 return Err(LibISLError::new(err, err_msg));
1132 }
1133 Ok(isl_rs_result)
1134 }
1135
1136 pub fn lt_basic_set(self, aff2: Aff) -> Result<BasicSet, LibISLError> {
1138 let aff1 = self;
1139 let isl_rs_ctx = aff1.get_ctx();
1140 let mut aff1 = aff1;
1141 aff1.do_not_free_on_drop();
1142 let aff1 = aff1.ptr;
1143 let mut aff2 = aff2;
1144 aff2.do_not_free_on_drop();
1145 let aff2 = aff2.ptr;
1146 let isl_rs_result = unsafe { isl_aff_lt_basic_set(aff1, aff2) };
1147 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1148 should_free_on_drop: true };
1149 let err = isl_rs_ctx.last_error();
1150 if err != Error::None_ {
1151 let err_msg = isl_rs_ctx.last_error_msg();
1152 isl_rs_ctx.reset_error();
1153 return Err(LibISLError::new(err, err_msg));
1154 }
1155 Ok(isl_rs_result)
1156 }
1157
1158 pub fn lt_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1160 let aff1 = self;
1161 let isl_rs_ctx = aff1.get_ctx();
1162 let mut aff1 = aff1;
1163 aff1.do_not_free_on_drop();
1164 let aff1 = aff1.ptr;
1165 let mut aff2 = aff2;
1166 aff2.do_not_free_on_drop();
1167 let aff2 = aff2.ptr;
1168 let isl_rs_result = unsafe { isl_aff_lt_set(aff1, aff2) };
1169 let isl_rs_result = Set { ptr: isl_rs_result,
1170 should_free_on_drop: true };
1171 let err = isl_rs_ctx.last_error();
1172 if err != Error::None_ {
1173 let err_msg = isl_rs_ctx.last_error_msg();
1174 isl_rs_ctx.reset_error();
1175 return Err(LibISLError::new(err, err_msg));
1176 }
1177 Ok(isl_rs_result)
1178 }
1179
1180 pub fn mod_val(self, mod_: Val) -> Result<Aff, LibISLError> {
1182 let aff = self;
1183 let isl_rs_ctx = aff.get_ctx();
1184 let mut aff = aff;
1185 aff.do_not_free_on_drop();
1186 let aff = aff.ptr;
1187 let mut mod_ = mod_;
1188 mod_.do_not_free_on_drop();
1189 let mod_ = mod_.ptr;
1190 let isl_rs_result = unsafe { isl_aff_mod_val(aff, mod_) };
1191 let isl_rs_result = Aff { ptr: isl_rs_result,
1192 should_free_on_drop: true };
1193 let err = isl_rs_ctx.last_error();
1194 if err != Error::None_ {
1195 let err_msg = isl_rs_ctx.last_error_msg();
1196 isl_rs_ctx.reset_error();
1197 return Err(LibISLError::new(err, err_msg));
1198 }
1199 Ok(isl_rs_result)
1200 }
1201
1202 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1204 n: u32)
1205 -> Result<Aff, LibISLError> {
1206 let aff = self;
1207 let isl_rs_ctx = aff.get_ctx();
1208 let mut aff = aff;
1209 aff.do_not_free_on_drop();
1210 let aff = aff.ptr;
1211 let dst_type = dst_type.to_i32();
1212 let src_type = src_type.to_i32();
1213 let isl_rs_result =
1214 unsafe { isl_aff_move_dims(aff, dst_type, dst_pos, src_type, src_pos, n) };
1215 let isl_rs_result = Aff { ptr: isl_rs_result,
1216 should_free_on_drop: true };
1217 let err = isl_rs_ctx.last_error();
1218 if err != Error::None_ {
1219 let err_msg = isl_rs_ctx.last_error_msg();
1220 isl_rs_ctx.reset_error();
1221 return Err(LibISLError::new(err, err_msg));
1222 }
1223 Ok(isl_rs_result)
1224 }
1225
1226 pub fn mul(self, aff2: Aff) -> Result<Aff, LibISLError> {
1228 let aff1 = self;
1229 let isl_rs_ctx = aff1.get_ctx();
1230 let mut aff1 = aff1;
1231 aff1.do_not_free_on_drop();
1232 let aff1 = aff1.ptr;
1233 let mut aff2 = aff2;
1234 aff2.do_not_free_on_drop();
1235 let aff2 = aff2.ptr;
1236 let isl_rs_result = unsafe { isl_aff_mul(aff1, aff2) };
1237 let isl_rs_result = Aff { ptr: isl_rs_result,
1238 should_free_on_drop: true };
1239 let err = isl_rs_ctx.last_error();
1240 if err != Error::None_ {
1241 let err_msg = isl_rs_ctx.last_error_msg();
1242 isl_rs_ctx.reset_error();
1243 return Err(LibISLError::new(err, err_msg));
1244 }
1245 Ok(isl_rs_result)
1246 }
1247
1248 pub fn nan_on_domain(ls: LocalSpace) -> Result<Aff, LibISLError> {
1250 let isl_rs_ctx = ls.get_ctx();
1251 let mut ls = ls;
1252 ls.do_not_free_on_drop();
1253 let ls = ls.ptr;
1254 let isl_rs_result = unsafe { isl_aff_nan_on_domain(ls) };
1255 let isl_rs_result = Aff { ptr: isl_rs_result,
1256 should_free_on_drop: true };
1257 let err = isl_rs_ctx.last_error();
1258 if err != Error::None_ {
1259 let err_msg = isl_rs_ctx.last_error_msg();
1260 isl_rs_ctx.reset_error();
1261 return Err(LibISLError::new(err, err_msg));
1262 }
1263 Ok(isl_rs_result)
1264 }
1265
1266 pub fn nan_on_domain_space(space: Space) -> Result<Aff, LibISLError> {
1268 let isl_rs_ctx = space.get_ctx();
1269 let mut space = space;
1270 space.do_not_free_on_drop();
1271 let space = space.ptr;
1272 let isl_rs_result = unsafe { isl_aff_nan_on_domain_space(space) };
1273 let isl_rs_result = Aff { ptr: isl_rs_result,
1274 should_free_on_drop: true };
1275 let err = isl_rs_ctx.last_error();
1276 if err != Error::None_ {
1277 let err_msg = isl_rs_ctx.last_error_msg();
1278 isl_rs_ctx.reset_error();
1279 return Err(LibISLError::new(err, err_msg));
1280 }
1281 Ok(isl_rs_result)
1282 }
1283
1284 pub fn ne_set(self, aff2: Aff) -> Result<Set, LibISLError> {
1286 let aff1 = self;
1287 let isl_rs_ctx = aff1.get_ctx();
1288 let mut aff1 = aff1;
1289 aff1.do_not_free_on_drop();
1290 let aff1 = aff1.ptr;
1291 let mut aff2 = aff2;
1292 aff2.do_not_free_on_drop();
1293 let aff2 = aff2.ptr;
1294 let isl_rs_result = unsafe { isl_aff_ne_set(aff1, aff2) };
1295 let isl_rs_result = Set { ptr: isl_rs_result,
1296 should_free_on_drop: true };
1297 let err = isl_rs_ctx.last_error();
1298 if err != Error::None_ {
1299 let err_msg = isl_rs_ctx.last_error_msg();
1300 isl_rs_ctx.reset_error();
1301 return Err(LibISLError::new(err, err_msg));
1302 }
1303 Ok(isl_rs_result)
1304 }
1305
1306 pub fn neg(self) -> Result<Aff, LibISLError> {
1308 let aff = self;
1309 let isl_rs_ctx = aff.get_ctx();
1310 let mut aff = aff;
1311 aff.do_not_free_on_drop();
1312 let aff = aff.ptr;
1313 let isl_rs_result = unsafe { isl_aff_neg(aff) };
1314 let isl_rs_result = Aff { ptr: isl_rs_result,
1315 should_free_on_drop: true };
1316 let err = isl_rs_ctx.last_error();
1317 if err != Error::None_ {
1318 let err_msg = isl_rs_ctx.last_error_msg();
1319 isl_rs_ctx.reset_error();
1320 return Err(LibISLError::new(err, err_msg));
1321 }
1322 Ok(isl_rs_result)
1323 }
1324
1325 pub fn neg_basic_set(self) -> Result<BasicSet, LibISLError> {
1327 let aff = self;
1328 let isl_rs_ctx = aff.get_ctx();
1329 let mut aff = aff;
1330 aff.do_not_free_on_drop();
1331 let aff = aff.ptr;
1332 let isl_rs_result = unsafe { isl_aff_neg_basic_set(aff) };
1333 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1334 should_free_on_drop: true };
1335 let err = isl_rs_ctx.last_error();
1336 if err != Error::None_ {
1337 let err_msg = isl_rs_ctx.last_error_msg();
1338 isl_rs_ctx.reset_error();
1339 return Err(LibISLError::new(err, err_msg));
1340 }
1341 Ok(isl_rs_result)
1342 }
1343
1344 pub fn param_on_domain_space_id(space: Space, id: Id) -> Result<Aff, LibISLError> {
1346 let isl_rs_ctx = space.get_ctx();
1347 let mut space = space;
1348 space.do_not_free_on_drop();
1349 let space = space.ptr;
1350 let mut id = id;
1351 id.do_not_free_on_drop();
1352 let id = id.ptr;
1353 let isl_rs_result = unsafe { isl_aff_param_on_domain_space_id(space, id) };
1354 let isl_rs_result = Aff { ptr: isl_rs_result,
1355 should_free_on_drop: true };
1356 let err = isl_rs_ctx.last_error();
1357 if err != Error::None_ {
1358 let err_msg = isl_rs_ctx.last_error_msg();
1359 isl_rs_ctx.reset_error();
1360 return Err(LibISLError::new(err, err_msg));
1361 }
1362 Ok(isl_rs_result)
1363 }
1364
1365 pub fn plain_is_equal(&self, aff2: &Aff) -> Result<bool, LibISLError> {
1367 let aff1 = self;
1368 let isl_rs_ctx = aff1.get_ctx();
1369 let aff1 = aff1.ptr;
1370 let aff2 = aff2.ptr;
1371 let isl_rs_result = unsafe { isl_aff_plain_is_equal(aff1, aff2) };
1372 let isl_rs_result = match isl_rs_result {
1373 0 => false,
1374 1 => true,
1375 _ => {
1376 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1377 }
1378 };
1379 let err = isl_rs_ctx.last_error();
1380 if err != Error::None_ {
1381 let err_msg = isl_rs_ctx.last_error_msg();
1382 isl_rs_ctx.reset_error();
1383 return Err(LibISLError::new(err, err_msg));
1384 }
1385 Ok(isl_rs_result)
1386 }
1387
1388 pub fn plain_is_zero(&self) -> Result<bool, LibISLError> {
1390 let aff = self;
1391 let isl_rs_ctx = aff.get_ctx();
1392 let aff = aff.ptr;
1393 let isl_rs_result = unsafe { isl_aff_plain_is_zero(aff) };
1394 let isl_rs_result = match isl_rs_result {
1395 0 => false,
1396 1 => true,
1397 _ => {
1398 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1399 }
1400 };
1401 let err = isl_rs_ctx.last_error();
1402 if err != Error::None_ {
1403 let err_msg = isl_rs_ctx.last_error_msg();
1404 isl_rs_ctx.reset_error();
1405 return Err(LibISLError::new(err, err_msg));
1406 }
1407 Ok(isl_rs_result)
1408 }
1409
1410 pub fn project_domain_on_params(self) -> Result<Aff, LibISLError> {
1412 let aff = self;
1413 let isl_rs_ctx = aff.get_ctx();
1414 let mut aff = aff;
1415 aff.do_not_free_on_drop();
1416 let aff = aff.ptr;
1417 let isl_rs_result = unsafe { isl_aff_project_domain_on_params(aff) };
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 let err_msg = isl_rs_ctx.last_error_msg();
1423 isl_rs_ctx.reset_error();
1424 return Err(LibISLError::new(err, err_msg));
1425 }
1426 Ok(isl_rs_result)
1427 }
1428
1429 pub fn pullback_aff(self, aff2: Aff) -> Result<Aff, LibISLError> {
1431 let aff1 = self;
1432 let isl_rs_ctx = aff1.get_ctx();
1433 let mut aff1 = aff1;
1434 aff1.do_not_free_on_drop();
1435 let aff1 = aff1.ptr;
1436 let mut aff2 = aff2;
1437 aff2.do_not_free_on_drop();
1438 let aff2 = aff2.ptr;
1439 let isl_rs_result = unsafe { isl_aff_pullback_aff(aff1, aff2) };
1440 let isl_rs_result = Aff { ptr: isl_rs_result,
1441 should_free_on_drop: true };
1442 let err = isl_rs_ctx.last_error();
1443 if err != Error::None_ {
1444 let err_msg = isl_rs_ctx.last_error_msg();
1445 isl_rs_ctx.reset_error();
1446 return Err(LibISLError::new(err, err_msg));
1447 }
1448 Ok(isl_rs_result)
1449 }
1450
1451 pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<Aff, LibISLError> {
1453 let aff = self;
1454 let isl_rs_ctx = aff.get_ctx();
1455 let mut aff = aff;
1456 aff.do_not_free_on_drop();
1457 let aff = aff.ptr;
1458 let mut ma = ma;
1459 ma.do_not_free_on_drop();
1460 let ma = ma.ptr;
1461 let isl_rs_result = unsafe { isl_aff_pullback_multi_aff(aff, ma) };
1462 let isl_rs_result = Aff { ptr: isl_rs_result,
1463 should_free_on_drop: true };
1464 let err = isl_rs_ctx.last_error();
1465 if err != Error::None_ {
1466 let err_msg = isl_rs_ctx.last_error_msg();
1467 isl_rs_ctx.reset_error();
1468 return Err(LibISLError::new(err, err_msg));
1469 }
1470 Ok(isl_rs_result)
1471 }
1472
1473 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<Aff, LibISLError> {
1475 let isl_rs_ctx = Context { ptr: ctx.ptr,
1476 should_free_on_drop: false };
1477 let ctx = ctx.ptr;
1478 let str_ = CString::new(str_).unwrap();
1479 let str_ = str_.as_ptr();
1480 let isl_rs_result = unsafe { isl_aff_read_from_str(ctx, str_) };
1481 let isl_rs_result = Aff { ptr: isl_rs_result,
1482 should_free_on_drop: true };
1483 let err = isl_rs_ctx.last_error();
1484 if err != Error::None_ {
1485 let err_msg = isl_rs_ctx.last_error_msg();
1486 isl_rs_ctx.reset_error();
1487 return Err(LibISLError::new(err, err_msg));
1488 }
1489 Ok(isl_rs_result)
1490 }
1491
1492 pub fn scale_down_ui(self, f: u32) -> Result<Aff, LibISLError> {
1494 let aff = self;
1495 let isl_rs_ctx = aff.get_ctx();
1496 let mut aff = aff;
1497 aff.do_not_free_on_drop();
1498 let aff = aff.ptr;
1499 let isl_rs_result = unsafe { isl_aff_scale_down_ui(aff, f) };
1500 let isl_rs_result = Aff { ptr: isl_rs_result,
1501 should_free_on_drop: true };
1502 let err = isl_rs_ctx.last_error();
1503 if err != Error::None_ {
1504 let err_msg = isl_rs_ctx.last_error_msg();
1505 isl_rs_ctx.reset_error();
1506 return Err(LibISLError::new(err, err_msg));
1507 }
1508 Ok(isl_rs_result)
1509 }
1510
1511 pub fn scale_down_val(self, v: Val) -> Result<Aff, LibISLError> {
1513 let aff = self;
1514 let isl_rs_ctx = aff.get_ctx();
1515 let mut aff = aff;
1516 aff.do_not_free_on_drop();
1517 let aff = aff.ptr;
1518 let mut v = v;
1519 v.do_not_free_on_drop();
1520 let v = v.ptr;
1521 let isl_rs_result = unsafe { isl_aff_scale_down_val(aff, v) };
1522 let isl_rs_result = Aff { ptr: isl_rs_result,
1523 should_free_on_drop: true };
1524 let err = isl_rs_ctx.last_error();
1525 if err != Error::None_ {
1526 let err_msg = isl_rs_ctx.last_error_msg();
1527 isl_rs_ctx.reset_error();
1528 return Err(LibISLError::new(err, err_msg));
1529 }
1530 Ok(isl_rs_result)
1531 }
1532
1533 pub fn scale_val(self, v: Val) -> Result<Aff, LibISLError> {
1535 let aff = self;
1536 let isl_rs_ctx = aff.get_ctx();
1537 let mut aff = aff;
1538 aff.do_not_free_on_drop();
1539 let aff = aff.ptr;
1540 let mut v = v;
1541 v.do_not_free_on_drop();
1542 let v = v.ptr;
1543 let isl_rs_result = unsafe { isl_aff_scale_val(aff, v) };
1544 let isl_rs_result = Aff { ptr: isl_rs_result,
1545 should_free_on_drop: true };
1546 let err = isl_rs_ctx.last_error();
1547 if err != Error::None_ {
1548 let err_msg = isl_rs_ctx.last_error_msg();
1549 isl_rs_ctx.reset_error();
1550 return Err(LibISLError::new(err, err_msg));
1551 }
1552 Ok(isl_rs_result)
1553 }
1554
1555 pub fn set_coefficient_si(self, type_: DimType, pos: i32, v: i32) -> Result<Aff, LibISLError> {
1557 let aff = self;
1558 let isl_rs_ctx = aff.get_ctx();
1559 let mut aff = aff;
1560 aff.do_not_free_on_drop();
1561 let aff = aff.ptr;
1562 let type_ = type_.to_i32();
1563 let isl_rs_result = unsafe { isl_aff_set_coefficient_si(aff, type_, pos, v) };
1564 let isl_rs_result = Aff { ptr: isl_rs_result,
1565 should_free_on_drop: true };
1566 let err = isl_rs_ctx.last_error();
1567 if err != Error::None_ {
1568 let err_msg = isl_rs_ctx.last_error_msg();
1569 isl_rs_ctx.reset_error();
1570 return Err(LibISLError::new(err, err_msg));
1571 }
1572 Ok(isl_rs_result)
1573 }
1574
1575 pub fn set_coefficient_val(self, type_: DimType, pos: i32, v: Val) -> Result<Aff, LibISLError> {
1577 let aff = self;
1578 let isl_rs_ctx = aff.get_ctx();
1579 let mut aff = aff;
1580 aff.do_not_free_on_drop();
1581 let aff = aff.ptr;
1582 let type_ = type_.to_i32();
1583 let mut v = v;
1584 v.do_not_free_on_drop();
1585 let v = v.ptr;
1586 let isl_rs_result = unsafe { isl_aff_set_coefficient_val(aff, type_, pos, v) };
1587 let isl_rs_result = Aff { ptr: isl_rs_result,
1588 should_free_on_drop: true };
1589 let err = isl_rs_ctx.last_error();
1590 if err != Error::None_ {
1591 let err_msg = isl_rs_ctx.last_error_msg();
1592 isl_rs_ctx.reset_error();
1593 return Err(LibISLError::new(err, err_msg));
1594 }
1595 Ok(isl_rs_result)
1596 }
1597
1598 pub fn set_constant_si(self, v: i32) -> Result<Aff, LibISLError> {
1600 let aff = self;
1601 let isl_rs_ctx = aff.get_ctx();
1602 let mut aff = aff;
1603 aff.do_not_free_on_drop();
1604 let aff = aff.ptr;
1605 let isl_rs_result = unsafe { isl_aff_set_constant_si(aff, v) };
1606 let isl_rs_result = Aff { ptr: isl_rs_result,
1607 should_free_on_drop: true };
1608 let err = isl_rs_ctx.last_error();
1609 if err != Error::None_ {
1610 let err_msg = isl_rs_ctx.last_error_msg();
1611 isl_rs_ctx.reset_error();
1612 return Err(LibISLError::new(err, err_msg));
1613 }
1614 Ok(isl_rs_result)
1615 }
1616
1617 pub fn set_constant_val(self, v: Val) -> Result<Aff, LibISLError> {
1619 let aff = self;
1620 let isl_rs_ctx = aff.get_ctx();
1621 let mut aff = aff;
1622 aff.do_not_free_on_drop();
1623 let aff = aff.ptr;
1624 let mut v = v;
1625 v.do_not_free_on_drop();
1626 let v = v.ptr;
1627 let isl_rs_result = unsafe { isl_aff_set_constant_val(aff, v) };
1628 let isl_rs_result = Aff { ptr: isl_rs_result,
1629 should_free_on_drop: true };
1630 let err = isl_rs_ctx.last_error();
1631 if err != Error::None_ {
1632 let err_msg = isl_rs_ctx.last_error_msg();
1633 isl_rs_ctx.reset_error();
1634 return Err(LibISLError::new(err, err_msg));
1635 }
1636 Ok(isl_rs_result)
1637 }
1638
1639 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<Aff, LibISLError> {
1641 let aff = self;
1642 let isl_rs_ctx = aff.get_ctx();
1643 let mut aff = aff;
1644 aff.do_not_free_on_drop();
1645 let aff = aff.ptr;
1646 let type_ = type_.to_i32();
1647 let mut id = id;
1648 id.do_not_free_on_drop();
1649 let id = id.ptr;
1650 let isl_rs_result = unsafe { isl_aff_set_dim_id(aff, type_, pos, id) };
1651 let isl_rs_result = Aff { ptr: isl_rs_result,
1652 should_free_on_drop: true };
1653 let err = isl_rs_ctx.last_error();
1654 if err != Error::None_ {
1655 let err_msg = isl_rs_ctx.last_error_msg();
1656 isl_rs_ctx.reset_error();
1657 return Err(LibISLError::new(err, err_msg));
1658 }
1659 Ok(isl_rs_result)
1660 }
1661
1662 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str) -> Result<Aff, LibISLError> {
1664 let aff = self;
1665 let isl_rs_ctx = aff.get_ctx();
1666 let mut aff = aff;
1667 aff.do_not_free_on_drop();
1668 let aff = aff.ptr;
1669 let type_ = type_.to_i32();
1670 let s = CString::new(s).unwrap();
1671 let s = s.as_ptr();
1672 let isl_rs_result = unsafe { isl_aff_set_dim_name(aff, type_, pos, s) };
1673 let isl_rs_result = Aff { ptr: isl_rs_result,
1674 should_free_on_drop: true };
1675 let err = isl_rs_ctx.last_error();
1676 if err != Error::None_ {
1677 let err_msg = isl_rs_ctx.last_error_msg();
1678 isl_rs_ctx.reset_error();
1679 return Err(LibISLError::new(err, err_msg));
1680 }
1681 Ok(isl_rs_result)
1682 }
1683
1684 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<Aff, LibISLError> {
1686 let aff = self;
1687 let isl_rs_ctx = aff.get_ctx();
1688 let mut aff = aff;
1689 aff.do_not_free_on_drop();
1690 let aff = aff.ptr;
1691 let type_ = type_.to_i32();
1692 let mut id = id;
1693 id.do_not_free_on_drop();
1694 let id = id.ptr;
1695 let isl_rs_result = unsafe { isl_aff_set_tuple_id(aff, type_, id) };
1696 let isl_rs_result = Aff { ptr: isl_rs_result,
1697 should_free_on_drop: true };
1698 let err = isl_rs_ctx.last_error();
1699 if err != Error::None_ {
1700 let err_msg = isl_rs_ctx.last_error_msg();
1701 isl_rs_ctx.reset_error();
1702 return Err(LibISLError::new(err, err_msg));
1703 }
1704 Ok(isl_rs_result)
1705 }
1706
1707 pub fn sub(self, aff2: Aff) -> Result<Aff, LibISLError> {
1709 let aff1 = self;
1710 let isl_rs_ctx = aff1.get_ctx();
1711 let mut aff1 = aff1;
1712 aff1.do_not_free_on_drop();
1713 let aff1 = aff1.ptr;
1714 let mut aff2 = aff2;
1715 aff2.do_not_free_on_drop();
1716 let aff2 = aff2.ptr;
1717 let isl_rs_result = unsafe { isl_aff_sub(aff1, aff2) };
1718 let isl_rs_result = Aff { ptr: isl_rs_result,
1719 should_free_on_drop: true };
1720 let err = isl_rs_ctx.last_error();
1721 if err != Error::None_ {
1722 let err_msg = isl_rs_ctx.last_error_msg();
1723 isl_rs_ctx.reset_error();
1724 return Err(LibISLError::new(err, err_msg));
1725 }
1726 Ok(isl_rs_result)
1727 }
1728
1729 pub fn to_list(self) -> Result<AffList, LibISLError> {
1731 let el = self;
1732 let isl_rs_ctx = el.get_ctx();
1733 let mut el = el;
1734 el.do_not_free_on_drop();
1735 let el = el.ptr;
1736 let isl_rs_result = unsafe { isl_aff_to_list(el) };
1737 let isl_rs_result = AffList { ptr: isl_rs_result,
1738 should_free_on_drop: true };
1739 let err = isl_rs_ctx.last_error();
1740 if err != Error::None_ {
1741 let err_msg = isl_rs_ctx.last_error_msg();
1742 isl_rs_ctx.reset_error();
1743 return Err(LibISLError::new(err, err_msg));
1744 }
1745 Ok(isl_rs_result)
1746 }
1747
1748 pub fn to_str(&self) -> Result<&str, LibISLError> {
1750 let aff = self;
1751 let isl_rs_ctx = aff.get_ctx();
1752 let aff = aff.ptr;
1753 let isl_rs_result = unsafe { isl_aff_to_str(aff) };
1754 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1755 let isl_rs_result = isl_rs_result.to_str().unwrap();
1756 let err = isl_rs_ctx.last_error();
1757 if err != Error::None_ {
1758 let err_msg = isl_rs_ctx.last_error_msg();
1759 isl_rs_ctx.reset_error();
1760 return Err(LibISLError::new(err, err_msg));
1761 }
1762 Ok(isl_rs_result)
1763 }
1764
1765 pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<Aff, LibISLError> {
1767 let aff = self;
1768 let isl_rs_ctx = aff.get_ctx();
1769 let mut aff = aff;
1770 aff.do_not_free_on_drop();
1771 let aff = aff.ptr;
1772 let mut domain = domain;
1773 domain.do_not_free_on_drop();
1774 let domain = domain.ptr;
1775 let isl_rs_result = unsafe { isl_aff_unbind_params_insert_domain(aff, domain) };
1776 let isl_rs_result = Aff { ptr: isl_rs_result,
1777 should_free_on_drop: true };
1778 let err = isl_rs_ctx.last_error();
1779 if err != Error::None_ {
1780 let err_msg = isl_rs_ctx.last_error_msg();
1781 isl_rs_ctx.reset_error();
1782 return Err(LibISLError::new(err, err_msg));
1783 }
1784 Ok(isl_rs_result)
1785 }
1786
1787 pub fn val_on_domain(ls: LocalSpace, val: Val) -> Result<Aff, LibISLError> {
1789 let isl_rs_ctx = ls.get_ctx();
1790 let mut ls = ls;
1791 ls.do_not_free_on_drop();
1792 let ls = ls.ptr;
1793 let mut val = val;
1794 val.do_not_free_on_drop();
1795 let val = val.ptr;
1796 let isl_rs_result = unsafe { isl_aff_val_on_domain(ls, val) };
1797 let isl_rs_result = Aff { ptr: isl_rs_result,
1798 should_free_on_drop: true };
1799 let err = isl_rs_ctx.last_error();
1800 if err != Error::None_ {
1801 let err_msg = isl_rs_ctx.last_error_msg();
1802 isl_rs_ctx.reset_error();
1803 return Err(LibISLError::new(err, err_msg));
1804 }
1805 Ok(isl_rs_result)
1806 }
1807
1808 pub fn val_on_domain_space(space: Space, val: Val) -> Result<Aff, LibISLError> {
1810 let isl_rs_ctx = space.get_ctx();
1811 let mut space = space;
1812 space.do_not_free_on_drop();
1813 let space = space.ptr;
1814 let mut val = val;
1815 val.do_not_free_on_drop();
1816 let val = val.ptr;
1817 let isl_rs_result = unsafe { isl_aff_val_on_domain_space(space, val) };
1818 let isl_rs_result = Aff { ptr: isl_rs_result,
1819 should_free_on_drop: true };
1820 let err = isl_rs_ctx.last_error();
1821 if err != Error::None_ {
1822 let err_msg = isl_rs_ctx.last_error_msg();
1823 isl_rs_ctx.reset_error();
1824 return Err(LibISLError::new(err, err_msg));
1825 }
1826 Ok(isl_rs_result)
1827 }
1828
1829 pub fn var_on_domain(ls: LocalSpace, type_: DimType, pos: u32) -> Result<Aff, LibISLError> {
1831 let isl_rs_ctx = ls.get_ctx();
1832 let mut ls = ls;
1833 ls.do_not_free_on_drop();
1834 let ls = ls.ptr;
1835 let type_ = type_.to_i32();
1836 let isl_rs_result = unsafe { isl_aff_var_on_domain(ls, type_, pos) };
1837 let isl_rs_result = Aff { ptr: isl_rs_result,
1838 should_free_on_drop: true };
1839 let err = isl_rs_ctx.last_error();
1840 if err != Error::None_ {
1841 let err_msg = isl_rs_ctx.last_error_msg();
1842 isl_rs_ctx.reset_error();
1843 return Err(LibISLError::new(err, err_msg));
1844 }
1845 Ok(isl_rs_result)
1846 }
1847
1848 pub fn zero_basic_set(self) -> Result<BasicSet, LibISLError> {
1850 let aff = self;
1851 let isl_rs_ctx = aff.get_ctx();
1852 let mut aff = aff;
1853 aff.do_not_free_on_drop();
1854 let aff = aff.ptr;
1855 let isl_rs_result = unsafe { isl_aff_zero_basic_set(aff) };
1856 let isl_rs_result = BasicSet { ptr: isl_rs_result,
1857 should_free_on_drop: true };
1858 let err = isl_rs_ctx.last_error();
1859 if err != Error::None_ {
1860 let err_msg = isl_rs_ctx.last_error_msg();
1861 isl_rs_ctx.reset_error();
1862 return Err(LibISLError::new(err, err_msg));
1863 }
1864 Ok(isl_rs_result)
1865 }
1866
1867 pub fn zero_on_domain(ls: LocalSpace) -> Result<Aff, LibISLError> {
1869 let isl_rs_ctx = ls.get_ctx();
1870 let mut ls = ls;
1871 ls.do_not_free_on_drop();
1872 let ls = ls.ptr;
1873 let isl_rs_result = unsafe { isl_aff_zero_on_domain(ls) };
1874 let isl_rs_result = Aff { ptr: isl_rs_result,
1875 should_free_on_drop: true };
1876 let err = isl_rs_ctx.last_error();
1877 if err != Error::None_ {
1878 let err_msg = isl_rs_ctx.last_error_msg();
1879 isl_rs_ctx.reset_error();
1880 return Err(LibISLError::new(err, err_msg));
1881 }
1882 Ok(isl_rs_result)
1883 }
1884
1885 pub fn zero_on_domain_space(space: Space) -> Result<Aff, LibISLError> {
1887 let isl_rs_ctx = space.get_ctx();
1888 let mut space = space;
1889 space.do_not_free_on_drop();
1890 let space = space.ptr;
1891 let isl_rs_result = unsafe { isl_aff_zero_on_domain_space(space) };
1892 let isl_rs_result = Aff { ptr: isl_rs_result,
1893 should_free_on_drop: true };
1894 let err = isl_rs_ctx.last_error();
1895 if err != Error::None_ {
1896 let err_msg = isl_rs_ctx.last_error_msg();
1897 isl_rs_ctx.reset_error();
1898 return Err(LibISLError::new(err, err_msg));
1899 }
1900 Ok(isl_rs_result)
1901 }
1902
1903 pub fn do_not_free_on_drop(&mut self) {
1905 self.should_free_on_drop = false;
1906 }
1907}
1908
1909impl Drop for Aff {
1910 fn drop(&mut self) {
1911 if self.should_free_on_drop {
1912 unsafe {
1913 isl_aff_free(self.ptr);
1914 }
1915 }
1916 }
1917}