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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
235 }
236 Ok(isl_rs_result)
237 }
238
239 pub fn add_constant_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
241 let pma = self;
242 let isl_rs_ctx = pma.get_ctx();
243 let mut pma = pma;
244 pma.do_not_free_on_drop();
245 let pma = pma.ptr;
246 let mut mv = mv;
247 mv.do_not_free_on_drop();
248 let mv = mv.ptr;
249 let isl_rs_result = unsafe { isl_pw_multi_aff_add_constant_multi_val(pma, mv) };
250 let isl_rs_result = PwMultiAff { 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_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
261 let pma = self;
262 let isl_rs_ctx = pma.get_ctx();
263 let mut pma = pma;
264 pma.do_not_free_on_drop();
265 let pma = pma.ptr;
266 let mut v = v;
267 v.do_not_free_on_drop();
268 let v = v.ptr;
269 let isl_rs_result = unsafe { isl_pw_multi_aff_add_constant_val(pma, v) };
270 let isl_rs_result = PwMultiAff { 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 align_params(self, model: Space) -> Result<PwMultiAff, LibISLError> {
281 let pma = self;
282 let isl_rs_ctx = pma.get_ctx();
283 let mut pma = pma;
284 pma.do_not_free_on_drop();
285 let pma = pma.ptr;
286 let mut model = model;
287 model.do_not_free_on_drop();
288 let model = model.ptr;
289 let isl_rs_result = unsafe { isl_pw_multi_aff_align_params(pma, model) };
290 let isl_rs_result = PwMultiAff { 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 alloc(set: Set, maff: MultiAff) -> Result<PwMultiAff, LibISLError> {
301 let isl_rs_ctx = set.get_ctx();
302 let mut set = set;
303 set.do_not_free_on_drop();
304 let set = set.ptr;
305 let mut maff = maff;
306 maff.do_not_free_on_drop();
307 let maff = maff.ptr;
308 let isl_rs_result = unsafe { isl_pw_multi_aff_alloc(set, maff) };
309 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
310 should_free_on_drop: true };
311 let err = isl_rs_ctx.last_error();
312 if err != Error::None_ {
313 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
314 }
315 Ok(isl_rs_result)
316 }
317
318 pub fn as_map(self) -> Result<Map, LibISLError> {
320 let pma = self;
321 let isl_rs_ctx = pma.get_ctx();
322 let mut pma = pma;
323 pma.do_not_free_on_drop();
324 let pma = pma.ptr;
325 let isl_rs_result = unsafe { isl_pw_multi_aff_as_map(pma) };
326 let isl_rs_result = Map { ptr: isl_rs_result,
327 should_free_on_drop: true };
328 let err = isl_rs_ctx.last_error();
329 if err != Error::None_ {
330 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
331 }
332 Ok(isl_rs_result)
333 }
334
335 pub fn as_multi_aff(self) -> Result<MultiAff, LibISLError> {
337 let pma = self;
338 let isl_rs_ctx = pma.get_ctx();
339 let mut pma = pma;
340 pma.do_not_free_on_drop();
341 let pma = pma.ptr;
342 let isl_rs_result = unsafe { isl_pw_multi_aff_as_multi_aff(pma) };
343 let isl_rs_result = MultiAff { ptr: isl_rs_result,
344 should_free_on_drop: true };
345 let err = isl_rs_ctx.last_error();
346 if err != Error::None_ {
347 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
348 }
349 Ok(isl_rs_result)
350 }
351
352 pub fn as_set(self) -> Result<Set, LibISLError> {
354 let pma = self;
355 let isl_rs_ctx = pma.get_ctx();
356 let mut pma = pma;
357 pma.do_not_free_on_drop();
358 let pma = pma.ptr;
359 let isl_rs_result = unsafe { isl_pw_multi_aff_as_set(pma) };
360 let isl_rs_result = Set { ptr: isl_rs_result,
361 should_free_on_drop: true };
362 let err = isl_rs_ctx.last_error();
363 if err != Error::None_ {
364 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
365 }
366 Ok(isl_rs_result)
367 }
368
369 pub fn bind_domain(self, tuple: MultiId) -> Result<PwMultiAff, LibISLError> {
371 let pma = self;
372 let isl_rs_ctx = pma.get_ctx();
373 let mut pma = pma;
374 pma.do_not_free_on_drop();
375 let pma = pma.ptr;
376 let mut tuple = tuple;
377 tuple.do_not_free_on_drop();
378 let tuple = tuple.ptr;
379 let isl_rs_result = unsafe { isl_pw_multi_aff_bind_domain(pma, tuple) };
380 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
381 should_free_on_drop: true };
382 let err = isl_rs_ctx.last_error();
383 if err != Error::None_ {
384 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
385 }
386 Ok(isl_rs_result)
387 }
388
389 pub fn bind_domain_wrapped_domain(self, tuple: MultiId) -> Result<PwMultiAff, LibISLError> {
391 let pma = self;
392 let isl_rs_ctx = pma.get_ctx();
393 let mut pma = pma;
394 pma.do_not_free_on_drop();
395 let pma = pma.ptr;
396 let mut tuple = tuple;
397 tuple.do_not_free_on_drop();
398 let tuple = tuple.ptr;
399 let isl_rs_result = unsafe { isl_pw_multi_aff_bind_domain_wrapped_domain(pma, tuple) };
400 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
401 should_free_on_drop: true };
402 let err = isl_rs_ctx.last_error();
403 if err != Error::None_ {
404 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
405 }
406 Ok(isl_rs_result)
407 }
408
409 pub fn coalesce(self) -> Result<PwMultiAff, LibISLError> {
411 let pma = self;
412 let isl_rs_ctx = pma.get_ctx();
413 let mut pma = pma;
414 pma.do_not_free_on_drop();
415 let pma = pma.ptr;
416 let isl_rs_result = unsafe { isl_pw_multi_aff_coalesce(pma) };
417 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
418 should_free_on_drop: true };
419 let err = isl_rs_ctx.last_error();
420 if err != Error::None_ {
421 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
422 }
423 Ok(isl_rs_result)
424 }
425
426 pub fn copy(&self) -> Result<PwMultiAff, LibISLError> {
428 let pma = self;
429 let isl_rs_ctx = pma.get_ctx();
430 let pma = pma.ptr;
431 let isl_rs_result = unsafe { isl_pw_multi_aff_copy(pma) };
432 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
433 should_free_on_drop: true };
434 let err = isl_rs_ctx.last_error();
435 if err != Error::None_ {
436 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
437 }
438 Ok(isl_rs_result)
439 }
440
441 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
443 let pma = self;
444 let isl_rs_ctx = pma.get_ctx();
445 let pma = pma.ptr;
446 let type_ = type_.to_i32();
447 let isl_rs_result = unsafe { isl_pw_multi_aff_dim(pma, type_) };
448 let err = isl_rs_ctx.last_error();
449 if err != Error::None_ {
450 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
451 }
452 Ok(isl_rs_result)
453 }
454
455 pub fn domain(self) -> Result<Set, LibISLError> {
457 let pma = self;
458 let isl_rs_ctx = pma.get_ctx();
459 let mut pma = pma;
460 pma.do_not_free_on_drop();
461 let pma = pma.ptr;
462 let isl_rs_result = unsafe { isl_pw_multi_aff_domain(pma) };
463 let isl_rs_result = Set { ptr: isl_rs_result,
464 should_free_on_drop: true };
465 let err = isl_rs_ctx.last_error();
466 if err != Error::None_ {
467 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
468 }
469 Ok(isl_rs_result)
470 }
471
472 pub fn domain_map(space: Space) -> Result<PwMultiAff, LibISLError> {
474 let isl_rs_ctx = space.get_ctx();
475 let mut space = space;
476 space.do_not_free_on_drop();
477 let space = space.ptr;
478 let isl_rs_result = unsafe { isl_pw_multi_aff_domain_map(space) };
479 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
480 should_free_on_drop: true };
481 let err = isl_rs_ctx.last_error();
482 if err != Error::None_ {
483 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
484 }
485 Ok(isl_rs_result)
486 }
487
488 pub fn domain_reverse(self) -> Result<PwMultiAff, LibISLError> {
490 let pma = self;
491 let isl_rs_ctx = pma.get_ctx();
492 let mut pma = pma;
493 pma.do_not_free_on_drop();
494 let pma = pma.ptr;
495 let isl_rs_result = unsafe { isl_pw_multi_aff_domain_reverse(pma) };
496 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
497 should_free_on_drop: true };
498 let err = isl_rs_ctx.last_error();
499 if err != Error::None_ {
500 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
501 }
502 Ok(isl_rs_result)
503 }
504
505 pub fn drop_dims(self, type_: DimType, first: u32, n: u32) -> Result<PwMultiAff, LibISLError> {
507 let pma = self;
508 let isl_rs_ctx = pma.get_ctx();
509 let mut pma = pma;
510 pma.do_not_free_on_drop();
511 let pma = pma.ptr;
512 let type_ = type_.to_i32();
513 let isl_rs_result = unsafe { isl_pw_multi_aff_drop_dims(pma, type_, first, n) };
514 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
515 should_free_on_drop: true };
516 let err = isl_rs_ctx.last_error();
517 if err != Error::None_ {
518 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
519 }
520 Ok(isl_rs_result)
521 }
522
523 pub fn drop_unused_params(self) -> Result<PwMultiAff, LibISLError> {
525 let pma = self;
526 let isl_rs_ctx = pma.get_ctx();
527 let mut pma = pma;
528 pma.do_not_free_on_drop();
529 let pma = pma.ptr;
530 let isl_rs_result = unsafe { isl_pw_multi_aff_drop_unused_params(pma) };
531 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
532 should_free_on_drop: true };
533 let err = isl_rs_ctx.last_error();
534 if err != Error::None_ {
535 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
536 }
537 Ok(isl_rs_result)
538 }
539
540 pub fn dump(&self) -> Result<(), LibISLError> {
542 let pma = self;
543 let isl_rs_ctx = pma.get_ctx();
544 let pma = pma.ptr;
545 let isl_rs_result = unsafe { isl_pw_multi_aff_dump(pma) };
546 let err = isl_rs_ctx.last_error();
547 if err != Error::None_ {
548 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
549 }
550 Ok(isl_rs_result)
551 }
552
553 pub fn empty(space: Space) -> Result<PwMultiAff, LibISLError> {
555 let isl_rs_ctx = space.get_ctx();
556 let mut space = space;
557 space.do_not_free_on_drop();
558 let space = space.ptr;
559 let isl_rs_result = unsafe { isl_pw_multi_aff_empty(space) };
560 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
561 should_free_on_drop: true };
562 let err = isl_rs_ctx.last_error();
563 if err != Error::None_ {
564 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
565 }
566 Ok(isl_rs_result)
567 }
568
569 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
571 let pma = self;
572 let isl_rs_ctx = pma.get_ctx();
573 let pma = pma.ptr;
574 let type_ = type_.to_i32();
575 let name = CString::new(name).unwrap();
576 let name = name.as_ptr();
577 let isl_rs_result = unsafe { isl_pw_multi_aff_find_dim_by_name(pma, type_, name) };
578 let err = isl_rs_ctx.last_error();
579 if err != Error::None_ {
580 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
581 }
582 Ok(isl_rs_result)
583 }
584
585 pub fn fix_si(self, type_: DimType, pos: u32, value: i32) -> Result<PwMultiAff, LibISLError> {
587 let pma = self;
588 let isl_rs_ctx = pma.get_ctx();
589 let mut pma = pma;
590 pma.do_not_free_on_drop();
591 let pma = pma.ptr;
592 let type_ = type_.to_i32();
593 let isl_rs_result = unsafe { isl_pw_multi_aff_fix_si(pma, type_, pos, value) };
594 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
595 should_free_on_drop: true };
596 let err = isl_rs_ctx.last_error();
597 if err != Error::None_ {
598 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
599 }
600 Ok(isl_rs_result)
601 }
602
603 pub fn flat_range_product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
605 let pma1 = self;
606 let isl_rs_ctx = pma1.get_ctx();
607 let mut pma1 = pma1;
608 pma1.do_not_free_on_drop();
609 let pma1 = pma1.ptr;
610 let mut pma2 = pma2;
611 pma2.do_not_free_on_drop();
612 let pma2 = pma2.ptr;
613 let isl_rs_result = unsafe { isl_pw_multi_aff_flat_range_product(pma1, pma2) };
614 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
615 should_free_on_drop: true };
616 let err = isl_rs_ctx.last_error();
617 if err != Error::None_ {
618 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
619 }
620 Ok(isl_rs_result)
621 }
622
623 pub fn free(self) -> Result<PwMultiAff, LibISLError> {
625 let pma = self;
626 let isl_rs_ctx = pma.get_ctx();
627 let mut pma = pma;
628 pma.do_not_free_on_drop();
629 let pma = pma.ptr;
630 let isl_rs_result = unsafe { isl_pw_multi_aff_free(pma) };
631 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
632 should_free_on_drop: true };
633 let err = isl_rs_ctx.last_error();
634 if err != Error::None_ {
635 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
636 }
637 Ok(isl_rs_result)
638 }
639
640 pub fn from_domain(set: Set) -> Result<PwMultiAff, LibISLError> {
642 let isl_rs_ctx = set.get_ctx();
643 let mut set = set;
644 set.do_not_free_on_drop();
645 let set = set.ptr;
646 let isl_rs_result = unsafe { isl_pw_multi_aff_from_domain(set) };
647 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
648 should_free_on_drop: true };
649 let err = isl_rs_ctx.last_error();
650 if err != Error::None_ {
651 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
652 }
653 Ok(isl_rs_result)
654 }
655
656 pub fn from_map(map: Map) -> Result<PwMultiAff, LibISLError> {
658 let isl_rs_ctx = map.get_ctx();
659 let mut map = map;
660 map.do_not_free_on_drop();
661 let map = map.ptr;
662 let isl_rs_result = unsafe { isl_pw_multi_aff_from_map(map) };
663 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
664 should_free_on_drop: true };
665 let err = isl_rs_ctx.last_error();
666 if err != Error::None_ {
667 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
668 }
669 Ok(isl_rs_result)
670 }
671
672 pub fn from_multi_aff(ma: MultiAff) -> Result<PwMultiAff, LibISLError> {
674 let isl_rs_ctx = ma.get_ctx();
675 let mut ma = ma;
676 ma.do_not_free_on_drop();
677 let ma = ma.ptr;
678 let isl_rs_result = unsafe { isl_pw_multi_aff_from_multi_aff(ma) };
679 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
680 should_free_on_drop: true };
681 let err = isl_rs_ctx.last_error();
682 if err != Error::None_ {
683 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
684 }
685 Ok(isl_rs_result)
686 }
687
688 pub fn from_multi_pw_aff(mpa: MultiPwAff) -> Result<PwMultiAff, LibISLError> {
690 let isl_rs_ctx = mpa.get_ctx();
691 let mut mpa = mpa;
692 mpa.do_not_free_on_drop();
693 let mpa = mpa.ptr;
694 let isl_rs_result = unsafe { isl_pw_multi_aff_from_multi_pw_aff(mpa) };
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 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
700 }
701 Ok(isl_rs_result)
702 }
703
704 pub fn from_pw_aff(pa: PwAff) -> Result<PwMultiAff, LibISLError> {
706 let isl_rs_ctx = pa.get_ctx();
707 let mut pa = pa;
708 pa.do_not_free_on_drop();
709 let pa = pa.ptr;
710 let isl_rs_result = unsafe { isl_pw_multi_aff_from_pw_aff(pa) };
711 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
712 should_free_on_drop: true };
713 let err = isl_rs_ctx.last_error();
714 if err != Error::None_ {
715 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
716 }
717 Ok(isl_rs_result)
718 }
719
720 pub fn from_set(set: Set) -> Result<PwMultiAff, LibISLError> {
722 let isl_rs_ctx = set.get_ctx();
723 let mut set = set;
724 set.do_not_free_on_drop();
725 let set = set.ptr;
726 let isl_rs_result = unsafe { isl_pw_multi_aff_from_set(set) };
727 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
728 should_free_on_drop: true };
729 let err = isl_rs_ctx.last_error();
730 if err != Error::None_ {
731 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
732 }
733 Ok(isl_rs_result)
734 }
735
736 pub fn get_at(&self, pos: i32) -> Result<PwAff, LibISLError> {
738 let pma = self;
739 let isl_rs_ctx = pma.get_ctx();
740 let pma = pma.ptr;
741 let isl_rs_result = unsafe { isl_pw_multi_aff_get_at(pma, pos) };
742 let isl_rs_result = PwAff { ptr: isl_rs_result,
743 should_free_on_drop: true };
744 let err = isl_rs_ctx.last_error();
745 if err != Error::None_ {
746 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
747 }
748 Ok(isl_rs_result)
749 }
750
751 pub fn get_ctx(&self) -> Context {
753 let pma = self;
754 let pma = pma.ptr;
755 let isl_rs_result = unsafe { isl_pw_multi_aff_get_ctx(pma) };
756 let isl_rs_result = Context { ptr: isl_rs_result,
757 should_free_on_drop: false };
758 isl_rs_result
759 }
760
761 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
763 let pma = self;
764 let isl_rs_ctx = pma.get_ctx();
765 let pma = pma.ptr;
766 let type_ = type_.to_i32();
767 let isl_rs_result = unsafe { isl_pw_multi_aff_get_dim_id(pma, type_, pos) };
768 let isl_rs_result = Id { ptr: isl_rs_result,
769 should_free_on_drop: true };
770 let err = isl_rs_ctx.last_error();
771 if err != Error::None_ {
772 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
773 }
774 Ok(isl_rs_result)
775 }
776
777 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
779 let pma = self;
780 let isl_rs_ctx = pma.get_ctx();
781 let pma = pma.ptr;
782 let type_ = type_.to_i32();
783 let isl_rs_result = unsafe { isl_pw_multi_aff_get_dim_name(pma, type_, pos) };
784 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
785 let isl_rs_result = isl_rs_result.to_str().unwrap();
786 let err = isl_rs_ctx.last_error();
787 if err != Error::None_ {
788 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
789 }
790 Ok(isl_rs_result)
791 }
792
793 pub fn get_domain_space(&self) -> Result<Space, LibISLError> {
795 let pma = self;
796 let isl_rs_ctx = pma.get_ctx();
797 let pma = pma.ptr;
798 let isl_rs_result = unsafe { isl_pw_multi_aff_get_domain_space(pma) };
799 let isl_rs_result = Space { ptr: isl_rs_result,
800 should_free_on_drop: true };
801 let err = isl_rs_ctx.last_error();
802 if err != Error::None_ {
803 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
804 }
805 Ok(isl_rs_result)
806 }
807
808 pub fn get_pw_aff(&self, pos: i32) -> Result<PwAff, LibISLError> {
810 let pma = self;
811 let isl_rs_ctx = pma.get_ctx();
812 let pma = pma.ptr;
813 let isl_rs_result = unsafe { isl_pw_multi_aff_get_pw_aff(pma, pos) };
814 let isl_rs_result = PwAff { ptr: isl_rs_result,
815 should_free_on_drop: true };
816 let err = isl_rs_ctx.last_error();
817 if err != Error::None_ {
818 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
819 }
820 Ok(isl_rs_result)
821 }
822
823 pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
825 let pma = self;
826 let isl_rs_ctx = pma.get_ctx();
827 let pma = pma.ptr;
828 let isl_rs_result = unsafe { isl_pw_multi_aff_get_range_tuple_id(pma) };
829 let isl_rs_result = Id { ptr: isl_rs_result,
830 should_free_on_drop: true };
831 let err = isl_rs_ctx.last_error();
832 if err != Error::None_ {
833 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
834 }
835 Ok(isl_rs_result)
836 }
837
838 pub fn get_space(&self) -> Result<Space, LibISLError> {
840 let pma = self;
841 let isl_rs_ctx = pma.get_ctx();
842 let pma = pma.ptr;
843 let isl_rs_result = unsafe { isl_pw_multi_aff_get_space(pma) };
844 let isl_rs_result = Space { ptr: isl_rs_result,
845 should_free_on_drop: true };
846 let err = isl_rs_ctx.last_error();
847 if err != Error::None_ {
848 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
849 }
850 Ok(isl_rs_result)
851 }
852
853 pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
855 let pma = self;
856 let isl_rs_ctx = pma.get_ctx();
857 let pma = pma.ptr;
858 let type_ = type_.to_i32();
859 let isl_rs_result = unsafe { isl_pw_multi_aff_get_tuple_id(pma, type_) };
860 let isl_rs_result = Id { ptr: isl_rs_result,
861 should_free_on_drop: true };
862 let err = isl_rs_ctx.last_error();
863 if err != Error::None_ {
864 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
865 }
866 Ok(isl_rs_result)
867 }
868
869 pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
871 let pma = self;
872 let isl_rs_ctx = pma.get_ctx();
873 let pma = pma.ptr;
874 let type_ = type_.to_i32();
875 let isl_rs_result = unsafe { isl_pw_multi_aff_get_tuple_name(pma, type_) };
876 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
877 let isl_rs_result = isl_rs_result.to_str().unwrap();
878 let err = isl_rs_ctx.last_error();
879 if err != Error::None_ {
880 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
881 }
882 Ok(isl_rs_result)
883 }
884
885 pub fn gist(self, set: Set) -> Result<PwMultiAff, LibISLError> {
887 let pma = self;
888 let isl_rs_ctx = pma.get_ctx();
889 let mut pma = pma;
890 pma.do_not_free_on_drop();
891 let pma = pma.ptr;
892 let mut set = set;
893 set.do_not_free_on_drop();
894 let set = set.ptr;
895 let isl_rs_result = unsafe { isl_pw_multi_aff_gist(pma, set) };
896 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
897 should_free_on_drop: true };
898 let err = isl_rs_ctx.last_error();
899 if err != Error::None_ {
900 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
901 }
902 Ok(isl_rs_result)
903 }
904
905 pub fn gist_params(self, set: Set) -> Result<PwMultiAff, LibISLError> {
907 let pma = self;
908 let isl_rs_ctx = pma.get_ctx();
909 let mut pma = pma;
910 pma.do_not_free_on_drop();
911 let pma = pma.ptr;
912 let mut set = set;
913 set.do_not_free_on_drop();
914 let set = set.ptr;
915 let isl_rs_result = unsafe { isl_pw_multi_aff_gist_params(pma, set) };
916 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
917 should_free_on_drop: true };
918 let err = isl_rs_ctx.last_error();
919 if err != Error::None_ {
920 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
921 }
922 Ok(isl_rs_result)
923 }
924
925 pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
927 let pma = self;
928 let isl_rs_ctx = pma.get_ctx();
929 let pma = pma.ptr;
930 let isl_rs_result = unsafe { isl_pw_multi_aff_has_range_tuple_id(pma) };
931 let isl_rs_result = match isl_rs_result {
932 0 => false,
933 1 => true,
934 _ => panic!("Got isl_bool = -1"),
935 };
936 let err = isl_rs_ctx.last_error();
937 if err != Error::None_ {
938 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
939 }
940 Ok(isl_rs_result)
941 }
942
943 pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
945 let pma = self;
946 let isl_rs_ctx = pma.get_ctx();
947 let pma = pma.ptr;
948 let type_ = type_.to_i32();
949 let isl_rs_result = unsafe { isl_pw_multi_aff_has_tuple_id(pma, type_) };
950 let isl_rs_result = match isl_rs_result {
951 0 => false,
952 1 => true,
953 _ => panic!("Got isl_bool = -1"),
954 };
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 has_tuple_name(&self, type_: DimType) -> Result<bool, LibISLError> {
964 let pma = self;
965 let isl_rs_ctx = pma.get_ctx();
966 let pma = pma.ptr;
967 let type_ = type_.to_i32();
968 let isl_rs_result = unsafe { isl_pw_multi_aff_has_tuple_name(pma, type_) };
969 let isl_rs_result = match isl_rs_result {
970 0 => false,
971 1 => true,
972 _ => panic!("Got isl_bool = -1"),
973 };
974 let err = isl_rs_ctx.last_error();
975 if err != Error::None_ {
976 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
977 }
978 Ok(isl_rs_result)
979 }
980
981 pub fn identity(space: Space) -> Result<PwMultiAff, LibISLError> {
983 let isl_rs_ctx = space.get_ctx();
984 let mut space = space;
985 space.do_not_free_on_drop();
986 let space = space.ptr;
987 let isl_rs_result = unsafe { isl_pw_multi_aff_identity(space) };
988 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
989 should_free_on_drop: true };
990 let err = isl_rs_ctx.last_error();
991 if err != Error::None_ {
992 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
993 }
994 Ok(isl_rs_result)
995 }
996
997 pub fn identity_on_domain_space(space: Space) -> Result<PwMultiAff, LibISLError> {
999 let isl_rs_ctx = space.get_ctx();
1000 let mut space = space;
1001 space.do_not_free_on_drop();
1002 let space = space.ptr;
1003 let isl_rs_result = unsafe { isl_pw_multi_aff_identity_on_domain_space(space) };
1004 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1005 should_free_on_drop: true };
1006 let err = isl_rs_ctx.last_error();
1007 if err != Error::None_ {
1008 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1009 }
1010 Ok(isl_rs_result)
1011 }
1012
1013 pub fn insert_domain(self, domain: Space) -> Result<PwMultiAff, LibISLError> {
1015 let pma = self;
1016 let isl_rs_ctx = pma.get_ctx();
1017 let mut pma = pma;
1018 pma.do_not_free_on_drop();
1019 let pma = pma.ptr;
1020 let mut domain = domain;
1021 domain.do_not_free_on_drop();
1022 let domain = domain.ptr;
1023 let isl_rs_result = unsafe { isl_pw_multi_aff_insert_domain(pma, domain) };
1024 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1025 should_free_on_drop: true };
1026 let err = isl_rs_ctx.last_error();
1027 if err != Error::None_ {
1028 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1029 }
1030 Ok(isl_rs_result)
1031 }
1032
1033 pub fn intersect_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1035 let pma = self;
1036 let isl_rs_ctx = pma.get_ctx();
1037 let mut pma = pma;
1038 pma.do_not_free_on_drop();
1039 let pma = pma.ptr;
1040 let mut set = set;
1041 set.do_not_free_on_drop();
1042 let set = set.ptr;
1043 let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain(pma, set) };
1044 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1045 should_free_on_drop: true };
1046 let err = isl_rs_ctx.last_error();
1047 if err != Error::None_ {
1048 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1049 }
1050 Ok(isl_rs_result)
1051 }
1052
1053 pub fn intersect_domain_wrapped_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1055 let pma = self;
1056 let isl_rs_ctx = pma.get_ctx();
1057 let mut pma = pma;
1058 pma.do_not_free_on_drop();
1059 let pma = pma.ptr;
1060 let mut set = set;
1061 set.do_not_free_on_drop();
1062 let set = set.ptr;
1063 let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain_wrapped_domain(pma, set) };
1064 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1065 should_free_on_drop: true };
1066 let err = isl_rs_ctx.last_error();
1067 if err != Error::None_ {
1068 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1069 }
1070 Ok(isl_rs_result)
1071 }
1072
1073 pub fn intersect_domain_wrapped_range(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1075 let pma = self;
1076 let isl_rs_ctx = pma.get_ctx();
1077 let mut pma = pma;
1078 pma.do_not_free_on_drop();
1079 let pma = pma.ptr;
1080 let mut set = set;
1081 set.do_not_free_on_drop();
1082 let set = set.ptr;
1083 let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_domain_wrapped_range(pma, set) };
1084 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1085 should_free_on_drop: true };
1086 let err = isl_rs_ctx.last_error();
1087 if err != Error::None_ {
1088 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1089 }
1090 Ok(isl_rs_result)
1091 }
1092
1093 pub fn intersect_params(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1095 let pma = self;
1096 let isl_rs_ctx = pma.get_ctx();
1097 let mut pma = pma;
1098 pma.do_not_free_on_drop();
1099 let pma = pma.ptr;
1100 let mut set = set;
1101 set.do_not_free_on_drop();
1102 let set = set.ptr;
1103 let isl_rs_result = unsafe { isl_pw_multi_aff_intersect_params(pma, set) };
1104 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1105 should_free_on_drop: true };
1106 let err = isl_rs_ctx.last_error();
1107 if err != Error::None_ {
1108 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1109 }
1110 Ok(isl_rs_result)
1111 }
1112
1113 pub fn involves_dims(&self, type_: DimType, first: u32, n: u32) -> Result<bool, LibISLError> {
1115 let pma = self;
1116 let isl_rs_ctx = pma.get_ctx();
1117 let pma = pma.ptr;
1118 let type_ = type_.to_i32();
1119 let isl_rs_result = unsafe { isl_pw_multi_aff_involves_dims(pma, type_, first, n) };
1120 let isl_rs_result = match isl_rs_result {
1121 0 => false,
1122 1 => true,
1123 _ => panic!("Got isl_bool = -1"),
1124 };
1125 let err = isl_rs_ctx.last_error();
1126 if err != Error::None_ {
1127 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1128 }
1129 Ok(isl_rs_result)
1130 }
1131
1132 pub fn involves_locals(&self) -> Result<bool, LibISLError> {
1134 let pma = self;
1135 let isl_rs_ctx = pma.get_ctx();
1136 let pma = pma.ptr;
1137 let isl_rs_result = unsafe { isl_pw_multi_aff_involves_locals(pma) };
1138 let isl_rs_result = match isl_rs_result {
1139 0 => false,
1140 1 => true,
1141 _ => panic!("Got isl_bool = -1"),
1142 };
1143 let err = isl_rs_ctx.last_error();
1144 if err != Error::None_ {
1145 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1146 }
1147 Ok(isl_rs_result)
1148 }
1149
1150 pub fn involves_nan(&self) -> Result<bool, LibISLError> {
1152 let pma = self;
1153 let isl_rs_ctx = pma.get_ctx();
1154 let pma = pma.ptr;
1155 let isl_rs_result = unsafe { isl_pw_multi_aff_involves_nan(pma) };
1156 let isl_rs_result = match isl_rs_result {
1157 0 => false,
1158 1 => true,
1159 _ => panic!("Got isl_bool = -1"),
1160 };
1161 let err = isl_rs_ctx.last_error();
1162 if err != Error::None_ {
1163 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1164 }
1165 Ok(isl_rs_result)
1166 }
1167
1168 pub fn involves_param_id(&self, id: &Id) -> Result<bool, LibISLError> {
1170 let pma = self;
1171 let isl_rs_ctx = pma.get_ctx();
1172 let pma = pma.ptr;
1173 let id = id.ptr;
1174 let isl_rs_result = unsafe { isl_pw_multi_aff_involves_param_id(pma, id) };
1175 let isl_rs_result = match isl_rs_result {
1176 0 => false,
1177 1 => true,
1178 _ => panic!("Got isl_bool = -1"),
1179 };
1180 let err = isl_rs_ctx.last_error();
1181 if err != Error::None_ {
1182 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1183 }
1184 Ok(isl_rs_result)
1185 }
1186
1187 pub fn is_equal(&self, pma2: &PwMultiAff) -> Result<bool, LibISLError> {
1189 let pma1 = self;
1190 let isl_rs_ctx = pma1.get_ctx();
1191 let pma1 = pma1.ptr;
1192 let pma2 = pma2.ptr;
1193 let isl_rs_result = unsafe { isl_pw_multi_aff_is_equal(pma1, pma2) };
1194 let isl_rs_result = match isl_rs_result {
1195 0 => false,
1196 1 => true,
1197 _ => panic!("Got isl_bool = -1"),
1198 };
1199 let err = isl_rs_ctx.last_error();
1200 if err != Error::None_ {
1201 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1202 }
1203 Ok(isl_rs_result)
1204 }
1205
1206 pub fn isa_multi_aff(&self) -> Result<bool, LibISLError> {
1208 let pma = self;
1209 let isl_rs_ctx = pma.get_ctx();
1210 let pma = pma.ptr;
1211 let isl_rs_result = unsafe { isl_pw_multi_aff_isa_multi_aff(pma) };
1212 let isl_rs_result = match isl_rs_result {
1213 0 => false,
1214 1 => true,
1215 _ => panic!("Got isl_bool = -1"),
1216 };
1217 let err = isl_rs_ctx.last_error();
1218 if err != Error::None_ {
1219 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1220 }
1221 Ok(isl_rs_result)
1222 }
1223
1224 pub fn max_multi_val(self) -> Result<MultiVal, LibISLError> {
1226 let pma = self;
1227 let isl_rs_ctx = pma.get_ctx();
1228 let mut pma = pma;
1229 pma.do_not_free_on_drop();
1230 let pma = pma.ptr;
1231 let isl_rs_result = unsafe { isl_pw_multi_aff_max_multi_val(pma) };
1232 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1233 should_free_on_drop: true };
1234 let err = isl_rs_ctx.last_error();
1235 if err != Error::None_ {
1236 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1237 }
1238 Ok(isl_rs_result)
1239 }
1240
1241 pub fn min_multi_val(self) -> Result<MultiVal, LibISLError> {
1243 let pma = self;
1244 let isl_rs_ctx = pma.get_ctx();
1245 let mut pma = pma;
1246 pma.do_not_free_on_drop();
1247 let pma = pma.ptr;
1248 let isl_rs_result = unsafe { isl_pw_multi_aff_min_multi_val(pma) };
1249 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1250 should_free_on_drop: true };
1251 let err = isl_rs_ctx.last_error();
1252 if err != Error::None_ {
1253 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1254 }
1255 Ok(isl_rs_result)
1256 }
1257
1258 pub fn multi_val_on_domain(domain: Set, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1260 let isl_rs_ctx = domain.get_ctx();
1261 let mut domain = domain;
1262 domain.do_not_free_on_drop();
1263 let domain = domain.ptr;
1264 let mut mv = mv;
1265 mv.do_not_free_on_drop();
1266 let mv = mv.ptr;
1267 let isl_rs_result = unsafe { isl_pw_multi_aff_multi_val_on_domain(domain, mv) };
1268 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1269 should_free_on_drop: true };
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 n_piece(&self) -> Result<i32, LibISLError> {
1279 let pma = self;
1280 let isl_rs_ctx = pma.get_ctx();
1281 let pma = pma.ptr;
1282 let isl_rs_result = unsafe { isl_pw_multi_aff_n_piece(pma) };
1283 let err = isl_rs_ctx.last_error();
1284 if err != Error::None_ {
1285 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1286 }
1287 Ok(isl_rs_result)
1288 }
1289
1290 pub fn neg(self) -> Result<PwMultiAff, LibISLError> {
1292 let pma = self;
1293 let isl_rs_ctx = pma.get_ctx();
1294 let mut pma = pma;
1295 pma.do_not_free_on_drop();
1296 let pma = pma.ptr;
1297 let isl_rs_result = unsafe { isl_pw_multi_aff_neg(pma) };
1298 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1299 should_free_on_drop: true };
1300 let err = isl_rs_ctx.last_error();
1301 if err != Error::None_ {
1302 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1303 }
1304 Ok(isl_rs_result)
1305 }
1306
1307 pub fn plain_is_equal(&self, pma2: &PwMultiAff) -> Result<bool, LibISLError> {
1309 let pma1 = self;
1310 let isl_rs_ctx = pma1.get_ctx();
1311 let pma1 = pma1.ptr;
1312 let pma2 = pma2.ptr;
1313 let isl_rs_result = unsafe { isl_pw_multi_aff_plain_is_equal(pma1, pma2) };
1314 let isl_rs_result = match isl_rs_result {
1315 0 => false,
1316 1 => true,
1317 _ => panic!("Got isl_bool = -1"),
1318 };
1319 let err = isl_rs_ctx.last_error();
1320 if err != Error::None_ {
1321 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1322 }
1323 Ok(isl_rs_result)
1324 }
1325
1326 pub fn preimage_domain_wrapped_domain_pw_multi_aff(self, pma2: PwMultiAff)
1328 -> Result<PwMultiAff, LibISLError> {
1329 let pma1 = self;
1330 let isl_rs_ctx = pma1.get_ctx();
1331 let mut pma1 = pma1;
1332 pma1.do_not_free_on_drop();
1333 let pma1 = pma1.ptr;
1334 let mut pma2 = pma2;
1335 pma2.do_not_free_on_drop();
1336 let pma2 = pma2.ptr;
1337 let isl_rs_result =
1338 unsafe { isl_pw_multi_aff_preimage_domain_wrapped_domain_pw_multi_aff(pma1, pma2) };
1339 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1340 should_free_on_drop: true };
1341 let err = isl_rs_ctx.last_error();
1342 if err != Error::None_ {
1343 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1344 }
1345 Ok(isl_rs_result)
1346 }
1347
1348 pub fn product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1350 let pma1 = self;
1351 let isl_rs_ctx = pma1.get_ctx();
1352 let mut pma1 = pma1;
1353 pma1.do_not_free_on_drop();
1354 let pma1 = pma1.ptr;
1355 let mut pma2 = pma2;
1356 pma2.do_not_free_on_drop();
1357 let pma2 = pma2.ptr;
1358 let isl_rs_result = unsafe { isl_pw_multi_aff_product(pma1, pma2) };
1359 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1360 should_free_on_drop: true };
1361 let err = isl_rs_ctx.last_error();
1362 if err != Error::None_ {
1363 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1364 }
1365 Ok(isl_rs_result)
1366 }
1367
1368 pub fn project_domain_on_params(self) -> Result<PwMultiAff, LibISLError> {
1370 let pma = self;
1371 let isl_rs_ctx = pma.get_ctx();
1372 let mut pma = pma;
1373 pma.do_not_free_on_drop();
1374 let pma = pma.ptr;
1375 let isl_rs_result = unsafe { isl_pw_multi_aff_project_domain_on_params(pma) };
1376 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1377 should_free_on_drop: true };
1378 let err = isl_rs_ctx.last_error();
1379 if err != Error::None_ {
1380 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1381 }
1382 Ok(isl_rs_result)
1383 }
1384
1385 pub fn project_out_map(space: Space, type_: DimType, first: u32, n: u32)
1387 -> Result<PwMultiAff, LibISLError> {
1388 let isl_rs_ctx = space.get_ctx();
1389 let mut space = space;
1390 space.do_not_free_on_drop();
1391 let space = space.ptr;
1392 let type_ = type_.to_i32();
1393 let isl_rs_result = unsafe { isl_pw_multi_aff_project_out_map(space, type_, first, n) };
1394 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1395 should_free_on_drop: true };
1396 let err = isl_rs_ctx.last_error();
1397 if err != Error::None_ {
1398 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1399 }
1400 Ok(isl_rs_result)
1401 }
1402
1403 pub fn pullback_multi_aff(self, ma: MultiAff) -> Result<PwMultiAff, LibISLError> {
1405 let pma = self;
1406 let isl_rs_ctx = pma.get_ctx();
1407 let mut pma = pma;
1408 pma.do_not_free_on_drop();
1409 let pma = pma.ptr;
1410 let mut ma = ma;
1411 ma.do_not_free_on_drop();
1412 let ma = ma.ptr;
1413 let isl_rs_result = unsafe { isl_pw_multi_aff_pullback_multi_aff(pma, ma) };
1414 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1415 should_free_on_drop: true };
1416 let err = isl_rs_ctx.last_error();
1417 if err != Error::None_ {
1418 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1419 }
1420 Ok(isl_rs_result)
1421 }
1422
1423 pub fn pullback_pw_multi_aff(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1425 let pma1 = self;
1426 let isl_rs_ctx = pma1.get_ctx();
1427 let mut pma1 = pma1;
1428 pma1.do_not_free_on_drop();
1429 let pma1 = pma1.ptr;
1430 let mut pma2 = pma2;
1431 pma2.do_not_free_on_drop();
1432 let pma2 = pma2.ptr;
1433 let isl_rs_result = unsafe { isl_pw_multi_aff_pullback_pw_multi_aff(pma1, pma2) };
1434 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1435 should_free_on_drop: true };
1436 let err = isl_rs_ctx.last_error();
1437 if err != Error::None_ {
1438 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1439 }
1440 Ok(isl_rs_result)
1441 }
1442
1443 pub fn range_factor_domain(self) -> Result<PwMultiAff, LibISLError> {
1445 let pma = self;
1446 let isl_rs_ctx = pma.get_ctx();
1447 let mut pma = pma;
1448 pma.do_not_free_on_drop();
1449 let pma = pma.ptr;
1450 let isl_rs_result = unsafe { isl_pw_multi_aff_range_factor_domain(pma) };
1451 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1452 should_free_on_drop: true };
1453 let err = isl_rs_ctx.last_error();
1454 if err != Error::None_ {
1455 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1456 }
1457 Ok(isl_rs_result)
1458 }
1459
1460 pub fn range_factor_range(self) -> Result<PwMultiAff, LibISLError> {
1462 let pma = self;
1463 let isl_rs_ctx = pma.get_ctx();
1464 let mut pma = pma;
1465 pma.do_not_free_on_drop();
1466 let pma = pma.ptr;
1467 let isl_rs_result = unsafe { isl_pw_multi_aff_range_factor_range(pma) };
1468 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1469 should_free_on_drop: true };
1470 let err = isl_rs_ctx.last_error();
1471 if err != Error::None_ {
1472 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1473 }
1474 Ok(isl_rs_result)
1475 }
1476
1477 pub fn range_map(space: Space) -> Result<PwMultiAff, LibISLError> {
1479 let isl_rs_ctx = space.get_ctx();
1480 let mut space = space;
1481 space.do_not_free_on_drop();
1482 let space = space.ptr;
1483 let isl_rs_result = unsafe { isl_pw_multi_aff_range_map(space) };
1484 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1485 should_free_on_drop: true };
1486 let err = isl_rs_ctx.last_error();
1487 if err != Error::None_ {
1488 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1489 }
1490 Ok(isl_rs_result)
1491 }
1492
1493 pub fn range_product(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1495 let pma1 = self;
1496 let isl_rs_ctx = pma1.get_ctx();
1497 let mut pma1 = pma1;
1498 pma1.do_not_free_on_drop();
1499 let pma1 = pma1.ptr;
1500 let mut pma2 = pma2;
1501 pma2.do_not_free_on_drop();
1502 let pma2 = pma2.ptr;
1503 let isl_rs_result = unsafe { isl_pw_multi_aff_range_product(pma1, pma2) };
1504 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1505 should_free_on_drop: true };
1506 let err = isl_rs_ctx.last_error();
1507 if err != Error::None_ {
1508 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1509 }
1510 Ok(isl_rs_result)
1511 }
1512
1513 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<PwMultiAff, LibISLError> {
1515 let isl_rs_ctx = Context { ptr: ctx.ptr,
1516 should_free_on_drop: false };
1517 let ctx = ctx.ptr;
1518 let str_ = CString::new(str_).unwrap();
1519 let str_ = str_.as_ptr();
1520 let isl_rs_result = unsafe { isl_pw_multi_aff_read_from_str(ctx, str_) };
1521 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1522 should_free_on_drop: true };
1523 let err = isl_rs_ctx.last_error();
1524 if err != Error::None_ {
1525 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1526 }
1527 Ok(isl_rs_result)
1528 }
1529
1530 pub fn reset_tuple_id(self, type_: DimType) -> Result<PwMultiAff, LibISLError> {
1532 let pma = self;
1533 let isl_rs_ctx = pma.get_ctx();
1534 let mut pma = pma;
1535 pma.do_not_free_on_drop();
1536 let pma = pma.ptr;
1537 let type_ = type_.to_i32();
1538 let isl_rs_result = unsafe { isl_pw_multi_aff_reset_tuple_id(pma, type_) };
1539 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1540 should_free_on_drop: true };
1541 let err = isl_rs_ctx.last_error();
1542 if err != Error::None_ {
1543 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1544 }
1545 Ok(isl_rs_result)
1546 }
1547
1548 pub fn reset_user(self) -> Result<PwMultiAff, LibISLError> {
1550 let pma = self;
1551 let isl_rs_ctx = pma.get_ctx();
1552 let mut pma = pma;
1553 pma.do_not_free_on_drop();
1554 let pma = pma.ptr;
1555 let isl_rs_result = unsafe { isl_pw_multi_aff_reset_user(pma) };
1556 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1557 should_free_on_drop: true };
1558 let err = isl_rs_ctx.last_error();
1559 if err != Error::None_ {
1560 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1561 }
1562 Ok(isl_rs_result)
1563 }
1564
1565 pub fn scale_down_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1567 let pma = self;
1568 let isl_rs_ctx = pma.get_ctx();
1569 let mut pma = pma;
1570 pma.do_not_free_on_drop();
1571 let pma = pma.ptr;
1572 let mut mv = mv;
1573 mv.do_not_free_on_drop();
1574 let mv = mv.ptr;
1575 let isl_rs_result = unsafe { isl_pw_multi_aff_scale_down_multi_val(pma, mv) };
1576 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1577 should_free_on_drop: true };
1578 let err = isl_rs_ctx.last_error();
1579 if err != Error::None_ {
1580 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1581 }
1582 Ok(isl_rs_result)
1583 }
1584
1585 pub fn scale_down_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
1587 let pma = self;
1588 let isl_rs_ctx = pma.get_ctx();
1589 let mut pma = pma;
1590 pma.do_not_free_on_drop();
1591 let pma = pma.ptr;
1592 let mut v = v;
1593 v.do_not_free_on_drop();
1594 let v = v.ptr;
1595 let isl_rs_result = unsafe { isl_pw_multi_aff_scale_down_val(pma, v) };
1596 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1597 should_free_on_drop: true };
1598 let err = isl_rs_ctx.last_error();
1599 if err != Error::None_ {
1600 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1601 }
1602 Ok(isl_rs_result)
1603 }
1604
1605 pub fn scale_multi_val(self, mv: MultiVal) -> Result<PwMultiAff, LibISLError> {
1607 let pma = self;
1608 let isl_rs_ctx = pma.get_ctx();
1609 let mut pma = pma;
1610 pma.do_not_free_on_drop();
1611 let pma = pma.ptr;
1612 let mut mv = mv;
1613 mv.do_not_free_on_drop();
1614 let mv = mv.ptr;
1615 let isl_rs_result = unsafe { isl_pw_multi_aff_scale_multi_val(pma, mv) };
1616 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1617 should_free_on_drop: true };
1618 let err = isl_rs_ctx.last_error();
1619 if err != Error::None_ {
1620 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1621 }
1622 Ok(isl_rs_result)
1623 }
1624
1625 pub fn scale_val(self, v: Val) -> Result<PwMultiAff, LibISLError> {
1627 let pma = self;
1628 let isl_rs_ctx = pma.get_ctx();
1629 let mut pma = pma;
1630 pma.do_not_free_on_drop();
1631 let pma = pma.ptr;
1632 let mut v = v;
1633 v.do_not_free_on_drop();
1634 let v = v.ptr;
1635 let isl_rs_result = unsafe { isl_pw_multi_aff_scale_val(pma, v) };
1636 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1637 should_free_on_drop: true };
1638 let err = isl_rs_ctx.last_error();
1639 if err != Error::None_ {
1640 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1641 }
1642 Ok(isl_rs_result)
1643 }
1644
1645 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<PwMultiAff, LibISLError> {
1647 let pma = self;
1648 let isl_rs_ctx = pma.get_ctx();
1649 let mut pma = pma;
1650 pma.do_not_free_on_drop();
1651 let pma = pma.ptr;
1652 let type_ = type_.to_i32();
1653 let mut id = id;
1654 id.do_not_free_on_drop();
1655 let id = id.ptr;
1656 let isl_rs_result = unsafe { isl_pw_multi_aff_set_dim_id(pma, type_, pos, id) };
1657 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1658 should_free_on_drop: true };
1659 let err = isl_rs_ctx.last_error();
1660 if err != Error::None_ {
1661 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1662 }
1663 Ok(isl_rs_result)
1664 }
1665
1666 pub fn set_pw_aff(self, pos: u32, pa: PwAff) -> Result<PwMultiAff, LibISLError> {
1668 let pma = self;
1669 let isl_rs_ctx = pma.get_ctx();
1670 let mut pma = pma;
1671 pma.do_not_free_on_drop();
1672 let pma = pma.ptr;
1673 let mut pa = pa;
1674 pa.do_not_free_on_drop();
1675 let pa = pa.ptr;
1676 let isl_rs_result = unsafe { isl_pw_multi_aff_set_pw_aff(pma, pos, pa) };
1677 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1678 should_free_on_drop: true };
1679 let err = isl_rs_ctx.last_error();
1680 if err != Error::None_ {
1681 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1682 }
1683 Ok(isl_rs_result)
1684 }
1685
1686 pub fn set_range_tuple_id(self, id: Id) -> Result<PwMultiAff, LibISLError> {
1688 let pma = self;
1689 let isl_rs_ctx = pma.get_ctx();
1690 let mut pma = pma;
1691 pma.do_not_free_on_drop();
1692 let pma = pma.ptr;
1693 let mut id = id;
1694 id.do_not_free_on_drop();
1695 let id = id.ptr;
1696 let isl_rs_result = unsafe { isl_pw_multi_aff_set_range_tuple_id(pma, id) };
1697 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1698 should_free_on_drop: true };
1699 let err = isl_rs_ctx.last_error();
1700 if err != Error::None_ {
1701 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1702 }
1703 Ok(isl_rs_result)
1704 }
1705
1706 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<PwMultiAff, LibISLError> {
1708 let pma = self;
1709 let isl_rs_ctx = pma.get_ctx();
1710 let mut pma = pma;
1711 pma.do_not_free_on_drop();
1712 let pma = pma.ptr;
1713 let type_ = type_.to_i32();
1714 let mut id = id;
1715 id.do_not_free_on_drop();
1716 let id = id.ptr;
1717 let isl_rs_result = unsafe { isl_pw_multi_aff_set_tuple_id(pma, type_, id) };
1718 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1719 should_free_on_drop: true };
1720 let err = isl_rs_ctx.last_error();
1721 if err != Error::None_ {
1722 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1723 }
1724 Ok(isl_rs_result)
1725 }
1726
1727 pub fn sub(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1729 let pma1 = self;
1730 let isl_rs_ctx = pma1.get_ctx();
1731 let mut pma1 = pma1;
1732 pma1.do_not_free_on_drop();
1733 let pma1 = pma1.ptr;
1734 let mut pma2 = pma2;
1735 pma2.do_not_free_on_drop();
1736 let pma2 = pma2.ptr;
1737 let isl_rs_result = unsafe { isl_pw_multi_aff_sub(pma1, pma2) };
1738 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1739 should_free_on_drop: true };
1740 let err = isl_rs_ctx.last_error();
1741 if err != Error::None_ {
1742 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1743 }
1744 Ok(isl_rs_result)
1745 }
1746
1747 pub fn subtract_domain(self, set: Set) -> Result<PwMultiAff, LibISLError> {
1749 let pma = self;
1750 let isl_rs_ctx = pma.get_ctx();
1751 let mut pma = pma;
1752 pma.do_not_free_on_drop();
1753 let pma = pma.ptr;
1754 let mut set = set;
1755 set.do_not_free_on_drop();
1756 let set = set.ptr;
1757 let isl_rs_result = unsafe { isl_pw_multi_aff_subtract_domain(pma, set) };
1758 let isl_rs_result = PwMultiAff { 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 to_list(self) -> Result<PwMultiAffList, LibISLError> {
1769 let el = self;
1770 let isl_rs_ctx = el.get_ctx();
1771 let mut el = el;
1772 el.do_not_free_on_drop();
1773 let el = el.ptr;
1774 let isl_rs_result = unsafe { isl_pw_multi_aff_to_list(el) };
1775 let isl_rs_result = PwMultiAffList { ptr: isl_rs_result,
1776 should_free_on_drop: true };
1777 let err = isl_rs_ctx.last_error();
1778 if err != Error::None_ {
1779 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1780 }
1781 Ok(isl_rs_result)
1782 }
1783
1784 pub fn to_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
1786 let pma = self;
1787 let isl_rs_ctx = pma.get_ctx();
1788 let mut pma = pma;
1789 pma.do_not_free_on_drop();
1790 let pma = pma.ptr;
1791 let isl_rs_result = unsafe { isl_pw_multi_aff_to_multi_pw_aff(pma) };
1792 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1793 should_free_on_drop: true };
1794 let err = isl_rs_ctx.last_error();
1795 if err != Error::None_ {
1796 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1797 }
1798 Ok(isl_rs_result)
1799 }
1800
1801 pub fn to_str(&self) -> Result<&str, LibISLError> {
1803 let pma = self;
1804 let isl_rs_ctx = pma.get_ctx();
1805 let pma = pma.ptr;
1806 let isl_rs_result = unsafe { isl_pw_multi_aff_to_str(pma) };
1807 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1808 let isl_rs_result = isl_rs_result.to_str().unwrap();
1809 let err = isl_rs_ctx.last_error();
1810 if err != Error::None_ {
1811 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1812 }
1813 Ok(isl_rs_result)
1814 }
1815
1816 pub fn to_union_pw_multi_aff(self) -> Result<UnionPwMultiAff, LibISLError> {
1818 let pma = self;
1819 let isl_rs_ctx = pma.get_ctx();
1820 let mut pma = pma;
1821 pma.do_not_free_on_drop();
1822 let pma = pma.ptr;
1823 let isl_rs_result = unsafe { isl_pw_multi_aff_to_union_pw_multi_aff(pma) };
1824 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1825 should_free_on_drop: true };
1826 let err = isl_rs_ctx.last_error();
1827 if err != Error::None_ {
1828 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1829 }
1830 Ok(isl_rs_result)
1831 }
1832
1833 pub fn union_add(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1835 let pma1 = self;
1836 let isl_rs_ctx = pma1.get_ctx();
1837 let mut pma1 = pma1;
1838 pma1.do_not_free_on_drop();
1839 let pma1 = pma1.ptr;
1840 let mut pma2 = pma2;
1841 pma2.do_not_free_on_drop();
1842 let pma2 = pma2.ptr;
1843 let isl_rs_result = unsafe { isl_pw_multi_aff_union_add(pma1, pma2) };
1844 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1845 should_free_on_drop: true };
1846 let err = isl_rs_ctx.last_error();
1847 if err != Error::None_ {
1848 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1849 }
1850 Ok(isl_rs_result)
1851 }
1852
1853 pub fn union_lexmax(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1855 let pma1 = self;
1856 let isl_rs_ctx = pma1.get_ctx();
1857 let mut pma1 = pma1;
1858 pma1.do_not_free_on_drop();
1859 let pma1 = pma1.ptr;
1860 let mut pma2 = pma2;
1861 pma2.do_not_free_on_drop();
1862 let pma2 = pma2.ptr;
1863 let isl_rs_result = unsafe { isl_pw_multi_aff_union_lexmax(pma1, pma2) };
1864 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1865 should_free_on_drop: true };
1866 let err = isl_rs_ctx.last_error();
1867 if err != Error::None_ {
1868 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1869 }
1870 Ok(isl_rs_result)
1871 }
1872
1873 pub fn union_lexmin(self, pma2: PwMultiAff) -> Result<PwMultiAff, LibISLError> {
1875 let pma1 = self;
1876 let isl_rs_ctx = pma1.get_ctx();
1877 let mut pma1 = pma1;
1878 pma1.do_not_free_on_drop();
1879 let pma1 = pma1.ptr;
1880 let mut pma2 = pma2;
1881 pma2.do_not_free_on_drop();
1882 let pma2 = pma2.ptr;
1883 let isl_rs_result = unsafe { isl_pw_multi_aff_union_lexmin(pma1, pma2) };
1884 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1885 should_free_on_drop: true };
1886 let err = isl_rs_ctx.last_error();
1887 if err != Error::None_ {
1888 return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
1889 }
1890 Ok(isl_rs_result)
1891 }
1892
1893 pub fn zero(space: Space) -> Result<PwMultiAff, LibISLError> {
1895 let isl_rs_ctx = space.get_ctx();
1896 let mut space = space;
1897 space.do_not_free_on_drop();
1898 let space = space.ptr;
1899 let isl_rs_result = unsafe { isl_pw_multi_aff_zero(space) };
1900 let isl_rs_result = PwMultiAff { 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 do_not_free_on_drop(&mut self) {
1912 self.should_free_on_drop = false;
1913 }
1914}
1915
1916impl Drop for PwMultiAff {
1917 fn drop(&mut self) {
1918 if self.should_free_on_drop {
1919 unsafe {
1920 isl_pw_multi_aff_free(self.ptr);
1921 }
1922 }
1923 }
1924}