1use super::{
5 Aff, Context, DimType, Error, Id, IdList, LibISLError, Map, MultiAff, MultiId, MultiVal, PwAff,
6 PwAffList, PwMultiAff, Set, Space, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct MultiPwAff {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_multi_pw_aff_add(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
21
22 fn isl_multi_pw_aff_add_constant_multi_val(mpa: uintptr_t, mv: uintptr_t) -> uintptr_t;
23
24 fn isl_multi_pw_aff_add_constant_val(mpa: uintptr_t, v: uintptr_t) -> uintptr_t;
25
26 fn isl_multi_pw_aff_add_dims(multi: uintptr_t, type_: i32, n: u32) -> uintptr_t;
27
28 fn isl_multi_pw_aff_align_params(multi: uintptr_t, model: uintptr_t) -> uintptr_t;
29
30 fn isl_multi_pw_aff_as_map(mpa: uintptr_t) -> uintptr_t;
31
32 fn isl_multi_pw_aff_as_multi_aff(mpa: uintptr_t) -> uintptr_t;
33
34 fn isl_multi_pw_aff_as_set(mpa: uintptr_t) -> uintptr_t;
35
36 fn isl_multi_pw_aff_bind(mpa: uintptr_t, tuple: uintptr_t) -> uintptr_t;
37
38 fn isl_multi_pw_aff_bind_domain(multi: uintptr_t, tuple: uintptr_t) -> uintptr_t;
39
40 fn isl_multi_pw_aff_bind_domain_wrapped_domain(multi: uintptr_t, tuple: uintptr_t)
41 -> uintptr_t;
42
43 fn isl_multi_pw_aff_coalesce(mpa: uintptr_t) -> uintptr_t;
44
45 fn isl_multi_pw_aff_copy(multi: uintptr_t) -> uintptr_t;
46
47 fn isl_multi_pw_aff_dim(multi: uintptr_t, type_: i32) -> i32;
48
49 fn isl_multi_pw_aff_domain(mpa: uintptr_t) -> uintptr_t;
50
51 fn isl_multi_pw_aff_domain_reverse(multi: uintptr_t) -> uintptr_t;
52
53 fn isl_multi_pw_aff_drop_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
54
55 fn isl_multi_pw_aff_dump(mpa: uintptr_t) -> ();
56
57 fn isl_multi_pw_aff_eq_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
58
59 fn isl_multi_pw_aff_factor_range(multi: uintptr_t) -> uintptr_t;
60
61 fn isl_multi_pw_aff_find_dim_by_id(multi: uintptr_t, type_: i32, id: uintptr_t) -> i32;
62
63 fn isl_multi_pw_aff_find_dim_by_name(multi: uintptr_t, type_: i32, name: *const c_char) -> i32;
64
65 fn isl_multi_pw_aff_flat_range_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
66
67 fn isl_multi_pw_aff_flatten_range(multi: uintptr_t) -> uintptr_t;
68
69 fn isl_multi_pw_aff_free(multi: uintptr_t) -> uintptr_t;
70
71 fn isl_multi_pw_aff_from_aff(aff: uintptr_t) -> uintptr_t;
72
73 fn isl_multi_pw_aff_from_multi_aff(ma: uintptr_t) -> uintptr_t;
74
75 fn isl_multi_pw_aff_from_pw_aff(pa: uintptr_t) -> uintptr_t;
76
77 fn isl_multi_pw_aff_from_pw_aff_list(space: uintptr_t, list: uintptr_t) -> uintptr_t;
78
79 fn isl_multi_pw_aff_from_pw_multi_aff(pma: uintptr_t) -> uintptr_t;
80
81 fn isl_multi_pw_aff_from_range(multi: uintptr_t) -> uintptr_t;
82
83 fn isl_multi_pw_aff_get_at(multi: uintptr_t, pos: i32) -> uintptr_t;
84
85 fn isl_multi_pw_aff_get_ctx(multi: uintptr_t) -> uintptr_t;
86
87 fn isl_multi_pw_aff_get_dim_id(multi: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
88
89 fn isl_multi_pw_aff_get_domain_space(multi: uintptr_t) -> uintptr_t;
90
91 fn isl_multi_pw_aff_get_hash(mpa: uintptr_t) -> u32;
92
93 fn isl_multi_pw_aff_get_list(multi: uintptr_t) -> uintptr_t;
94
95 fn isl_multi_pw_aff_get_pw_aff(multi: uintptr_t, pos: i32) -> uintptr_t;
96
97 fn isl_multi_pw_aff_get_range_tuple_id(multi: uintptr_t) -> uintptr_t;
98
99 fn isl_multi_pw_aff_get_space(multi: uintptr_t) -> uintptr_t;
100
101 fn isl_multi_pw_aff_get_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
102
103 fn isl_multi_pw_aff_get_tuple_name(multi: uintptr_t, type_: i32) -> *const c_char;
104
105 fn isl_multi_pw_aff_gist(mpa: uintptr_t, set: uintptr_t) -> uintptr_t;
106
107 fn isl_multi_pw_aff_gist_params(mpa: uintptr_t, set: uintptr_t) -> uintptr_t;
108
109 fn isl_multi_pw_aff_has_range_tuple_id(multi: uintptr_t) -> i32;
110
111 fn isl_multi_pw_aff_has_tuple_id(multi: uintptr_t, type_: i32) -> i32;
112
113 fn isl_multi_pw_aff_identity(space: uintptr_t) -> uintptr_t;
114
115 fn isl_multi_pw_aff_identity_multi_pw_aff(multi: uintptr_t) -> uintptr_t;
116
117 fn isl_multi_pw_aff_identity_on_domain_space(space: uintptr_t) -> uintptr_t;
118
119 fn isl_multi_pw_aff_insert_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
120
121 fn isl_multi_pw_aff_insert_domain(multi: uintptr_t, domain: uintptr_t) -> uintptr_t;
122
123 fn isl_multi_pw_aff_intersect_domain(mpa: uintptr_t, domain: uintptr_t) -> uintptr_t;
124
125 fn isl_multi_pw_aff_intersect_params(mpa: uintptr_t, set: uintptr_t) -> uintptr_t;
126
127 fn isl_multi_pw_aff_involves_dims(multi: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
128
129 fn isl_multi_pw_aff_involves_nan(multi: uintptr_t) -> i32;
130
131 fn isl_multi_pw_aff_involves_param_id(multi: uintptr_t, id: uintptr_t) -> i32;
132
133 fn isl_multi_pw_aff_involves_param_id_list(multi: uintptr_t, list: uintptr_t) -> i32;
134
135 fn isl_multi_pw_aff_is_cst(mpa: uintptr_t) -> i32;
136
137 fn isl_multi_pw_aff_is_equal(mpa1: uintptr_t, mpa2: uintptr_t) -> i32;
138
139 fn isl_multi_pw_aff_isa_multi_aff(mpa: uintptr_t) -> i32;
140
141 fn isl_multi_pw_aff_lex_ge_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
142
143 fn isl_multi_pw_aff_lex_gt_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
144
145 fn isl_multi_pw_aff_lex_le_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
146
147 fn isl_multi_pw_aff_lex_lt_map(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
148
149 fn isl_multi_pw_aff_max(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
150
151 fn isl_multi_pw_aff_max_multi_val(mpa: uintptr_t) -> uintptr_t;
152
153 fn isl_multi_pw_aff_min(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
154
155 fn isl_multi_pw_aff_min_multi_val(mpa: uintptr_t) -> uintptr_t;
156
157 fn isl_multi_pw_aff_mod_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
158
159 fn isl_multi_pw_aff_move_dims(pma: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32,
160 src_pos: u32, n: u32)
161 -> uintptr_t;
162
163 fn isl_multi_pw_aff_neg(multi: uintptr_t) -> uintptr_t;
164
165 fn isl_multi_pw_aff_plain_is_equal(multi1: uintptr_t, multi2: uintptr_t) -> i32;
166
167 fn isl_multi_pw_aff_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
168
169 fn isl_multi_pw_aff_project_domain_on_params(multi: uintptr_t) -> uintptr_t;
170
171 fn isl_multi_pw_aff_pullback_multi_aff(mpa: uintptr_t, ma: uintptr_t) -> uintptr_t;
172
173 fn isl_multi_pw_aff_pullback_multi_pw_aff(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
174
175 fn isl_multi_pw_aff_pullback_pw_multi_aff(mpa: uintptr_t, pma: uintptr_t) -> uintptr_t;
176
177 fn isl_multi_pw_aff_range_factor_domain(multi: uintptr_t) -> uintptr_t;
178
179 fn isl_multi_pw_aff_range_factor_range(multi: uintptr_t) -> uintptr_t;
180
181 fn isl_multi_pw_aff_range_is_wrapping(multi: uintptr_t) -> i32;
182
183 fn isl_multi_pw_aff_range_product(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
184
185 fn isl_multi_pw_aff_range_splice(multi1: uintptr_t, pos: u32, multi2: uintptr_t) -> uintptr_t;
186
187 fn isl_multi_pw_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
188
189 fn isl_multi_pw_aff_reset_range_tuple_id(multi: uintptr_t) -> uintptr_t;
190
191 fn isl_multi_pw_aff_reset_tuple_id(multi: uintptr_t, type_: i32) -> uintptr_t;
192
193 fn isl_multi_pw_aff_reset_user(multi: uintptr_t) -> uintptr_t;
194
195 fn isl_multi_pw_aff_scale_down_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
196
197 fn isl_multi_pw_aff_scale_down_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
198
199 fn isl_multi_pw_aff_scale_multi_val(multi: uintptr_t, mv: uintptr_t) -> uintptr_t;
200
201 fn isl_multi_pw_aff_scale_val(multi: uintptr_t, v: uintptr_t) -> uintptr_t;
202
203 fn isl_multi_pw_aff_set_at(multi: uintptr_t, pos: i32, el: uintptr_t) -> uintptr_t;
204
205 fn isl_multi_pw_aff_set_dim_id(multi: uintptr_t, type_: i32, pos: u32, id: uintptr_t)
206 -> uintptr_t;
207
208 fn isl_multi_pw_aff_set_dim_name(multi: uintptr_t, type_: i32, pos: u32, s: *const c_char)
209 -> uintptr_t;
210
211 fn isl_multi_pw_aff_set_pw_aff(multi: uintptr_t, pos: i32, el: uintptr_t) -> uintptr_t;
212
213 fn isl_multi_pw_aff_set_range_tuple_id(multi: uintptr_t, id: uintptr_t) -> uintptr_t;
214
215 fn isl_multi_pw_aff_set_tuple_id(multi: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
216
217 fn isl_multi_pw_aff_set_tuple_name(multi: uintptr_t, type_: i32, s: *const c_char)
218 -> uintptr_t;
219
220 fn isl_multi_pw_aff_size(multi: uintptr_t) -> i32;
221
222 fn isl_multi_pw_aff_splice(multi1: uintptr_t, in_pos: u32, out_pos: u32, multi2: uintptr_t)
223 -> uintptr_t;
224
225 fn isl_multi_pw_aff_sub(multi1: uintptr_t, multi2: uintptr_t) -> uintptr_t;
226
227 fn isl_multi_pw_aff_to_str(mpa: uintptr_t) -> *const c_char;
228
229 fn isl_multi_pw_aff_unbind_params_insert_domain(multi: uintptr_t, domain: uintptr_t)
230 -> uintptr_t;
231
232 fn isl_multi_pw_aff_union_add(mpa1: uintptr_t, mpa2: uintptr_t) -> uintptr_t;
233
234 fn isl_multi_pw_aff_zero(space: uintptr_t) -> uintptr_t;
235
236}
237
238impl MultiPwAff {
239 pub fn add(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
241 let multi1 = self;
242 let isl_rs_ctx = multi1.get_ctx();
243 let mut multi1 = multi1;
244 multi1.do_not_free_on_drop();
245 let multi1 = multi1.ptr;
246 let mut multi2 = multi2;
247 multi2.do_not_free_on_drop();
248 let multi2 = multi2.ptr;
249 let isl_rs_result = unsafe { isl_multi_pw_aff_add(multi1, multi2) };
250 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
251 should_free_on_drop: true };
252 let err = isl_rs_ctx.last_error();
253 if err != Error::None_ {
254 let err_msg = isl_rs_ctx.last_error_msg();
255 isl_rs_ctx.reset_error();
256 return Err(LibISLError::new(err, err_msg));
257 }
258 Ok(isl_rs_result)
259 }
260
261 pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
263 let mpa = self;
264 let isl_rs_ctx = mpa.get_ctx();
265 let mut mpa = mpa;
266 mpa.do_not_free_on_drop();
267 let mpa = mpa.ptr;
268 let mut mv = mv;
269 mv.do_not_free_on_drop();
270 let mv = mv.ptr;
271 let isl_rs_result = unsafe { isl_multi_pw_aff_add_constant_multi_val(mpa, mv) };
272 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
273 should_free_on_drop: true };
274 let err = isl_rs_ctx.last_error();
275 if err != Error::None_ {
276 let err_msg = isl_rs_ctx.last_error_msg();
277 isl_rs_ctx.reset_error();
278 return Err(LibISLError::new(err, err_msg));
279 }
280 Ok(isl_rs_result)
281 }
282
283 pub fn add_constant_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
285 let mpa = self;
286 let isl_rs_ctx = mpa.get_ctx();
287 let mut mpa = mpa;
288 mpa.do_not_free_on_drop();
289 let mpa = mpa.ptr;
290 let mut v = v;
291 v.do_not_free_on_drop();
292 let v = v.ptr;
293 let isl_rs_result = unsafe { isl_multi_pw_aff_add_constant_val(mpa, v) };
294 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
295 should_free_on_drop: true };
296 let err = isl_rs_ctx.last_error();
297 if err != Error::None_ {
298 let err_msg = isl_rs_ctx.last_error_msg();
299 isl_rs_ctx.reset_error();
300 return Err(LibISLError::new(err, err_msg));
301 }
302 Ok(isl_rs_result)
303 }
304
305 pub fn add_dims(self, type_: DimType, n: u32) -> Result<MultiPwAff, LibISLError> {
307 let multi = self;
308 let isl_rs_ctx = multi.get_ctx();
309 let mut multi = multi;
310 multi.do_not_free_on_drop();
311 let multi = multi.ptr;
312 let type_ = type_.to_i32();
313 let isl_rs_result = unsafe { isl_multi_pw_aff_add_dims(multi, type_, n) };
314 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
315 should_free_on_drop: true };
316 let err = isl_rs_ctx.last_error();
317 if err != Error::None_ {
318 let err_msg = isl_rs_ctx.last_error_msg();
319 isl_rs_ctx.reset_error();
320 return Err(LibISLError::new(err, err_msg));
321 }
322 Ok(isl_rs_result)
323 }
324
325 pub fn align_params(self, model: Space) -> Result<MultiPwAff, LibISLError> {
327 let multi = self;
328 let isl_rs_ctx = multi.get_ctx();
329 let mut multi = multi;
330 multi.do_not_free_on_drop();
331 let multi = multi.ptr;
332 let mut model = model;
333 model.do_not_free_on_drop();
334 let model = model.ptr;
335 let isl_rs_result = unsafe { isl_multi_pw_aff_align_params(multi, model) };
336 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
337 should_free_on_drop: true };
338 let err = isl_rs_ctx.last_error();
339 if err != Error::None_ {
340 let err_msg = isl_rs_ctx.last_error_msg();
341 isl_rs_ctx.reset_error();
342 return Err(LibISLError::new(err, err_msg));
343 }
344 Ok(isl_rs_result)
345 }
346
347 pub fn as_map(self) -> Result<Map, LibISLError> {
349 let mpa = self;
350 let isl_rs_ctx = mpa.get_ctx();
351 let mut mpa = mpa;
352 mpa.do_not_free_on_drop();
353 let mpa = mpa.ptr;
354 let isl_rs_result = unsafe { isl_multi_pw_aff_as_map(mpa) };
355 let isl_rs_result = Map { ptr: isl_rs_result,
356 should_free_on_drop: true };
357 let err = isl_rs_ctx.last_error();
358 if err != Error::None_ {
359 let err_msg = isl_rs_ctx.last_error_msg();
360 isl_rs_ctx.reset_error();
361 return Err(LibISLError::new(err, err_msg));
362 }
363 Ok(isl_rs_result)
364 }
365
366 pub fn as_multi_aff(self) -> Result<MultiAff, LibISLError> {
368 let mpa = self;
369 let isl_rs_ctx = mpa.get_ctx();
370 let mut mpa = mpa;
371 mpa.do_not_free_on_drop();
372 let mpa = mpa.ptr;
373 let isl_rs_result = unsafe { isl_multi_pw_aff_as_multi_aff(mpa) };
374 let isl_rs_result = MultiAff { ptr: isl_rs_result,
375 should_free_on_drop: true };
376 let err = isl_rs_ctx.last_error();
377 if err != Error::None_ {
378 let err_msg = isl_rs_ctx.last_error_msg();
379 isl_rs_ctx.reset_error();
380 return Err(LibISLError::new(err, err_msg));
381 }
382 Ok(isl_rs_result)
383 }
384
385 pub fn as_set(self) -> Result<Set, LibISLError> {
387 let mpa = self;
388 let isl_rs_ctx = mpa.get_ctx();
389 let mut mpa = mpa;
390 mpa.do_not_free_on_drop();
391 let mpa = mpa.ptr;
392 let isl_rs_result = unsafe { isl_multi_pw_aff_as_set(mpa) };
393 let isl_rs_result = Set { ptr: isl_rs_result,
394 should_free_on_drop: true };
395 let err = isl_rs_ctx.last_error();
396 if err != Error::None_ {
397 let err_msg = isl_rs_ctx.last_error_msg();
398 isl_rs_ctx.reset_error();
399 return Err(LibISLError::new(err, err_msg));
400 }
401 Ok(isl_rs_result)
402 }
403
404 pub fn bind(self, tuple: MultiId) -> Result<Set, LibISLError> {
406 let mpa = self;
407 let isl_rs_ctx = mpa.get_ctx();
408 let mut mpa = mpa;
409 mpa.do_not_free_on_drop();
410 let mpa = mpa.ptr;
411 let mut tuple = tuple;
412 tuple.do_not_free_on_drop();
413 let tuple = tuple.ptr;
414 let isl_rs_result = unsafe { isl_multi_pw_aff_bind(mpa, tuple) };
415 let isl_rs_result = Set { ptr: isl_rs_result,
416 should_free_on_drop: true };
417 let err = isl_rs_ctx.last_error();
418 if err != Error::None_ {
419 let err_msg = isl_rs_ctx.last_error_msg();
420 isl_rs_ctx.reset_error();
421 return Err(LibISLError::new(err, err_msg));
422 }
423 Ok(isl_rs_result)
424 }
425
426 pub fn bind_domain(self, tuple: MultiId) -> Result<MultiPwAff, LibISLError> {
428 let multi = self;
429 let isl_rs_ctx = multi.get_ctx();
430 let mut multi = multi;
431 multi.do_not_free_on_drop();
432 let multi = multi.ptr;
433 let mut tuple = tuple;
434 tuple.do_not_free_on_drop();
435 let tuple = tuple.ptr;
436 let isl_rs_result = unsafe { isl_multi_pw_aff_bind_domain(multi, tuple) };
437 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
438 should_free_on_drop: true };
439 let err = isl_rs_ctx.last_error();
440 if err != Error::None_ {
441 let err_msg = isl_rs_ctx.last_error_msg();
442 isl_rs_ctx.reset_error();
443 return Err(LibISLError::new(err, err_msg));
444 }
445 Ok(isl_rs_result)
446 }
447
448 pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<MultiPwAff, LibISLError> {
450 let multi = self;
451 let isl_rs_ctx = multi.get_ctx();
452 let mut multi = multi;
453 multi.do_not_free_on_drop();
454 let multi = multi.ptr;
455 let mut tuple = tuple;
456 tuple.do_not_free_on_drop();
457 let tuple = tuple.ptr;
458 let isl_rs_result = unsafe { isl_multi_pw_aff_bind_domain_wrapped_domain(multi, tuple) };
459 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
460 should_free_on_drop: true };
461 let err = isl_rs_ctx.last_error();
462 if err != Error::None_ {
463 let err_msg = isl_rs_ctx.last_error_msg();
464 isl_rs_ctx.reset_error();
465 return Err(LibISLError::new(err, err_msg));
466 }
467 Ok(isl_rs_result)
468 }
469
470 pub fn coalesce(self) -> Result<MultiPwAff, LibISLError> {
472 let mpa = self;
473 let isl_rs_ctx = mpa.get_ctx();
474 let mut mpa = mpa;
475 mpa.do_not_free_on_drop();
476 let mpa = mpa.ptr;
477 let isl_rs_result = unsafe { isl_multi_pw_aff_coalesce(mpa) };
478 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
479 should_free_on_drop: true };
480 let err = isl_rs_ctx.last_error();
481 if err != Error::None_ {
482 let err_msg = isl_rs_ctx.last_error_msg();
483 isl_rs_ctx.reset_error();
484 return Err(LibISLError::new(err, err_msg));
485 }
486 Ok(isl_rs_result)
487 }
488
489 pub fn copy(&self) -> Result<MultiPwAff, LibISLError> {
491 let multi = self;
492 let isl_rs_ctx = multi.get_ctx();
493 let multi = multi.ptr;
494 let isl_rs_result = unsafe { isl_multi_pw_aff_copy(multi) };
495 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
496 should_free_on_drop: true };
497 let err = isl_rs_ctx.last_error();
498 if err != Error::None_ {
499 let err_msg = isl_rs_ctx.last_error_msg();
500 isl_rs_ctx.reset_error();
501 return Err(LibISLError::new(err, err_msg));
502 }
503 Ok(isl_rs_result)
504 }
505
506 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
508 let multi = self;
509 let isl_rs_ctx = multi.get_ctx();
510 let multi = multi.ptr;
511 let type_ = type_.to_i32();
512 let isl_rs_result = unsafe { isl_multi_pw_aff_dim(multi, type_) };
513 let err = isl_rs_ctx.last_error();
514 if err != Error::None_ {
515 let err_msg = isl_rs_ctx.last_error_msg();
516 isl_rs_ctx.reset_error();
517 return Err(LibISLError::new(err, err_msg));
518 }
519 Ok(isl_rs_result)
520 }
521
522 pub fn domain(self) -> Result<Set, LibISLError> {
524 let mpa = self;
525 let isl_rs_ctx = mpa.get_ctx();
526 let mut mpa = mpa;
527 mpa.do_not_free_on_drop();
528 let mpa = mpa.ptr;
529 let isl_rs_result = unsafe { isl_multi_pw_aff_domain(mpa) };
530 let isl_rs_result = Set { ptr: isl_rs_result,
531 should_free_on_drop: true };
532 let err = isl_rs_ctx.last_error();
533 if err != Error::None_ {
534 let err_msg = isl_rs_ctx.last_error_msg();
535 isl_rs_ctx.reset_error();
536 return Err(LibISLError::new(err, err_msg));
537 }
538 Ok(isl_rs_result)
539 }
540
541 pub fn domain_reverse(self) -> Result<MultiPwAff, LibISLError> {
543 let multi = self;
544 let isl_rs_ctx = multi.get_ctx();
545 let mut multi = multi;
546 multi.do_not_free_on_drop();
547 let multi = multi.ptr;
548 let isl_rs_result = unsafe { isl_multi_pw_aff_domain_reverse(multi) };
549 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
550 should_free_on_drop: true };
551 let err = isl_rs_ctx.last_error();
552 if err != Error::None_ {
553 let err_msg = isl_rs_ctx.last_error_msg();
554 isl_rs_ctx.reset_error();
555 return Err(LibISLError::new(err, err_msg));
556 }
557 Ok(isl_rs_result)
558 }
559
560 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<MultiPwAff, LibISLError> {
562 let multi = self;
563 let isl_rs_ctx = multi.get_ctx();
564 let mut multi = multi;
565 multi.do_not_free_on_drop();
566 let multi = multi.ptr;
567 let type_ = type_.to_i32();
568 let isl_rs_result = unsafe { isl_multi_pw_aff_drop_dims(multi, type_, first, n) };
569 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
570 should_free_on_drop: true };
571 let err = isl_rs_ctx.last_error();
572 if err != Error::None_ {
573 let err_msg = isl_rs_ctx.last_error_msg();
574 isl_rs_ctx.reset_error();
575 return Err(LibISLError::new(err, err_msg));
576 }
577 Ok(isl_rs_result)
578 }
579
580 pub fn dump(&self) -> Result<(), LibISLError> {
582 let mpa = self;
583 let isl_rs_ctx = mpa.get_ctx();
584 let mpa = mpa.ptr;
585 let isl_rs_result = unsafe { isl_multi_pw_aff_dump(mpa) };
586 let err = isl_rs_ctx.last_error();
587 if err != Error::None_ {
588 let err_msg = isl_rs_ctx.last_error_msg();
589 isl_rs_ctx.reset_error();
590 return Err(LibISLError::new(err, err_msg));
591 }
592 Ok(isl_rs_result)
593 }
594
595 pub fn eq_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
597 let mpa1 = self;
598 let isl_rs_ctx = mpa1.get_ctx();
599 let mut mpa1 = mpa1;
600 mpa1.do_not_free_on_drop();
601 let mpa1 = mpa1.ptr;
602 let mut mpa2 = mpa2;
603 mpa2.do_not_free_on_drop();
604 let mpa2 = mpa2.ptr;
605 let isl_rs_result = unsafe { isl_multi_pw_aff_eq_map(mpa1, mpa2) };
606 let isl_rs_result = Map { ptr: isl_rs_result,
607 should_free_on_drop: true };
608 let err = isl_rs_ctx.last_error();
609 if err != Error::None_ {
610 let err_msg = isl_rs_ctx.last_error_msg();
611 isl_rs_ctx.reset_error();
612 return Err(LibISLError::new(err, err_msg));
613 }
614 Ok(isl_rs_result)
615 }
616
617 pub fn factor_range(self) -> Result<MultiPwAff, LibISLError> {
619 let multi = self;
620 let isl_rs_ctx = multi.get_ctx();
621 let mut multi = multi;
622 multi.do_not_free_on_drop();
623 let multi = multi.ptr;
624 let isl_rs_result = unsafe { isl_multi_pw_aff_factor_range(multi) };
625 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
626 should_free_on_drop: true };
627 let err = isl_rs_ctx.last_error();
628 if err != Error::None_ {
629 let err_msg = isl_rs_ctx.last_error_msg();
630 isl_rs_ctx.reset_error();
631 return Err(LibISLError::new(err, err_msg));
632 }
633 Ok(isl_rs_result)
634 }
635
636 pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
638 let multi = self;
639 let isl_rs_ctx = multi.get_ctx();
640 let multi = multi.ptr;
641 let type_ = type_.to_i32();
642 let id = id.ptr;
643 let isl_rs_result = unsafe { isl_multi_pw_aff_find_dim_by_id(multi, type_, id) };
644 let err = isl_rs_ctx.last_error();
645 if err != Error::None_ {
646 let err_msg = isl_rs_ctx.last_error_msg();
647 isl_rs_ctx.reset_error();
648 return Err(LibISLError::new(err, err_msg));
649 }
650 Ok(isl_rs_result)
651 }
652
653 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
655 let multi = self;
656 let isl_rs_ctx = multi.get_ctx();
657 let multi = multi.ptr;
658 let type_ = type_.to_i32();
659 let name = CString::new(name).unwrap();
660 let name = name.as_ptr();
661 let isl_rs_result = unsafe { isl_multi_pw_aff_find_dim_by_name(multi, type_, name) };
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 flat_range_product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
673 let multi1 = self;
674 let isl_rs_ctx = multi1.get_ctx();
675 let mut multi1 = multi1;
676 multi1.do_not_free_on_drop();
677 let multi1 = multi1.ptr;
678 let mut multi2 = multi2;
679 multi2.do_not_free_on_drop();
680 let multi2 = multi2.ptr;
681 let isl_rs_result = unsafe { isl_multi_pw_aff_flat_range_product(multi1, multi2) };
682 let isl_rs_result = MultiPwAff { 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 flatten_range(self) -> Result<MultiPwAff, LibISLError> {
695 let multi = self;
696 let isl_rs_ctx = multi.get_ctx();
697 let mut multi = multi;
698 multi.do_not_free_on_drop();
699 let multi = multi.ptr;
700 let isl_rs_result = unsafe { isl_multi_pw_aff_flatten_range(multi) };
701 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
702 should_free_on_drop: true };
703 let err = isl_rs_ctx.last_error();
704 if err != Error::None_ {
705 let err_msg = isl_rs_ctx.last_error_msg();
706 isl_rs_ctx.reset_error();
707 return Err(LibISLError::new(err, err_msg));
708 }
709 Ok(isl_rs_result)
710 }
711
712 pub fn free(self) -> Result<MultiPwAff, LibISLError> {
714 let multi = self;
715 let isl_rs_ctx = multi.get_ctx();
716 let mut multi = multi;
717 multi.do_not_free_on_drop();
718 let multi = multi.ptr;
719 let isl_rs_result = unsafe { isl_multi_pw_aff_free(multi) };
720 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
721 should_free_on_drop: true };
722 let err = isl_rs_ctx.last_error();
723 if err != Error::None_ {
724 let err_msg = isl_rs_ctx.last_error_msg();
725 isl_rs_ctx.reset_error();
726 return Err(LibISLError::new(err, err_msg));
727 }
728 Ok(isl_rs_result)
729 }
730
731 pub fn from_aff(aff: Aff) -> Result<MultiPwAff, LibISLError> {
733 let isl_rs_ctx = aff.get_ctx();
734 let mut aff = aff;
735 aff.do_not_free_on_drop();
736 let aff = aff.ptr;
737 let isl_rs_result = unsafe { isl_multi_pw_aff_from_aff(aff) };
738 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
739 should_free_on_drop: true };
740 let err = isl_rs_ctx.last_error();
741 if err != Error::None_ {
742 let err_msg = isl_rs_ctx.last_error_msg();
743 isl_rs_ctx.reset_error();
744 return Err(LibISLError::new(err, err_msg));
745 }
746 Ok(isl_rs_result)
747 }
748
749 pub fn from_multi_aff(ma: MultiAff) -> Result<MultiPwAff, LibISLError> {
751 let isl_rs_ctx = ma.get_ctx();
752 let mut ma = ma;
753 ma.do_not_free_on_drop();
754 let ma = ma.ptr;
755 let isl_rs_result = unsafe { isl_multi_pw_aff_from_multi_aff(ma) };
756 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
757 should_free_on_drop: true };
758 let err = isl_rs_ctx.last_error();
759 if err != Error::None_ {
760 let err_msg = isl_rs_ctx.last_error_msg();
761 isl_rs_ctx.reset_error();
762 return Err(LibISLError::new(err, err_msg));
763 }
764 Ok(isl_rs_result)
765 }
766
767 pub fn from_pw_aff(pa: PwAff) -> Result<MultiPwAff, LibISLError> {
769 let isl_rs_ctx = pa.get_ctx();
770 let mut pa = pa;
771 pa.do_not_free_on_drop();
772 let pa = pa.ptr;
773 let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_aff(pa) };
774 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
775 should_free_on_drop: true };
776 let err = isl_rs_ctx.last_error();
777 if err != Error::None_ {
778 let err_msg = isl_rs_ctx.last_error_msg();
779 isl_rs_ctx.reset_error();
780 return Err(LibISLError::new(err, err_msg));
781 }
782 Ok(isl_rs_result)
783 }
784
785 pub fn from_pw_aff_list(space: Space, list: PwAffList) -> Result<MultiPwAff, LibISLError> {
787 let isl_rs_ctx = space.get_ctx();
788 let mut space = space;
789 space.do_not_free_on_drop();
790 let space = space.ptr;
791 let mut list = list;
792 list.do_not_free_on_drop();
793 let list = list.ptr;
794 let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_aff_list(space, list) };
795 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
796 should_free_on_drop: true };
797 let err = isl_rs_ctx.last_error();
798 if err != Error::None_ {
799 let err_msg = isl_rs_ctx.last_error_msg();
800 isl_rs_ctx.reset_error();
801 return Err(LibISLError::new(err, err_msg));
802 }
803 Ok(isl_rs_result)
804 }
805
806 pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<MultiPwAff, LibISLError> {
808 let isl_rs_ctx = pma.get_ctx();
809 let mut pma = pma;
810 pma.do_not_free_on_drop();
811 let pma = pma.ptr;
812 let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_multi_aff(pma) };
813 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
814 should_free_on_drop: true };
815 let err = isl_rs_ctx.last_error();
816 if err != Error::None_ {
817 let err_msg = isl_rs_ctx.last_error_msg();
818 isl_rs_ctx.reset_error();
819 return Err(LibISLError::new(err, err_msg));
820 }
821 Ok(isl_rs_result)
822 }
823
824 pub fn from_range(self) -> Result<MultiPwAff, LibISLError> {
826 let multi = self;
827 let isl_rs_ctx = multi.get_ctx();
828 let mut multi = multi;
829 multi.do_not_free_on_drop();
830 let multi = multi.ptr;
831 let isl_rs_result = unsafe { isl_multi_pw_aff_from_range(multi) };
832 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
833 should_free_on_drop: true };
834 let err = isl_rs_ctx.last_error();
835 if err != Error::None_ {
836 let err_msg = isl_rs_ctx.last_error_msg();
837 isl_rs_ctx.reset_error();
838 return Err(LibISLError::new(err, err_msg));
839 }
840 Ok(isl_rs_result)
841 }
842
843 pub fn get_at(&self, pos: i32) -> Result<PwAff, LibISLError> {
845 let multi = self;
846 let isl_rs_ctx = multi.get_ctx();
847 let multi = multi.ptr;
848 let isl_rs_result = unsafe { isl_multi_pw_aff_get_at(multi, pos) };
849 let isl_rs_result = PwAff { ptr: isl_rs_result,
850 should_free_on_drop: true };
851 let err = isl_rs_ctx.last_error();
852 if err != Error::None_ {
853 let err_msg = isl_rs_ctx.last_error_msg();
854 isl_rs_ctx.reset_error();
855 return Err(LibISLError::new(err, err_msg));
856 }
857 Ok(isl_rs_result)
858 }
859
860 pub fn get_ctx(&self) -> Context {
862 let multi = self;
863 let multi = multi.ptr;
864 let isl_rs_result = unsafe { isl_multi_pw_aff_get_ctx(multi) };
865 let isl_rs_result = Context { ptr: isl_rs_result,
866 should_free_on_drop: false };
867 isl_rs_result
868 }
869
870 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
872 let multi = self;
873 let isl_rs_ctx = multi.get_ctx();
874 let multi = multi.ptr;
875 let type_ = type_.to_i32();
876 let isl_rs_result = unsafe { isl_multi_pw_aff_get_dim_id(multi, type_, pos) };
877 let isl_rs_result = Id { ptr: isl_rs_result,
878 should_free_on_drop: true };
879 let err = isl_rs_ctx.last_error();
880 if err != Error::None_ {
881 let err_msg = isl_rs_ctx.last_error_msg();
882 isl_rs_ctx.reset_error();
883 return Err(LibISLError::new(err, err_msg));
884 }
885 Ok(isl_rs_result)
886 }
887
888 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
890 let multi = self;
891 let isl_rs_ctx = multi.get_ctx();
892 let multi = multi.ptr;
893 let isl_rs_result = unsafe { isl_multi_pw_aff_get_domain_space(multi) };
894 let isl_rs_result = Space { ptr: isl_rs_result,
895 should_free_on_drop: true };
896 let err = isl_rs_ctx.last_error();
897 if err != Error::None_ {
898 let err_msg = isl_rs_ctx.last_error_msg();
899 isl_rs_ctx.reset_error();
900 return Err(LibISLError::new(err, err_msg));
901 }
902 Ok(isl_rs_result)
903 }
904
905 pub fn get_hash(&self) -> Result<u32, LibISLError> {
907 let mpa = self;
908 let isl_rs_ctx = mpa.get_ctx();
909 let mpa = mpa.ptr;
910 let isl_rs_result = unsafe { isl_multi_pw_aff_get_hash(mpa) };
911 let err = isl_rs_ctx.last_error();
912 if err != Error::None_ {
913 let err_msg = isl_rs_ctx.last_error_msg();
914 isl_rs_ctx.reset_error();
915 return Err(LibISLError::new(err, err_msg));
916 }
917 Ok(isl_rs_result)
918 }
919
920 pub fn get_list(&self) -> Result<PwAffList, LibISLError> {
922 let multi = self;
923 let isl_rs_ctx = multi.get_ctx();
924 let multi = multi.ptr;
925 let isl_rs_result = unsafe { isl_multi_pw_aff_get_list(multi) };
926 let isl_rs_result = PwAffList { ptr: isl_rs_result,
927 should_free_on_drop: true };
928 let err = isl_rs_ctx.last_error();
929 if err != Error::None_ {
930 let err_msg = isl_rs_ctx.last_error_msg();
931 isl_rs_ctx.reset_error();
932 return Err(LibISLError::new(err, err_msg));
933 }
934 Ok(isl_rs_result)
935 }
936
937 pub fn get_pw_aff(&self, pos: i32) -> Result<PwAff, LibISLError> {
939 let multi = self;
940 let isl_rs_ctx = multi.get_ctx();
941 let multi = multi.ptr;
942 let isl_rs_result = unsafe { isl_multi_pw_aff_get_pw_aff(multi, pos) };
943 let isl_rs_result = PwAff { ptr: isl_rs_result,
944 should_free_on_drop: true };
945 let err = isl_rs_ctx.last_error();
946 if err != Error::None_ {
947 let err_msg = isl_rs_ctx.last_error_msg();
948 isl_rs_ctx.reset_error();
949 return Err(LibISLError::new(err, err_msg));
950 }
951 Ok(isl_rs_result)
952 }
953
954 pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
956 let multi = self;
957 let isl_rs_ctx = multi.get_ctx();
958 let multi = multi.ptr;
959 let isl_rs_result = unsafe { isl_multi_pw_aff_get_range_tuple_id(multi) };
960 let isl_rs_result = Id { ptr: isl_rs_result,
961 should_free_on_drop: true };
962 let err = isl_rs_ctx.last_error();
963 if err != Error::None_ {
964 let err_msg = isl_rs_ctx.last_error_msg();
965 isl_rs_ctx.reset_error();
966 return Err(LibISLError::new(err, err_msg));
967 }
968 Ok(isl_rs_result)
969 }
970
971 pub fn get_space(&self) -> Result<Space, LibISLError> {
973 let multi = self;
974 let isl_rs_ctx = multi.get_ctx();
975 let multi = multi.ptr;
976 let isl_rs_result = unsafe { isl_multi_pw_aff_get_space(multi) };
977 let isl_rs_result = Space { ptr: isl_rs_result,
978 should_free_on_drop: true };
979 let err = isl_rs_ctx.last_error();
980 if err != Error::None_ {
981 let err_msg = isl_rs_ctx.last_error_msg();
982 isl_rs_ctx.reset_error();
983 return Err(LibISLError::new(err, err_msg));
984 }
985 Ok(isl_rs_result)
986 }
987
988 pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
990 let multi = self;
991 let isl_rs_ctx = multi.get_ctx();
992 let multi = multi.ptr;
993 let type_ = type_.to_i32();
994 let isl_rs_result = unsafe { isl_multi_pw_aff_get_tuple_id(multi, type_) };
995 let isl_rs_result = Id { ptr: isl_rs_result,
996 should_free_on_drop: true };
997 let err = isl_rs_ctx.last_error();
998 if err != Error::None_ {
999 let err_msg = isl_rs_ctx.last_error_msg();
1000 isl_rs_ctx.reset_error();
1001 return Err(LibISLError::new(err, err_msg));
1002 }
1003 Ok(isl_rs_result)
1004 }
1005
1006 pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
1008 let multi = self;
1009 let isl_rs_ctx = multi.get_ctx();
1010 let multi = multi.ptr;
1011 let type_ = type_.to_i32();
1012 let isl_rs_result = unsafe { isl_multi_pw_aff_get_tuple_name(multi, type_) };
1013 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1014 let isl_rs_result = isl_rs_result.to_str().unwrap();
1015 let err = isl_rs_ctx.last_error();
1016 if err != Error::None_ {
1017 let err_msg = isl_rs_ctx.last_error_msg();
1018 isl_rs_ctx.reset_error();
1019 return Err(LibISLError::new(err, err_msg));
1020 }
1021 Ok(isl_rs_result)
1022 }
1023
1024 pub fn gist(self, set: Set) -> Result<MultiPwAff, LibISLError> {
1026 let mpa = self;
1027 let isl_rs_ctx = mpa.get_ctx();
1028 let mut mpa = mpa;
1029 mpa.do_not_free_on_drop();
1030 let mpa = mpa.ptr;
1031 let mut set = set;
1032 set.do_not_free_on_drop();
1033 let set = set.ptr;
1034 let isl_rs_result = unsafe { isl_multi_pw_aff_gist(mpa, set) };
1035 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1036 should_free_on_drop: true };
1037 let err = isl_rs_ctx.last_error();
1038 if err != Error::None_ {
1039 let err_msg = isl_rs_ctx.last_error_msg();
1040 isl_rs_ctx.reset_error();
1041 return Err(LibISLError::new(err, err_msg));
1042 }
1043 Ok(isl_rs_result)
1044 }
1045
1046 pub fn gist_params(self, set: Set) -> Result<MultiPwAff, LibISLError> {
1048 let mpa = self;
1049 let isl_rs_ctx = mpa.get_ctx();
1050 let mut mpa = mpa;
1051 mpa.do_not_free_on_drop();
1052 let mpa = mpa.ptr;
1053 let mut set = set;
1054 set.do_not_free_on_drop();
1055 let set = set.ptr;
1056 let isl_rs_result = unsafe { isl_multi_pw_aff_gist_params(mpa, set) };
1057 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1058 should_free_on_drop: true };
1059 let err = isl_rs_ctx.last_error();
1060 if err != Error::None_ {
1061 let err_msg = isl_rs_ctx.last_error_msg();
1062 isl_rs_ctx.reset_error();
1063 return Err(LibISLError::new(err, err_msg));
1064 }
1065 Ok(isl_rs_result)
1066 }
1067
1068 pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
1070 let multi = self;
1071 let isl_rs_ctx = multi.get_ctx();
1072 let multi = multi.ptr;
1073 let isl_rs_result = unsafe { isl_multi_pw_aff_has_range_tuple_id(multi) };
1074 let isl_rs_result = match isl_rs_result {
1075 0 => false,
1076 1 => true,
1077 _ => {
1078 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1079 }
1080 };
1081 let err = isl_rs_ctx.last_error();
1082 if err != Error::None_ {
1083 let err_msg = isl_rs_ctx.last_error_msg();
1084 isl_rs_ctx.reset_error();
1085 return Err(LibISLError::new(err, err_msg));
1086 }
1087 Ok(isl_rs_result)
1088 }
1089
1090 pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1092 let multi = self;
1093 let isl_rs_ctx = multi.get_ctx();
1094 let multi = multi.ptr;
1095 let type_ = type_.to_i32();
1096 let isl_rs_result = unsafe { isl_multi_pw_aff_has_tuple_id(multi, type_) };
1097 let isl_rs_result = match isl_rs_result {
1098 0 => false,
1099 1 => true,
1100 _ => {
1101 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1102 }
1103 };
1104 let err = isl_rs_ctx.last_error();
1105 if err != Error::None_ {
1106 let err_msg = isl_rs_ctx.last_error_msg();
1107 isl_rs_ctx.reset_error();
1108 return Err(LibISLError::new(err, err_msg));
1109 }
1110 Ok(isl_rs_result)
1111 }
1112
1113 pub fn identity(space: Space) -> Result<MultiPwAff, LibISLError> {
1115 let isl_rs_ctx = space.get_ctx();
1116 let mut space = space;
1117 space.do_not_free_on_drop();
1118 let space = space.ptr;
1119 let isl_rs_result = unsafe { isl_multi_pw_aff_identity(space) };
1120 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1121 should_free_on_drop: true };
1122 let err = isl_rs_ctx.last_error();
1123 if err != Error::None_ {
1124 let err_msg = isl_rs_ctx.last_error_msg();
1125 isl_rs_ctx.reset_error();
1126 return Err(LibISLError::new(err, err_msg));
1127 }
1128 Ok(isl_rs_result)
1129 }
1130
1131 pub fn identity_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
1133 let multi = self;
1134 let isl_rs_ctx = multi.get_ctx();
1135 let mut multi = multi;
1136 multi.do_not_free_on_drop();
1137 let multi = multi.ptr;
1138 let isl_rs_result = unsafe { isl_multi_pw_aff_identity_multi_pw_aff(multi) };
1139 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1140 should_free_on_drop: true };
1141 let err = isl_rs_ctx.last_error();
1142 if err != Error::None_ {
1143 let err_msg = isl_rs_ctx.last_error_msg();
1144 isl_rs_ctx.reset_error();
1145 return Err(LibISLError::new(err, err_msg));
1146 }
1147 Ok(isl_rs_result)
1148 }
1149
1150 pub fn identity_on_domain_space(space: Space) -> Result<MultiPwAff, LibISLError> {
1152 let isl_rs_ctx = space.get_ctx();
1153 let mut space = space;
1154 space.do_not_free_on_drop();
1155 let space = space.ptr;
1156 let isl_rs_result = unsafe { isl_multi_pw_aff_identity_on_domain_space(space) };
1157 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1158 should_free_on_drop: true };
1159 let err = isl_rs_ctx.last_error();
1160 if err != Error::None_ {
1161 let err_msg = isl_rs_ctx.last_error_msg();
1162 isl_rs_ctx.reset_error();
1163 return Err(LibISLError::new(err, err_msg));
1164 }
1165 Ok(isl_rs_result)
1166 }
1167
1168 pub fn insert_dims(self, type_: DimType, first: u32, n: u32)
1170 -> Result<MultiPwAff, LibISLError> {
1171 let multi = self;
1172 let isl_rs_ctx = multi.get_ctx();
1173 let mut multi = multi;
1174 multi.do_not_free_on_drop();
1175 let multi = multi.ptr;
1176 let type_ = type_.to_i32();
1177 let isl_rs_result = unsafe { isl_multi_pw_aff_insert_dims(multi, type_, first, n) };
1178 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1179 should_free_on_drop: true };
1180 let err = isl_rs_ctx.last_error();
1181 if err != Error::None_ {
1182 let err_msg = isl_rs_ctx.last_error_msg();
1183 isl_rs_ctx.reset_error();
1184 return Err(LibISLError::new(err, err_msg));
1185 }
1186 Ok(isl_rs_result)
1187 }
1188
1189 pub fn insert_domain(self, domain: Space) -> Result<MultiPwAff, LibISLError> {
1191 let multi = self;
1192 let isl_rs_ctx = multi.get_ctx();
1193 let mut multi = multi;
1194 multi.do_not_free_on_drop();
1195 let multi = multi.ptr;
1196 let mut domain = domain;
1197 domain.do_not_free_on_drop();
1198 let domain = domain.ptr;
1199 let isl_rs_result = unsafe { isl_multi_pw_aff_insert_domain(multi, domain) };
1200 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1201 should_free_on_drop: true };
1202 let err = isl_rs_ctx.last_error();
1203 if err != Error::None_ {
1204 let err_msg = isl_rs_ctx.last_error_msg();
1205 isl_rs_ctx.reset_error();
1206 return Err(LibISLError::new(err, err_msg));
1207 }
1208 Ok(isl_rs_result)
1209 }
1210
1211 pub fn intersect_domain(self, domain: Set) -> Result<MultiPwAff, LibISLError> {
1213 let mpa = self;
1214 let isl_rs_ctx = mpa.get_ctx();
1215 let mut mpa = mpa;
1216 mpa.do_not_free_on_drop();
1217 let mpa = mpa.ptr;
1218 let mut domain = domain;
1219 domain.do_not_free_on_drop();
1220 let domain = domain.ptr;
1221 let isl_rs_result = unsafe { isl_multi_pw_aff_intersect_domain(mpa, domain) };
1222 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1223 should_free_on_drop: true };
1224 let err = isl_rs_ctx.last_error();
1225 if err != Error::None_ {
1226 let err_msg = isl_rs_ctx.last_error_msg();
1227 isl_rs_ctx.reset_error();
1228 return Err(LibISLError::new(err, err_msg));
1229 }
1230 Ok(isl_rs_result)
1231 }
1232
1233 pub fn intersect_params(self, set: Set) -> Result<MultiPwAff, LibISLError> {
1235 let mpa = self;
1236 let isl_rs_ctx = mpa.get_ctx();
1237 let mut mpa = mpa;
1238 mpa.do_not_free_on_drop();
1239 let mpa = mpa.ptr;
1240 let mut set = set;
1241 set.do_not_free_on_drop();
1242 let set = set.ptr;
1243 let isl_rs_result = unsafe { isl_multi_pw_aff_intersect_params(mpa, set) };
1244 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1245 should_free_on_drop: true };
1246 let err = isl_rs_ctx.last_error();
1247 if err != Error::None_ {
1248 let err_msg = isl_rs_ctx.last_error_msg();
1249 isl_rs_ctx.reset_error();
1250 return Err(LibISLError::new(err, err_msg));
1251 }
1252 Ok(isl_rs_result)
1253 }
1254
1255 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1257 let multi = self;
1258 let isl_rs_ctx = multi.get_ctx();
1259 let multi = multi.ptr;
1260 let type_ = type_.to_i32();
1261 let isl_rs_result = unsafe { isl_multi_pw_aff_involves_dims(multi, type_, first, n) };
1262 let isl_rs_result = match isl_rs_result {
1263 0 => false,
1264 1 => true,
1265 _ => {
1266 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1267 }
1268 };
1269 let err = isl_rs_ctx.last_error();
1270 if err != Error::None_ {
1271 let err_msg = isl_rs_ctx.last_error_msg();
1272 isl_rs_ctx.reset_error();
1273 return Err(LibISLError::new(err, err_msg));
1274 }
1275 Ok(isl_rs_result)
1276 }
1277
1278 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1280 let multi = self;
1281 let isl_rs_ctx = multi.get_ctx();
1282 let multi = multi.ptr;
1283 let isl_rs_result = unsafe { isl_multi_pw_aff_involves_nan(multi) };
1284 let isl_rs_result = match isl_rs_result {
1285 0 => false,
1286 1 => true,
1287 _ => {
1288 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1289 }
1290 };
1291 let err = isl_rs_ctx.last_error();
1292 if err != Error::None_ {
1293 let err_msg = isl_rs_ctx.last_error_msg();
1294 isl_rs_ctx.reset_error();
1295 return Err(LibISLError::new(err, err_msg));
1296 }
1297 Ok(isl_rs_result)
1298 }
1299
1300 pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1302 let multi = self;
1303 let isl_rs_ctx = multi.get_ctx();
1304 let multi = multi.ptr;
1305 let id = id.ptr;
1306 let isl_rs_result = unsafe { isl_multi_pw_aff_involves_param_id(multi, id) };
1307 let isl_rs_result = match isl_rs_result {
1308 0 => false,
1309 1 => true,
1310 _ => {
1311 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1312 }
1313 };
1314 let err = isl_rs_ctx.last_error();
1315 if err != Error::None_ {
1316 let err_msg = isl_rs_ctx.last_error_msg();
1317 isl_rs_ctx.reset_error();
1318 return Err(LibISLError::new(err, err_msg));
1319 }
1320 Ok(isl_rs_result)
1321 }
1322
1323 pub fn involves_param_id_list(&self, list: &IdList) -> Result<bool, LibISLError> {
1325 let multi = self;
1326 let isl_rs_ctx = multi.get_ctx();
1327 let multi = multi.ptr;
1328 let list = list.ptr;
1329 let isl_rs_result = unsafe { isl_multi_pw_aff_involves_param_id_list(multi, list) };
1330 let isl_rs_result = match isl_rs_result {
1331 0 => false,
1332 1 => true,
1333 _ => {
1334 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1335 }
1336 };
1337 let err = isl_rs_ctx.last_error();
1338 if err != Error::None_ {
1339 let err_msg = isl_rs_ctx.last_error_msg();
1340 isl_rs_ctx.reset_error();
1341 return Err(LibISLError::new(err, err_msg));
1342 }
1343 Ok(isl_rs_result)
1344 }
1345
1346 pub fn is_cst(&self) -> Result<bool, LibISLError> {
1348 let mpa = self;
1349 let isl_rs_ctx = mpa.get_ctx();
1350 let mpa = mpa.ptr;
1351 let isl_rs_result = unsafe { isl_multi_pw_aff_is_cst(mpa) };
1352 let isl_rs_result = match isl_rs_result {
1353 0 => false,
1354 1 => true,
1355 _ => {
1356 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1357 }
1358 };
1359 let err = isl_rs_ctx.last_error();
1360 if err != Error::None_ {
1361 let err_msg = isl_rs_ctx.last_error_msg();
1362 isl_rs_ctx.reset_error();
1363 return Err(LibISLError::new(err, err_msg));
1364 }
1365 Ok(isl_rs_result)
1366 }
1367
1368 pub fn is_equal(&self, mpa2: &MultiPwAff) -> Result<bool, LibISLError> {
1370 let mpa1 = self;
1371 let isl_rs_ctx = mpa1.get_ctx();
1372 let mpa1 = mpa1.ptr;
1373 let mpa2 = mpa2.ptr;
1374 let isl_rs_result = unsafe { isl_multi_pw_aff_is_equal(mpa1, mpa2) };
1375 let isl_rs_result = match isl_rs_result {
1376 0 => false,
1377 1 => true,
1378 _ => {
1379 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1380 }
1381 };
1382 let err = isl_rs_ctx.last_error();
1383 if err != Error::None_ {
1384 let err_msg = isl_rs_ctx.last_error_msg();
1385 isl_rs_ctx.reset_error();
1386 return Err(LibISLError::new(err, err_msg));
1387 }
1388 Ok(isl_rs_result)
1389 }
1390
1391 pub fn isa_multi_aff(&self) -> Result<bool, LibISLError> {
1393 let mpa = self;
1394 let isl_rs_ctx = mpa.get_ctx();
1395 let mpa = mpa.ptr;
1396 let isl_rs_result = unsafe { isl_multi_pw_aff_isa_multi_aff(mpa) };
1397 let isl_rs_result = match isl_rs_result {
1398 0 => false,
1399 1 => true,
1400 _ => {
1401 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1402 }
1403 };
1404 let err = isl_rs_ctx.last_error();
1405 if err != Error::None_ {
1406 let err_msg = isl_rs_ctx.last_error_msg();
1407 isl_rs_ctx.reset_error();
1408 return Err(LibISLError::new(err, err_msg));
1409 }
1410 Ok(isl_rs_result)
1411 }
1412
1413 pub fn lex_ge_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1415 let mpa1 = self;
1416 let isl_rs_ctx = mpa1.get_ctx();
1417 let mut mpa1 = mpa1;
1418 mpa1.do_not_free_on_drop();
1419 let mpa1 = mpa1.ptr;
1420 let mut mpa2 = mpa2;
1421 mpa2.do_not_free_on_drop();
1422 let mpa2 = mpa2.ptr;
1423 let isl_rs_result = unsafe { isl_multi_pw_aff_lex_ge_map(mpa1, mpa2) };
1424 let isl_rs_result = Map { ptr: isl_rs_result,
1425 should_free_on_drop: true };
1426 let err = isl_rs_ctx.last_error();
1427 if err != Error::None_ {
1428 let err_msg = isl_rs_ctx.last_error_msg();
1429 isl_rs_ctx.reset_error();
1430 return Err(LibISLError::new(err, err_msg));
1431 }
1432 Ok(isl_rs_result)
1433 }
1434
1435 pub fn lex_gt_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1437 let mpa1 = self;
1438 let isl_rs_ctx = mpa1.get_ctx();
1439 let mut mpa1 = mpa1;
1440 mpa1.do_not_free_on_drop();
1441 let mpa1 = mpa1.ptr;
1442 let mut mpa2 = mpa2;
1443 mpa2.do_not_free_on_drop();
1444 let mpa2 = mpa2.ptr;
1445 let isl_rs_result = unsafe { isl_multi_pw_aff_lex_gt_map(mpa1, mpa2) };
1446 let isl_rs_result = Map { ptr: isl_rs_result,
1447 should_free_on_drop: true };
1448 let err = isl_rs_ctx.last_error();
1449 if err != Error::None_ {
1450 let err_msg = isl_rs_ctx.last_error_msg();
1451 isl_rs_ctx.reset_error();
1452 return Err(LibISLError::new(err, err_msg));
1453 }
1454 Ok(isl_rs_result)
1455 }
1456
1457 pub fn lex_le_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1459 let mpa1 = self;
1460 let isl_rs_ctx = mpa1.get_ctx();
1461 let mut mpa1 = mpa1;
1462 mpa1.do_not_free_on_drop();
1463 let mpa1 = mpa1.ptr;
1464 let mut mpa2 = mpa2;
1465 mpa2.do_not_free_on_drop();
1466 let mpa2 = mpa2.ptr;
1467 let isl_rs_result = unsafe { isl_multi_pw_aff_lex_le_map(mpa1, mpa2) };
1468 let isl_rs_result = Map { ptr: isl_rs_result,
1469 should_free_on_drop: true };
1470 let err = isl_rs_ctx.last_error();
1471 if err != Error::None_ {
1472 let err_msg = isl_rs_ctx.last_error_msg();
1473 isl_rs_ctx.reset_error();
1474 return Err(LibISLError::new(err, err_msg));
1475 }
1476 Ok(isl_rs_result)
1477 }
1478
1479 pub fn lex_lt_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1481 let mpa1 = self;
1482 let isl_rs_ctx = mpa1.get_ctx();
1483 let mut mpa1 = mpa1;
1484 mpa1.do_not_free_on_drop();
1485 let mpa1 = mpa1.ptr;
1486 let mut mpa2 = mpa2;
1487 mpa2.do_not_free_on_drop();
1488 let mpa2 = mpa2.ptr;
1489 let isl_rs_result = unsafe { isl_multi_pw_aff_lex_lt_map(mpa1, mpa2) };
1490 let isl_rs_result = Map { ptr: isl_rs_result,
1491 should_free_on_drop: true };
1492 let err = isl_rs_ctx.last_error();
1493 if err != Error::None_ {
1494 let err_msg = isl_rs_ctx.last_error_msg();
1495 isl_rs_ctx.reset_error();
1496 return Err(LibISLError::new(err, err_msg));
1497 }
1498 Ok(isl_rs_result)
1499 }
1500
1501 pub fn max(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1503 let multi1 = self;
1504 let isl_rs_ctx = multi1.get_ctx();
1505 let mut multi1 = multi1;
1506 multi1.do_not_free_on_drop();
1507 let multi1 = multi1.ptr;
1508 let mut multi2 = multi2;
1509 multi2.do_not_free_on_drop();
1510 let multi2 = multi2.ptr;
1511 let isl_rs_result = unsafe { isl_multi_pw_aff_max(multi1, multi2) };
1512 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1513 should_free_on_drop: true };
1514 let err = isl_rs_ctx.last_error();
1515 if err != Error::None_ {
1516 let err_msg = isl_rs_ctx.last_error_msg();
1517 isl_rs_ctx.reset_error();
1518 return Err(LibISLError::new(err, err_msg));
1519 }
1520 Ok(isl_rs_result)
1521 }
1522
1523 pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1525 let mpa = self;
1526 let isl_rs_ctx = mpa.get_ctx();
1527 let mut mpa = mpa;
1528 mpa.do_not_free_on_drop();
1529 let mpa = mpa.ptr;
1530 let isl_rs_result = unsafe { isl_multi_pw_aff_max_multi_val(mpa) };
1531 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1532 should_free_on_drop: true };
1533 let err = isl_rs_ctx.last_error();
1534 if err != Error::None_ {
1535 let err_msg = isl_rs_ctx.last_error_msg();
1536 isl_rs_ctx.reset_error();
1537 return Err(LibISLError::new(err, err_msg));
1538 }
1539 Ok(isl_rs_result)
1540 }
1541
1542 pub fn min(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1544 let multi1 = self;
1545 let isl_rs_ctx = multi1.get_ctx();
1546 let mut multi1 = multi1;
1547 multi1.do_not_free_on_drop();
1548 let multi1 = multi1.ptr;
1549 let mut multi2 = multi2;
1550 multi2.do_not_free_on_drop();
1551 let multi2 = multi2.ptr;
1552 let isl_rs_result = unsafe { isl_multi_pw_aff_min(multi1, multi2) };
1553 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1554 should_free_on_drop: true };
1555 let err = isl_rs_ctx.last_error();
1556 if err != Error::None_ {
1557 let err_msg = isl_rs_ctx.last_error_msg();
1558 isl_rs_ctx.reset_error();
1559 return Err(LibISLError::new(err, err_msg));
1560 }
1561 Ok(isl_rs_result)
1562 }
1563
1564 pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1566 let mpa = self;
1567 let isl_rs_ctx = mpa.get_ctx();
1568 let mut mpa = mpa;
1569 mpa.do_not_free_on_drop();
1570 let mpa = mpa.ptr;
1571 let isl_rs_result = unsafe { isl_multi_pw_aff_min_multi_val(mpa) };
1572 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1573 should_free_on_drop: true };
1574 let err = isl_rs_ctx.last_error();
1575 if err != Error::None_ {
1576 let err_msg = isl_rs_ctx.last_error_msg();
1577 isl_rs_ctx.reset_error();
1578 return Err(LibISLError::new(err, err_msg));
1579 }
1580 Ok(isl_rs_result)
1581 }
1582
1583 pub fn mod_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1585 let multi = self;
1586 let isl_rs_ctx = multi.get_ctx();
1587 let mut multi = multi;
1588 multi.do_not_free_on_drop();
1589 let multi = multi.ptr;
1590 let mut mv = mv;
1591 mv.do_not_free_on_drop();
1592 let mv = mv.ptr;
1593 let isl_rs_result = unsafe { isl_multi_pw_aff_mod_multi_val(multi, mv) };
1594 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1595 should_free_on_drop: true };
1596 let err = isl_rs_ctx.last_error();
1597 if err != Error::None_ {
1598 let err_msg = isl_rs_ctx.last_error_msg();
1599 isl_rs_ctx.reset_error();
1600 return Err(LibISLError::new(err, err_msg));
1601 }
1602 Ok(isl_rs_result)
1603 }
1604
1605 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1607 n: u32)
1608 -> Result<MultiPwAff, LibISLError> {
1609 let pma = self;
1610 let isl_rs_ctx = pma.get_ctx();
1611 let mut pma = pma;
1612 pma.do_not_free_on_drop();
1613 let pma = pma.ptr;
1614 let dst_type = dst_type.to_i32();
1615 let src_type = src_type.to_i32();
1616 let isl_rs_result =
1617 unsafe { isl_multi_pw_aff_move_dims(pma, dst_type, dst_pos, src_type, src_pos, n) };
1618 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1619 should_free_on_drop: true };
1620 let err = isl_rs_ctx.last_error();
1621 if err != Error::None_ {
1622 let err_msg = isl_rs_ctx.last_error_msg();
1623 isl_rs_ctx.reset_error();
1624 return Err(LibISLError::new(err, err_msg));
1625 }
1626 Ok(isl_rs_result)
1627 }
1628
1629 pub fn neg(self) -> Result<MultiPwAff, LibISLError> {
1631 let multi = self;
1632 let isl_rs_ctx = multi.get_ctx();
1633 let mut multi = multi;
1634 multi.do_not_free_on_drop();
1635 let multi = multi.ptr;
1636 let isl_rs_result = unsafe { isl_multi_pw_aff_neg(multi) };
1637 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1638 should_free_on_drop: true };
1639 let err = isl_rs_ctx.last_error();
1640 if err != Error::None_ {
1641 let err_msg = isl_rs_ctx.last_error_msg();
1642 isl_rs_ctx.reset_error();
1643 return Err(LibISLError::new(err, err_msg));
1644 }
1645 Ok(isl_rs_result)
1646 }
1647
1648 pub fn plain_is_equal(&self, multi2: &MultiPwAff) -> Result<bool, LibISLError> {
1650 let multi1 = self;
1651 let isl_rs_ctx = multi1.get_ctx();
1652 let multi1 = multi1.ptr;
1653 let multi2 = multi2.ptr;
1654 let isl_rs_result = unsafe { isl_multi_pw_aff_plain_is_equal(multi1, multi2) };
1655 let isl_rs_result = match isl_rs_result {
1656 0 => false,
1657 1 => true,
1658 _ => {
1659 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1660 }
1661 };
1662 let err = isl_rs_ctx.last_error();
1663 if err != Error::None_ {
1664 let err_msg = isl_rs_ctx.last_error_msg();
1665 isl_rs_ctx.reset_error();
1666 return Err(LibISLError::new(err, err_msg));
1667 }
1668 Ok(isl_rs_result)
1669 }
1670
1671 pub fn product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1673 let multi1 = self;
1674 let isl_rs_ctx = multi1.get_ctx();
1675 let mut multi1 = multi1;
1676 multi1.do_not_free_on_drop();
1677 let multi1 = multi1.ptr;
1678 let mut multi2 = multi2;
1679 multi2.do_not_free_on_drop();
1680 let multi2 = multi2.ptr;
1681 let isl_rs_result = unsafe { isl_multi_pw_aff_product(multi1, multi2) };
1682 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1683 should_free_on_drop: true };
1684 let err = isl_rs_ctx.last_error();
1685 if err != Error::None_ {
1686 let err_msg = isl_rs_ctx.last_error_msg();
1687 isl_rs_ctx.reset_error();
1688 return Err(LibISLError::new(err, err_msg));
1689 }
1690 Ok(isl_rs_result)
1691 }
1692
1693 pub fn project_domain_on_params(self) -> Result<MultiPwAff, LibISLError> {
1695 let multi = self;
1696 let isl_rs_ctx = multi.get_ctx();
1697 let mut multi = multi;
1698 multi.do_not_free_on_drop();
1699 let multi = multi.ptr;
1700 let isl_rs_result = unsafe { isl_multi_pw_aff_project_domain_on_params(multi) };
1701 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1702 should_free_on_drop: true };
1703 let err = isl_rs_ctx.last_error();
1704 if err != Error::None_ {
1705 let err_msg = isl_rs_ctx.last_error_msg();
1706 isl_rs_ctx.reset_error();
1707 return Err(LibISLError::new(err, err_msg));
1708 }
1709 Ok(isl_rs_result)
1710 }
1711
1712 pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<MultiPwAff, LibISLError> {
1714 let mpa = self;
1715 let isl_rs_ctx = mpa.get_ctx();
1716 let mut mpa = mpa;
1717 mpa.do_not_free_on_drop();
1718 let mpa = mpa.ptr;
1719 let mut ma = ma;
1720 ma.do_not_free_on_drop();
1721 let ma = ma.ptr;
1722 let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_multi_aff(mpa, ma) };
1723 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1724 should_free_on_drop: true };
1725 let err = isl_rs_ctx.last_error();
1726 if err != Error::None_ {
1727 let err_msg = isl_rs_ctx.last_error_msg();
1728 isl_rs_ctx.reset_error();
1729 return Err(LibISLError::new(err, err_msg));
1730 }
1731 Ok(isl_rs_result)
1732 }
1733
1734 pub fn pullback_multi_pw_aff(self, mpa2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1736 let mpa1 = self;
1737 let isl_rs_ctx = mpa1.get_ctx();
1738 let mut mpa1 = mpa1;
1739 mpa1.do_not_free_on_drop();
1740 let mpa1 = mpa1.ptr;
1741 let mut mpa2 = mpa2;
1742 mpa2.do_not_free_on_drop();
1743 let mpa2 = mpa2.ptr;
1744 let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_multi_pw_aff(mpa1, mpa2) };
1745 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1746 should_free_on_drop: true };
1747 let err = isl_rs_ctx.last_error();
1748 if err != Error::None_ {
1749 let err_msg = isl_rs_ctx.last_error_msg();
1750 isl_rs_ctx.reset_error();
1751 return Err(LibISLError::new(err, err_msg));
1752 }
1753 Ok(isl_rs_result)
1754 }
1755
1756 pub fn pullback_pw_multi_aff(self, pma: PwMultiAff) -> Result<MultiPwAff, LibISLError> {
1758 let mpa = self;
1759 let isl_rs_ctx = mpa.get_ctx();
1760 let mut mpa = mpa;
1761 mpa.do_not_free_on_drop();
1762 let mpa = mpa.ptr;
1763 let mut pma = pma;
1764 pma.do_not_free_on_drop();
1765 let pma = pma.ptr;
1766 let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_pw_multi_aff(mpa, pma) };
1767 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1768 should_free_on_drop: true };
1769 let err = isl_rs_ctx.last_error();
1770 if err != Error::None_ {
1771 let err_msg = isl_rs_ctx.last_error_msg();
1772 isl_rs_ctx.reset_error();
1773 return Err(LibISLError::new(err, err_msg));
1774 }
1775 Ok(isl_rs_result)
1776 }
1777
1778 pub fn range_factor_domain(self) -> Result<MultiPwAff, LibISLError> {
1780 let multi = self;
1781 let isl_rs_ctx = multi.get_ctx();
1782 let mut multi = multi;
1783 multi.do_not_free_on_drop();
1784 let multi = multi.ptr;
1785 let isl_rs_result = unsafe { isl_multi_pw_aff_range_factor_domain(multi) };
1786 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1787 should_free_on_drop: true };
1788 let err = isl_rs_ctx.last_error();
1789 if err != Error::None_ {
1790 let err_msg = isl_rs_ctx.last_error_msg();
1791 isl_rs_ctx.reset_error();
1792 return Err(LibISLError::new(err, err_msg));
1793 }
1794 Ok(isl_rs_result)
1795 }
1796
1797 pub fn range_factor_range(self) -> Result<MultiPwAff, LibISLError> {
1799 let multi = self;
1800 let isl_rs_ctx = multi.get_ctx();
1801 let mut multi = multi;
1802 multi.do_not_free_on_drop();
1803 let multi = multi.ptr;
1804 let isl_rs_result = unsafe { isl_multi_pw_aff_range_factor_range(multi) };
1805 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1806 should_free_on_drop: true };
1807 let err = isl_rs_ctx.last_error();
1808 if err != Error::None_ {
1809 let err_msg = isl_rs_ctx.last_error_msg();
1810 isl_rs_ctx.reset_error();
1811 return Err(LibISLError::new(err, err_msg));
1812 }
1813 Ok(isl_rs_result)
1814 }
1815
1816 pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
1818 let multi = self;
1819 let isl_rs_ctx = multi.get_ctx();
1820 let multi = multi.ptr;
1821 let isl_rs_result = unsafe { isl_multi_pw_aff_range_is_wrapping(multi) };
1822 let isl_rs_result = match isl_rs_result {
1823 0 => false,
1824 1 => true,
1825 _ => {
1826 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1827 }
1828 };
1829 let err = isl_rs_ctx.last_error();
1830 if err != Error::None_ {
1831 let err_msg = isl_rs_ctx.last_error_msg();
1832 isl_rs_ctx.reset_error();
1833 return Err(LibISLError::new(err, err_msg));
1834 }
1835 Ok(isl_rs_result)
1836 }
1837
1838 pub fn range_product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1840 let multi1 = self;
1841 let isl_rs_ctx = multi1.get_ctx();
1842 let mut multi1 = multi1;
1843 multi1.do_not_free_on_drop();
1844 let multi1 = multi1.ptr;
1845 let mut multi2 = multi2;
1846 multi2.do_not_free_on_drop();
1847 let multi2 = multi2.ptr;
1848 let isl_rs_result = unsafe { isl_multi_pw_aff_range_product(multi1, multi2) };
1849 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1850 should_free_on_drop: true };
1851 let err = isl_rs_ctx.last_error();
1852 if err != Error::None_ {
1853 let err_msg = isl_rs_ctx.last_error_msg();
1854 isl_rs_ctx.reset_error();
1855 return Err(LibISLError::new(err, err_msg));
1856 }
1857 Ok(isl_rs_result)
1858 }
1859
1860 pub fn range_splice(self, pos: u32, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1862 let multi1 = self;
1863 let isl_rs_ctx = multi1.get_ctx();
1864 let mut multi1 = multi1;
1865 multi1.do_not_free_on_drop();
1866 let multi1 = multi1.ptr;
1867 let mut multi2 = multi2;
1868 multi2.do_not_free_on_drop();
1869 let multi2 = multi2.ptr;
1870 let isl_rs_result = unsafe { isl_multi_pw_aff_range_splice(multi1, pos, multi2) };
1871 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1872 should_free_on_drop: true };
1873 let err = isl_rs_ctx.last_error();
1874 if err != Error::None_ {
1875 let err_msg = isl_rs_ctx.last_error_msg();
1876 isl_rs_ctx.reset_error();
1877 return Err(LibISLError::new(err, err_msg));
1878 }
1879 Ok(isl_rs_result)
1880 }
1881
1882 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<MultiPwAff, LibISLError> {
1884 let isl_rs_ctx = Context { ptr: ctx.ptr,
1885 should_free_on_drop: false };
1886 let ctx = ctx.ptr;
1887 let str_ = CString::new(str_).unwrap();
1888 let str_ = str_.as_ptr();
1889 let isl_rs_result = unsafe { isl_multi_pw_aff_read_from_str(ctx, str_) };
1890 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1891 should_free_on_drop: true };
1892 let err = isl_rs_ctx.last_error();
1893 if err != Error::None_ {
1894 let err_msg = isl_rs_ctx.last_error_msg();
1895 isl_rs_ctx.reset_error();
1896 return Err(LibISLError::new(err, err_msg));
1897 }
1898 Ok(isl_rs_result)
1899 }
1900
1901 pub fn reset_range_tuple_id(self) -> Result<MultiPwAff, LibISLError> {
1903 let multi = self;
1904 let isl_rs_ctx = multi.get_ctx();
1905 let mut multi = multi;
1906 multi.do_not_free_on_drop();
1907 let multi = multi.ptr;
1908 let isl_rs_result = unsafe { isl_multi_pw_aff_reset_range_tuple_id(multi) };
1909 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1910 should_free_on_drop: true };
1911 let err = isl_rs_ctx.last_error();
1912 if err != Error::None_ {
1913 let err_msg = isl_rs_ctx.last_error_msg();
1914 isl_rs_ctx.reset_error();
1915 return Err(LibISLError::new(err, err_msg));
1916 }
1917 Ok(isl_rs_result)
1918 }
1919
1920 pub fn reset_tuple_id(self, type_: DimType) -> Result<MultiPwAff, LibISLError> {
1922 let multi = self;
1923 let isl_rs_ctx = multi.get_ctx();
1924 let mut multi = multi;
1925 multi.do_not_free_on_drop();
1926 let multi = multi.ptr;
1927 let type_ = type_.to_i32();
1928 let isl_rs_result = unsafe { isl_multi_pw_aff_reset_tuple_id(multi, type_) };
1929 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1930 should_free_on_drop: true };
1931 let err = isl_rs_ctx.last_error();
1932 if err != Error::None_ {
1933 let err_msg = isl_rs_ctx.last_error_msg();
1934 isl_rs_ctx.reset_error();
1935 return Err(LibISLError::new(err, err_msg));
1936 }
1937 Ok(isl_rs_result)
1938 }
1939
1940 pub fn reset_user(self) -> Result<MultiPwAff, LibISLError> {
1942 let multi = self;
1943 let isl_rs_ctx = multi.get_ctx();
1944 let mut multi = multi;
1945 multi.do_not_free_on_drop();
1946 let multi = multi.ptr;
1947 let isl_rs_result = unsafe { isl_multi_pw_aff_reset_user(multi) };
1948 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1949 should_free_on_drop: true };
1950 let err = isl_rs_ctx.last_error();
1951 if err != Error::None_ {
1952 let err_msg = isl_rs_ctx.last_error_msg();
1953 isl_rs_ctx.reset_error();
1954 return Err(LibISLError::new(err, err_msg));
1955 }
1956 Ok(isl_rs_result)
1957 }
1958
1959 pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1961 let multi = self;
1962 let isl_rs_ctx = multi.get_ctx();
1963 let mut multi = multi;
1964 multi.do_not_free_on_drop();
1965 let multi = multi.ptr;
1966 let mut mv = mv;
1967 mv.do_not_free_on_drop();
1968 let mv = mv.ptr;
1969 let isl_rs_result = unsafe { isl_multi_pw_aff_scale_down_multi_val(multi, mv) };
1970 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1971 should_free_on_drop: true };
1972 let err = isl_rs_ctx.last_error();
1973 if err != Error::None_ {
1974 let err_msg = isl_rs_ctx.last_error_msg();
1975 isl_rs_ctx.reset_error();
1976 return Err(LibISLError::new(err, err_msg));
1977 }
1978 Ok(isl_rs_result)
1979 }
1980
1981 pub fn scale_down_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
1983 let multi = self;
1984 let isl_rs_ctx = multi.get_ctx();
1985 let mut multi = multi;
1986 multi.do_not_free_on_drop();
1987 let multi = multi.ptr;
1988 let mut v = v;
1989 v.do_not_free_on_drop();
1990 let v = v.ptr;
1991 let isl_rs_result = unsafe { isl_multi_pw_aff_scale_down_val(multi, v) };
1992 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1993 should_free_on_drop: true };
1994 let err = isl_rs_ctx.last_error();
1995 if err != Error::None_ {
1996 let err_msg = isl_rs_ctx.last_error_msg();
1997 isl_rs_ctx.reset_error();
1998 return Err(LibISLError::new(err, err_msg));
1999 }
2000 Ok(isl_rs_result)
2001 }
2002
2003 pub fn scale_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
2005 let multi = self;
2006 let isl_rs_ctx = multi.get_ctx();
2007 let mut multi = multi;
2008 multi.do_not_free_on_drop();
2009 let multi = multi.ptr;
2010 let mut mv = mv;
2011 mv.do_not_free_on_drop();
2012 let mv = mv.ptr;
2013 let isl_rs_result = unsafe { isl_multi_pw_aff_scale_multi_val(multi, mv) };
2014 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2015 should_free_on_drop: true };
2016 let err = isl_rs_ctx.last_error();
2017 if err != Error::None_ {
2018 let err_msg = isl_rs_ctx.last_error_msg();
2019 isl_rs_ctx.reset_error();
2020 return Err(LibISLError::new(err, err_msg));
2021 }
2022 Ok(isl_rs_result)
2023 }
2024
2025 pub fn scale_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
2027 let multi = self;
2028 let isl_rs_ctx = multi.get_ctx();
2029 let mut multi = multi;
2030 multi.do_not_free_on_drop();
2031 let multi = multi.ptr;
2032 let mut v = v;
2033 v.do_not_free_on_drop();
2034 let v = v.ptr;
2035 let isl_rs_result = unsafe { isl_multi_pw_aff_scale_val(multi, v) };
2036 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2037 should_free_on_drop: true };
2038 let err = isl_rs_ctx.last_error();
2039 if err != Error::None_ {
2040 let err_msg = isl_rs_ctx.last_error_msg();
2041 isl_rs_ctx.reset_error();
2042 return Err(LibISLError::new(err, err_msg));
2043 }
2044 Ok(isl_rs_result)
2045 }
2046
2047 pub fn set_at(self, pos: i32, el: PwAff) -> Result<MultiPwAff, LibISLError> {
2049 let multi = self;
2050 let isl_rs_ctx = multi.get_ctx();
2051 let mut multi = multi;
2052 multi.do_not_free_on_drop();
2053 let multi = multi.ptr;
2054 let mut el = el;
2055 el.do_not_free_on_drop();
2056 let el = el.ptr;
2057 let isl_rs_result = unsafe { isl_multi_pw_aff_set_at(multi, pos, el) };
2058 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2059 should_free_on_drop: true };
2060 let err = isl_rs_ctx.last_error();
2061 if err != Error::None_ {
2062 let err_msg = isl_rs_ctx.last_error_msg();
2063 isl_rs_ctx.reset_error();
2064 return Err(LibISLError::new(err, err_msg));
2065 }
2066 Ok(isl_rs_result)
2067 }
2068
2069 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<MultiPwAff, LibISLError> {
2071 let multi = self;
2072 let isl_rs_ctx = multi.get_ctx();
2073 let mut multi = multi;
2074 multi.do_not_free_on_drop();
2075 let multi = multi.ptr;
2076 let type_ = type_.to_i32();
2077 let mut id = id;
2078 id.do_not_free_on_drop();
2079 let id = id.ptr;
2080 let isl_rs_result = unsafe { isl_multi_pw_aff_set_dim_id(multi, type_, pos, id) };
2081 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2082 should_free_on_drop: true };
2083 let err = isl_rs_ctx.last_error();
2084 if err != Error::None_ {
2085 let err_msg = isl_rs_ctx.last_error_msg();
2086 isl_rs_ctx.reset_error();
2087 return Err(LibISLError::new(err, err_msg));
2088 }
2089 Ok(isl_rs_result)
2090 }
2091
2092 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
2094 -> Result<MultiPwAff, LibISLError> {
2095 let multi = self;
2096 let isl_rs_ctx = multi.get_ctx();
2097 let mut multi = multi;
2098 multi.do_not_free_on_drop();
2099 let multi = multi.ptr;
2100 let type_ = type_.to_i32();
2101 let s = CString::new(s).unwrap();
2102 let s = s.as_ptr();
2103 let isl_rs_result = unsafe { isl_multi_pw_aff_set_dim_name(multi, type_, pos, s) };
2104 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2105 should_free_on_drop: true };
2106 let err = isl_rs_ctx.last_error();
2107 if err != Error::None_ {
2108 let err_msg = isl_rs_ctx.last_error_msg();
2109 isl_rs_ctx.reset_error();
2110 return Err(LibISLError::new(err, err_msg));
2111 }
2112 Ok(isl_rs_result)
2113 }
2114
2115 pub fn set_pw_aff(self, pos: i32, el: PwAff) -> Result<MultiPwAff, LibISLError> {
2117 let multi = self;
2118 let isl_rs_ctx = multi.get_ctx();
2119 let mut multi = multi;
2120 multi.do_not_free_on_drop();
2121 let multi = multi.ptr;
2122 let mut el = el;
2123 el.do_not_free_on_drop();
2124 let el = el.ptr;
2125 let isl_rs_result = unsafe { isl_multi_pw_aff_set_pw_aff(multi, pos, el) };
2126 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2127 should_free_on_drop: true };
2128 let err = isl_rs_ctx.last_error();
2129 if err != Error::None_ {
2130 let err_msg = isl_rs_ctx.last_error_msg();
2131 isl_rs_ctx.reset_error();
2132 return Err(LibISLError::new(err, err_msg));
2133 }
2134 Ok(isl_rs_result)
2135 }
2136
2137 pub fn set_range_tuple_id(self, id: Id) -> Result<MultiPwAff, LibISLError> {
2139 let multi = self;
2140 let isl_rs_ctx = multi.get_ctx();
2141 let mut multi = multi;
2142 multi.do_not_free_on_drop();
2143 let multi = multi.ptr;
2144 let mut id = id;
2145 id.do_not_free_on_drop();
2146 let id = id.ptr;
2147 let isl_rs_result = unsafe { isl_multi_pw_aff_set_range_tuple_id(multi, id) };
2148 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2149 should_free_on_drop: true };
2150 let err = isl_rs_ctx.last_error();
2151 if err != Error::None_ {
2152 let err_msg = isl_rs_ctx.last_error_msg();
2153 isl_rs_ctx.reset_error();
2154 return Err(LibISLError::new(err, err_msg));
2155 }
2156 Ok(isl_rs_result)
2157 }
2158
2159 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<MultiPwAff, LibISLError> {
2161 let multi = self;
2162 let isl_rs_ctx = multi.get_ctx();
2163 let mut multi = multi;
2164 multi.do_not_free_on_drop();
2165 let multi = multi.ptr;
2166 let type_ = type_.to_i32();
2167 let mut id = id;
2168 id.do_not_free_on_drop();
2169 let id = id.ptr;
2170 let isl_rs_result = unsafe { isl_multi_pw_aff_set_tuple_id(multi, type_, id) };
2171 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2172 should_free_on_drop: true };
2173 let err = isl_rs_ctx.last_error();
2174 if err != Error::None_ {
2175 let err_msg = isl_rs_ctx.last_error_msg();
2176 isl_rs_ctx.reset_error();
2177 return Err(LibISLError::new(err, err_msg));
2178 }
2179 Ok(isl_rs_result)
2180 }
2181
2182 pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<MultiPwAff, LibISLError> {
2184 let multi = self;
2185 let isl_rs_ctx = multi.get_ctx();
2186 let mut multi = multi;
2187 multi.do_not_free_on_drop();
2188 let multi = multi.ptr;
2189 let type_ = type_.to_i32();
2190 let s = CString::new(s).unwrap();
2191 let s = s.as_ptr();
2192 let isl_rs_result = unsafe { isl_multi_pw_aff_set_tuple_name(multi, type_, s) };
2193 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2194 should_free_on_drop: true };
2195 let err = isl_rs_ctx.last_error();
2196 if err != Error::None_ {
2197 let err_msg = isl_rs_ctx.last_error_msg();
2198 isl_rs_ctx.reset_error();
2199 return Err(LibISLError::new(err, err_msg));
2200 }
2201 Ok(isl_rs_result)
2202 }
2203
2204 pub fn size(&self) -> Result<i32, LibISLError> {
2206 let multi = self;
2207 let isl_rs_ctx = multi.get_ctx();
2208 let multi = multi.ptr;
2209 let isl_rs_result = unsafe { isl_multi_pw_aff_size(multi) };
2210 let err = isl_rs_ctx.last_error();
2211 if err != Error::None_ {
2212 let err_msg = isl_rs_ctx.last_error_msg();
2213 isl_rs_ctx.reset_error();
2214 return Err(LibISLError::new(err, err_msg));
2215 }
2216 Ok(isl_rs_result)
2217 }
2218
2219 pub fn splice(self, in_pos: u32, out_pos: u32, multi2: MultiPwAff)
2221 -> Result<MultiPwAff, LibISLError> {
2222 let multi1 = self;
2223 let isl_rs_ctx = multi1.get_ctx();
2224 let mut multi1 = multi1;
2225 multi1.do_not_free_on_drop();
2226 let multi1 = multi1.ptr;
2227 let mut multi2 = multi2;
2228 multi2.do_not_free_on_drop();
2229 let multi2 = multi2.ptr;
2230 let isl_rs_result = unsafe { isl_multi_pw_aff_splice(multi1, in_pos, out_pos, multi2) };
2231 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2232 should_free_on_drop: true };
2233 let err = isl_rs_ctx.last_error();
2234 if err != Error::None_ {
2235 let err_msg = isl_rs_ctx.last_error_msg();
2236 isl_rs_ctx.reset_error();
2237 return Err(LibISLError::new(err, err_msg));
2238 }
2239 Ok(isl_rs_result)
2240 }
2241
2242 pub fn sub(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
2244 let multi1 = self;
2245 let isl_rs_ctx = multi1.get_ctx();
2246 let mut multi1 = multi1;
2247 multi1.do_not_free_on_drop();
2248 let multi1 = multi1.ptr;
2249 let mut multi2 = multi2;
2250 multi2.do_not_free_on_drop();
2251 let multi2 = multi2.ptr;
2252 let isl_rs_result = unsafe { isl_multi_pw_aff_sub(multi1, multi2) };
2253 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2254 should_free_on_drop: true };
2255 let err = isl_rs_ctx.last_error();
2256 if err != Error::None_ {
2257 let err_msg = isl_rs_ctx.last_error_msg();
2258 isl_rs_ctx.reset_error();
2259 return Err(LibISLError::new(err, err_msg));
2260 }
2261 Ok(isl_rs_result)
2262 }
2263
2264 pub fn to_str(&self) -> Result<&str, LibISLError> {
2266 let mpa = self;
2267 let isl_rs_ctx = mpa.get_ctx();
2268 let mpa = mpa.ptr;
2269 let isl_rs_result = unsafe { isl_multi_pw_aff_to_str(mpa) };
2270 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2271 let isl_rs_result = isl_rs_result.to_str().unwrap();
2272 let err = isl_rs_ctx.last_error();
2273 if err != Error::None_ {
2274 let err_msg = isl_rs_ctx.last_error_msg();
2275 isl_rs_ctx.reset_error();
2276 return Err(LibISLError::new(err, err_msg));
2277 }
2278 Ok(isl_rs_result)
2279 }
2280
2281 pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<MultiPwAff, LibISLError> {
2283 let multi = self;
2284 let isl_rs_ctx = multi.get_ctx();
2285 let mut multi = multi;
2286 multi.do_not_free_on_drop();
2287 let multi = multi.ptr;
2288 let mut domain = domain;
2289 domain.do_not_free_on_drop();
2290 let domain = domain.ptr;
2291 let isl_rs_result = unsafe { isl_multi_pw_aff_unbind_params_insert_domain(multi, domain) };
2292 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2293 should_free_on_drop: true };
2294 let err = isl_rs_ctx.last_error();
2295 if err != Error::None_ {
2296 let err_msg = isl_rs_ctx.last_error_msg();
2297 isl_rs_ctx.reset_error();
2298 return Err(LibISLError::new(err, err_msg));
2299 }
2300 Ok(isl_rs_result)
2301 }
2302
2303 pub fn union_add(self, mpa2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
2305 let mpa1 = self;
2306 let isl_rs_ctx = mpa1.get_ctx();
2307 let mut mpa1 = mpa1;
2308 mpa1.do_not_free_on_drop();
2309 let mpa1 = mpa1.ptr;
2310 let mut mpa2 = mpa2;
2311 mpa2.do_not_free_on_drop();
2312 let mpa2 = mpa2.ptr;
2313 let isl_rs_result = unsafe { isl_multi_pw_aff_union_add(mpa1, mpa2) };
2314 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2315 should_free_on_drop: true };
2316 let err = isl_rs_ctx.last_error();
2317 if err != Error::None_ {
2318 let err_msg = isl_rs_ctx.last_error_msg();
2319 isl_rs_ctx.reset_error();
2320 return Err(LibISLError::new(err, err_msg));
2321 }
2322 Ok(isl_rs_result)
2323 }
2324
2325 pub fn zero(space: Space) -> Result<MultiPwAff, LibISLError> {
2327 let isl_rs_ctx = space.get_ctx();
2328 let mut space = space;
2329 space.do_not_free_on_drop();
2330 let space = space.ptr;
2331 let isl_rs_result = unsafe { isl_multi_pw_aff_zero(space) };
2332 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2333 should_free_on_drop: true };
2334 let err = isl_rs_ctx.last_error();
2335 if err != Error::None_ {
2336 let err_msg = isl_rs_ctx.last_error_msg();
2337 isl_rs_ctx.reset_error();
2338 return Err(LibISLError::new(err, err_msg));
2339 }
2340 Ok(isl_rs_result)
2341 }
2342
2343 pub fn do_not_free_on_drop(&mut self) {
2346 self.should_free_on_drop = false;
2347 }
2348}
2349
2350impl Drop for MultiPwAff {
2351 fn drop(&mut self) {
2352 if self.should_free_on_drop {
2353 unsafe {
2354 isl_multi_pw_aff_free(self.ptr);
2355 }
2356 }
2357 }
2358}