1use super::{
5 Context, DimType, Error, Id, LibISLError, Map, MultiAff, MultiId, MultiPwAff, MultiVal, PwAff,
6 PwMultiAffList, Set, Space, UnionPwMultiAff, Val,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct PwMultiAff {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_pw_multi_aff_add(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
21
22 fn isl_pw_multi_aff_add_constant_multi_val(pma: uintptr_t, mv: uintptr_t) -> uintptr_t;
23
24 fn isl_pw_multi_aff_add_constant_val(pma: uintptr_t, v: uintptr_t) -> uintptr_t;
25
26 fn isl_pw_multi_aff_align_params(pma: uintptr_t, model: uintptr_t) -> uintptr_t;
27
28 fn isl_pw_multi_aff_alloc(set: uintptr_t, maff: uintptr_t) -> uintptr_t;
29
30 fn isl_pw_multi_aff_as_map(pma: uintptr_t) -> uintptr_t;
31
32 fn isl_pw_multi_aff_as_multi_aff(pma: uintptr_t) -> uintptr_t;
33
34 fn isl_pw_multi_aff_as_set(pma: uintptr_t) -> uintptr_t;
35
36 fn isl_pw_multi_aff_bind_domain(pma: uintptr_t, tuple: uintptr_t) -> uintptr_t;
37
38 fn isl_pw_multi_aff_bind_domain_wrapped_domain(pma: uintptr_t, tuple: uintptr_t) -> uintptr_t;
39
40 fn isl_pw_multi_aff_coalesce(pma: uintptr_t) -> uintptr_t;
41
42 fn isl_pw_multi_aff_copy(pma: uintptr_t) -> uintptr_t;
43
44 fn isl_pw_multi_aff_dim(pma: uintptr_t, type_: i32) -> i32;
45
46 fn isl_pw_multi_aff_domain(pma: uintptr_t) -> uintptr_t;
47
48 fn isl_pw_multi_aff_domain_map(space: uintptr_t) -> uintptr_t;
49
50 fn isl_pw_multi_aff_domain_reverse(pma: uintptr_t) -> uintptr_t;
51
52 fn isl_pw_multi_aff_drop_dims(pma: uintptr_t, type_: i32, first: u32, n: u32) -> uintptr_t;
53
54 fn isl_pw_multi_aff_drop_unused_params(pma: uintptr_t) -> uintptr_t;
55
56 fn isl_pw_multi_aff_dump(pma: uintptr_t) -> ();
57
58 fn isl_pw_multi_aff_empty(space: uintptr_t) -> uintptr_t;
59
60 fn isl_pw_multi_aff_find_dim_by_name(pma: uintptr_t, type_: i32, name: *const c_char) -> i32;
61
62 fn isl_pw_multi_aff_fix_si(pma: uintptr_t, type_: i32, pos: u32, value: i32) -> uintptr_t;
63
64 fn isl_pw_multi_aff_flat_range_product(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
65
66 fn isl_pw_multi_aff_free(pma: uintptr_t) -> uintptr_t;
67
68 fn isl_pw_multi_aff_from_domain(set: uintptr_t) -> uintptr_t;
69
70 fn isl_pw_multi_aff_from_map(map: uintptr_t) -> uintptr_t;
71
72 fn isl_pw_multi_aff_from_multi_aff(ma: uintptr_t) -> uintptr_t;
73
74 fn isl_pw_multi_aff_from_multi_pw_aff(mpa: uintptr_t) -> uintptr_t;
75
76 fn isl_pw_multi_aff_from_pw_aff(pa: uintptr_t) -> uintptr_t;
77
78 fn isl_pw_multi_aff_from_set(set: uintptr_t) -> uintptr_t;
79
80 fn isl_pw_multi_aff_get_at(pma: uintptr_t, pos: i32) -> uintptr_t;
81
82 fn isl_pw_multi_aff_get_ctx(pma: uintptr_t) -> uintptr_t;
83
84 fn isl_pw_multi_aff_get_dim_id(pma: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
85
86 fn isl_pw_multi_aff_get_dim_name(pma: uintptr_t, type_: i32, pos: u32) -> *const c_char;
87
88 fn isl_pw_multi_aff_get_domain_space(pma: uintptr_t) -> uintptr_t;
89
90 fn isl_pw_multi_aff_get_pw_aff(pma: uintptr_t, pos: i32) -> uintptr_t;
91
92 fn isl_pw_multi_aff_get_range_tuple_id(pma: uintptr_t) -> uintptr_t;
93
94 fn isl_pw_multi_aff_get_space(pma: uintptr_t) -> uintptr_t;
95
96 fn isl_pw_multi_aff_get_tuple_id(pma: uintptr_t, type_: i32) -> uintptr_t;
97
98 fn isl_pw_multi_aff_get_tuple_name(pma: uintptr_t, type_: i32) -> *const c_char;
99
100 fn isl_pw_multi_aff_gist(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
101
102 fn isl_pw_multi_aff_gist_params(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
103
104 fn isl_pw_multi_aff_has_range_tuple_id(pma: uintptr_t) -> i32;
105
106 fn isl_pw_multi_aff_has_tuple_id(pma: uintptr_t, type_: i32) -> i32;
107
108 fn isl_pw_multi_aff_has_tuple_name(pma: uintptr_t, type_: i32) -> i32;
109
110 fn isl_pw_multi_aff_identity(space: uintptr_t) -> uintptr_t;
111
112 fn isl_pw_multi_aff_identity_on_domain_space(space: uintptr_t) -> uintptr_t;
113
114 fn isl_pw_multi_aff_insert_domain(pma: uintptr_t, domain: uintptr_t) -> uintptr_t;
115
116 fn isl_pw_multi_aff_intersect_domain(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
117
118 fn isl_pw_multi_aff_intersect_domain_wrapped_domain(pma: uintptr_t, set: uintptr_t)
119 -> uintptr_t;
120
121 fn isl_pw_multi_aff_intersect_domain_wrapped_range(pma: uintptr_t, set: uintptr_t)
122 -> uintptr_t;
123
124 fn isl_pw_multi_aff_intersect_params(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
125
126 fn isl_pw_multi_aff_involves_dims(pma: uintptr_t, type_: i32, first: u32, n: u32) -> i32;
127
128 fn isl_pw_multi_aff_involves_locals(pma: uintptr_t) -> i32;
129
130 fn isl_pw_multi_aff_involves_nan(pma: uintptr_t) -> i32;
131
132 fn isl_pw_multi_aff_involves_param_id(pma: uintptr_t, id: uintptr_t) -> i32;
133
134 fn isl_pw_multi_aff_is_equal(pma1: uintptr_t, pma2: uintptr_t) -> i32;
135
136 fn isl_pw_multi_aff_isa_multi_aff(pma: uintptr_t) -> i32;
137
138 fn isl_pw_multi_aff_max_multi_val(pma: uintptr_t) -> uintptr_t;
139
140 fn isl_pw_multi_aff_min_multi_val(pma: uintptr_t) -> uintptr_t;
141
142 fn isl_pw_multi_aff_multi_val_on_domain(domain: uintptr_t, mv: uintptr_t) -> uintptr_t;
143
144 fn isl_pw_multi_aff_n_piece(pma: uintptr_t) -> i32;
145
146 fn isl_pw_multi_aff_neg(pma: uintptr_t) -> uintptr_t;
147
148 fn isl_pw_multi_aff_plain_is_equal(pma1: uintptr_t, pma2: uintptr_t) -> i32;
149
150 fn isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(pma1: uintptr_t,
151 pma2: uintptr_t)
152 -> uintptr_t;
153
154 fn isl_pw_multi_aff_product(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
155
156 fn isl_pw_multi_aff_project_domain_on_params(pma: uintptr_t) -> uintptr_t;
157
158 fn isl_pw_multi_aff_project_out_map(space: uintptr_t, type_: i32, first: u32, n: u32)
159 -> uintptr_t;
160
161 fn isl_pw_multi_aff_pullback_multi_aff(pma: uintptr_t, ma: uintptr_t) -> uintptr_t;
162
163 fn isl_pw_multi_aff_pullback_pw_multi_aff(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
164
165 fn isl_pw_multi_aff_range_factor_domain(pma: uintptr_t) -> uintptr_t;
166
167 fn isl_pw_multi_aff_range_factor_range(pma: uintptr_t) -> uintptr_t;
168
169 fn isl_pw_multi_aff_range_map(space: uintptr_t) -> uintptr_t;
170
171 fn isl_pw_multi_aff_range_product(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
172
173 fn isl_pw_multi_aff_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
174
175 fn isl_pw_multi_aff_reset_tuple_id(pma: uintptr_t, type_: i32) -> uintptr_t;
176
177 fn isl_pw_multi_aff_reset_user(pma: uintptr_t) -> uintptr_t;
178
179 fn isl_pw_multi_aff_scale_down_multi_val(pma: uintptr_t, mv: uintptr_t) -> uintptr_t;
180
181 fn isl_pw_multi_aff_scale_down_val(pma: uintptr_t, v: uintptr_t) -> uintptr_t;
182
183 fn isl_pw_multi_aff_scale_multi_val(pma: uintptr_t, mv: uintptr_t) -> uintptr_t;
184
185 fn isl_pw_multi_aff_scale_val(pma: uintptr_t, v: uintptr_t) -> uintptr_t;
186
187 fn isl_pw_multi_aff_set_dim_id(pma: uintptr_t, type_: i32, pos: u32, id: uintptr_t)
188 -> uintptr_t;
189
190 fn isl_pw_multi_aff_set_pw_aff(pma: uintptr_t, pos: u32, pa: uintptr_t) -> uintptr_t;
191
192 fn isl_pw_multi_aff_set_range_tuple_id(pma: uintptr_t, id: uintptr_t) -> uintptr_t;
193
194 fn isl_pw_multi_aff_set_tuple_id(pma: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
195
196 fn isl_pw_multi_aff_sub(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
197
198 fn isl_pw_multi_aff_subtract_domain(pma: uintptr_t, set: uintptr_t) -> uintptr_t;
199
200 fn isl_pw_multi_aff_to_list(el: uintptr_t) -> uintptr_t;
201
202 fn isl_pw_multi_aff_to_multi_pw_aff(pma: uintptr_t) -> uintptr_t;
203
204 fn isl_pw_multi_aff_to_str(pma: uintptr_t) -> *const c_char;
205
206 fn isl_pw_multi_aff_to_union_pw_multi_aff(pma: uintptr_t) -> uintptr_t;
207
208 fn isl_pw_multi_aff_union_add(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
209
210 fn isl_pw_multi_aff_union_lexmax(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
211
212 fn isl_pw_multi_aff_union_lexmin(pma1: uintptr_t, pma2: uintptr_t) -> uintptr_t;
213
214 fn isl_pw_multi_aff_zero(space: uintptr_t) -> uintptr_t;
215
216}
217
218impl PwMultiAff {
219 pub fn add(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
221 let pma1 = self;
222 let isl_rs_ctx = pma1.get_ctx();
223 let mut pma1 = pma1;
224 pma1.do_not_free_on_drop();
225 let pma1 = pma1.ptr;
226 let mut pma2 = pma2;
227 pma2.do_not_free_on_drop();
228 let pma2 = pma2.ptr;
229 let isl_rs_result = unsafe { isl_pw_multi_aff_add(pma1, pma2) };
230 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
231 should_free_on_drop: true };
232 let err = isl_rs_ctx.last_error();
233 if err != Error::None_ {
234 let err_msg = isl_rs_ctx.last_error_msg();
235 isl_rs_ctx.reset_error();
236 return Err(LibISLError::new(err, err_msg));
237 }
238 Ok(isl_rs_result)
239 }
240
241 pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
243 let pma = self;
244 let isl_rs_ctx = pma.get_ctx();
245 let mut pma = pma;
246 pma.do_not_free_on_drop();
247 let pma = pma.ptr;
248 let mut mv = mv;
249 mv.do_not_free_on_drop();
250 let mv = mv.ptr;
251 let isl_rs_result = unsafe { isl_pw_multi_aff_add_constant_multi_val(pma, mv) };
252 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
253 should_free_on_drop: true };
254 let err = isl_rs_ctx.last_error();
255 if err != Error::None_ {
256 let err_msg = isl_rs_ctx.last_error_msg();
257 isl_rs_ctx.reset_error();
258 return Err(LibISLError::new(err, err_msg));
259 }
260 Ok(isl_rs_result)
261 }
262
263 pub fn add_constant_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
265 let pma = self;
266 let isl_rs_ctx = pma.get_ctx();
267 let mut pma = pma;
268 pma.do_not_free_on_drop();
269 let pma = pma.ptr;
270 let mut v = v;
271 v.do_not_free_on_drop();
272 let v = v.ptr;
273 let isl_rs_result = unsafe { isl_pw_multi_aff_add_constant_val(pma, v) };
274 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
275 should_free_on_drop: true };
276 let err = isl_rs_ctx.last_error();
277 if err != Error::None_ {
278 let err_msg = isl_rs_ctx.last_error_msg();
279 isl_rs_ctx.reset_error();
280 return Err(LibISLError::new(err, err_msg));
281 }
282 Ok(isl_rs_result)
283 }
284
285 pub fn align_params(self, model: Space) -> Result<PwMultiAff, LibISLError> {
287 let pma = self;
288 let isl_rs_ctx = pma.get_ctx();
289 let mut pma = pma;
290 pma.do_not_free_on_drop();
291 let pma = pma.ptr;
292 let mut model = model;
293 model.do_not_free_on_drop();
294 let model = model.ptr;
295 let isl_rs_result = unsafe { isl_pw_multi_aff_align_params(pma, model) };
296 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
297 should_free_on_drop: true };
298 let err = isl_rs_ctx.last_error();
299 if err != Error::None_ {
300 let err_msg = isl_rs_ctx.last_error_msg();
301 isl_rs_ctx.reset_error();
302 return Err(LibISLError::new(err, err_msg));
303 }
304 Ok(isl_rs_result)
305 }
306
307 pub fn alloc(set: Set, maff: MultiAff) -> Result<PwMultiAff, LibISLError> {
309 let isl_rs_ctx = set.get_ctx();
310 let mut set = set;
311 set.do_not_free_on_drop();
312 let set = set.ptr;
313 let mut maff = maff;
314 maff.do_not_free_on_drop();
315 let maff = maff.ptr;
316 let isl_rs_result = unsafe { isl_pw_multi_aff_alloc(set, maff) };
317 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
318 should_free_on_drop: true };
319 let err = isl_rs_ctx.last_error();
320 if err != Error::None_ {
321 let err_msg = isl_rs_ctx.last_error_msg();
322 isl_rs_ctx.reset_error();
323 return Err(LibISLError::new(err, err_msg));
324 }
325 Ok(isl_rs_result)
326 }
327
328 pub fn as_map(self) -> Result<Map, LibISLError> {
330 let pma = self;
331 let isl_rs_ctx = pma.get_ctx();
332 let mut pma = pma;
333 pma.do_not_free_on_drop();
334 let pma = pma.ptr;
335 let isl_rs_result = unsafe { isl_pw_multi_aff_as_map(pma) };
336 let isl_rs_result = Map { 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_multi_aff(self) -> Result<MultiAff, LibISLError> {
349 let pma = self;
350 let isl_rs_ctx = pma.get_ctx();
351 let mut pma = pma;
352 pma.do_not_free_on_drop();
353 let pma = pma.ptr;
354 let isl_rs_result = unsafe { isl_pw_multi_aff_as_multi_aff(pma) };
355 let isl_rs_result = MultiAff { 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_set(self) -> Result<Set, LibISLError> {
368 let pma = self;
369 let isl_rs_ctx = pma.get_ctx();
370 let mut pma = pma;
371 pma.do_not_free_on_drop();
372 let pma = pma.ptr;
373 let isl_rs_result = unsafe { isl_pw_multi_aff_as_set(pma) };
374 let isl_rs_result = Set { 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 bind_domain(self, tuple: MultiId) -> Result<PwMultiAff, LibISLError> {
387 let pma = self;
388 let isl_rs_ctx = pma.get_ctx();
389 let mut pma = pma;
390 pma.do_not_free_on_drop();
391 let pma = pma.ptr;
392 let mut tuple = tuple;
393 tuple.do_not_free_on_drop();
394 let tuple = tuple.ptr;
395 let isl_rs_result = unsafe { isl_pw_multi_aff_bind_domain(pma, tuple) };
396 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
397 should_free_on_drop: true };
398 let err = isl_rs_ctx.last_error();
399 if err != Error::None_ {
400 let err_msg = isl_rs_ctx.last_error_msg();
401 isl_rs_ctx.reset_error();
402 return Err(LibISLError::new(err, err_msg));
403 }
404 Ok(isl_rs_result)
405 }
406
407 pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<PwMultiAff, LibISLError> {
409 let pma = self;
410 let isl_rs_ctx = pma.get_ctx();
411 let mut pma = pma;
412 pma.do_not_free_on_drop();
413 let pma = pma.ptr;
414 let mut tuple = tuple;
415 tuple.do_not_free_on_drop();
416 let tuple = tuple.ptr;
417 let isl_rs_result = unsafe { isl_pw_multi_aff_bind_domain_wrapped_domain(pma, tuple) };
418 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
419 should_free_on_drop: true };
420 let err = isl_rs_ctx.last_error();
421 if err != Error::None_ {
422 let err_msg = isl_rs_ctx.last_error_msg();
423 isl_rs_ctx.reset_error();
424 return Err(LibISLError::new(err, err_msg));
425 }
426 Ok(isl_rs_result)
427 }
428
429 pub fn coalesce(self) -> Result<PwMultiAff, LibISLError> {
431 let pma = self;
432 let isl_rs_ctx = pma.get_ctx();
433 let mut pma = pma;
434 pma.do_not_free_on_drop();
435 let pma = pma.ptr;
436 let isl_rs_result = unsafe { isl_pw_multi_aff_coalesce(pma) };
437 let isl_rs_result = PwMultiAff { 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 copy(&self) -> Result<PwMultiAff, LibISLError> {
450 let pma = self;
451 let isl_rs_ctx = pma.get_ctx();
452 let pma = pma.ptr;
453 let isl_rs_result = unsafe { isl_pw_multi_aff_copy(pma) };
454 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
455 should_free_on_drop: true };
456 let err = isl_rs_ctx.last_error();
457 if err != Error::None_ {
458 let err_msg = isl_rs_ctx.last_error_msg();
459 isl_rs_ctx.reset_error();
460 return Err(LibISLError::new(err, err_msg));
461 }
462 Ok(isl_rs_result)
463 }
464
465 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
467 let pma = self;
468 let isl_rs_ctx = pma.get_ctx();
469 let pma = pma.ptr;
470 let type_ = type_.to_i32();
471 let isl_rs_result = unsafe { isl_pw_multi_aff_dim(pma, type_) };
472 let err = isl_rs_ctx.last_error();
473 if err != Error::None_ {
474 let err_msg = isl_rs_ctx.last_error_msg();
475 isl_rs_ctx.reset_error();
476 return Err(LibISLError::new(err, err_msg));
477 }
478 Ok(isl_rs_result)
479 }
480
481 pub fn domain(self) -> Result<Set, LibISLError> {
483 let pma = self;
484 let isl_rs_ctx = pma.get_ctx();
485 let mut pma = pma;
486 pma.do_not_free_on_drop();
487 let pma = pma.ptr;
488 let isl_rs_result = unsafe { isl_pw_multi_aff_domain(pma) };
489 let isl_rs_result = Set { ptr: isl_rs_result,
490 should_free_on_drop: true };
491 let err = isl_rs_ctx.last_error();
492 if err != Error::None_ {
493 let err_msg = isl_rs_ctx.last_error_msg();
494 isl_rs_ctx.reset_error();
495 return Err(LibISLError::new(err, err_msg));
496 }
497 Ok(isl_rs_result)
498 }
499
500 pub fn domain_map(space: Space) -> Result<PwMultiAff, LibISLError> {
502 let isl_rs_ctx = space.get_ctx();
503 let mut space = space;
504 space.do_not_free_on_drop();
505 let space = space.ptr;
506 let isl_rs_result = unsafe { isl_pw_multi_aff_domain_map(space) };
507 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
508 should_free_on_drop: true };
509 let err = isl_rs_ctx.last_error();
510 if err != Error::None_ {
511 let err_msg = isl_rs_ctx.last_error_msg();
512 isl_rs_ctx.reset_error();
513 return Err(LibISLError::new(err, err_msg));
514 }
515 Ok(isl_rs_result)
516 }
517
518 pub fn domain_reverse(self) -> Result<PwMultiAff, LibISLError> {
520 let pma = self;
521 let isl_rs_ctx = pma.get_ctx();
522 let mut pma = pma;
523 pma.do_not_free_on_drop();
524 let pma = pma.ptr;
525 let isl_rs_result = unsafe { isl_pw_multi_aff_domain_reverse(pma) };
526 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
527 should_free_on_drop: true };
528 let err = isl_rs_ctx.last_error();
529 if err != Error::None_ {
530 let err_msg = isl_rs_ctx.last_error_msg();
531 isl_rs_ctx.reset_error();
532 return Err(LibISLError::new(err, err_msg));
533 }
534 Ok(isl_rs_result)
535 }
536
537 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<PwMultiAff, LibISLError> {
539 let pma = self;
540 let isl_rs_ctx = pma.get_ctx();
541 let mut pma = pma;
542 pma.do_not_free_on_drop();
543 let pma = pma.ptr;
544 let type_ = type_.to_i32();
545 let isl_rs_result = unsafe { isl_pw_multi_aff_drop_dims(pma, type_, first, n) };
546 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
547 should_free_on_drop: true };
548 let err = isl_rs_ctx.last_error();
549 if err != Error::None_ {
550 let err_msg = isl_rs_ctx.last_error_msg();
551 isl_rs_ctx.reset_error();
552 return Err(LibISLError::new(err, err_msg));
553 }
554 Ok(isl_rs_result)
555 }
556
557 pub fn drop_unused_params(self) -> Result<PwMultiAff, LibISLError> {
559 let pma = self;
560 let isl_rs_ctx = pma.get_ctx();
561 let mut pma = pma;
562 pma.do_not_free_on_drop();
563 let pma = pma.ptr;
564 let isl_rs_result = unsafe { isl_pw_multi_aff_drop_unused_params(pma) };
565 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
566 should_free_on_drop: true };
567 let err = isl_rs_ctx.last_error();
568 if err != Error::None_ {
569 let err_msg = isl_rs_ctx.last_error_msg();
570 isl_rs_ctx.reset_error();
571 return Err(LibISLError::new(err, err_msg));
572 }
573 Ok(isl_rs_result)
574 }
575
576 pub fn dump(&self) -> Result<(), LibISLError> {
578 let pma = self;
579 let isl_rs_ctx = pma.get_ctx();
580 let pma = pma.ptr;
581 let isl_rs_result = unsafe { isl_pw_multi_aff_dump(pma) };
582 let err = isl_rs_ctx.last_error();
583 if err != Error::None_ {
584 let err_msg = isl_rs_ctx.last_error_msg();
585 isl_rs_ctx.reset_error();
586 return Err(LibISLError::new(err, err_msg));
587 }
588 Ok(isl_rs_result)
589 }
590
591 pub fn empty(space: Space) -> Result<PwMultiAff, LibISLError> {
593 let isl_rs_ctx = space.get_ctx();
594 let mut space = space;
595 space.do_not_free_on_drop();
596 let space = space.ptr;
597 let isl_rs_result = unsafe { isl_pw_multi_aff_empty(space) };
598 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
599 should_free_on_drop: true };
600 let err = isl_rs_ctx.last_error();
601 if err != Error::None_ {
602 let err_msg = isl_rs_ctx.last_error_msg();
603 isl_rs_ctx.reset_error();
604 return Err(LibISLError::new(err, err_msg));
605 }
606 Ok(isl_rs_result)
607 }
608
609 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
611 let pma = self;
612 let isl_rs_ctx = pma.get_ctx();
613 let pma = pma.ptr;
614 let type_ = type_.to_i32();
615 let name = CString::new(name).unwrap();
616 let name = name.as_ptr();
617 let isl_rs_result = unsafe { isl_pw_multi_aff_find_dim_by_name(pma, type_, name) };
618 let err = isl_rs_ctx.last_error();
619 if err != Error::None_ {
620 let err_msg = isl_rs_ctx.last_error_msg();
621 isl_rs_ctx.reset_error();
622 return Err(LibISLError::new(err, err_msg));
623 }
624 Ok(isl_rs_result)
625 }
626
627 pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<PwMultiAff, LibISLError> {
629 let pma = self;
630 let isl_rs_ctx = pma.get_ctx();
631 let mut pma = pma;
632 pma.do_not_free_on_drop();
633 let pma = pma.ptr;
634 let type_ = type_.to_i32();
635 let isl_rs_result = unsafe { isl_pw_multi_aff_fix_si(pma, type_, pos, value) };
636 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
637 should_free_on_drop: true };
638 let err = isl_rs_ctx.last_error();
639 if err != Error::None_ {
640 let err_msg = isl_rs_ctx.last_error_msg();
641 isl_rs_ctx.reset_error();
642 return Err(LibISLError::new(err, err_msg));
643 }
644 Ok(isl_rs_result)
645 }
646
647 pub fn flat_range_product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
649 let pma1 = self;
650 let isl_rs_ctx = pma1.get_ctx();
651 let mut pma1 = pma1;
652 pma1.do_not_free_on_drop();
653 let pma1 = pma1.ptr;
654 let mut pma2 = pma2;
655 pma2.do_not_free_on_drop();
656 let pma2 = pma2.ptr;
657 let isl_rs_result = unsafe { isl_pw_multi_aff_flat_range_product(pma1, pma2) };
658 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
659 should_free_on_drop: true };
660 let err = isl_rs_ctx.last_error();
661 if err != Error::None_ {
662 let err_msg = isl_rs_ctx.last_error_msg();
663 isl_rs_ctx.reset_error();
664 return Err(LibISLError::new(err, err_msg));
665 }
666 Ok(isl_rs_result)
667 }
668
669 pub fn free(self) -> Result<PwMultiAff, LibISLError> {
671 let pma = self;
672 let isl_rs_ctx = pma.get_ctx();
673 let mut pma = pma;
674 pma.do_not_free_on_drop();
675 let pma = pma.ptr;
676 let isl_rs_result = unsafe { isl_pw_multi_aff_free(pma) };
677 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
678 should_free_on_drop: true };
679 let err = isl_rs_ctx.last_error();
680 if err != Error::None_ {
681 let err_msg = isl_rs_ctx.last_error_msg();
682 isl_rs_ctx.reset_error();
683 return Err(LibISLError::new(err, err_msg));
684 }
685 Ok(isl_rs_result)
686 }
687
688 pub fn from_domain(set: Set) -> Result<PwMultiAff, LibISLError> {
690 let isl_rs_ctx = set.get_ctx();
691 let mut set = set;
692 set.do_not_free_on_drop();
693 let set = set.ptr;
694 let isl_rs_result = unsafe { isl_pw_multi_aff_from_domain(set) };
695 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
696 should_free_on_drop: true };
697 let err = isl_rs_ctx.last_error();
698 if err != Error::None_ {
699 let err_msg = isl_rs_ctx.last_error_msg();
700 isl_rs_ctx.reset_error();
701 return Err(LibISLError::new(err, err_msg));
702 }
703 Ok(isl_rs_result)
704 }
705
706 pub fn from_map(map: Map) -> Result<PwMultiAff, LibISLError> {
708 let isl_rs_ctx = map.get_ctx();
709 let mut map = map;
710 map.do_not_free_on_drop();
711 let map = map.ptr;
712 let isl_rs_result = unsafe { isl_pw_multi_aff_from_map(map) };
713 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
714 should_free_on_drop: true };
715 let err = isl_rs_ctx.last_error();
716 if err != Error::None_ {
717 let err_msg = isl_rs_ctx.last_error_msg();
718 isl_rs_ctx.reset_error();
719 return Err(LibISLError::new(err, err_msg));
720 }
721 Ok(isl_rs_result)
722 }
723
724 pub fn from_multi_aff(ma: MultiAff) -> Result<PwMultiAff, LibISLError> {
726 let isl_rs_ctx = ma.get_ctx();
727 let mut ma = ma;
728 ma.do_not_free_on_drop();
729 let ma = ma.ptr;
730 let isl_rs_result = unsafe { isl_pw_multi_aff_from_multi_aff(ma) };
731 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
732 should_free_on_drop: true };
733 let err = isl_rs_ctx.last_error();
734 if err != Error::None_ {
735 let err_msg = isl_rs_ctx.last_error_msg();
736 isl_rs_ctx.reset_error();
737 return Err(LibISLError::new(err, err_msg));
738 }
739 Ok(isl_rs_result)
740 }
741
742 pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<PwMultiAff, LibISLError> {
744 let isl_rs_ctx = mpa.get_ctx();
745 let mut mpa = mpa;
746 mpa.do_not_free_on_drop();
747 let mpa = mpa.ptr;
748 let isl_rs_result = unsafe { isl_pw_multi_aff_from_multi_pw_aff(mpa) };
749 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
750 should_free_on_drop: true };
751 let err = isl_rs_ctx.last_error();
752 if err != Error::None_ {
753 let err_msg = isl_rs_ctx.last_error_msg();
754 isl_rs_ctx.reset_error();
755 return Err(LibISLError::new(err, err_msg));
756 }
757 Ok(isl_rs_result)
758 }
759
760 pub fn from_pw_aff(pa: PwAff) -> Result<PwMultiAff, LibISLError> {
762 let isl_rs_ctx = pa.get_ctx();
763 let mut pa = pa;
764 pa.do_not_free_on_drop();
765 let pa = pa.ptr;
766 let isl_rs_result = unsafe { isl_pw_multi_aff_from_pw_aff(pa) };
767 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
768 should_free_on_drop: true };
769 let err = isl_rs_ctx.last_error();
770 if err != Error::None_ {
771 let err_msg = isl_rs_ctx.last_error_msg();
772 isl_rs_ctx.reset_error();
773 return Err(LibISLError::new(err, err_msg));
774 }
775 Ok(isl_rs_result)
776 }
777
778 pub fn from_set(set: Set) -> Result<PwMultiAff, LibISLError> {
780 let isl_rs_ctx = set.get_ctx();
781 let mut set = set;
782 set.do_not_free_on_drop();
783 let set = set.ptr;
784 let isl_rs_result = unsafe { isl_pw_multi_aff_from_set(set) };
785 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
786 should_free_on_drop: true };
787 let err = isl_rs_ctx.last_error();
788 if err != Error::None_ {
789 let err_msg = isl_rs_ctx.last_error_msg();
790 isl_rs_ctx.reset_error();
791 return Err(LibISLError::new(err, err_msg));
792 }
793 Ok(isl_rs_result)
794 }
795
796 pub fn get_at(&self, pos: i32) -> Result<PwAff, LibISLError> {
798 let pma = self;
799 let isl_rs_ctx = pma.get_ctx();
800 let pma = pma.ptr;
801 let isl_rs_result = unsafe { isl_pw_multi_aff_get_at(pma, pos) };
802 let isl_rs_result = PwAff { ptr: isl_rs_result,
803 should_free_on_drop: true };
804 let err = isl_rs_ctx.last_error();
805 if err != Error::None_ {
806 let err_msg = isl_rs_ctx.last_error_msg();
807 isl_rs_ctx.reset_error();
808 return Err(LibISLError::new(err, err_msg));
809 }
810 Ok(isl_rs_result)
811 }
812
813 pub fn get_ctx(&self) -> Context {
815 let pma = self;
816 let pma = pma.ptr;
817 let isl_rs_result = unsafe { isl_pw_multi_aff_get_ctx(pma) };
818 let isl_rs_result = Context { ptr: isl_rs_result,
819 should_free_on_drop: false };
820 isl_rs_result
821 }
822
823 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
825 let pma = self;
826 let isl_rs_ctx = pma.get_ctx();
827 let pma = pma.ptr;
828 let type_ = type_.to_i32();
829 let isl_rs_result = unsafe { isl_pw_multi_aff_get_dim_id(pma, type_, pos) };
830 let isl_rs_result = Id { ptr: isl_rs_result,
831 should_free_on_drop: true };
832 let err = isl_rs_ctx.last_error();
833 if err != Error::None_ {
834 let err_msg = isl_rs_ctx.last_error_msg();
835 isl_rs_ctx.reset_error();
836 return Err(LibISLError::new(err, err_msg));
837 }
838 Ok(isl_rs_result)
839 }
840
841 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
843 let pma = self;
844 let isl_rs_ctx = pma.get_ctx();
845 let pma = pma.ptr;
846 let type_ = type_.to_i32();
847 let isl_rs_result = unsafe { isl_pw_multi_aff_get_dim_name(pma, type_, pos) };
848 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
849 let isl_rs_result = isl_rs_result.to_str().unwrap();
850 let err = isl_rs_ctx.last_error();
851 if err != Error::None_ {
852 let err_msg = isl_rs_ctx.last_error_msg();
853 isl_rs_ctx.reset_error();
854 return Err(LibISLError::new(err, err_msg));
855 }
856 Ok(isl_rs_result)
857 }
858
859 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
861 let pma = self;
862 let isl_rs_ctx = pma.get_ctx();
863 let pma = pma.ptr;
864 let isl_rs_result = unsafe { isl_pw_multi_aff_get_domain_space(pma) };
865 let isl_rs_result = Space { ptr: isl_rs_result,
866 should_free_on_drop: true };
867 let err = isl_rs_ctx.last_error();
868 if err != Error::None_ {
869 let err_msg = isl_rs_ctx.last_error_msg();
870 isl_rs_ctx.reset_error();
871 return Err(LibISLError::new(err, err_msg));
872 }
873 Ok(isl_rs_result)
874 }
875
876 pub fn get_pw_aff(&self, pos: i32) -> Result<PwAff, LibISLError> {
878 let pma = self;
879 let isl_rs_ctx = pma.get_ctx();
880 let pma = pma.ptr;
881 let isl_rs_result = unsafe { isl_pw_multi_aff_get_pw_aff(pma, pos) };
882 let isl_rs_result = PwAff { ptr: isl_rs_result,
883 should_free_on_drop: true };
884 let err = isl_rs_ctx.last_error();
885 if err != Error::None_ {
886 let err_msg = isl_rs_ctx.last_error_msg();
887 isl_rs_ctx.reset_error();
888 return Err(LibISLError::new(err, err_msg));
889 }
890 Ok(isl_rs_result)
891 }
892
893 pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
895 let pma = self;
896 let isl_rs_ctx = pma.get_ctx();
897 let pma = pma.ptr;
898 let isl_rs_result = unsafe { isl_pw_multi_aff_get_range_tuple_id(pma) };
899 let isl_rs_result = Id { ptr: isl_rs_result,
900 should_free_on_drop: true };
901 let err = isl_rs_ctx.last_error();
902 if err != Error::None_ {
903 let err_msg = isl_rs_ctx.last_error_msg();
904 isl_rs_ctx.reset_error();
905 return Err(LibISLError::new(err, err_msg));
906 }
907 Ok(isl_rs_result)
908 }
909
910 pub fn get_space(&self) -> Result<Space, LibISLError> {
912 let pma = self;
913 let isl_rs_ctx = pma.get_ctx();
914 let pma = pma.ptr;
915 let isl_rs_result = unsafe { isl_pw_multi_aff_get_space(pma) };
916 let isl_rs_result = Space { ptr: isl_rs_result,
917 should_free_on_drop: true };
918 let err = isl_rs_ctx.last_error();
919 if err != Error::None_ {
920 let err_msg = isl_rs_ctx.last_error_msg();
921 isl_rs_ctx.reset_error();
922 return Err(LibISLError::new(err, err_msg));
923 }
924 Ok(isl_rs_result)
925 }
926
927 pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
929 let pma = self;
930 let isl_rs_ctx = pma.get_ctx();
931 let pma = pma.ptr;
932 let type_ = type_.to_i32();
933 let isl_rs_result = unsafe { isl_pw_multi_aff_get_tuple_id(pma, type_) };
934 let isl_rs_result = Id { ptr: isl_rs_result,
935 should_free_on_drop: true };
936 let err = isl_rs_ctx.last_error();
937 if err != Error::None_ {
938 let err_msg = isl_rs_ctx.last_error_msg();
939 isl_rs_ctx.reset_error();
940 return Err(LibISLError::new(err, err_msg));
941 }
942 Ok(isl_rs_result)
943 }
944
945 pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
947 let pma = self;
948 let isl_rs_ctx = pma.get_ctx();
949 let pma = pma.ptr;
950 let type_ = type_.to_i32();
951 let isl_rs_result = unsafe { isl_pw_multi_aff_get_tuple_name(pma, type_) };
952 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
953 let isl_rs_result = isl_rs_result.to_str().unwrap();
954 let err = isl_rs_ctx.last_error();
955 if err != Error::None_ {
956 let err_msg = isl_rs_ctx.last_error_msg();
957 isl_rs_ctx.reset_error();
958 return Err(LibISLError::new(err, err_msg));
959 }
960 Ok(isl_rs_result)
961 }
962
963 pub fn gist(self, set: Set) -> Result<PwMultiAff, LibISLError> {
965 let pma = self;
966 let isl_rs_ctx = pma.get_ctx();
967 let mut pma = pma;
968 pma.do_not_free_on_drop();
969 let pma = pma.ptr;
970 let mut set = set;
971 set.do_not_free_on_drop();
972 let set = set.ptr;
973 let isl_rs_result = unsafe { isl_pw_multi_aff_gist(pma, set) };
974 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
975 should_free_on_drop: true };
976 let err = isl_rs_ctx.last_error();
977 if err != Error::None_ {
978 let err_msg = isl_rs_ctx.last_error_msg();
979 isl_rs_ctx.reset_error();
980 return Err(LibISLError::new(err, err_msg));
981 }
982 Ok(isl_rs_result)
983 }
984
985 pub fn gist_params(self, set: Set) -> Result<PwMultiAff, LibISLError> {
987 let pma = self;
988 let isl_rs_ctx = pma.get_ctx();
989 let mut pma = pma;
990 pma.do_not_free_on_drop();
991 let pma = pma.ptr;
992 let mut set = set;
993 set.do_not_free_on_drop();
994 let set = set.ptr;
995 let isl_rs_result = unsafe { isl_pw_multi_aff_gist_params(pma, set) };
996 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
997 should_free_on_drop: true };
998 let err = isl_rs_ctx.last_error();
999 if err != Error::None_ {
1000 let err_msg = isl_rs_ctx.last_error_msg();
1001 isl_rs_ctx.reset_error();
1002 return Err(LibISLError::new(err, err_msg));
1003 }
1004 Ok(isl_rs_result)
1005 }
1006
1007 pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
1009 let pma = self;
1010 let isl_rs_ctx = pma.get_ctx();
1011 let pma = pma.ptr;
1012 let isl_rs_result = unsafe { isl_pw_multi_aff_has_range_tuple_id(pma) };
1013 let isl_rs_result = match isl_rs_result {
1014 0 => false,
1015 1 => true,
1016 _ => {
1017 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1018 }
1019 };
1020 let err = isl_rs_ctx.last_error();
1021 if err != Error::None_ {
1022 let err_msg = isl_rs_ctx.last_error_msg();
1023 isl_rs_ctx.reset_error();
1024 return Err(LibISLError::new(err, err_msg));
1025 }
1026 Ok(isl_rs_result)
1027 }
1028
1029 pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1031 let pma = self;
1032 let isl_rs_ctx = pma.get_ctx();
1033 let pma = pma.ptr;
1034 let type_ = type_.to_i32();
1035 let isl_rs_result = unsafe { isl_pw_multi_aff_has_tuple_id(pma, type_) };
1036 let isl_rs_result = match isl_rs_result {
1037 0 => false,
1038 1 => true,
1039 _ => {
1040 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1041 }
1042 };
1043 let err = isl_rs_ctx.last_error();
1044 if err != Error::None_ {
1045 let err_msg = isl_rs_ctx.last_error_msg();
1046 isl_rs_ctx.reset_error();
1047 return Err(LibISLError::new(err, err_msg));
1048 }
1049 Ok(isl_rs_result)
1050 }
1051
1052 pub fn has_tuple_name(&self, type_: DimType) -> Result<bool, LibISLError> {
1054 let pma = self;
1055 let isl_rs_ctx = pma.get_ctx();
1056 let pma = pma.ptr;
1057 let type_ = type_.to_i32();
1058 let isl_rs_result = unsafe { isl_pw_multi_aff_has_tuple_name(pma, type_) };
1059 let isl_rs_result = match isl_rs_result {
1060 0 => false,
1061 1 => true,
1062 _ => {
1063 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1064 }
1065 };
1066 let err = isl_rs_ctx.last_error();
1067 if err != Error::None_ {
1068 let err_msg = isl_rs_ctx.last_error_msg();
1069 isl_rs_ctx.reset_error();
1070 return Err(LibISLError::new(err, err_msg));
1071 }
1072 Ok(isl_rs_result)
1073 }
1074
1075 pub fn identity(space: Space) -> Result<PwMultiAff, LibISLError> {
1077 let isl_rs_ctx = space.get_ctx();
1078 let mut space = space;
1079 space.do_not_free_on_drop();
1080 let space = space.ptr;
1081 let isl_rs_result = unsafe { isl_pw_multi_aff_identity(space) };
1082 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1083 should_free_on_drop: true };
1084 let err = isl_rs_ctx.last_error();
1085 if err != Error::None_ {
1086 let err_msg = isl_rs_ctx.last_error_msg();
1087 isl_rs_ctx.reset_error();
1088 return Err(LibISLError::new(err, err_msg));
1089 }
1090 Ok(isl_rs_result)
1091 }
1092
1093 pub fn identity_on_domain_space(space: Space) -> Result<PwMultiAff, LibISLError> {
1095 let isl_rs_ctx = space.get_ctx();
1096 let mut space = space;
1097 space.do_not_free_on_drop();
1098 let space = space.ptr;
1099 let isl_rs_result = unsafe { isl_pw_multi_aff_identity_on_domain_space(space) };
1100 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1101 should_free_on_drop: true };
1102 let err = isl_rs_ctx.last_error();
1103 if err != Error::None_ {
1104 let err_msg = isl_rs_ctx.last_error_msg();
1105 isl_rs_ctx.reset_error();
1106 return Err(LibISLError::new(err, err_msg));
1107 }
1108 Ok(isl_rs_result)
1109 }
1110
1111 pub fn insert_domain(self, domain: Space) -> Result<PwMultiAff, LibISLError> {
1113 let pma = self;
1114 let isl_rs_ctx = pma.get_ctx();
1115 let mut pma = pma;
1116 pma.do_not_free_on_drop();
1117 let pma = pma.ptr;
1118 let mut domain = domain;
1119 domain.do_not_free_on_drop();
1120 let domain = domain.ptr;
1121 let isl_rs_result = unsafe { isl_pw_multi_aff_insert_domain(pma, domain) };
1122 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1123 should_free_on_drop: true };
1124 let err = isl_rs_ctx.last_error();
1125 if err != Error::None_ {
1126 let err_msg = isl_rs_ctx.last_error_msg();
1127 isl_rs_ctx.reset_error();
1128 return Err(LibISLError::new(err, err_msg));
1129 }
1130 Ok(isl_rs_result)
1131 }
1132
1133 pub fn intersect_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1135 let pma = self;
1136 let isl_rs_ctx = pma.get_ctx();
1137 let mut pma = pma;
1138 pma.do_not_free_on_drop();
1139 let pma = pma.ptr;
1140 let mut set = set;
1141 set.do_not_free_on_drop();
1142 let set = set.ptr;
1143 let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain(pma, set) };
1144 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1145 should_free_on_drop: true };
1146 let err = isl_rs_ctx.last_error();
1147 if err != Error::None_ {
1148 let err_msg = isl_rs_ctx.last_error_msg();
1149 isl_rs_ctx.reset_error();
1150 return Err(LibISLError::new(err, err_msg));
1151 }
1152 Ok(isl_rs_result)
1153 }
1154
1155 pub fn intersect_domain_wrapped_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1157 let pma = self;
1158 let isl_rs_ctx = pma.get_ctx();
1159 let mut pma = pma;
1160 pma.do_not_free_on_drop();
1161 let pma = pma.ptr;
1162 let mut set = set;
1163 set.do_not_free_on_drop();
1164 let set = set.ptr;
1165 let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain_wrapped_domain(pma, set) };
1166 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1167 should_free_on_drop: true };
1168 let err = isl_rs_ctx.last_error();
1169 if err != Error::None_ {
1170 let err_msg = isl_rs_ctx.last_error_msg();
1171 isl_rs_ctx.reset_error();
1172 return Err(LibISLError::new(err, err_msg));
1173 }
1174 Ok(isl_rs_result)
1175 }
1176
1177 pub fn intersect_domain_wrapped_range(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1179 let pma = self;
1180 let isl_rs_ctx = pma.get_ctx();
1181 let mut pma = pma;
1182 pma.do_not_free_on_drop();
1183 let pma = pma.ptr;
1184 let mut set = set;
1185 set.do_not_free_on_drop();
1186 let set = set.ptr;
1187 let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain_wrapped_range(pma, set) };
1188 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1189 should_free_on_drop: true };
1190 let err = isl_rs_ctx.last_error();
1191 if err != Error::None_ {
1192 let err_msg = isl_rs_ctx.last_error_msg();
1193 isl_rs_ctx.reset_error();
1194 return Err(LibISLError::new(err, err_msg));
1195 }
1196 Ok(isl_rs_result)
1197 }
1198
1199 pub fn intersect_params(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1201 let pma = self;
1202 let isl_rs_ctx = pma.get_ctx();
1203 let mut pma = pma;
1204 pma.do_not_free_on_drop();
1205 let pma = pma.ptr;
1206 let mut set = set;
1207 set.do_not_free_on_drop();
1208 let set = set.ptr;
1209 let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_params(pma, set) };
1210 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1211 should_free_on_drop: true };
1212 let err = isl_rs_ctx.last_error();
1213 if err != Error::None_ {
1214 let err_msg = isl_rs_ctx.last_error_msg();
1215 isl_rs_ctx.reset_error();
1216 return Err(LibISLError::new(err, err_msg));
1217 }
1218 Ok(isl_rs_result)
1219 }
1220
1221 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1223 let pma = self;
1224 let isl_rs_ctx = pma.get_ctx();
1225 let pma = pma.ptr;
1226 let type_ = type_.to_i32();
1227 let isl_rs_result = unsafe { isl_pw_multi_aff_involves_dims(pma, type_, first, n) };
1228 let isl_rs_result = match isl_rs_result {
1229 0 => false,
1230 1 => true,
1231 _ => {
1232 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1233 }
1234 };
1235 let err = isl_rs_ctx.last_error();
1236 if err != Error::None_ {
1237 let err_msg = isl_rs_ctx.last_error_msg();
1238 isl_rs_ctx.reset_error();
1239 return Err(LibISLError::new(err, err_msg));
1240 }
1241 Ok(isl_rs_result)
1242 }
1243
1244 pub fn involves_locals(&self) -> Result<bool, LibISLError> {
1246 let pma = self;
1247 let isl_rs_ctx = pma.get_ctx();
1248 let pma = pma.ptr;
1249 let isl_rs_result = unsafe { isl_pw_multi_aff_involves_locals(pma) };
1250 let isl_rs_result = match isl_rs_result {
1251 0 => false,
1252 1 => true,
1253 _ => {
1254 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1255 }
1256 };
1257 let err = isl_rs_ctx.last_error();
1258 if err != Error::None_ {
1259 let err_msg = isl_rs_ctx.last_error_msg();
1260 isl_rs_ctx.reset_error();
1261 return Err(LibISLError::new(err, err_msg));
1262 }
1263 Ok(isl_rs_result)
1264 }
1265
1266 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1268 let pma = self;
1269 let isl_rs_ctx = pma.get_ctx();
1270 let pma = pma.ptr;
1271 let isl_rs_result = unsafe { isl_pw_multi_aff_involves_nan(pma) };
1272 let isl_rs_result = match isl_rs_result {
1273 0 => false,
1274 1 => true,
1275 _ => {
1276 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1277 }
1278 };
1279 let err = isl_rs_ctx.last_error();
1280 if err != Error::None_ {
1281 let err_msg = isl_rs_ctx.last_error_msg();
1282 isl_rs_ctx.reset_error();
1283 return Err(LibISLError::new(err, err_msg));
1284 }
1285 Ok(isl_rs_result)
1286 }
1287
1288 pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1290 let pma = self;
1291 let isl_rs_ctx = pma.get_ctx();
1292 let pma = pma.ptr;
1293 let id = id.ptr;
1294 let isl_rs_result = unsafe { isl_pw_multi_aff_involves_param_id(pma, id) };
1295 let isl_rs_result = match isl_rs_result {
1296 0 => false,
1297 1 => true,
1298 _ => {
1299 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1300 }
1301 };
1302 let err = isl_rs_ctx.last_error();
1303 if err != Error::None_ {
1304 let err_msg = isl_rs_ctx.last_error_msg();
1305 isl_rs_ctx.reset_error();
1306 return Err(LibISLError::new(err, err_msg));
1307 }
1308 Ok(isl_rs_result)
1309 }
1310
1311 pub fn is_equal(&self, pma2: &PwMultiAff) -> Result<bool, LibISLError> {
1313 let pma1 = self;
1314 let isl_rs_ctx = pma1.get_ctx();
1315 let pma1 = pma1.ptr;
1316 let pma2 = pma2.ptr;
1317 let isl_rs_result = unsafe { isl_pw_multi_aff_is_equal(pma1, pma2) };
1318 let isl_rs_result = match isl_rs_result {
1319 0 => false,
1320 1 => true,
1321 _ => {
1322 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1323 }
1324 };
1325 let err = isl_rs_ctx.last_error();
1326 if err != Error::None_ {
1327 let err_msg = isl_rs_ctx.last_error_msg();
1328 isl_rs_ctx.reset_error();
1329 return Err(LibISLError::new(err, err_msg));
1330 }
1331 Ok(isl_rs_result)
1332 }
1333
1334 pub fn isa_multi_aff(&self) -> Result<bool, LibISLError> {
1336 let pma = self;
1337 let isl_rs_ctx = pma.get_ctx();
1338 let pma = pma.ptr;
1339 let isl_rs_result = unsafe { isl_pw_multi_aff_isa_multi_aff(pma) };
1340 let isl_rs_result = match isl_rs_result {
1341 0 => false,
1342 1 => true,
1343 _ => {
1344 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1345 }
1346 };
1347 let err = isl_rs_ctx.last_error();
1348 if err != Error::None_ {
1349 let err_msg = isl_rs_ctx.last_error_msg();
1350 isl_rs_ctx.reset_error();
1351 return Err(LibISLError::new(err, err_msg));
1352 }
1353 Ok(isl_rs_result)
1354 }
1355
1356 pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1358 let pma = self;
1359 let isl_rs_ctx = pma.get_ctx();
1360 let mut pma = pma;
1361 pma.do_not_free_on_drop();
1362 let pma = pma.ptr;
1363 let isl_rs_result = unsafe { isl_pw_multi_aff_max_multi_val(pma) };
1364 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1365 should_free_on_drop: true };
1366 let err = isl_rs_ctx.last_error();
1367 if err != Error::None_ {
1368 let err_msg = isl_rs_ctx.last_error_msg();
1369 isl_rs_ctx.reset_error();
1370 return Err(LibISLError::new(err, err_msg));
1371 }
1372 Ok(isl_rs_result)
1373 }
1374
1375 pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1377 let pma = self;
1378 let isl_rs_ctx = pma.get_ctx();
1379 let mut pma = pma;
1380 pma.do_not_free_on_drop();
1381 let pma = pma.ptr;
1382 let isl_rs_result = unsafe { isl_pw_multi_aff_min_multi_val(pma) };
1383 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1384 should_free_on_drop: true };
1385 let err = isl_rs_ctx.last_error();
1386 if err != Error::None_ {
1387 let err_msg = isl_rs_ctx.last_error_msg();
1388 isl_rs_ctx.reset_error();
1389 return Err(LibISLError::new(err, err_msg));
1390 }
1391 Ok(isl_rs_result)
1392 }
1393
1394 pub fn multi_val_on_domain(domain: Set, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1396 let isl_rs_ctx = domain.get_ctx();
1397 let mut domain = domain;
1398 domain.do_not_free_on_drop();
1399 let domain = domain.ptr;
1400 let mut mv = mv;
1401 mv.do_not_free_on_drop();
1402 let mv = mv.ptr;
1403 let isl_rs_result = unsafe { isl_pw_multi_aff_multi_val_on_domain(domain, mv) };
1404 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1405 should_free_on_drop: true };
1406 let err = isl_rs_ctx.last_error();
1407 if err != Error::None_ {
1408 let err_msg = isl_rs_ctx.last_error_msg();
1409 isl_rs_ctx.reset_error();
1410 return Err(LibISLError::new(err, err_msg));
1411 }
1412 Ok(isl_rs_result)
1413 }
1414
1415 pub fn n_piece(&self) -> Result<i32, LibISLError> {
1417 let pma = self;
1418 let isl_rs_ctx = pma.get_ctx();
1419 let pma = pma.ptr;
1420 let isl_rs_result = unsafe { isl_pw_multi_aff_n_piece(pma) };
1421 let err = isl_rs_ctx.last_error();
1422 if err != Error::None_ {
1423 let err_msg = isl_rs_ctx.last_error_msg();
1424 isl_rs_ctx.reset_error();
1425 return Err(LibISLError::new(err, err_msg));
1426 }
1427 Ok(isl_rs_result)
1428 }
1429
1430 pub fn neg(self) -> Result<PwMultiAff, LibISLError> {
1432 let pma = self;
1433 let isl_rs_ctx = pma.get_ctx();
1434 let mut pma = pma;
1435 pma.do_not_free_on_drop();
1436 let pma = pma.ptr;
1437 let isl_rs_result = unsafe { isl_pw_multi_aff_neg(pma) };
1438 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1439 should_free_on_drop: true };
1440 let err = isl_rs_ctx.last_error();
1441 if err != Error::None_ {
1442 let err_msg = isl_rs_ctx.last_error_msg();
1443 isl_rs_ctx.reset_error();
1444 return Err(LibISLError::new(err, err_msg));
1445 }
1446 Ok(isl_rs_result)
1447 }
1448
1449 pub fn plain_is_equal(&self, pma2: &PwMultiAff) -> Result<bool, LibISLError> {
1451 let pma1 = self;
1452 let isl_rs_ctx = pma1.get_ctx();
1453 let pma1 = pma1.ptr;
1454 let pma2 = pma2.ptr;
1455 let isl_rs_result = unsafe { isl_pw_multi_aff_plain_is_equal(pma1, pma2) };
1456 let isl_rs_result = match isl_rs_result {
1457 0 => false,
1458 1 => true,
1459 _ => {
1460 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1461 }
1462 };
1463 let err = isl_rs_ctx.last_error();
1464 if err != Error::None_ {
1465 let err_msg = isl_rs_ctx.last_error_msg();
1466 isl_rs_ctx.reset_error();
1467 return Err(LibISLError::new(err, err_msg));
1468 }
1469 Ok(isl_rs_result)
1470 }
1471
1472 pub fn preimage_domain_wrapped_domain_pw_multi_aff(self, pma2: PwMultiAff)
1474 -> Result<PwMultiAff, LibISLError> {
1475 let pma1 = self;
1476 let isl_rs_ctx = pma1.get_ctx();
1477 let mut pma1 = pma1;
1478 pma1.do_not_free_on_drop();
1479 let pma1 = pma1.ptr;
1480 let mut pma2 = pma2;
1481 pma2.do_not_free_on_drop();
1482 let pma2 = pma2.ptr;
1483 let isl_rs_result =
1484 unsafe { isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(pma1, pma2) };
1485 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1486 should_free_on_drop: true };
1487 let err = isl_rs_ctx.last_error();
1488 if err != Error::None_ {
1489 let err_msg = isl_rs_ctx.last_error_msg();
1490 isl_rs_ctx.reset_error();
1491 return Err(LibISLError::new(err, err_msg));
1492 }
1493 Ok(isl_rs_result)
1494 }
1495
1496 pub fn product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1498 let pma1 = self;
1499 let isl_rs_ctx = pma1.get_ctx();
1500 let mut pma1 = pma1;
1501 pma1.do_not_free_on_drop();
1502 let pma1 = pma1.ptr;
1503 let mut pma2 = pma2;
1504 pma2.do_not_free_on_drop();
1505 let pma2 = pma2.ptr;
1506 let isl_rs_result = unsafe { isl_pw_multi_aff_product(pma1, pma2) };
1507 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1508 should_free_on_drop: true };
1509 let err = isl_rs_ctx.last_error();
1510 if err != Error::None_ {
1511 let err_msg = isl_rs_ctx.last_error_msg();
1512 isl_rs_ctx.reset_error();
1513 return Err(LibISLError::new(err, err_msg));
1514 }
1515 Ok(isl_rs_result)
1516 }
1517
1518 pub fn project_domain_on_params(self) -> Result<PwMultiAff, LibISLError> {
1520 let pma = self;
1521 let isl_rs_ctx = pma.get_ctx();
1522 let mut pma = pma;
1523 pma.do_not_free_on_drop();
1524 let pma = pma.ptr;
1525 let isl_rs_result = unsafe { isl_pw_multi_aff_project_domain_on_params(pma) };
1526 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1527 should_free_on_drop: true };
1528 let err = isl_rs_ctx.last_error();
1529 if err != Error::None_ {
1530 let err_msg = isl_rs_ctx.last_error_msg();
1531 isl_rs_ctx.reset_error();
1532 return Err(LibISLError::new(err, err_msg));
1533 }
1534 Ok(isl_rs_result)
1535 }
1536
1537 pub fn project_out_map(space: Space, type_: DimType, first: u32, n: u32)
1539 -> Result<PwMultiAff, LibISLError> {
1540 let isl_rs_ctx = space.get_ctx();
1541 let mut space = space;
1542 space.do_not_free_on_drop();
1543 let space = space.ptr;
1544 let type_ = type_.to_i32();
1545 let isl_rs_result = unsafe { isl_pw_multi_aff_project_out_map(space, type_, first, n) };
1546 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1547 should_free_on_drop: true };
1548 let err = isl_rs_ctx.last_error();
1549 if err != Error::None_ {
1550 let err_msg = isl_rs_ctx.last_error_msg();
1551 isl_rs_ctx.reset_error();
1552 return Err(LibISLError::new(err, err_msg));
1553 }
1554 Ok(isl_rs_result)
1555 }
1556
1557 pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<PwMultiAff, LibISLError> {
1559 let pma = self;
1560 let isl_rs_ctx = pma.get_ctx();
1561 let mut pma = pma;
1562 pma.do_not_free_on_drop();
1563 let pma = pma.ptr;
1564 let mut ma = ma;
1565 ma.do_not_free_on_drop();
1566 let ma = ma.ptr;
1567 let isl_rs_result = unsafe { isl_pw_multi_aff_pullback_multi_aff(pma, ma) };
1568 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1569 should_free_on_drop: true };
1570 let err = isl_rs_ctx.last_error();
1571 if err != Error::None_ {
1572 let err_msg = isl_rs_ctx.last_error_msg();
1573 isl_rs_ctx.reset_error();
1574 return Err(LibISLError::new(err, err_msg));
1575 }
1576 Ok(isl_rs_result)
1577 }
1578
1579 pub fn pullback_pw_multi_aff(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1581 let pma1 = self;
1582 let isl_rs_ctx = pma1.get_ctx();
1583 let mut pma1 = pma1;
1584 pma1.do_not_free_on_drop();
1585 let pma1 = pma1.ptr;
1586 let mut pma2 = pma2;
1587 pma2.do_not_free_on_drop();
1588 let pma2 = pma2.ptr;
1589 let isl_rs_result = unsafe { isl_pw_multi_aff_pullback_pw_multi_aff(pma1, pma2) };
1590 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1591 should_free_on_drop: true };
1592 let err = isl_rs_ctx.last_error();
1593 if err != Error::None_ {
1594 let err_msg = isl_rs_ctx.last_error_msg();
1595 isl_rs_ctx.reset_error();
1596 return Err(LibISLError::new(err, err_msg));
1597 }
1598 Ok(isl_rs_result)
1599 }
1600
1601 pub fn range_factor_domain(self) -> Result<PwMultiAff, LibISLError> {
1603 let pma = self;
1604 let isl_rs_ctx = pma.get_ctx();
1605 let mut pma = pma;
1606 pma.do_not_free_on_drop();
1607 let pma = pma.ptr;
1608 let isl_rs_result = unsafe { isl_pw_multi_aff_range_factor_domain(pma) };
1609 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1610 should_free_on_drop: true };
1611 let err = isl_rs_ctx.last_error();
1612 if err != Error::None_ {
1613 let err_msg = isl_rs_ctx.last_error_msg();
1614 isl_rs_ctx.reset_error();
1615 return Err(LibISLError::new(err, err_msg));
1616 }
1617 Ok(isl_rs_result)
1618 }
1619
1620 pub fn range_factor_range(self) -> Result<PwMultiAff, LibISLError> {
1622 let pma = self;
1623 let isl_rs_ctx = pma.get_ctx();
1624 let mut pma = pma;
1625 pma.do_not_free_on_drop();
1626 let pma = pma.ptr;
1627 let isl_rs_result = unsafe { isl_pw_multi_aff_range_factor_range(pma) };
1628 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1629 should_free_on_drop: true };
1630 let err = isl_rs_ctx.last_error();
1631 if err != Error::None_ {
1632 let err_msg = isl_rs_ctx.last_error_msg();
1633 isl_rs_ctx.reset_error();
1634 return Err(LibISLError::new(err, err_msg));
1635 }
1636 Ok(isl_rs_result)
1637 }
1638
1639 pub fn range_map(space: Space) -> Result<PwMultiAff, LibISLError> {
1641 let isl_rs_ctx = space.get_ctx();
1642 let mut space = space;
1643 space.do_not_free_on_drop();
1644 let space = space.ptr;
1645 let isl_rs_result = unsafe { isl_pw_multi_aff_range_map(space) };
1646 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1647 should_free_on_drop: true };
1648 let err = isl_rs_ctx.last_error();
1649 if err != Error::None_ {
1650 let err_msg = isl_rs_ctx.last_error_msg();
1651 isl_rs_ctx.reset_error();
1652 return Err(LibISLError::new(err, err_msg));
1653 }
1654 Ok(isl_rs_result)
1655 }
1656
1657 pub fn range_product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1659 let pma1 = self;
1660 let isl_rs_ctx = pma1.get_ctx();
1661 let mut pma1 = pma1;
1662 pma1.do_not_free_on_drop();
1663 let pma1 = pma1.ptr;
1664 let mut pma2 = pma2;
1665 pma2.do_not_free_on_drop();
1666 let pma2 = pma2.ptr;
1667 let isl_rs_result = unsafe { isl_pw_multi_aff_range_product(pma1, pma2) };
1668 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1669 should_free_on_drop: true };
1670 let err = isl_rs_ctx.last_error();
1671 if err != Error::None_ {
1672 let err_msg = isl_rs_ctx.last_error_msg();
1673 isl_rs_ctx.reset_error();
1674 return Err(LibISLError::new(err, err_msg));
1675 }
1676 Ok(isl_rs_result)
1677 }
1678
1679 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwMultiAff, LibISLError> {
1681 let isl_rs_ctx = Context { ptr: ctx.ptr,
1682 should_free_on_drop: false };
1683 let ctx = ctx.ptr;
1684 let str_ = CString::new(str_).unwrap();
1685 let str_ = str_.as_ptr();
1686 let isl_rs_result = unsafe { isl_pw_multi_aff_read_from_str(ctx, str_) };
1687 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1688 should_free_on_drop: true };
1689 let err = isl_rs_ctx.last_error();
1690 if err != Error::None_ {
1691 let err_msg = isl_rs_ctx.last_error_msg();
1692 isl_rs_ctx.reset_error();
1693 return Err(LibISLError::new(err, err_msg));
1694 }
1695 Ok(isl_rs_result)
1696 }
1697
1698 pub fn reset_tuple_id(self, type_: DimType) -> Result<PwMultiAff, LibISLError> {
1700 let pma = self;
1701 let isl_rs_ctx = pma.get_ctx();
1702 let mut pma = pma;
1703 pma.do_not_free_on_drop();
1704 let pma = pma.ptr;
1705 let type_ = type_.to_i32();
1706 let isl_rs_result = unsafe { isl_pw_multi_aff_reset_tuple_id(pma, type_) };
1707 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1708 should_free_on_drop: true };
1709 let err = isl_rs_ctx.last_error();
1710 if err != Error::None_ {
1711 let err_msg = isl_rs_ctx.last_error_msg();
1712 isl_rs_ctx.reset_error();
1713 return Err(LibISLError::new(err, err_msg));
1714 }
1715 Ok(isl_rs_result)
1716 }
1717
1718 pub fn reset_user(self) -> Result<PwMultiAff, LibISLError> {
1720 let pma = self;
1721 let isl_rs_ctx = pma.get_ctx();
1722 let mut pma = pma;
1723 pma.do_not_free_on_drop();
1724 let pma = pma.ptr;
1725 let isl_rs_result = unsafe { isl_pw_multi_aff_reset_user(pma) };
1726 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1727 should_free_on_drop: true };
1728 let err = isl_rs_ctx.last_error();
1729 if err != Error::None_ {
1730 let err_msg = isl_rs_ctx.last_error_msg();
1731 isl_rs_ctx.reset_error();
1732 return Err(LibISLError::new(err, err_msg));
1733 }
1734 Ok(isl_rs_result)
1735 }
1736
1737 pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1739 let pma = self;
1740 let isl_rs_ctx = pma.get_ctx();
1741 let mut pma = pma;
1742 pma.do_not_free_on_drop();
1743 let pma = pma.ptr;
1744 let mut mv = mv;
1745 mv.do_not_free_on_drop();
1746 let mv = mv.ptr;
1747 let isl_rs_result = unsafe { isl_pw_multi_aff_scale_down_multi_val(pma, mv) };
1748 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1749 should_free_on_drop: true };
1750 let err = isl_rs_ctx.last_error();
1751 if err != Error::None_ {
1752 let err_msg = isl_rs_ctx.last_error_msg();
1753 isl_rs_ctx.reset_error();
1754 return Err(LibISLError::new(err, err_msg));
1755 }
1756 Ok(isl_rs_result)
1757 }
1758
1759 pub fn scale_down_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
1761 let pma = self;
1762 let isl_rs_ctx = pma.get_ctx();
1763 let mut pma = pma;
1764 pma.do_not_free_on_drop();
1765 let pma = pma.ptr;
1766 let mut v = v;
1767 v.do_not_free_on_drop();
1768 let v = v.ptr;
1769 let isl_rs_result = unsafe { isl_pw_multi_aff_scale_down_val(pma, v) };
1770 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1771 should_free_on_drop: true };
1772 let err = isl_rs_ctx.last_error();
1773 if err != Error::None_ {
1774 let err_msg = isl_rs_ctx.last_error_msg();
1775 isl_rs_ctx.reset_error();
1776 return Err(LibISLError::new(err, err_msg));
1777 }
1778 Ok(isl_rs_result)
1779 }
1780
1781 pub fn scale_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1783 let pma = self;
1784 let isl_rs_ctx = pma.get_ctx();
1785 let mut pma = pma;
1786 pma.do_not_free_on_drop();
1787 let pma = pma.ptr;
1788 let mut mv = mv;
1789 mv.do_not_free_on_drop();
1790 let mv = mv.ptr;
1791 let isl_rs_result = unsafe { isl_pw_multi_aff_scale_multi_val(pma, mv) };
1792 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1793 should_free_on_drop: true };
1794 let err = isl_rs_ctx.last_error();
1795 if err != Error::None_ {
1796 let err_msg = isl_rs_ctx.last_error_msg();
1797 isl_rs_ctx.reset_error();
1798 return Err(LibISLError::new(err, err_msg));
1799 }
1800 Ok(isl_rs_result)
1801 }
1802
1803 pub fn scale_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
1805 let pma = self;
1806 let isl_rs_ctx = pma.get_ctx();
1807 let mut pma = pma;
1808 pma.do_not_free_on_drop();
1809 let pma = pma.ptr;
1810 let mut v = v;
1811 v.do_not_free_on_drop();
1812 let v = v.ptr;
1813 let isl_rs_result = unsafe { isl_pw_multi_aff_scale_val(pma, v) };
1814 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1815 should_free_on_drop: true };
1816 let err = isl_rs_ctx.last_error();
1817 if err != Error::None_ {
1818 let err_msg = isl_rs_ctx.last_error_msg();
1819 isl_rs_ctx.reset_error();
1820 return Err(LibISLError::new(err, err_msg));
1821 }
1822 Ok(isl_rs_result)
1823 }
1824
1825 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<PwMultiAff, LibISLError> {
1827 let pma = self;
1828 let isl_rs_ctx = pma.get_ctx();
1829 let mut pma = pma;
1830 pma.do_not_free_on_drop();
1831 let pma = pma.ptr;
1832 let type_ = type_.to_i32();
1833 let mut id = id;
1834 id.do_not_free_on_drop();
1835 let id = id.ptr;
1836 let isl_rs_result = unsafe { isl_pw_multi_aff_set_dim_id(pma, type_, pos, id) };
1837 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1838 should_free_on_drop: true };
1839 let err = isl_rs_ctx.last_error();
1840 if err != Error::None_ {
1841 let err_msg = isl_rs_ctx.last_error_msg();
1842 isl_rs_ctx.reset_error();
1843 return Err(LibISLError::new(err, err_msg));
1844 }
1845 Ok(isl_rs_result)
1846 }
1847
1848 pub fn set_pw_aff(self, pos: u32, pa: PwAff) -> Result<PwMultiAff, LibISLError> {
1850 let pma = self;
1851 let isl_rs_ctx = pma.get_ctx();
1852 let mut pma = pma;
1853 pma.do_not_free_on_drop();
1854 let pma = pma.ptr;
1855 let mut pa = pa;
1856 pa.do_not_free_on_drop();
1857 let pa = pa.ptr;
1858 let isl_rs_result = unsafe { isl_pw_multi_aff_set_pw_aff(pma, pos, pa) };
1859 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1860 should_free_on_drop: true };
1861 let err = isl_rs_ctx.last_error();
1862 if err != Error::None_ {
1863 let err_msg = isl_rs_ctx.last_error_msg();
1864 isl_rs_ctx.reset_error();
1865 return Err(LibISLError::new(err, err_msg));
1866 }
1867 Ok(isl_rs_result)
1868 }
1869
1870 pub fn set_range_tuple_id(self, id: Id) -> Result<PwMultiAff, LibISLError> {
1872 let pma = self;
1873 let isl_rs_ctx = pma.get_ctx();
1874 let mut pma = pma;
1875 pma.do_not_free_on_drop();
1876 let pma = pma.ptr;
1877 let mut id = id;
1878 id.do_not_free_on_drop();
1879 let id = id.ptr;
1880 let isl_rs_result = unsafe { isl_pw_multi_aff_set_range_tuple_id(pma, id) };
1881 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1882 should_free_on_drop: true };
1883 let err = isl_rs_ctx.last_error();
1884 if err != Error::None_ {
1885 let err_msg = isl_rs_ctx.last_error_msg();
1886 isl_rs_ctx.reset_error();
1887 return Err(LibISLError::new(err, err_msg));
1888 }
1889 Ok(isl_rs_result)
1890 }
1891
1892 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<PwMultiAff, LibISLError> {
1894 let pma = self;
1895 let isl_rs_ctx = pma.get_ctx();
1896 let mut pma = pma;
1897 pma.do_not_free_on_drop();
1898 let pma = pma.ptr;
1899 let type_ = type_.to_i32();
1900 let mut id = id;
1901 id.do_not_free_on_drop();
1902 let id = id.ptr;
1903 let isl_rs_result = unsafe { isl_pw_multi_aff_set_tuple_id(pma, type_, id) };
1904 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1905 should_free_on_drop: true };
1906 let err = isl_rs_ctx.last_error();
1907 if err != Error::None_ {
1908 let err_msg = isl_rs_ctx.last_error_msg();
1909 isl_rs_ctx.reset_error();
1910 return Err(LibISLError::new(err, err_msg));
1911 }
1912 Ok(isl_rs_result)
1913 }
1914
1915 pub fn sub(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1917 let pma1 = self;
1918 let isl_rs_ctx = pma1.get_ctx();
1919 let mut pma1 = pma1;
1920 pma1.do_not_free_on_drop();
1921 let pma1 = pma1.ptr;
1922 let mut pma2 = pma2;
1923 pma2.do_not_free_on_drop();
1924 let pma2 = pma2.ptr;
1925 let isl_rs_result = unsafe { isl_pw_multi_aff_sub(pma1, pma2) };
1926 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1927 should_free_on_drop: true };
1928 let err = isl_rs_ctx.last_error();
1929 if err != Error::None_ {
1930 let err_msg = isl_rs_ctx.last_error_msg();
1931 isl_rs_ctx.reset_error();
1932 return Err(LibISLError::new(err, err_msg));
1933 }
1934 Ok(isl_rs_result)
1935 }
1936
1937 pub fn subtract_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1939 let pma = self;
1940 let isl_rs_ctx = pma.get_ctx();
1941 let mut pma = pma;
1942 pma.do_not_free_on_drop();
1943 let pma = pma.ptr;
1944 let mut set = set;
1945 set.do_not_free_on_drop();
1946 let set = set.ptr;
1947 let isl_rs_result = unsafe { isl_pw_multi_aff_subtract_domain(pma, set) };
1948 let isl_rs_result = PwMultiAff { 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 to_list(self) -> Result<PwMultiAffList, LibISLError> {
1961 let el = self;
1962 let isl_rs_ctx = el.get_ctx();
1963 let mut el = el;
1964 el.do_not_free_on_drop();
1965 let el = el.ptr;
1966 let isl_rs_result = unsafe { isl_pw_multi_aff_to_list(el) };
1967 let isl_rs_result = PwMultiAffList { ptr: isl_rs_result,
1968 should_free_on_drop: true };
1969 let err = isl_rs_ctx.last_error();
1970 if err != Error::None_ {
1971 let err_msg = isl_rs_ctx.last_error_msg();
1972 isl_rs_ctx.reset_error();
1973 return Err(LibISLError::new(err, err_msg));
1974 }
1975 Ok(isl_rs_result)
1976 }
1977
1978 pub fn to_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
1980 let pma = self;
1981 let isl_rs_ctx = pma.get_ctx();
1982 let mut pma = pma;
1983 pma.do_not_free_on_drop();
1984 let pma = pma.ptr;
1985 let isl_rs_result = unsafe { isl_pw_multi_aff_to_multi_pw_aff(pma) };
1986 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1987 should_free_on_drop: true };
1988 let err = isl_rs_ctx.last_error();
1989 if err != Error::None_ {
1990 let err_msg = isl_rs_ctx.last_error_msg();
1991 isl_rs_ctx.reset_error();
1992 return Err(LibISLError::new(err, err_msg));
1993 }
1994 Ok(isl_rs_result)
1995 }
1996
1997 pub fn to_str(&self) -> Result<&str, LibISLError> {
1999 let pma = self;
2000 let isl_rs_ctx = pma.get_ctx();
2001 let pma = pma.ptr;
2002 let isl_rs_result = unsafe { isl_pw_multi_aff_to_str(pma) };
2003 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2004 let isl_rs_result = isl_rs_result.to_str().unwrap();
2005 let err = isl_rs_ctx.last_error();
2006 if err != Error::None_ {
2007 let err_msg = isl_rs_ctx.last_error_msg();
2008 isl_rs_ctx.reset_error();
2009 return Err(LibISLError::new(err, err_msg));
2010 }
2011 Ok(isl_rs_result)
2012 }
2013
2014 pub fn to_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
2016 let pma = self;
2017 let isl_rs_ctx = pma.get_ctx();
2018 let mut pma = pma;
2019 pma.do_not_free_on_drop();
2020 let pma = pma.ptr;
2021 let isl_rs_result = unsafe { isl_pw_multi_aff_to_union_pw_multi_aff(pma) };
2022 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
2023 should_free_on_drop: true };
2024 let err = isl_rs_ctx.last_error();
2025 if err != Error::None_ {
2026 let err_msg = isl_rs_ctx.last_error_msg();
2027 isl_rs_ctx.reset_error();
2028 return Err(LibISLError::new(err, err_msg));
2029 }
2030 Ok(isl_rs_result)
2031 }
2032
2033 pub fn union_add(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
2035 let pma1 = self;
2036 let isl_rs_ctx = pma1.get_ctx();
2037 let mut pma1 = pma1;
2038 pma1.do_not_free_on_drop();
2039 let pma1 = pma1.ptr;
2040 let mut pma2 = pma2;
2041 pma2.do_not_free_on_drop();
2042 let pma2 = pma2.ptr;
2043 let isl_rs_result = unsafe { isl_pw_multi_aff_union_add(pma1, pma2) };
2044 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2045 should_free_on_drop: true };
2046 let err = isl_rs_ctx.last_error();
2047 if err != Error::None_ {
2048 let err_msg = isl_rs_ctx.last_error_msg();
2049 isl_rs_ctx.reset_error();
2050 return Err(LibISLError::new(err, err_msg));
2051 }
2052 Ok(isl_rs_result)
2053 }
2054
2055 pub fn union_lexmax(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
2057 let pma1 = self;
2058 let isl_rs_ctx = pma1.get_ctx();
2059 let mut pma1 = pma1;
2060 pma1.do_not_free_on_drop();
2061 let pma1 = pma1.ptr;
2062 let mut pma2 = pma2;
2063 pma2.do_not_free_on_drop();
2064 let pma2 = pma2.ptr;
2065 let isl_rs_result = unsafe { isl_pw_multi_aff_union_lexmax(pma1, pma2) };
2066 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2067 should_free_on_drop: true };
2068 let err = isl_rs_ctx.last_error();
2069 if err != Error::None_ {
2070 let err_msg = isl_rs_ctx.last_error_msg();
2071 isl_rs_ctx.reset_error();
2072 return Err(LibISLError::new(err, err_msg));
2073 }
2074 Ok(isl_rs_result)
2075 }
2076
2077 pub fn union_lexmin(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
2079 let pma1 = self;
2080 let isl_rs_ctx = pma1.get_ctx();
2081 let mut pma1 = pma1;
2082 pma1.do_not_free_on_drop();
2083 let pma1 = pma1.ptr;
2084 let mut pma2 = pma2;
2085 pma2.do_not_free_on_drop();
2086 let pma2 = pma2.ptr;
2087 let isl_rs_result = unsafe { isl_pw_multi_aff_union_lexmin(pma1, pma2) };
2088 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2089 should_free_on_drop: true };
2090 let err = isl_rs_ctx.last_error();
2091 if err != Error::None_ {
2092 let err_msg = isl_rs_ctx.last_error_msg();
2093 isl_rs_ctx.reset_error();
2094 return Err(LibISLError::new(err, err_msg));
2095 }
2096 Ok(isl_rs_result)
2097 }
2098
2099 pub fn zero(space: Space) -> Result<PwMultiAff, 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_pw_multi_aff_zero(space) };
2106 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2107 should_free_on_drop: true };
2108 let err = isl_rs_ctx.last_error();
2109 if err != Error::None_ {
2110 let err_msg = isl_rs_ctx.last_error_msg();
2111 isl_rs_ctx.reset_error();
2112 return Err(LibISLError::new(err, err_msg));
2113 }
2114 Ok(isl_rs_result)
2115 }
2116
2117 pub fn do_not_free_on_drop(&mut self) {
2120 self.should_free_on_drop = false;
2121 }
2122}
2123
2124impl Drop for PwMultiAff {
2125 fn drop(&mut self) {
2126 if self.should_free_on_drop {
2127 unsafe {
2128 isl_pw_multi_aff_free(self.ptr);
2129 }
2130 }
2131 }
2132}