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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
255 }
256 Ok(isl_rs_result)
257 }
258
259 pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
261 let mpa = self;
262 let isl_rs_ctx = mpa.get_ctx();
263 let mut mpa = mpa;
264 mpa.do_not_free_on_drop();
265 let mpa = mpa.ptr;
266 let mut mv = mv;
267 mv.do_not_free_on_drop();
268 let mv = mv.ptr;
269 let isl_rs_result = unsafe { isl_multi_pw_aff_add_constant_multi_val(mpa, mv) };
270 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
271 should_free_on_drop: true };
272 let err = isl_rs_ctx.last_error();
273 if err != Error::None_ {
274 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
275 }
276 Ok(isl_rs_result)
277 }
278
279 pub fn add_constant_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
281 let mpa = self;
282 let isl_rs_ctx = mpa.get_ctx();
283 let mut mpa = mpa;
284 mpa.do_not_free_on_drop();
285 let mpa = mpa.ptr;
286 let mut v = v;
287 v.do_not_free_on_drop();
288 let v = v.ptr;
289 let isl_rs_result = unsafe { isl_multi_pw_aff_add_constant_val(mpa, v) };
290 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
291 should_free_on_drop: true };
292 let err = isl_rs_ctx.last_error();
293 if err != Error::None_ {
294 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
295 }
296 Ok(isl_rs_result)
297 }
298
299 pub fn add_dims(self, type_: DimType, n: u32) -> Result<MultiPwAff, LibISLError> {
301 let multi = self;
302 let isl_rs_ctx = multi.get_ctx();
303 let mut multi = multi;
304 multi.do_not_free_on_drop();
305 let multi = multi.ptr;
306 let type_ = type_.to_i32();
307 let isl_rs_result = unsafe { isl_multi_pw_aff_add_dims(multi, type_, n) };
308 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
309 should_free_on_drop: true };
310 let err = isl_rs_ctx.last_error();
311 if err != Error::None_ {
312 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
313 }
314 Ok(isl_rs_result)
315 }
316
317 pub fn align_params(self, model: Space) -> Result<MultiPwAff, LibISLError> {
319 let multi = self;
320 let isl_rs_ctx = multi.get_ctx();
321 let mut multi = multi;
322 multi.do_not_free_on_drop();
323 let multi = multi.ptr;
324 let mut model = model;
325 model.do_not_free_on_drop();
326 let model = model.ptr;
327 let isl_rs_result = unsafe { isl_multi_pw_aff_align_params(multi, model) };
328 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
329 should_free_on_drop: true };
330 let err = isl_rs_ctx.last_error();
331 if err != Error::None_ {
332 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
333 }
334 Ok(isl_rs_result)
335 }
336
337 pub fn as_map(self) -> Result<Map, LibISLError> {
339 let mpa = self;
340 let isl_rs_ctx = mpa.get_ctx();
341 let mut mpa = mpa;
342 mpa.do_not_free_on_drop();
343 let mpa = mpa.ptr;
344 let isl_rs_result = unsafe { isl_multi_pw_aff_as_map(mpa) };
345 let isl_rs_result = Map { ptr: isl_rs_result,
346 should_free_on_drop: true };
347 let err = isl_rs_ctx.last_error();
348 if err != Error::None_ {
349 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
350 }
351 Ok(isl_rs_result)
352 }
353
354 pub fn as_multi_aff(self) -> Result<MultiAff, LibISLError> {
356 let mpa = self;
357 let isl_rs_ctx = mpa.get_ctx();
358 let mut mpa = mpa;
359 mpa.do_not_free_on_drop();
360 let mpa = mpa.ptr;
361 let isl_rs_result = unsafe { isl_multi_pw_aff_as_multi_aff(mpa) };
362 let isl_rs_result = MultiAff { ptr: isl_rs_result,
363 should_free_on_drop: true };
364 let err = isl_rs_ctx.last_error();
365 if err != Error::None_ {
366 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
367 }
368 Ok(isl_rs_result)
369 }
370
371 pub fn as_set(self) -> Result<Set, LibISLError> {
373 let mpa = self;
374 let isl_rs_ctx = mpa.get_ctx();
375 let mut mpa = mpa;
376 mpa.do_not_free_on_drop();
377 let mpa = mpa.ptr;
378 let isl_rs_result = unsafe { isl_multi_pw_aff_as_set(mpa) };
379 let isl_rs_result = Set { ptr: isl_rs_result,
380 should_free_on_drop: true };
381 let err = isl_rs_ctx.last_error();
382 if err != Error::None_ {
383 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
384 }
385 Ok(isl_rs_result)
386 }
387
388 pub fn bind(self, tuple: MultiId) -> Result<Set, LibISLError> {
390 let mpa = self;
391 let isl_rs_ctx = mpa.get_ctx();
392 let mut mpa = mpa;
393 mpa.do_not_free_on_drop();
394 let mpa = mpa.ptr;
395 let mut tuple = tuple;
396 tuple.do_not_free_on_drop();
397 let tuple = tuple.ptr;
398 let isl_rs_result = unsafe { isl_multi_pw_aff_bind(mpa, tuple) };
399 let isl_rs_result = Set { ptr: isl_rs_result,
400 should_free_on_drop: true };
401 let err = isl_rs_ctx.last_error();
402 if err != Error::None_ {
403 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
404 }
405 Ok(isl_rs_result)
406 }
407
408 pub fn bind_domain(self, tuple: MultiId) -> Result<MultiPwAff, LibISLError> {
410 let multi = self;
411 let isl_rs_ctx = multi.get_ctx();
412 let mut multi = multi;
413 multi.do_not_free_on_drop();
414 let multi = multi.ptr;
415 let mut tuple = tuple;
416 tuple.do_not_free_on_drop();
417 let tuple = tuple.ptr;
418 let isl_rs_result = unsafe { isl_multi_pw_aff_bind_domain(multi, tuple) };
419 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
420 should_free_on_drop: true };
421 let err = isl_rs_ctx.last_error();
422 if err != Error::None_ {
423 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
424 }
425 Ok(isl_rs_result)
426 }
427
428 pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<MultiPwAff, LibISLError> {
430 let multi = self;
431 let isl_rs_ctx = multi.get_ctx();
432 let mut multi = multi;
433 multi.do_not_free_on_drop();
434 let multi = multi.ptr;
435 let mut tuple = tuple;
436 tuple.do_not_free_on_drop();
437 let tuple = tuple.ptr;
438 let isl_rs_result = unsafe { isl_multi_pw_aff_bind_domain_wrapped_domain(multi, tuple) };
439 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
440 should_free_on_drop: true };
441 let err = isl_rs_ctx.last_error();
442 if err != Error::None_ {
443 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
444 }
445 Ok(isl_rs_result)
446 }
447
448 pub fn coalesce(self) -> Result<MultiPwAff, LibISLError> {
450 let mpa = self;
451 let isl_rs_ctx = mpa.get_ctx();
452 let mut mpa = mpa;
453 mpa.do_not_free_on_drop();
454 let mpa = mpa.ptr;
455 let isl_rs_result = unsafe { isl_multi_pw_aff_coalesce(mpa) };
456 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
457 should_free_on_drop: true };
458 let err = isl_rs_ctx.last_error();
459 if err != Error::None_ {
460 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
461 }
462 Ok(isl_rs_result)
463 }
464
465 pub fn copy(&self) -> Result<MultiPwAff, LibISLError> {
467 let multi = self;
468 let isl_rs_ctx = multi.get_ctx();
469 let multi = multi.ptr;
470 let isl_rs_result = unsafe { isl_multi_pw_aff_copy(multi) };
471 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
472 should_free_on_drop: true };
473 let err = isl_rs_ctx.last_error();
474 if err != Error::None_ {
475 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
476 }
477 Ok(isl_rs_result)
478 }
479
480 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
482 let multi = self;
483 let isl_rs_ctx = multi.get_ctx();
484 let multi = multi.ptr;
485 let type_ = type_.to_i32();
486 let isl_rs_result = unsafe { isl_multi_pw_aff_dim(multi, type_) };
487 let err = isl_rs_ctx.last_error();
488 if err != Error::None_ {
489 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
490 }
491 Ok(isl_rs_result)
492 }
493
494 pub fn domain(self) -> Result<Set, LibISLError> {
496 let mpa = self;
497 let isl_rs_ctx = mpa.get_ctx();
498 let mut mpa = mpa;
499 mpa.do_not_free_on_drop();
500 let mpa = mpa.ptr;
501 let isl_rs_result = unsafe { isl_multi_pw_aff_domain(mpa) };
502 let isl_rs_result = Set { ptr: isl_rs_result,
503 should_free_on_drop: true };
504 let err = isl_rs_ctx.last_error();
505 if err != Error::None_ {
506 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
507 }
508 Ok(isl_rs_result)
509 }
510
511 pub fn domain_reverse(self) -> Result<MultiPwAff, LibISLError> {
513 let multi = self;
514 let isl_rs_ctx = multi.get_ctx();
515 let mut multi = multi;
516 multi.do_not_free_on_drop();
517 let multi = multi.ptr;
518 let isl_rs_result = unsafe { isl_multi_pw_aff_domain_reverse(multi) };
519 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
520 should_free_on_drop: true };
521 let err = isl_rs_ctx.last_error();
522 if err != Error::None_ {
523 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
524 }
525 Ok(isl_rs_result)
526 }
527
528 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<MultiPwAff, LibISLError> {
530 let multi = self;
531 let isl_rs_ctx = multi.get_ctx();
532 let mut multi = multi;
533 multi.do_not_free_on_drop();
534 let multi = multi.ptr;
535 let type_ = type_.to_i32();
536 let isl_rs_result = unsafe { isl_multi_pw_aff_drop_dims(multi, type_, first, n) };
537 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
538 should_free_on_drop: true };
539 let err = isl_rs_ctx.last_error();
540 if err != Error::None_ {
541 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
542 }
543 Ok(isl_rs_result)
544 }
545
546 pub fn dump(&self) -> Result<(), LibISLError> {
548 let mpa = self;
549 let isl_rs_ctx = mpa.get_ctx();
550 let mpa = mpa.ptr;
551 let isl_rs_result = unsafe { isl_multi_pw_aff_dump(mpa) };
552 let err = isl_rs_ctx.last_error();
553 if err != Error::None_ {
554 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
555 }
556 Ok(isl_rs_result)
557 }
558
559 pub fn eq_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
561 let mpa1 = self;
562 let isl_rs_ctx = mpa1.get_ctx();
563 let mut mpa1 = mpa1;
564 mpa1.do_not_free_on_drop();
565 let mpa1 = mpa1.ptr;
566 let mut mpa2 = mpa2;
567 mpa2.do_not_free_on_drop();
568 let mpa2 = mpa2.ptr;
569 let isl_rs_result = unsafe { isl_multi_pw_aff_eq_map(mpa1, mpa2) };
570 let isl_rs_result = Map { ptr: isl_rs_result,
571 should_free_on_drop: true };
572 let err = isl_rs_ctx.last_error();
573 if err != Error::None_ {
574 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
575 }
576 Ok(isl_rs_result)
577 }
578
579 pub fn factor_range(self) -> Result<MultiPwAff, LibISLError> {
581 let multi = self;
582 let isl_rs_ctx = multi.get_ctx();
583 let mut multi = multi;
584 multi.do_not_free_on_drop();
585 let multi = multi.ptr;
586 let isl_rs_result = unsafe { isl_multi_pw_aff_factor_range(multi) };
587 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
588 should_free_on_drop: true };
589 let err = isl_rs_ctx.last_error();
590 if err != Error::None_ {
591 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
592 }
593 Ok(isl_rs_result)
594 }
595
596 pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
598 let multi = self;
599 let isl_rs_ctx = multi.get_ctx();
600 let multi = multi.ptr;
601 let type_ = type_.to_i32();
602 let id = id.ptr;
603 let isl_rs_result = unsafe { isl_multi_pw_aff_find_dim_by_id(multi, type_, id) };
604 let err = isl_rs_ctx.last_error();
605 if err != Error::None_ {
606 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
607 }
608 Ok(isl_rs_result)
609 }
610
611 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
613 let multi = self;
614 let isl_rs_ctx = multi.get_ctx();
615 let multi = multi.ptr;
616 let type_ = type_.to_i32();
617 let name = CString::new(name).unwrap();
618 let name = name.as_ptr();
619 let isl_rs_result = unsafe { isl_multi_pw_aff_find_dim_by_name(multi, type_, name) };
620 let err = isl_rs_ctx.last_error();
621 if err != Error::None_ {
622 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
623 }
624 Ok(isl_rs_result)
625 }
626
627 pub fn flat_range_product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
629 let multi1 = self;
630 let isl_rs_ctx = multi1.get_ctx();
631 let mut multi1 = multi1;
632 multi1.do_not_free_on_drop();
633 let multi1 = multi1.ptr;
634 let mut multi2 = multi2;
635 multi2.do_not_free_on_drop();
636 let multi2 = multi2.ptr;
637 let isl_rs_result = unsafe { isl_multi_pw_aff_flat_range_product(multi1, multi2) };
638 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
639 should_free_on_drop: true };
640 let err = isl_rs_ctx.last_error();
641 if err != Error::None_ {
642 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
643 }
644 Ok(isl_rs_result)
645 }
646
647 pub fn flatten_range(self) -> Result<MultiPwAff, LibISLError> {
649 let multi = self;
650 let isl_rs_ctx = multi.get_ctx();
651 let mut multi = multi;
652 multi.do_not_free_on_drop();
653 let multi = multi.ptr;
654 let isl_rs_result = unsafe { isl_multi_pw_aff_flatten_range(multi) };
655 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
656 should_free_on_drop: true };
657 let err = isl_rs_ctx.last_error();
658 if err != Error::None_ {
659 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
660 }
661 Ok(isl_rs_result)
662 }
663
664 pub fn free(self) -> Result<MultiPwAff, LibISLError> {
666 let multi = self;
667 let isl_rs_ctx = multi.get_ctx();
668 let mut multi = multi;
669 multi.do_not_free_on_drop();
670 let multi = multi.ptr;
671 let isl_rs_result = unsafe { isl_multi_pw_aff_free(multi) };
672 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
673 should_free_on_drop: true };
674 let err = isl_rs_ctx.last_error();
675 if err != Error::None_ {
676 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
677 }
678 Ok(isl_rs_result)
679 }
680
681 pub fn from_aff(aff: Aff) -> Result<MultiPwAff, LibISLError> {
683 let isl_rs_ctx = aff.get_ctx();
684 let mut aff = aff;
685 aff.do_not_free_on_drop();
686 let aff = aff.ptr;
687 let isl_rs_result = unsafe { isl_multi_pw_aff_from_aff(aff) };
688 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
689 should_free_on_drop: true };
690 let err = isl_rs_ctx.last_error();
691 if err != Error::None_ {
692 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
693 }
694 Ok(isl_rs_result)
695 }
696
697 pub fn from_multi_aff(ma: MultiAff) -> Result<MultiPwAff, LibISLError> {
699 let isl_rs_ctx = ma.get_ctx();
700 let mut ma = ma;
701 ma.do_not_free_on_drop();
702 let ma = ma.ptr;
703 let isl_rs_result = unsafe { isl_multi_pw_aff_from_multi_aff(ma) };
704 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
705 should_free_on_drop: true };
706 let err = isl_rs_ctx.last_error();
707 if err != Error::None_ {
708 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
709 }
710 Ok(isl_rs_result)
711 }
712
713 pub fn from_pw_aff(pa: PwAff) -> Result<MultiPwAff, LibISLError> {
715 let isl_rs_ctx = pa.get_ctx();
716 let mut pa = pa;
717 pa.do_not_free_on_drop();
718 let pa = pa.ptr;
719 let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_aff(pa) };
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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
725 }
726 Ok(isl_rs_result)
727 }
728
729 pub fn from_pw_aff_list(space: Space, list: PwAffList) -> Result<MultiPwAff, LibISLError> {
731 let isl_rs_ctx = space.get_ctx();
732 let mut space = space;
733 space.do_not_free_on_drop();
734 let space = space.ptr;
735 let mut list = list;
736 list.do_not_free_on_drop();
737 let list = list.ptr;
738 let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_aff_list(space, list) };
739 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
740 should_free_on_drop: true };
741 let err = isl_rs_ctx.last_error();
742 if err != Error::None_ {
743 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
744 }
745 Ok(isl_rs_result)
746 }
747
748 pub fn from_pw_multi_aff(pma: PwMultiAff) -> Result<MultiPwAff, LibISLError> {
750 let isl_rs_ctx = pma.get_ctx();
751 let mut pma = pma;
752 pma.do_not_free_on_drop();
753 let pma = pma.ptr;
754 let isl_rs_result = unsafe { isl_multi_pw_aff_from_pw_multi_aff(pma) };
755 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
756 should_free_on_drop: true };
757 let err = isl_rs_ctx.last_error();
758 if err != Error::None_ {
759 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
760 }
761 Ok(isl_rs_result)
762 }
763
764 pub fn from_range(self) -> Result<MultiPwAff, LibISLError> {
766 let multi = self;
767 let isl_rs_ctx = multi.get_ctx();
768 let mut multi = multi;
769 multi.do_not_free_on_drop();
770 let multi = multi.ptr;
771 let isl_rs_result = unsafe { isl_multi_pw_aff_from_range(multi) };
772 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
773 should_free_on_drop: true };
774 let err = isl_rs_ctx.last_error();
775 if err != Error::None_ {
776 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
777 }
778 Ok(isl_rs_result)
779 }
780
781 pub fn get_at(&self, pos: i32) -> Result<PwAff, LibISLError> {
783 let multi = self;
784 let isl_rs_ctx = multi.get_ctx();
785 let multi = multi.ptr;
786 let isl_rs_result = unsafe { isl_multi_pw_aff_get_at(multi, pos) };
787 let isl_rs_result = PwAff { ptr: isl_rs_result,
788 should_free_on_drop: true };
789 let err = isl_rs_ctx.last_error();
790 if err != Error::None_ {
791 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
792 }
793 Ok(isl_rs_result)
794 }
795
796 pub fn get_ctx(&self) -> Context {
798 let multi = self;
799 let multi = multi.ptr;
800 let isl_rs_result = unsafe { isl_multi_pw_aff_get_ctx(multi) };
801 let isl_rs_result = Context { ptr: isl_rs_result,
802 should_free_on_drop: false };
803 isl_rs_result
804 }
805
806 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
808 let multi = self;
809 let isl_rs_ctx = multi.get_ctx();
810 let multi = multi.ptr;
811 let type_ = type_.to_i32();
812 let isl_rs_result = unsafe { isl_multi_pw_aff_get_dim_id(multi, type_, pos) };
813 let isl_rs_result = Id { ptr: isl_rs_result,
814 should_free_on_drop: true };
815 let err = isl_rs_ctx.last_error();
816 if err != Error::None_ {
817 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
818 }
819 Ok(isl_rs_result)
820 }
821
822 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
824 let multi = self;
825 let isl_rs_ctx = multi.get_ctx();
826 let multi = multi.ptr;
827 let isl_rs_result = unsafe { isl_multi_pw_aff_get_domain_space(multi) };
828 let isl_rs_result = Space { ptr: isl_rs_result,
829 should_free_on_drop: true };
830 let err = isl_rs_ctx.last_error();
831 if err != Error::None_ {
832 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
833 }
834 Ok(isl_rs_result)
835 }
836
837 pub fn get_hash(&self) -> Result<u32, LibISLError> {
839 let mpa = self;
840 let isl_rs_ctx = mpa.get_ctx();
841 let mpa = mpa.ptr;
842 let isl_rs_result = unsafe { isl_multi_pw_aff_get_hash(mpa) };
843 let err = isl_rs_ctx.last_error();
844 if err != Error::None_ {
845 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
846 }
847 Ok(isl_rs_result)
848 }
849
850 pub fn get_list(&self) -> Result<PwAffList, LibISLError> {
852 let multi = self;
853 let isl_rs_ctx = multi.get_ctx();
854 let multi = multi.ptr;
855 let isl_rs_result = unsafe { isl_multi_pw_aff_get_list(multi) };
856 let isl_rs_result = PwAffList { ptr: isl_rs_result,
857 should_free_on_drop: true };
858 let err = isl_rs_ctx.last_error();
859 if err != Error::None_ {
860 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
861 }
862 Ok(isl_rs_result)
863 }
864
865 pub fn get_pw_aff(&self, pos: i32) -> Result<PwAff, LibISLError> {
867 let multi = self;
868 let isl_rs_ctx = multi.get_ctx();
869 let multi = multi.ptr;
870 let isl_rs_result = unsafe { isl_multi_pw_aff_get_pw_aff(multi, pos) };
871 let isl_rs_result = PwAff { ptr: isl_rs_result,
872 should_free_on_drop: true };
873 let err = isl_rs_ctx.last_error();
874 if err != Error::None_ {
875 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
876 }
877 Ok(isl_rs_result)
878 }
879
880 pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
882 let multi = self;
883 let isl_rs_ctx = multi.get_ctx();
884 let multi = multi.ptr;
885 let isl_rs_result = unsafe { isl_multi_pw_aff_get_range_tuple_id(multi) };
886 let isl_rs_result = Id { ptr: isl_rs_result,
887 should_free_on_drop: true };
888 let err = isl_rs_ctx.last_error();
889 if err != Error::None_ {
890 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
891 }
892 Ok(isl_rs_result)
893 }
894
895 pub fn get_space(&self) -> Result<Space, LibISLError> {
897 let multi = self;
898 let isl_rs_ctx = multi.get_ctx();
899 let multi = multi.ptr;
900 let isl_rs_result = unsafe { isl_multi_pw_aff_get_space(multi) };
901 let isl_rs_result = Space { ptr: isl_rs_result,
902 should_free_on_drop: true };
903 let err = isl_rs_ctx.last_error();
904 if err != Error::None_ {
905 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
906 }
907 Ok(isl_rs_result)
908 }
909
910 pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
912 let multi = self;
913 let isl_rs_ctx = multi.get_ctx();
914 let multi = multi.ptr;
915 let type_ = type_.to_i32();
916 let isl_rs_result = unsafe { isl_multi_pw_aff_get_tuple_id(multi, type_) };
917 let isl_rs_result = Id { ptr: isl_rs_result,
918 should_free_on_drop: true };
919 let err = isl_rs_ctx.last_error();
920 if err != Error::None_ {
921 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
922 }
923 Ok(isl_rs_result)
924 }
925
926 pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
928 let multi = self;
929 let isl_rs_ctx = multi.get_ctx();
930 let multi = multi.ptr;
931 let type_ = type_.to_i32();
932 let isl_rs_result = unsafe { isl_multi_pw_aff_get_tuple_name(multi, type_) };
933 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
934 let isl_rs_result = isl_rs_result.to_str().unwrap();
935 let err = isl_rs_ctx.last_error();
936 if err != Error::None_ {
937 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
938 }
939 Ok(isl_rs_result)
940 }
941
942 pub fn gist(self, set: Set) -> Result<MultiPwAff, LibISLError> {
944 let mpa = self;
945 let isl_rs_ctx = mpa.get_ctx();
946 let mut mpa = mpa;
947 mpa.do_not_free_on_drop();
948 let mpa = mpa.ptr;
949 let mut set = set;
950 set.do_not_free_on_drop();
951 let set = set.ptr;
952 let isl_rs_result = unsafe { isl_multi_pw_aff_gist(mpa, set) };
953 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
954 should_free_on_drop: true };
955 let err = isl_rs_ctx.last_error();
956 if err != Error::None_ {
957 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
958 }
959 Ok(isl_rs_result)
960 }
961
962 pub fn gist_params(self, set: Set) -> Result<MultiPwAff, LibISLError> {
964 let mpa = self;
965 let isl_rs_ctx = mpa.get_ctx();
966 let mut mpa = mpa;
967 mpa.do_not_free_on_drop();
968 let mpa = mpa.ptr;
969 let mut set = set;
970 set.do_not_free_on_drop();
971 let set = set.ptr;
972 let isl_rs_result = unsafe { isl_multi_pw_aff_gist_params(mpa, set) };
973 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
974 should_free_on_drop: true };
975 let err = isl_rs_ctx.last_error();
976 if err != Error::None_ {
977 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
978 }
979 Ok(isl_rs_result)
980 }
981
982 pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
984 let multi = self;
985 let isl_rs_ctx = multi.get_ctx();
986 let multi = multi.ptr;
987 let isl_rs_result = unsafe { isl_multi_pw_aff_has_range_tuple_id(multi) };
988 let isl_rs_result = match isl_rs_result {
989 0 => false,
990 1 => true,
991 _ => panic!("Got isl_bool = -1"),
992 };
993 let err = isl_rs_ctx.last_error();
994 if err != Error::None_ {
995 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
996 }
997 Ok(isl_rs_result)
998 }
999
1000 pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1002 let multi = self;
1003 let isl_rs_ctx = multi.get_ctx();
1004 let multi = multi.ptr;
1005 let type_ = type_.to_i32();
1006 let isl_rs_result = unsafe { isl_multi_pw_aff_has_tuple_id(multi, type_) };
1007 let isl_rs_result = match isl_rs_result {
1008 0 => false,
1009 1 => true,
1010 _ => panic!("Got isl_bool = -1"),
1011 };
1012 let err = isl_rs_ctx.last_error();
1013 if err != Error::None_ {
1014 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1015 }
1016 Ok(isl_rs_result)
1017 }
1018
1019 pub fn identity(space: Space) -> Result<MultiPwAff, LibISLError> {
1021 let isl_rs_ctx = space.get_ctx();
1022 let mut space = space;
1023 space.do_not_free_on_drop();
1024 let space = space.ptr;
1025 let isl_rs_result = unsafe { isl_multi_pw_aff_identity(space) };
1026 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1027 should_free_on_drop: true };
1028 let err = isl_rs_ctx.last_error();
1029 if err != Error::None_ {
1030 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1031 }
1032 Ok(isl_rs_result)
1033 }
1034
1035 pub fn identity_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
1037 let multi = self;
1038 let isl_rs_ctx = multi.get_ctx();
1039 let mut multi = multi;
1040 multi.do_not_free_on_drop();
1041 let multi = multi.ptr;
1042 let isl_rs_result = unsafe { isl_multi_pw_aff_identity_multi_pw_aff(multi) };
1043 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1044 should_free_on_drop: true };
1045 let err = isl_rs_ctx.last_error();
1046 if err != Error::None_ {
1047 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1048 }
1049 Ok(isl_rs_result)
1050 }
1051
1052 pub fn identity_on_domain_space(space: Space) -> Result<MultiPwAff, LibISLError> {
1054 let isl_rs_ctx = space.get_ctx();
1055 let mut space = space;
1056 space.do_not_free_on_drop();
1057 let space = space.ptr;
1058 let isl_rs_result = unsafe { isl_multi_pw_aff_identity_on_domain_space(space) };
1059 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1060 should_free_on_drop: true };
1061 let err = isl_rs_ctx.last_error();
1062 if err != Error::None_ {
1063 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1064 }
1065 Ok(isl_rs_result)
1066 }
1067
1068 pub fn insert_dims(self, type_: DimType, first: u32, n: u32)
1070 -> Result<MultiPwAff, LibISLError> {
1071 let multi = self;
1072 let isl_rs_ctx = multi.get_ctx();
1073 let mut multi = multi;
1074 multi.do_not_free_on_drop();
1075 let multi = multi.ptr;
1076 let type_ = type_.to_i32();
1077 let isl_rs_result = unsafe { isl_multi_pw_aff_insert_dims(multi, type_, first, n) };
1078 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1079 should_free_on_drop: true };
1080 let err = isl_rs_ctx.last_error();
1081 if err != Error::None_ {
1082 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1083 }
1084 Ok(isl_rs_result)
1085 }
1086
1087 pub fn insert_domain(self, domain: Space) -> Result<MultiPwAff, LibISLError> {
1089 let multi = self;
1090 let isl_rs_ctx = multi.get_ctx();
1091 let mut multi = multi;
1092 multi.do_not_free_on_drop();
1093 let multi = multi.ptr;
1094 let mut domain = domain;
1095 domain.do_not_free_on_drop();
1096 let domain = domain.ptr;
1097 let isl_rs_result = unsafe { isl_multi_pw_aff_insert_domain(multi, domain) };
1098 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1099 should_free_on_drop: true };
1100 let err = isl_rs_ctx.last_error();
1101 if err != Error::None_ {
1102 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1103 }
1104 Ok(isl_rs_result)
1105 }
1106
1107 pub fn intersect_domain(self, domain: Set) -> Result<MultiPwAff, LibISLError> {
1109 let mpa = self;
1110 let isl_rs_ctx = mpa.get_ctx();
1111 let mut mpa = mpa;
1112 mpa.do_not_free_on_drop();
1113 let mpa = mpa.ptr;
1114 let mut domain = domain;
1115 domain.do_not_free_on_drop();
1116 let domain = domain.ptr;
1117 let isl_rs_result = unsafe { isl_multi_pw_aff_intersect_domain(mpa, domain) };
1118 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1119 should_free_on_drop: true };
1120 let err = isl_rs_ctx.last_error();
1121 if err != Error::None_ {
1122 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1123 }
1124 Ok(isl_rs_result)
1125 }
1126
1127 pub fn intersect_params(self, set: Set) -> Result<MultiPwAff, LibISLError> {
1129 let mpa = self;
1130 let isl_rs_ctx = mpa.get_ctx();
1131 let mut mpa = mpa;
1132 mpa.do_not_free_on_drop();
1133 let mpa = mpa.ptr;
1134 let mut set = set;
1135 set.do_not_free_on_drop();
1136 let set = set.ptr;
1137 let isl_rs_result = unsafe { isl_multi_pw_aff_intersect_params(mpa, set) };
1138 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1139 should_free_on_drop: true };
1140 let err = isl_rs_ctx.last_error();
1141 if err != Error::None_ {
1142 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1143 }
1144 Ok(isl_rs_result)
1145 }
1146
1147 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1149 let multi = self;
1150 let isl_rs_ctx = multi.get_ctx();
1151 let multi = multi.ptr;
1152 let type_ = type_.to_i32();
1153 let isl_rs_result = unsafe { isl_multi_pw_aff_involves_dims(multi, type_, first, n) };
1154 let isl_rs_result = match isl_rs_result {
1155 0 => false,
1156 1 => true,
1157 _ => panic!("Got isl_bool = -1"),
1158 };
1159 let err = isl_rs_ctx.last_error();
1160 if err != Error::None_ {
1161 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1162 }
1163 Ok(isl_rs_result)
1164 }
1165
1166 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1168 let multi = self;
1169 let isl_rs_ctx = multi.get_ctx();
1170 let multi = multi.ptr;
1171 let isl_rs_result = unsafe { isl_multi_pw_aff_involves_nan(multi) };
1172 let isl_rs_result = match isl_rs_result {
1173 0 => false,
1174 1 => true,
1175 _ => panic!("Got isl_bool = -1"),
1176 };
1177 let err = isl_rs_ctx.last_error();
1178 if err != Error::None_ {
1179 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1180 }
1181 Ok(isl_rs_result)
1182 }
1183
1184 pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1186 let multi = self;
1187 let isl_rs_ctx = multi.get_ctx();
1188 let multi = multi.ptr;
1189 let id = id.ptr;
1190 let isl_rs_result = unsafe { isl_multi_pw_aff_involves_param_id(multi, id) };
1191 let isl_rs_result = match isl_rs_result {
1192 0 => false,
1193 1 => true,
1194 _ => panic!("Got isl_bool = -1"),
1195 };
1196 let err = isl_rs_ctx.last_error();
1197 if err != Error::None_ {
1198 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1199 }
1200 Ok(isl_rs_result)
1201 }
1202
1203 pub fn involves_param_id_list(&self, list: &IdList) -> Result<bool, LibISLError> {
1205 let multi = self;
1206 let isl_rs_ctx = multi.get_ctx();
1207 let multi = multi.ptr;
1208 let list = list.ptr;
1209 let isl_rs_result = unsafe { isl_multi_pw_aff_involves_param_id_list(multi, list) };
1210 let isl_rs_result = match isl_rs_result {
1211 0 => false,
1212 1 => true,
1213 _ => panic!("Got isl_bool = -1"),
1214 };
1215 let err = isl_rs_ctx.last_error();
1216 if err != Error::None_ {
1217 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1218 }
1219 Ok(isl_rs_result)
1220 }
1221
1222 pub fn is_cst(&self) -> Result<bool, LibISLError> {
1224 let mpa = self;
1225 let isl_rs_ctx = mpa.get_ctx();
1226 let mpa = mpa.ptr;
1227 let isl_rs_result = unsafe { isl_multi_pw_aff_is_cst(mpa) };
1228 let isl_rs_result = match isl_rs_result {
1229 0 => false,
1230 1 => true,
1231 _ => panic!("Got isl_bool = -1"),
1232 };
1233 let err = isl_rs_ctx.last_error();
1234 if err != Error::None_ {
1235 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1236 }
1237 Ok(isl_rs_result)
1238 }
1239
1240 pub fn is_equal(&self, mpa2: &MultiPwAff) -> Result<bool, LibISLError> {
1242 let mpa1 = self;
1243 let isl_rs_ctx = mpa1.get_ctx();
1244 let mpa1 = mpa1.ptr;
1245 let mpa2 = mpa2.ptr;
1246 let isl_rs_result = unsafe { isl_multi_pw_aff_is_equal(mpa1, mpa2) };
1247 let isl_rs_result = match isl_rs_result {
1248 0 => false,
1249 1 => true,
1250 _ => panic!("Got isl_bool = -1"),
1251 };
1252 let err = isl_rs_ctx.last_error();
1253 if err != Error::None_ {
1254 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1255 }
1256 Ok(isl_rs_result)
1257 }
1258
1259 pub fn isa_multi_aff(&self) -> Result<bool, LibISLError> {
1261 let mpa = self;
1262 let isl_rs_ctx = mpa.get_ctx();
1263 let mpa = mpa.ptr;
1264 let isl_rs_result = unsafe { isl_multi_pw_aff_isa_multi_aff(mpa) };
1265 let isl_rs_result = match isl_rs_result {
1266 0 => false,
1267 1 => true,
1268 _ => panic!("Got isl_bool = -1"),
1269 };
1270 let err = isl_rs_ctx.last_error();
1271 if err != Error::None_ {
1272 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1273 }
1274 Ok(isl_rs_result)
1275 }
1276
1277 pub fn lex_ge_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1279 let mpa1 = self;
1280 let isl_rs_ctx = mpa1.get_ctx();
1281 let mut mpa1 = mpa1;
1282 mpa1.do_not_free_on_drop();
1283 let mpa1 = mpa1.ptr;
1284 let mut mpa2 = mpa2;
1285 mpa2.do_not_free_on_drop();
1286 let mpa2 = mpa2.ptr;
1287 let isl_rs_result = unsafe { isl_multi_pw_aff_lex_ge_map(mpa1, mpa2) };
1288 let isl_rs_result = Map { ptr: isl_rs_result,
1289 should_free_on_drop: true };
1290 let err = isl_rs_ctx.last_error();
1291 if err != Error::None_ {
1292 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1293 }
1294 Ok(isl_rs_result)
1295 }
1296
1297 pub fn lex_gt_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1299 let mpa1 = self;
1300 let isl_rs_ctx = mpa1.get_ctx();
1301 let mut mpa1 = mpa1;
1302 mpa1.do_not_free_on_drop();
1303 let mpa1 = mpa1.ptr;
1304 let mut mpa2 = mpa2;
1305 mpa2.do_not_free_on_drop();
1306 let mpa2 = mpa2.ptr;
1307 let isl_rs_result = unsafe { isl_multi_pw_aff_lex_gt_map(mpa1, mpa2) };
1308 let isl_rs_result = Map { ptr: isl_rs_result,
1309 should_free_on_drop: true };
1310 let err = isl_rs_ctx.last_error();
1311 if err != Error::None_ {
1312 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1313 }
1314 Ok(isl_rs_result)
1315 }
1316
1317 pub fn lex_le_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1319 let mpa1 = self;
1320 let isl_rs_ctx = mpa1.get_ctx();
1321 let mut mpa1 = mpa1;
1322 mpa1.do_not_free_on_drop();
1323 let mpa1 = mpa1.ptr;
1324 let mut mpa2 = mpa2;
1325 mpa2.do_not_free_on_drop();
1326 let mpa2 = mpa2.ptr;
1327 let isl_rs_result = unsafe { isl_multi_pw_aff_lex_le_map(mpa1, mpa2) };
1328 let isl_rs_result = Map { ptr: isl_rs_result,
1329 should_free_on_drop: true };
1330 let err = isl_rs_ctx.last_error();
1331 if err != Error::None_ {
1332 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1333 }
1334 Ok(isl_rs_result)
1335 }
1336
1337 pub fn lex_lt_map(self, mpa2: MultiPwAff) -> Result<Map, LibISLError> {
1339 let mpa1 = self;
1340 let isl_rs_ctx = mpa1.get_ctx();
1341 let mut mpa1 = mpa1;
1342 mpa1.do_not_free_on_drop();
1343 let mpa1 = mpa1.ptr;
1344 let mut mpa2 = mpa2;
1345 mpa2.do_not_free_on_drop();
1346 let mpa2 = mpa2.ptr;
1347 let isl_rs_result = unsafe { isl_multi_pw_aff_lex_lt_map(mpa1, mpa2) };
1348 let isl_rs_result = Map { ptr: isl_rs_result,
1349 should_free_on_drop: true };
1350 let err = isl_rs_ctx.last_error();
1351 if err != Error::None_ {
1352 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1353 }
1354 Ok(isl_rs_result)
1355 }
1356
1357 pub fn max(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1359 let multi1 = self;
1360 let isl_rs_ctx = multi1.get_ctx();
1361 let mut multi1 = multi1;
1362 multi1.do_not_free_on_drop();
1363 let multi1 = multi1.ptr;
1364 let mut multi2 = multi2;
1365 multi2.do_not_free_on_drop();
1366 let multi2 = multi2.ptr;
1367 let isl_rs_result = unsafe { isl_multi_pw_aff_max(multi1, multi2) };
1368 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1369 should_free_on_drop: true };
1370 let err = isl_rs_ctx.last_error();
1371 if err != Error::None_ {
1372 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1373 }
1374 Ok(isl_rs_result)
1375 }
1376
1377 pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1379 let mpa = self;
1380 let isl_rs_ctx = mpa.get_ctx();
1381 let mut mpa = mpa;
1382 mpa.do_not_free_on_drop();
1383 let mpa = mpa.ptr;
1384 let isl_rs_result = unsafe { isl_multi_pw_aff_max_multi_val(mpa) };
1385 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1386 should_free_on_drop: true };
1387 let err = isl_rs_ctx.last_error();
1388 if err != Error::None_ {
1389 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1390 }
1391 Ok(isl_rs_result)
1392 }
1393
1394 pub fn min(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1396 let multi1 = self;
1397 let isl_rs_ctx = multi1.get_ctx();
1398 let mut multi1 = multi1;
1399 multi1.do_not_free_on_drop();
1400 let multi1 = multi1.ptr;
1401 let mut multi2 = multi2;
1402 multi2.do_not_free_on_drop();
1403 let multi2 = multi2.ptr;
1404 let isl_rs_result = unsafe { isl_multi_pw_aff_min(multi1, multi2) };
1405 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1406 should_free_on_drop: true };
1407 let err = isl_rs_ctx.last_error();
1408 if err != Error::None_ {
1409 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1410 }
1411 Ok(isl_rs_result)
1412 }
1413
1414 pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1416 let mpa = self;
1417 let isl_rs_ctx = mpa.get_ctx();
1418 let mut mpa = mpa;
1419 mpa.do_not_free_on_drop();
1420 let mpa = mpa.ptr;
1421 let isl_rs_result = unsafe { isl_multi_pw_aff_min_multi_val(mpa) };
1422 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1423 should_free_on_drop: true };
1424 let err = isl_rs_ctx.last_error();
1425 if err != Error::None_ {
1426 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1427 }
1428 Ok(isl_rs_result)
1429 }
1430
1431 pub fn mod_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1433 let multi = self;
1434 let isl_rs_ctx = multi.get_ctx();
1435 let mut multi = multi;
1436 multi.do_not_free_on_drop();
1437 let multi = multi.ptr;
1438 let mut mv = mv;
1439 mv.do_not_free_on_drop();
1440 let mv = mv.ptr;
1441 let isl_rs_result = unsafe { isl_multi_pw_aff_mod_multi_val(multi, mv) };
1442 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1443 should_free_on_drop: true };
1444 let err = isl_rs_ctx.last_error();
1445 if err != Error::None_ {
1446 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1447 }
1448 Ok(isl_rs_result)
1449 }
1450
1451 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1453 n: u32)
1454 -> Result<MultiPwAff, LibISLError> {
1455 let pma = self;
1456 let isl_rs_ctx = pma.get_ctx();
1457 let mut pma = pma;
1458 pma.do_not_free_on_drop();
1459 let pma = pma.ptr;
1460 let dst_type = dst_type.to_i32();
1461 let src_type = src_type.to_i32();
1462 let isl_rs_result =
1463 unsafe { isl_multi_pw_aff_move_dims(pma, dst_type, dst_pos, src_type, src_pos, n) };
1464 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1465 should_free_on_drop: true };
1466 let err = isl_rs_ctx.last_error();
1467 if err != Error::None_ {
1468 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1469 }
1470 Ok(isl_rs_result)
1471 }
1472
1473 pub fn neg(self) -> Result<MultiPwAff, LibISLError> {
1475 let multi = self;
1476 let isl_rs_ctx = multi.get_ctx();
1477 let mut multi = multi;
1478 multi.do_not_free_on_drop();
1479 let multi = multi.ptr;
1480 let isl_rs_result = unsafe { isl_multi_pw_aff_neg(multi) };
1481 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1482 should_free_on_drop: true };
1483 let err = isl_rs_ctx.last_error();
1484 if err != Error::None_ {
1485 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1486 }
1487 Ok(isl_rs_result)
1488 }
1489
1490 pub fn plain_is_equal(&self, multi2: &MultiPwAff) -> Result<bool, LibISLError> {
1492 let multi1 = self;
1493 let isl_rs_ctx = multi1.get_ctx();
1494 let multi1 = multi1.ptr;
1495 let multi2 = multi2.ptr;
1496 let isl_rs_result = unsafe { isl_multi_pw_aff_plain_is_equal(multi1, multi2) };
1497 let isl_rs_result = match isl_rs_result {
1498 0 => false,
1499 1 => true,
1500 _ => panic!("Got isl_bool = -1"),
1501 };
1502 let err = isl_rs_ctx.last_error();
1503 if err != Error::None_ {
1504 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1505 }
1506 Ok(isl_rs_result)
1507 }
1508
1509 pub fn product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1511 let multi1 = self;
1512 let isl_rs_ctx = multi1.get_ctx();
1513 let mut multi1 = multi1;
1514 multi1.do_not_free_on_drop();
1515 let multi1 = multi1.ptr;
1516 let mut multi2 = multi2;
1517 multi2.do_not_free_on_drop();
1518 let multi2 = multi2.ptr;
1519 let isl_rs_result = unsafe { isl_multi_pw_aff_product(multi1, multi2) };
1520 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1521 should_free_on_drop: true };
1522 let err = isl_rs_ctx.last_error();
1523 if err != Error::None_ {
1524 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1525 }
1526 Ok(isl_rs_result)
1527 }
1528
1529 pub fn project_domain_on_params(self) -> Result<MultiPwAff, LibISLError> {
1531 let multi = self;
1532 let isl_rs_ctx = multi.get_ctx();
1533 let mut multi = multi;
1534 multi.do_not_free_on_drop();
1535 let multi = multi.ptr;
1536 let isl_rs_result = unsafe { isl_multi_pw_aff_project_domain_on_params(multi) };
1537 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1538 should_free_on_drop: true };
1539 let err = isl_rs_ctx.last_error();
1540 if err != Error::None_ {
1541 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1542 }
1543 Ok(isl_rs_result)
1544 }
1545
1546 pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<MultiPwAff, LibISLError> {
1548 let mpa = self;
1549 let isl_rs_ctx = mpa.get_ctx();
1550 let mut mpa = mpa;
1551 mpa.do_not_free_on_drop();
1552 let mpa = mpa.ptr;
1553 let mut ma = ma;
1554 ma.do_not_free_on_drop();
1555 let ma = ma.ptr;
1556 let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_multi_aff(mpa, ma) };
1557 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1558 should_free_on_drop: true };
1559 let err = isl_rs_ctx.last_error();
1560 if err != Error::None_ {
1561 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1562 }
1563 Ok(isl_rs_result)
1564 }
1565
1566 pub fn pullback_multi_pw_aff(self, mpa2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1568 let mpa1 = self;
1569 let isl_rs_ctx = mpa1.get_ctx();
1570 let mut mpa1 = mpa1;
1571 mpa1.do_not_free_on_drop();
1572 let mpa1 = mpa1.ptr;
1573 let mut mpa2 = mpa2;
1574 mpa2.do_not_free_on_drop();
1575 let mpa2 = mpa2.ptr;
1576 let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_multi_pw_aff(mpa1, mpa2) };
1577 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1578 should_free_on_drop: true };
1579 let err = isl_rs_ctx.last_error();
1580 if err != Error::None_ {
1581 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1582 }
1583 Ok(isl_rs_result)
1584 }
1585
1586 pub fn pullback_pw_multi_aff(self, pma: PwMultiAff) -> Result<MultiPwAff, LibISLError> {
1588 let mpa = self;
1589 let isl_rs_ctx = mpa.get_ctx();
1590 let mut mpa = mpa;
1591 mpa.do_not_free_on_drop();
1592 let mpa = mpa.ptr;
1593 let mut pma = pma;
1594 pma.do_not_free_on_drop();
1595 let pma = pma.ptr;
1596 let isl_rs_result = unsafe { isl_multi_pw_aff_pullback_pw_multi_aff(mpa, pma) };
1597 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1598 should_free_on_drop: true };
1599 let err = isl_rs_ctx.last_error();
1600 if err != Error::None_ {
1601 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1602 }
1603 Ok(isl_rs_result)
1604 }
1605
1606 pub fn range_factor_domain(self) -> Result<MultiPwAff, LibISLError> {
1608 let multi = self;
1609 let isl_rs_ctx = multi.get_ctx();
1610 let mut multi = multi;
1611 multi.do_not_free_on_drop();
1612 let multi = multi.ptr;
1613 let isl_rs_result = unsafe { isl_multi_pw_aff_range_factor_domain(multi) };
1614 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1615 should_free_on_drop: true };
1616 let err = isl_rs_ctx.last_error();
1617 if err != Error::None_ {
1618 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1619 }
1620 Ok(isl_rs_result)
1621 }
1622
1623 pub fn range_factor_range(self) -> Result<MultiPwAff, LibISLError> {
1625 let multi = self;
1626 let isl_rs_ctx = multi.get_ctx();
1627 let mut multi = multi;
1628 multi.do_not_free_on_drop();
1629 let multi = multi.ptr;
1630 let isl_rs_result = unsafe { isl_multi_pw_aff_range_factor_range(multi) };
1631 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1632 should_free_on_drop: true };
1633 let err = isl_rs_ctx.last_error();
1634 if err != Error::None_ {
1635 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1636 }
1637 Ok(isl_rs_result)
1638 }
1639
1640 pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
1642 let multi = self;
1643 let isl_rs_ctx = multi.get_ctx();
1644 let multi = multi.ptr;
1645 let isl_rs_result = unsafe { isl_multi_pw_aff_range_is_wrapping(multi) };
1646 let isl_rs_result = match isl_rs_result {
1647 0 => false,
1648 1 => true,
1649 _ => panic!("Got isl_bool = -1"),
1650 };
1651 let err = isl_rs_ctx.last_error();
1652 if err != Error::None_ {
1653 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1654 }
1655 Ok(isl_rs_result)
1656 }
1657
1658 pub fn range_product(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1660 let multi1 = self;
1661 let isl_rs_ctx = multi1.get_ctx();
1662 let mut multi1 = multi1;
1663 multi1.do_not_free_on_drop();
1664 let multi1 = multi1.ptr;
1665 let mut multi2 = multi2;
1666 multi2.do_not_free_on_drop();
1667 let multi2 = multi2.ptr;
1668 let isl_rs_result = unsafe { isl_multi_pw_aff_range_product(multi1, multi2) };
1669 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1670 should_free_on_drop: true };
1671 let err = isl_rs_ctx.last_error();
1672 if err != Error::None_ {
1673 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1674 }
1675 Ok(isl_rs_result)
1676 }
1677
1678 pub fn range_splice(self, pos: u32, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
1680 let multi1 = self;
1681 let isl_rs_ctx = multi1.get_ctx();
1682 let mut multi1 = multi1;
1683 multi1.do_not_free_on_drop();
1684 let multi1 = multi1.ptr;
1685 let mut multi2 = multi2;
1686 multi2.do_not_free_on_drop();
1687 let multi2 = multi2.ptr;
1688 let isl_rs_result = unsafe { isl_multi_pw_aff_range_splice(multi1, pos, multi2) };
1689 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1690 should_free_on_drop: true };
1691 let err = isl_rs_ctx.last_error();
1692 if err != Error::None_ {
1693 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1694 }
1695 Ok(isl_rs_result)
1696 }
1697
1698 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<MultiPwAff, LibISLError> {
1700 let isl_rs_ctx = Context { ptr: ctx.ptr,
1701 should_free_on_drop: false };
1702 let ctx = ctx.ptr;
1703 let str_ = CString::new(str_).unwrap();
1704 let str_ = str_.as_ptr();
1705 let isl_rs_result = unsafe { isl_multi_pw_aff_read_from_str(ctx, str_) };
1706 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1707 should_free_on_drop: true };
1708 let err = isl_rs_ctx.last_error();
1709 if err != Error::None_ {
1710 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1711 }
1712 Ok(isl_rs_result)
1713 }
1714
1715 pub fn reset_range_tuple_id(self) -> Result<MultiPwAff, LibISLError> {
1717 let multi = self;
1718 let isl_rs_ctx = multi.get_ctx();
1719 let mut multi = multi;
1720 multi.do_not_free_on_drop();
1721 let multi = multi.ptr;
1722 let isl_rs_result = unsafe { isl_multi_pw_aff_reset_range_tuple_id(multi) };
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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1728 }
1729 Ok(isl_rs_result)
1730 }
1731
1732 pub fn reset_tuple_id(self, type_: DimType) -> Result<MultiPwAff, LibISLError> {
1734 let multi = self;
1735 let isl_rs_ctx = multi.get_ctx();
1736 let mut multi = multi;
1737 multi.do_not_free_on_drop();
1738 let multi = multi.ptr;
1739 let type_ = type_.to_i32();
1740 let isl_rs_result = unsafe { isl_multi_pw_aff_reset_tuple_id(multi, type_) };
1741 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1742 should_free_on_drop: true };
1743 let err = isl_rs_ctx.last_error();
1744 if err != Error::None_ {
1745 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1746 }
1747 Ok(isl_rs_result)
1748 }
1749
1750 pub fn reset_user(self) -> Result<MultiPwAff, LibISLError> {
1752 let multi = self;
1753 let isl_rs_ctx = multi.get_ctx();
1754 let mut multi = multi;
1755 multi.do_not_free_on_drop();
1756 let multi = multi.ptr;
1757 let isl_rs_result = unsafe { isl_multi_pw_aff_reset_user(multi) };
1758 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1759 should_free_on_drop: true };
1760 let err = isl_rs_ctx.last_error();
1761 if err != Error::None_ {
1762 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1763 }
1764 Ok(isl_rs_result)
1765 }
1766
1767 pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1769 let multi = self;
1770 let isl_rs_ctx = multi.get_ctx();
1771 let mut multi = multi;
1772 multi.do_not_free_on_drop();
1773 let multi = multi.ptr;
1774 let mut mv = mv;
1775 mv.do_not_free_on_drop();
1776 let mv = mv.ptr;
1777 let isl_rs_result = unsafe { isl_multi_pw_aff_scale_down_multi_val(multi, mv) };
1778 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1779 should_free_on_drop: true };
1780 let err = isl_rs_ctx.last_error();
1781 if err != Error::None_ {
1782 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1783 }
1784 Ok(isl_rs_result)
1785 }
1786
1787 pub fn scale_down_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
1789 let multi = self;
1790 let isl_rs_ctx = multi.get_ctx();
1791 let mut multi = multi;
1792 multi.do_not_free_on_drop();
1793 let multi = multi.ptr;
1794 let mut v = v;
1795 v.do_not_free_on_drop();
1796 let v = v.ptr;
1797 let isl_rs_result = unsafe { isl_multi_pw_aff_scale_down_val(multi, v) };
1798 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1799 should_free_on_drop: true };
1800 let err = isl_rs_ctx.last_error();
1801 if err != Error::None_ {
1802 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1803 }
1804 Ok(isl_rs_result)
1805 }
1806
1807 pub fn scale_multi_val(self, mv: MultiVal) -> Result<MultiPwAff, LibISLError> {
1809 let multi = self;
1810 let isl_rs_ctx = multi.get_ctx();
1811 let mut multi = multi;
1812 multi.do_not_free_on_drop();
1813 let multi = multi.ptr;
1814 let mut mv = mv;
1815 mv.do_not_free_on_drop();
1816 let mv = mv.ptr;
1817 let isl_rs_result = unsafe { isl_multi_pw_aff_scale_multi_val(multi, mv) };
1818 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1819 should_free_on_drop: true };
1820 let err = isl_rs_ctx.last_error();
1821 if err != Error::None_ {
1822 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1823 }
1824 Ok(isl_rs_result)
1825 }
1826
1827 pub fn scale_val(self, v: Val) -> Result<MultiPwAff, LibISLError> {
1829 let multi = self;
1830 let isl_rs_ctx = multi.get_ctx();
1831 let mut multi = multi;
1832 multi.do_not_free_on_drop();
1833 let multi = multi.ptr;
1834 let mut v = v;
1835 v.do_not_free_on_drop();
1836 let v = v.ptr;
1837 let isl_rs_result = unsafe { isl_multi_pw_aff_scale_val(multi, v) };
1838 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1839 should_free_on_drop: true };
1840 let err = isl_rs_ctx.last_error();
1841 if err != Error::None_ {
1842 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1843 }
1844 Ok(isl_rs_result)
1845 }
1846
1847 pub fn set_at(self, pos: i32, el: PwAff) -> Result<MultiPwAff, LibISLError> {
1849 let multi = self;
1850 let isl_rs_ctx = multi.get_ctx();
1851 let mut multi = multi;
1852 multi.do_not_free_on_drop();
1853 let multi = multi.ptr;
1854 let mut el = el;
1855 el.do_not_free_on_drop();
1856 let el = el.ptr;
1857 let isl_rs_result = unsafe { isl_multi_pw_aff_set_at(multi, pos, el) };
1858 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1859 should_free_on_drop: true };
1860 let err = isl_rs_ctx.last_error();
1861 if err != Error::None_ {
1862 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1863 }
1864 Ok(isl_rs_result)
1865 }
1866
1867 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<MultiPwAff, LibISLError> {
1869 let multi = self;
1870 let isl_rs_ctx = multi.get_ctx();
1871 let mut multi = multi;
1872 multi.do_not_free_on_drop();
1873 let multi = multi.ptr;
1874 let type_ = type_.to_i32();
1875 let mut id = id;
1876 id.do_not_free_on_drop();
1877 let id = id.ptr;
1878 let isl_rs_result = unsafe { isl_multi_pw_aff_set_dim_id(multi, type_, pos, id) };
1879 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1880 should_free_on_drop: true };
1881 let err = isl_rs_ctx.last_error();
1882 if err != Error::None_ {
1883 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1884 }
1885 Ok(isl_rs_result)
1886 }
1887
1888 pub fn set_dim_name(self, type_: DimType, pos: u32, s: &str)
1890 -> Result<MultiPwAff, LibISLError> {
1891 let multi = self;
1892 let isl_rs_ctx = multi.get_ctx();
1893 let mut multi = multi;
1894 multi.do_not_free_on_drop();
1895 let multi = multi.ptr;
1896 let type_ = type_.to_i32();
1897 let s = CString::new(s).unwrap();
1898 let s = s.as_ptr();
1899 let isl_rs_result = unsafe { isl_multi_pw_aff_set_dim_name(multi, type_, pos, s) };
1900 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1901 should_free_on_drop: true };
1902 let err = isl_rs_ctx.last_error();
1903 if err != Error::None_ {
1904 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1905 }
1906 Ok(isl_rs_result)
1907 }
1908
1909 pub fn set_pw_aff(self, pos: i32, el: PwAff) -> Result<MultiPwAff, LibISLError> {
1911 let multi = self;
1912 let isl_rs_ctx = multi.get_ctx();
1913 let mut multi = multi;
1914 multi.do_not_free_on_drop();
1915 let multi = multi.ptr;
1916 let mut el = el;
1917 el.do_not_free_on_drop();
1918 let el = el.ptr;
1919 let isl_rs_result = unsafe { isl_multi_pw_aff_set_pw_aff(multi, pos, el) };
1920 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1921 should_free_on_drop: true };
1922 let err = isl_rs_ctx.last_error();
1923 if err != Error::None_ {
1924 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1925 }
1926 Ok(isl_rs_result)
1927 }
1928
1929 pub fn set_range_tuple_id(self, id: Id) -> Result<MultiPwAff, LibISLError> {
1931 let multi = self;
1932 let isl_rs_ctx = multi.get_ctx();
1933 let mut multi = multi;
1934 multi.do_not_free_on_drop();
1935 let multi = multi.ptr;
1936 let mut id = id;
1937 id.do_not_free_on_drop();
1938 let id = id.ptr;
1939 let isl_rs_result = unsafe { isl_multi_pw_aff_set_range_tuple_id(multi, id) };
1940 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1941 should_free_on_drop: true };
1942 let err = isl_rs_ctx.last_error();
1943 if err != Error::None_ {
1944 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1945 }
1946 Ok(isl_rs_result)
1947 }
1948
1949 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<MultiPwAff, LibISLError> {
1951 let multi = self;
1952 let isl_rs_ctx = multi.get_ctx();
1953 let mut multi = multi;
1954 multi.do_not_free_on_drop();
1955 let multi = multi.ptr;
1956 let type_ = type_.to_i32();
1957 let mut id = id;
1958 id.do_not_free_on_drop();
1959 let id = id.ptr;
1960 let isl_rs_result = unsafe { isl_multi_pw_aff_set_tuple_id(multi, type_, id) };
1961 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1962 should_free_on_drop: true };
1963 let err = isl_rs_ctx.last_error();
1964 if err != Error::None_ {
1965 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1966 }
1967 Ok(isl_rs_result)
1968 }
1969
1970 pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<MultiPwAff, LibISLError> {
1972 let multi = self;
1973 let isl_rs_ctx = multi.get_ctx();
1974 let mut multi = multi;
1975 multi.do_not_free_on_drop();
1976 let multi = multi.ptr;
1977 let type_ = type_.to_i32();
1978 let s = CString::new(s).unwrap();
1979 let s = s.as_ptr();
1980 let isl_rs_result = unsafe { isl_multi_pw_aff_set_tuple_name(multi, type_, s) };
1981 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1982 should_free_on_drop: true };
1983 let err = isl_rs_ctx.last_error();
1984 if err != Error::None_ {
1985 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1986 }
1987 Ok(isl_rs_result)
1988 }
1989
1990 pub fn size(&self) -> Result<i32, LibISLError> {
1992 let multi = self;
1993 let isl_rs_ctx = multi.get_ctx();
1994 let multi = multi.ptr;
1995 let isl_rs_result = unsafe { isl_multi_pw_aff_size(multi) };
1996 let err = isl_rs_ctx.last_error();
1997 if err != Error::None_ {
1998 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1999 }
2000 Ok(isl_rs_result)
2001 }
2002
2003 pub fn splice(self, in_pos: u32, out_pos: u32, multi2: MultiPwAff)
2005 -> Result<MultiPwAff, LibISLError> {
2006 let multi1 = self;
2007 let isl_rs_ctx = multi1.get_ctx();
2008 let mut multi1 = multi1;
2009 multi1.do_not_free_on_drop();
2010 let multi1 = multi1.ptr;
2011 let mut multi2 = multi2;
2012 multi2.do_not_free_on_drop();
2013 let multi2 = multi2.ptr;
2014 let isl_rs_result = unsafe { isl_multi_pw_aff_splice(multi1, in_pos, out_pos, multi2) };
2015 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2016 should_free_on_drop: true };
2017 let err = isl_rs_ctx.last_error();
2018 if err != Error::None_ {
2019 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2020 }
2021 Ok(isl_rs_result)
2022 }
2023
2024 pub fn sub(self, multi2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
2026 let multi1 = self;
2027 let isl_rs_ctx = multi1.get_ctx();
2028 let mut multi1 = multi1;
2029 multi1.do_not_free_on_drop();
2030 let multi1 = multi1.ptr;
2031 let mut multi2 = multi2;
2032 multi2.do_not_free_on_drop();
2033 let multi2 = multi2.ptr;
2034 let isl_rs_result = unsafe { isl_multi_pw_aff_sub(multi1, multi2) };
2035 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2036 should_free_on_drop: true };
2037 let err = isl_rs_ctx.last_error();
2038 if err != Error::None_ {
2039 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2040 }
2041 Ok(isl_rs_result)
2042 }
2043
2044 pub fn to_str(&self) -> Result<&str, LibISLError> {
2046 let mpa = self;
2047 let isl_rs_ctx = mpa.get_ctx();
2048 let mpa = mpa.ptr;
2049 let isl_rs_result = unsafe { isl_multi_pw_aff_to_str(mpa) };
2050 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2051 let isl_rs_result = isl_rs_result.to_str().unwrap();
2052 let err = isl_rs_ctx.last_error();
2053 if err != Error::None_ {
2054 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2055 }
2056 Ok(isl_rs_result)
2057 }
2058
2059 pub fn unbind_params_insert_domain(self, domain: MultiId) -> Result<MultiPwAff, LibISLError> {
2061 let multi = self;
2062 let isl_rs_ctx = multi.get_ctx();
2063 let mut multi = multi;
2064 multi.do_not_free_on_drop();
2065 let multi = multi.ptr;
2066 let mut domain = domain;
2067 domain.do_not_free_on_drop();
2068 let domain = domain.ptr;
2069 let isl_rs_result = unsafe { isl_multi_pw_aff_unbind_params_insert_domain(multi, domain) };
2070 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2071 should_free_on_drop: true };
2072 let err = isl_rs_ctx.last_error();
2073 if err != Error::None_ {
2074 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2075 }
2076 Ok(isl_rs_result)
2077 }
2078
2079 pub fn union_add(self, mpa2: MultiPwAff) -> Result<MultiPwAff, LibISLError> {
2081 let mpa1 = self;
2082 let isl_rs_ctx = mpa1.get_ctx();
2083 let mut mpa1 = mpa1;
2084 mpa1.do_not_free_on_drop();
2085 let mpa1 = mpa1.ptr;
2086 let mut mpa2 = mpa2;
2087 mpa2.do_not_free_on_drop();
2088 let mpa2 = mpa2.ptr;
2089 let isl_rs_result = unsafe { isl_multi_pw_aff_union_add(mpa1, mpa2) };
2090 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2091 should_free_on_drop: true };
2092 let err = isl_rs_ctx.last_error();
2093 if err != Error::None_ {
2094 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2095 }
2096 Ok(isl_rs_result)
2097 }
2098
2099 pub fn zero(space: Space) -> Result<MultiPwAff, LibISLError> {
2101 let isl_rs_ctx = space.get_ctx();
2102 let mut space = space;
2103 space.do_not_free_on_drop();
2104 let space = space.ptr;
2105 let isl_rs_result = unsafe { isl_multi_pw_aff_zero(space) };
2106 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2107 should_free_on_drop: true };
2108 let err = isl_rs_ctx.last_error();
2109 if err != Error::None_ {
2110 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
2111 }
2112 Ok(isl_rs_result)
2113 }
2114
2115 pub fn do_not_free_on_drop(&mut self) {
2118 self.should_free_on_drop = false;
2119 }
2120}
2121
2122impl Drop for MultiPwAff {
2123 fn drop(&mut self) {
2124 if self.should_free_on_drop {
2125 unsafe {
2126 isl_multi_pw_aff_free(self.ptr);
2127 }
2128 }
2129 }
2130}