1use super::{
5 Aff, AffList, Context, DimType, Error, Id, IdList, LibISLError, Map, MultiAff, MultiId,
6 MultiPwAff, MultiUnionPwAff, MultiVal, PwAffList, PwMultiAff, Set, UnionPwAffList, ValList,
7};
8use libc::uintptr_t;
9use std::ffi::{CStr, CString};
10use std::os::raw::c_char;
11
12pub struct Space {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_space_add_dims(space: uintptr_t, type_: i32, n: u32) -> uintptr_t;
21
22 fn isl_space_add_named_tuple_id_ui(space: uintptr_t, tuple_id: uintptr_t, dim: u32)
23 -> uintptr_t;
24
25 fn isl_space_add_param_id(space: uintptr_t, id: uintptr_t) -> uintptr_t;
26
27 fn isl_space_add_unnamed_tuple_ui(space: uintptr_t, dim: u32) -> uintptr_t;
28
29 fn isl_space_align_params(space1: uintptr_t, space2: uintptr_t) -> uintptr_t;
30
31 fn isl_space_alloc(ctx: uintptr_t, nparam: u32, n_in: u32, n_out: u32) -> uintptr_t;
32
33 fn isl_space_can_curry(space: uintptr_t) -> i32;
34
35 fn isl_space_can_range_curry(space: uintptr_t) -> i32;
36
37 fn isl_space_can_uncurry(space: uintptr_t) -> i32;
38
39 fn isl_space_can_zip(space: uintptr_t) -> i32;
40
41 fn isl_space_copy(space: uintptr_t) -> uintptr_t;
42
43 fn isl_space_curry(space: uintptr_t) -> uintptr_t;
44
45 fn isl_space_dim(space: uintptr_t, type_: i32) -> i32;
46
47 fn isl_space_domain(space: uintptr_t) -> uintptr_t;
48
49 fn isl_space_domain_factor_domain(space: uintptr_t) -> uintptr_t;
50
51 fn isl_space_domain_factor_range(space: uintptr_t) -> uintptr_t;
52
53 fn isl_space_domain_is_wrapping(space: uintptr_t) -> i32;
54
55 fn isl_space_domain_map(space: uintptr_t) -> uintptr_t;
56
57 fn isl_space_domain_map_multi_aff(space: uintptr_t) -> uintptr_t;
58
59 fn isl_space_domain_map_pw_multi_aff(space: uintptr_t) -> uintptr_t;
60
61 fn isl_space_domain_product(left: uintptr_t, right: uintptr_t) -> uintptr_t;
62
63 fn isl_space_domain_reverse(space: uintptr_t) -> uintptr_t;
64
65 fn isl_space_domain_wrapped_domain(space: uintptr_t) -> uintptr_t;
66
67 fn isl_space_domain_wrapped_range(space: uintptr_t) -> uintptr_t;
68
69 fn isl_space_drop_all_params(space: uintptr_t) -> uintptr_t;
70
71 fn isl_space_drop_dims(space: uintptr_t, type_: i32, first: u32, num: u32) -> uintptr_t;
72
73 fn isl_space_drop_inputs(space: uintptr_t, first: u32, n: u32) -> uintptr_t;
74
75 fn isl_space_drop_outputs(space: uintptr_t, first: u32, n: u32) -> uintptr_t;
76
77 fn isl_space_dump(space: uintptr_t) -> ();
78
79 fn isl_space_factor_domain(space: uintptr_t) -> uintptr_t;
80
81 fn isl_space_factor_range(space: uintptr_t) -> uintptr_t;
82
83 fn isl_space_find_dim_by_id(space: uintptr_t, type_: i32, id: uintptr_t) -> i32;
84
85 fn isl_space_find_dim_by_name(space: uintptr_t, type_: i32, name: *const c_char) -> i32;
86
87 fn isl_space_flatten_domain(space: uintptr_t) -> uintptr_t;
88
89 fn isl_space_flatten_range(space: uintptr_t) -> uintptr_t;
90
91 fn isl_space_free(space: uintptr_t) -> uintptr_t;
92
93 fn isl_space_from_domain(space: uintptr_t) -> uintptr_t;
94
95 fn isl_space_from_range(space: uintptr_t) -> uintptr_t;
96
97 fn isl_space_get_ctx(space: uintptr_t) -> uintptr_t;
98
99 fn isl_space_get_dim_id(space: uintptr_t, type_: i32, pos: u32) -> uintptr_t;
100
101 fn isl_space_get_dim_name(space: uintptr_t, type_: i32, pos: u32) -> *const c_char;
102
103 fn isl_space_get_domain_tuple_id(space: uintptr_t) -> uintptr_t;
104
105 fn isl_space_get_range_tuple_id(space: uintptr_t) -> uintptr_t;
106
107 fn isl_space_get_tuple_id(space: uintptr_t, type_: i32) -> uintptr_t;
108
109 fn isl_space_get_tuple_name(space: uintptr_t, type_: i32) -> *const c_char;
110
111 fn isl_space_has_dim_id(space: uintptr_t, type_: i32, pos: u32) -> i32;
112
113 fn isl_space_has_dim_name(space: uintptr_t, type_: i32, pos: u32) -> i32;
114
115 fn isl_space_has_domain_tuple_id(space: uintptr_t) -> i32;
116
117 fn isl_space_has_equal_params(space1: uintptr_t, space2: uintptr_t) -> i32;
118
119 fn isl_space_has_equal_tuples(space1: uintptr_t, space2: uintptr_t) -> i32;
120
121 fn isl_space_has_range_tuple_id(space: uintptr_t) -> i32;
122
123 fn isl_space_has_tuple_id(space: uintptr_t, type_: i32) -> i32;
124
125 fn isl_space_has_tuple_name(space: uintptr_t, type_: i32) -> i32;
126
127 fn isl_space_identity_multi_aff_on_domain(space: uintptr_t) -> uintptr_t;
128
129 fn isl_space_identity_multi_pw_aff_on_domain(space: uintptr_t) -> uintptr_t;
130
131 fn isl_space_identity_pw_multi_aff_on_domain(space: uintptr_t) -> uintptr_t;
132
133 fn isl_space_insert_dims(space: uintptr_t, type_: i32, pos: u32, n: u32) -> uintptr_t;
134
135 fn isl_space_is_domain(space1: uintptr_t, space2: uintptr_t) -> i32;
136
137 fn isl_space_is_equal(space1: uintptr_t, space2: uintptr_t) -> i32;
138
139 fn isl_space_is_map(space: uintptr_t) -> i32;
140
141 fn isl_space_is_params(space: uintptr_t) -> i32;
142
143 fn isl_space_is_product(space: uintptr_t) -> i32;
144
145 fn isl_space_is_range(space1: uintptr_t, space2: uintptr_t) -> i32;
146
147 fn isl_space_is_set(space: uintptr_t) -> i32;
148
149 fn isl_space_is_wrapping(space: uintptr_t) -> i32;
150
151 fn isl_space_join(left: uintptr_t, right: uintptr_t) -> uintptr_t;
152
153 fn isl_space_map_from_domain_and_range(domain: uintptr_t, range: uintptr_t) -> uintptr_t;
154
155 fn isl_space_map_from_set(space: uintptr_t) -> uintptr_t;
156
157 fn isl_space_match(space1: uintptr_t, type1: i32, space2: uintptr_t, type2: i32) -> i32;
158
159 fn isl_space_move_dims(space: uintptr_t, dst_type: i32, dst_pos: u32, src_type: i32,
160 src_pos: u32, n: u32)
161 -> uintptr_t;
162
163 fn isl_space_multi_aff(space: uintptr_t, list: uintptr_t) -> uintptr_t;
164
165 fn isl_space_multi_aff_on_domain_multi_val(space: uintptr_t, mv: uintptr_t) -> uintptr_t;
166
167 fn isl_space_multi_id(space: uintptr_t, list: uintptr_t) -> uintptr_t;
168
169 fn isl_space_multi_pw_aff(space: uintptr_t, list: uintptr_t) -> uintptr_t;
170
171 fn isl_space_multi_union_pw_aff(space: uintptr_t, list: uintptr_t) -> uintptr_t;
172
173 fn isl_space_multi_val(space: uintptr_t, list: uintptr_t) -> uintptr_t;
174
175 fn isl_space_param_aff_on_domain_id(space: uintptr_t, id: uintptr_t) -> uintptr_t;
176
177 fn isl_space_params(space: uintptr_t) -> uintptr_t;
178
179 fn isl_space_params_alloc(ctx: uintptr_t, nparam: u32) -> uintptr_t;
180
181 fn isl_space_product(left: uintptr_t, right: uintptr_t) -> uintptr_t;
182
183 fn isl_space_range(space: uintptr_t) -> uintptr_t;
184
185 fn isl_space_range_curry(space: uintptr_t) -> uintptr_t;
186
187 fn isl_space_range_factor_domain(space: uintptr_t) -> uintptr_t;
188
189 fn isl_space_range_factor_range(space: uintptr_t) -> uintptr_t;
190
191 fn isl_space_range_is_wrapping(space: uintptr_t) -> i32;
192
193 fn isl_space_range_map(space: uintptr_t) -> uintptr_t;
194
195 fn isl_space_range_map_multi_aff(space: uintptr_t) -> uintptr_t;
196
197 fn isl_space_range_map_pw_multi_aff(space: uintptr_t) -> uintptr_t;
198
199 fn isl_space_range_product(left: uintptr_t, right: uintptr_t) -> uintptr_t;
200
201 fn isl_space_range_reverse(space: uintptr_t) -> uintptr_t;
202
203 fn isl_space_range_wrapped_domain(space: uintptr_t) -> uintptr_t;
204
205 fn isl_space_range_wrapped_range(space: uintptr_t) -> uintptr_t;
206
207 fn isl_space_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
208
209 fn isl_space_reset_tuple_id(space: uintptr_t, type_: i32) -> uintptr_t;
210
211 fn isl_space_reset_user(space: uintptr_t) -> uintptr_t;
212
213 fn isl_space_reverse(space: uintptr_t) -> uintptr_t;
214
215 fn isl_space_set_alloc(ctx: uintptr_t, nparam: u32, dim: u32) -> uintptr_t;
216
217 fn isl_space_set_dim_id(space: uintptr_t, type_: i32, pos: u32, id: uintptr_t) -> uintptr_t;
218
219 fn isl_space_set_dim_name(space: uintptr_t, type_: i32, pos: u32, name: *const c_char)
220 -> uintptr_t;
221
222 fn isl_space_set_domain_tuple_id(space: uintptr_t, id: uintptr_t) -> uintptr_t;
223
224 fn isl_space_set_from_params(space: uintptr_t) -> uintptr_t;
225
226 fn isl_space_set_range_tuple_id(space: uintptr_t, id: uintptr_t) -> uintptr_t;
227
228 fn isl_space_set_tuple_id(space: uintptr_t, type_: i32, id: uintptr_t) -> uintptr_t;
229
230 fn isl_space_set_tuple_name(space: uintptr_t, type_: i32, s: *const c_char) -> uintptr_t;
231
232 fn isl_space_to_str(space: uintptr_t) -> *const c_char;
233
234 fn isl_space_tuple_is_equal(space1: uintptr_t, type1: i32, space2: uintptr_t, type2: i32)
235 -> i32;
236
237 fn isl_space_uncurry(space: uintptr_t) -> uintptr_t;
238
239 fn isl_space_unit(ctx: uintptr_t) -> uintptr_t;
240
241 fn isl_space_universe_map(space: uintptr_t) -> uintptr_t;
242
243 fn isl_space_universe_set(space: uintptr_t) -> uintptr_t;
244
245 fn isl_space_unwrap(space: uintptr_t) -> uintptr_t;
246
247 fn isl_space_wrap(space: uintptr_t) -> uintptr_t;
248
249 fn isl_space_wrapped_reverse(space: uintptr_t) -> uintptr_t;
250
251 fn isl_space_zero_aff_on_domain(space: uintptr_t) -> uintptr_t;
252
253 fn isl_space_zero_multi_aff(space: uintptr_t) -> uintptr_t;
254
255 fn isl_space_zero_multi_pw_aff(space: uintptr_t) -> uintptr_t;
256
257 fn isl_space_zero_multi_union_pw_aff(space: uintptr_t) -> uintptr_t;
258
259 fn isl_space_zero_multi_val(space: uintptr_t) -> uintptr_t;
260
261 fn isl_space_zip(space: uintptr_t) -> uintptr_t;
262
263}
264
265impl Space {
266 pub fn add_dims(self, type_: DimType, n: u32) -> Result<Space, LibISLError> {
268 let space = self;
269 let isl_rs_ctx = space.get_ctx();
270 let mut space = space;
271 space.do_not_free_on_drop();
272 let space = space.ptr;
273 let type_ = type_.to_i32();
274 let isl_rs_result = unsafe { isl_space_add_dims(space, type_, n) };
275 let isl_rs_result = Space { ptr: isl_rs_result,
276 should_free_on_drop: true };
277 let err = isl_rs_ctx.last_error();
278 if err != Error::None_ {
279 let err_msg = isl_rs_ctx.last_error_msg();
280 isl_rs_ctx.reset_error();
281 return Err(LibISLError::new(err, err_msg));
282 }
283 Ok(isl_rs_result)
284 }
285
286 pub fn add_named_tuple_id_ui(self, tuple_id: Id, dim: u32) -> Result<Space, LibISLError> {
288 let space = self;
289 let isl_rs_ctx = space.get_ctx();
290 let mut space = space;
291 space.do_not_free_on_drop();
292 let space = space.ptr;
293 let mut tuple_id = tuple_id;
294 tuple_id.do_not_free_on_drop();
295 let tuple_id = tuple_id.ptr;
296 let isl_rs_result = unsafe { isl_space_add_named_tuple_id_ui(space, tuple_id, dim) };
297 let isl_rs_result = Space { ptr: isl_rs_result,
298 should_free_on_drop: true };
299 let err = isl_rs_ctx.last_error();
300 if err != Error::None_ {
301 let err_msg = isl_rs_ctx.last_error_msg();
302 isl_rs_ctx.reset_error();
303 return Err(LibISLError::new(err, err_msg));
304 }
305 Ok(isl_rs_result)
306 }
307
308 pub fn add_param_id(self, id: Id) -> Result<Space, LibISLError> {
310 let space = self;
311 let isl_rs_ctx = space.get_ctx();
312 let mut space = space;
313 space.do_not_free_on_drop();
314 let space = space.ptr;
315 let mut id = id;
316 id.do_not_free_on_drop();
317 let id = id.ptr;
318 let isl_rs_result = unsafe { isl_space_add_param_id(space, id) };
319 let isl_rs_result = Space { ptr: isl_rs_result,
320 should_free_on_drop: true };
321 let err = isl_rs_ctx.last_error();
322 if err != Error::None_ {
323 let err_msg = isl_rs_ctx.last_error_msg();
324 isl_rs_ctx.reset_error();
325 return Err(LibISLError::new(err, err_msg));
326 }
327 Ok(isl_rs_result)
328 }
329
330 pub fn add_unnamed_tuple_ui(self, dim: u32) -> Result<Space, LibISLError> {
332 let space = self;
333 let isl_rs_ctx = space.get_ctx();
334 let mut space = space;
335 space.do_not_free_on_drop();
336 let space = space.ptr;
337 let isl_rs_result = unsafe { isl_space_add_unnamed_tuple_ui(space, dim) };
338 let isl_rs_result = Space { ptr: isl_rs_result,
339 should_free_on_drop: true };
340 let err = isl_rs_ctx.last_error();
341 if err != Error::None_ {
342 let err_msg = isl_rs_ctx.last_error_msg();
343 isl_rs_ctx.reset_error();
344 return Err(LibISLError::new(err, err_msg));
345 }
346 Ok(isl_rs_result)
347 }
348
349 pub fn align_params(self, space2: Space) -> Result<Space, LibISLError> {
351 let space1 = self;
352 let isl_rs_ctx = space1.get_ctx();
353 let mut space1 = space1;
354 space1.do_not_free_on_drop();
355 let space1 = space1.ptr;
356 let mut space2 = space2;
357 space2.do_not_free_on_drop();
358 let space2 = space2.ptr;
359 let isl_rs_result = unsafe { isl_space_align_params(space1, space2) };
360 let isl_rs_result = Space { ptr: isl_rs_result,
361 should_free_on_drop: true };
362 let err = isl_rs_ctx.last_error();
363 if err != Error::None_ {
364 let err_msg = isl_rs_ctx.last_error_msg();
365 isl_rs_ctx.reset_error();
366 return Err(LibISLError::new(err, err_msg));
367 }
368 Ok(isl_rs_result)
369 }
370
371 pub fn alloc(ctx: &Context, nparam: u32, n_in: u32, n_out: u32) -> Result<Space, LibISLError> {
373 let isl_rs_ctx = Context { ptr: ctx.ptr,
374 should_free_on_drop: false };
375 let ctx = ctx.ptr;
376 let isl_rs_result = unsafe { isl_space_alloc(ctx, nparam, n_in, n_out) };
377 let isl_rs_result = Space { ptr: isl_rs_result,
378 should_free_on_drop: true };
379 let err = isl_rs_ctx.last_error();
380 if err != Error::None_ {
381 let err_msg = isl_rs_ctx.last_error_msg();
382 isl_rs_ctx.reset_error();
383 return Err(LibISLError::new(err, err_msg));
384 }
385 Ok(isl_rs_result)
386 }
387
388 pub fn can_curry(&self) -> Result<bool, LibISLError> {
390 let space = self;
391 let isl_rs_ctx = space.get_ctx();
392 let space = space.ptr;
393 let isl_rs_result = unsafe { isl_space_can_curry(space) };
394 let isl_rs_result = match isl_rs_result {
395 0 => false,
396 1 => true,
397 _ => {
398 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
399 }
400 };
401 let err = isl_rs_ctx.last_error();
402 if err != Error::None_ {
403 let err_msg = isl_rs_ctx.last_error_msg();
404 isl_rs_ctx.reset_error();
405 return Err(LibISLError::new(err, err_msg));
406 }
407 Ok(isl_rs_result)
408 }
409
410 pub fn can_range_curry(&self) -> Result<bool, LibISLError> {
412 let space = self;
413 let isl_rs_ctx = space.get_ctx();
414 let space = space.ptr;
415 let isl_rs_result = unsafe { isl_space_can_range_curry(space) };
416 let isl_rs_result = match isl_rs_result {
417 0 => false,
418 1 => true,
419 _ => {
420 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
421 }
422 };
423 let err = isl_rs_ctx.last_error();
424 if err != Error::None_ {
425 let err_msg = isl_rs_ctx.last_error_msg();
426 isl_rs_ctx.reset_error();
427 return Err(LibISLError::new(err, err_msg));
428 }
429 Ok(isl_rs_result)
430 }
431
432 pub fn can_uncurry(&self) -> Result<bool, LibISLError> {
434 let space = self;
435 let isl_rs_ctx = space.get_ctx();
436 let space = space.ptr;
437 let isl_rs_result = unsafe { isl_space_can_uncurry(space) };
438 let isl_rs_result = match isl_rs_result {
439 0 => false,
440 1 => true,
441 _ => {
442 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
443 }
444 };
445 let err = isl_rs_ctx.last_error();
446 if err != Error::None_ {
447 let err_msg = isl_rs_ctx.last_error_msg();
448 isl_rs_ctx.reset_error();
449 return Err(LibISLError::new(err, err_msg));
450 }
451 Ok(isl_rs_result)
452 }
453
454 pub fn can_zip(&self) -> Result<bool, LibISLError> {
456 let space = self;
457 let isl_rs_ctx = space.get_ctx();
458 let space = space.ptr;
459 let isl_rs_result = unsafe { isl_space_can_zip(space) };
460 let isl_rs_result = match isl_rs_result {
461 0 => false,
462 1 => true,
463 _ => {
464 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
465 }
466 };
467 let err = isl_rs_ctx.last_error();
468 if err != Error::None_ {
469 let err_msg = isl_rs_ctx.last_error_msg();
470 isl_rs_ctx.reset_error();
471 return Err(LibISLError::new(err, err_msg));
472 }
473 Ok(isl_rs_result)
474 }
475
476 pub fn copy(&self) -> Result<Space, LibISLError> {
478 let space = self;
479 let isl_rs_ctx = space.get_ctx();
480 let space = space.ptr;
481 let isl_rs_result = unsafe { isl_space_copy(space) };
482 let isl_rs_result = Space { ptr: isl_rs_result,
483 should_free_on_drop: true };
484 let err = isl_rs_ctx.last_error();
485 if err != Error::None_ {
486 let err_msg = isl_rs_ctx.last_error_msg();
487 isl_rs_ctx.reset_error();
488 return Err(LibISLError::new(err, err_msg));
489 }
490 Ok(isl_rs_result)
491 }
492
493 pub fn curry(self) -> Result<Space, LibISLError> {
495 let space = self;
496 let isl_rs_ctx = space.get_ctx();
497 let mut space = space;
498 space.do_not_free_on_drop();
499 let space = space.ptr;
500 let isl_rs_result = unsafe { isl_space_curry(space) };
501 let isl_rs_result = Space { ptr: isl_rs_result,
502 should_free_on_drop: true };
503 let err = isl_rs_ctx.last_error();
504 if err != Error::None_ {
505 let err_msg = isl_rs_ctx.last_error_msg();
506 isl_rs_ctx.reset_error();
507 return Err(LibISLError::new(err, err_msg));
508 }
509 Ok(isl_rs_result)
510 }
511
512 pub fn dim(&self, type_: DimType) -> Result<i32, LibISLError> {
514 let space = self;
515 let isl_rs_ctx = space.get_ctx();
516 let space = space.ptr;
517 let type_ = type_.to_i32();
518 let isl_rs_result = unsafe { isl_space_dim(space, type_) };
519 let err = isl_rs_ctx.last_error();
520 if err != Error::None_ {
521 let err_msg = isl_rs_ctx.last_error_msg();
522 isl_rs_ctx.reset_error();
523 return Err(LibISLError::new(err, err_msg));
524 }
525 Ok(isl_rs_result)
526 }
527
528 pub fn domain(self) -> Result<Space, LibISLError> {
530 let space = self;
531 let isl_rs_ctx = space.get_ctx();
532 let mut space = space;
533 space.do_not_free_on_drop();
534 let space = space.ptr;
535 let isl_rs_result = unsafe { isl_space_domain(space) };
536 let isl_rs_result = Space { ptr: isl_rs_result,
537 should_free_on_drop: true };
538 let err = isl_rs_ctx.last_error();
539 if err != Error::None_ {
540 let err_msg = isl_rs_ctx.last_error_msg();
541 isl_rs_ctx.reset_error();
542 return Err(LibISLError::new(err, err_msg));
543 }
544 Ok(isl_rs_result)
545 }
546
547 pub fn domain_factor_domain(self) -> Result<Space, LibISLError> {
549 let space = self;
550 let isl_rs_ctx = space.get_ctx();
551 let mut space = space;
552 space.do_not_free_on_drop();
553 let space = space.ptr;
554 let isl_rs_result = unsafe { isl_space_domain_factor_domain(space) };
555 let isl_rs_result = Space { ptr: isl_rs_result,
556 should_free_on_drop: true };
557 let err = isl_rs_ctx.last_error();
558 if err != Error::None_ {
559 let err_msg = isl_rs_ctx.last_error_msg();
560 isl_rs_ctx.reset_error();
561 return Err(LibISLError::new(err, err_msg));
562 }
563 Ok(isl_rs_result)
564 }
565
566 pub fn domain_factor_range(self) -> Result<Space, LibISLError> {
568 let space = self;
569 let isl_rs_ctx = space.get_ctx();
570 let mut space = space;
571 space.do_not_free_on_drop();
572 let space = space.ptr;
573 let isl_rs_result = unsafe { isl_space_domain_factor_range(space) };
574 let isl_rs_result = Space { ptr: isl_rs_result,
575 should_free_on_drop: true };
576 let err = isl_rs_ctx.last_error();
577 if err != Error::None_ {
578 let err_msg = isl_rs_ctx.last_error_msg();
579 isl_rs_ctx.reset_error();
580 return Err(LibISLError::new(err, err_msg));
581 }
582 Ok(isl_rs_result)
583 }
584
585 pub fn domain_is_wrapping(&self) -> Result<bool, LibISLError> {
587 let space = self;
588 let isl_rs_ctx = space.get_ctx();
589 let space = space.ptr;
590 let isl_rs_result = unsafe { isl_space_domain_is_wrapping(space) };
591 let isl_rs_result = match isl_rs_result {
592 0 => false,
593 1 => true,
594 _ => {
595 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
596 }
597 };
598 let err = isl_rs_ctx.last_error();
599 if err != Error::None_ {
600 let err_msg = isl_rs_ctx.last_error_msg();
601 isl_rs_ctx.reset_error();
602 return Err(LibISLError::new(err, err_msg));
603 }
604 Ok(isl_rs_result)
605 }
606
607 pub fn domain_map(self) -> Result<Space, LibISLError> {
609 let space = self;
610 let isl_rs_ctx = space.get_ctx();
611 let mut space = space;
612 space.do_not_free_on_drop();
613 let space = space.ptr;
614 let isl_rs_result = unsafe { isl_space_domain_map(space) };
615 let isl_rs_result = Space { ptr: isl_rs_result,
616 should_free_on_drop: true };
617 let err = isl_rs_ctx.last_error();
618 if err != Error::None_ {
619 let err_msg = isl_rs_ctx.last_error_msg();
620 isl_rs_ctx.reset_error();
621 return Err(LibISLError::new(err, err_msg));
622 }
623 Ok(isl_rs_result)
624 }
625
626 pub fn domain_map_multi_aff(self) -> Result<MultiAff, LibISLError> {
628 let space = self;
629 let isl_rs_ctx = space.get_ctx();
630 let mut space = space;
631 space.do_not_free_on_drop();
632 let space = space.ptr;
633 let isl_rs_result = unsafe { isl_space_domain_map_multi_aff(space) };
634 let isl_rs_result = MultiAff { ptr: isl_rs_result,
635 should_free_on_drop: true };
636 let err = isl_rs_ctx.last_error();
637 if err != Error::None_ {
638 let err_msg = isl_rs_ctx.last_error_msg();
639 isl_rs_ctx.reset_error();
640 return Err(LibISLError::new(err, err_msg));
641 }
642 Ok(isl_rs_result)
643 }
644
645 pub fn domain_map_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
647 let space = self;
648 let isl_rs_ctx = space.get_ctx();
649 let mut space = space;
650 space.do_not_free_on_drop();
651 let space = space.ptr;
652 let isl_rs_result = unsafe { isl_space_domain_map_pw_multi_aff(space) };
653 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
654 should_free_on_drop: true };
655 let err = isl_rs_ctx.last_error();
656 if err != Error::None_ {
657 let err_msg = isl_rs_ctx.last_error_msg();
658 isl_rs_ctx.reset_error();
659 return Err(LibISLError::new(err, err_msg));
660 }
661 Ok(isl_rs_result)
662 }
663
664 pub fn domain_product(self, right: Space) -> Result<Space, LibISLError> {
666 let left = self;
667 let isl_rs_ctx = left.get_ctx();
668 let mut left = left;
669 left.do_not_free_on_drop();
670 let left = left.ptr;
671 let mut right = right;
672 right.do_not_free_on_drop();
673 let right = right.ptr;
674 let isl_rs_result = unsafe { isl_space_domain_product(left, right) };
675 let isl_rs_result = Space { ptr: isl_rs_result,
676 should_free_on_drop: true };
677 let err = isl_rs_ctx.last_error();
678 if err != Error::None_ {
679 let err_msg = isl_rs_ctx.last_error_msg();
680 isl_rs_ctx.reset_error();
681 return Err(LibISLError::new(err, err_msg));
682 }
683 Ok(isl_rs_result)
684 }
685
686 pub fn domain_reverse(self) -> Result<Space, LibISLError> {
688 let space = self;
689 let isl_rs_ctx = space.get_ctx();
690 let mut space = space;
691 space.do_not_free_on_drop();
692 let space = space.ptr;
693 let isl_rs_result = unsafe { isl_space_domain_reverse(space) };
694 let isl_rs_result = Space { ptr: isl_rs_result,
695 should_free_on_drop: true };
696 let err = isl_rs_ctx.last_error();
697 if err != Error::None_ {
698 let err_msg = isl_rs_ctx.last_error_msg();
699 isl_rs_ctx.reset_error();
700 return Err(LibISLError::new(err, err_msg));
701 }
702 Ok(isl_rs_result)
703 }
704
705 pub fn domain_wrapped_domain(self) -> Result<Space, LibISLError> {
707 let space = self;
708 let isl_rs_ctx = space.get_ctx();
709 let mut space = space;
710 space.do_not_free_on_drop();
711 let space = space.ptr;
712 let isl_rs_result = unsafe { isl_space_domain_wrapped_domain(space) };
713 let isl_rs_result = Space { 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 domain_wrapped_range(self) -> Result<Space, LibISLError> {
726 let space = self;
727 let isl_rs_ctx = space.get_ctx();
728 let mut space = space;
729 space.do_not_free_on_drop();
730 let space = space.ptr;
731 let isl_rs_result = unsafe { isl_space_domain_wrapped_range(space) };
732 let isl_rs_result = Space { ptr: isl_rs_result,
733 should_free_on_drop: true };
734 let err = isl_rs_ctx.last_error();
735 if err != Error::None_ {
736 let err_msg = isl_rs_ctx.last_error_msg();
737 isl_rs_ctx.reset_error();
738 return Err(LibISLError::new(err, err_msg));
739 }
740 Ok(isl_rs_result)
741 }
742
743 pub fn drop_all_params(self) -> Result<Space, LibISLError> {
745 let space = self;
746 let isl_rs_ctx = space.get_ctx();
747 let mut space = space;
748 space.do_not_free_on_drop();
749 let space = space.ptr;
750 let isl_rs_result = unsafe { isl_space_drop_all_params(space) };
751 let isl_rs_result = Space { ptr: isl_rs_result,
752 should_free_on_drop: true };
753 let err = isl_rs_ctx.last_error();
754 if err != Error::None_ {
755 let err_msg = isl_rs_ctx.last_error_msg();
756 isl_rs_ctx.reset_error();
757 return Err(LibISLError::new(err, err_msg));
758 }
759 Ok(isl_rs_result)
760 }
761
762 pub fn drop_dims(self, type_: DimType, first: u32, num: u32) -> Result<Space, LibISLError> {
764 let space = self;
765 let isl_rs_ctx = space.get_ctx();
766 let mut space = space;
767 space.do_not_free_on_drop();
768 let space = space.ptr;
769 let type_ = type_.to_i32();
770 let isl_rs_result = unsafe { isl_space_drop_dims(space, type_, first, num) };
771 let isl_rs_result = Space { ptr: isl_rs_result,
772 should_free_on_drop: true };
773 let err = isl_rs_ctx.last_error();
774 if err != Error::None_ {
775 let err_msg = isl_rs_ctx.last_error_msg();
776 isl_rs_ctx.reset_error();
777 return Err(LibISLError::new(err, err_msg));
778 }
779 Ok(isl_rs_result)
780 }
781
782 pub fn drop_inputs(self, first: u32, n: u32) -> Result<Space, LibISLError> {
784 let space = self;
785 let isl_rs_ctx = space.get_ctx();
786 let mut space = space;
787 space.do_not_free_on_drop();
788 let space = space.ptr;
789 let isl_rs_result = unsafe { isl_space_drop_inputs(space, first, n) };
790 let isl_rs_result = Space { ptr: isl_rs_result,
791 should_free_on_drop: true };
792 let err = isl_rs_ctx.last_error();
793 if err != Error::None_ {
794 let err_msg = isl_rs_ctx.last_error_msg();
795 isl_rs_ctx.reset_error();
796 return Err(LibISLError::new(err, err_msg));
797 }
798 Ok(isl_rs_result)
799 }
800
801 pub fn drop_outputs(self, first: u32, n: u32) -> Result<Space, LibISLError> {
803 let space = self;
804 let isl_rs_ctx = space.get_ctx();
805 let mut space = space;
806 space.do_not_free_on_drop();
807 let space = space.ptr;
808 let isl_rs_result = unsafe { isl_space_drop_outputs(space, first, n) };
809 let isl_rs_result = Space { ptr: isl_rs_result,
810 should_free_on_drop: true };
811 let err = isl_rs_ctx.last_error();
812 if err != Error::None_ {
813 let err_msg = isl_rs_ctx.last_error_msg();
814 isl_rs_ctx.reset_error();
815 return Err(LibISLError::new(err, err_msg));
816 }
817 Ok(isl_rs_result)
818 }
819
820 pub fn dump(&self) -> Result<(), LibISLError> {
822 let space = self;
823 let isl_rs_ctx = space.get_ctx();
824 let space = space.ptr;
825 let isl_rs_result = unsafe { isl_space_dump(space) };
826 let err = isl_rs_ctx.last_error();
827 if err != Error::None_ {
828 let err_msg = isl_rs_ctx.last_error_msg();
829 isl_rs_ctx.reset_error();
830 return Err(LibISLError::new(err, err_msg));
831 }
832 Ok(isl_rs_result)
833 }
834
835 pub fn factor_domain(self) -> Result<Space, LibISLError> {
837 let space = self;
838 let isl_rs_ctx = space.get_ctx();
839 let mut space = space;
840 space.do_not_free_on_drop();
841 let space = space.ptr;
842 let isl_rs_result = unsafe { isl_space_factor_domain(space) };
843 let isl_rs_result = Space { ptr: isl_rs_result,
844 should_free_on_drop: true };
845 let err = isl_rs_ctx.last_error();
846 if err != Error::None_ {
847 let err_msg = isl_rs_ctx.last_error_msg();
848 isl_rs_ctx.reset_error();
849 return Err(LibISLError::new(err, err_msg));
850 }
851 Ok(isl_rs_result)
852 }
853
854 pub fn factor_range(self) -> Result<Space, LibISLError> {
856 let space = self;
857 let isl_rs_ctx = space.get_ctx();
858 let mut space = space;
859 space.do_not_free_on_drop();
860 let space = space.ptr;
861 let isl_rs_result = unsafe { isl_space_factor_range(space) };
862 let isl_rs_result = Space { ptr: isl_rs_result,
863 should_free_on_drop: true };
864 let err = isl_rs_ctx.last_error();
865 if err != Error::None_ {
866 let err_msg = isl_rs_ctx.last_error_msg();
867 isl_rs_ctx.reset_error();
868 return Err(LibISLError::new(err, err_msg));
869 }
870 Ok(isl_rs_result)
871 }
872
873 pub fn find_dim_by_id(&self, type_: DimType, id: &Id) -> Result<i32, LibISLError> {
875 let space = self;
876 let isl_rs_ctx = space.get_ctx();
877 let space = space.ptr;
878 let type_ = type_.to_i32();
879 let id = id.ptr;
880 let isl_rs_result = unsafe { isl_space_find_dim_by_id(space, type_, id) };
881 let err = isl_rs_ctx.last_error();
882 if err != Error::None_ {
883 let err_msg = isl_rs_ctx.last_error_msg();
884 isl_rs_ctx.reset_error();
885 return Err(LibISLError::new(err, err_msg));
886 }
887 Ok(isl_rs_result)
888 }
889
890 pub fn find_dim_by_name(&self, type_: DimType, name: &str) -> Result<i32, LibISLError> {
892 let space = self;
893 let isl_rs_ctx = space.get_ctx();
894 let space = space.ptr;
895 let type_ = type_.to_i32();
896 let name = CString::new(name).unwrap();
897 let name = name.as_ptr();
898 let isl_rs_result = unsafe { isl_space_find_dim_by_name(space, type_, name) };
899 let err = isl_rs_ctx.last_error();
900 if err != Error::None_ {
901 let err_msg = isl_rs_ctx.last_error_msg();
902 isl_rs_ctx.reset_error();
903 return Err(LibISLError::new(err, err_msg));
904 }
905 Ok(isl_rs_result)
906 }
907
908 pub fn flatten_domain(self) -> Result<Space, LibISLError> {
910 let space = self;
911 let isl_rs_ctx = space.get_ctx();
912 let mut space = space;
913 space.do_not_free_on_drop();
914 let space = space.ptr;
915 let isl_rs_result = unsafe { isl_space_flatten_domain(space) };
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 flatten_range(self) -> Result<Space, LibISLError> {
929 let space = self;
930 let isl_rs_ctx = space.get_ctx();
931 let mut space = space;
932 space.do_not_free_on_drop();
933 let space = space.ptr;
934 let isl_rs_result = unsafe { isl_space_flatten_range(space) };
935 let isl_rs_result = Space { ptr: isl_rs_result,
936 should_free_on_drop: true };
937 let err = isl_rs_ctx.last_error();
938 if err != Error::None_ {
939 let err_msg = isl_rs_ctx.last_error_msg();
940 isl_rs_ctx.reset_error();
941 return Err(LibISLError::new(err, err_msg));
942 }
943 Ok(isl_rs_result)
944 }
945
946 pub fn free(self) -> Result<Space, LibISLError> {
948 let space = self;
949 let isl_rs_ctx = space.get_ctx();
950 let mut space = space;
951 space.do_not_free_on_drop();
952 let space = space.ptr;
953 let isl_rs_result = unsafe { isl_space_free(space) };
954 let isl_rs_result = Space { ptr: isl_rs_result,
955 should_free_on_drop: true };
956 let err = isl_rs_ctx.last_error();
957 if err != Error::None_ {
958 let err_msg = isl_rs_ctx.last_error_msg();
959 isl_rs_ctx.reset_error();
960 return Err(LibISLError::new(err, err_msg));
961 }
962 Ok(isl_rs_result)
963 }
964
965 pub fn from_domain(self) -> Result<Space, LibISLError> {
967 let space = self;
968 let isl_rs_ctx = space.get_ctx();
969 let mut space = space;
970 space.do_not_free_on_drop();
971 let space = space.ptr;
972 let isl_rs_result = unsafe { isl_space_from_domain(space) };
973 let isl_rs_result = Space { ptr: isl_rs_result,
974 should_free_on_drop: true };
975 let err = isl_rs_ctx.last_error();
976 if err != Error::None_ {
977 let err_msg = isl_rs_ctx.last_error_msg();
978 isl_rs_ctx.reset_error();
979 return Err(LibISLError::new(err, err_msg));
980 }
981 Ok(isl_rs_result)
982 }
983
984 pub fn from_range(self) -> Result<Space, LibISLError> {
986 let space = self;
987 let isl_rs_ctx = space.get_ctx();
988 let mut space = space;
989 space.do_not_free_on_drop();
990 let space = space.ptr;
991 let isl_rs_result = unsafe { isl_space_from_range(space) };
992 let isl_rs_result = Space { ptr: isl_rs_result,
993 should_free_on_drop: true };
994 let err = isl_rs_ctx.last_error();
995 if err != Error::None_ {
996 let err_msg = isl_rs_ctx.last_error_msg();
997 isl_rs_ctx.reset_error();
998 return Err(LibISLError::new(err, err_msg));
999 }
1000 Ok(isl_rs_result)
1001 }
1002
1003 pub fn get_ctx(&self) -> Context {
1005 let space = self;
1006 let space = space.ptr;
1007 let isl_rs_result = unsafe { isl_space_get_ctx(space) };
1008 let isl_rs_result = Context { ptr: isl_rs_result,
1009 should_free_on_drop: false };
1010 isl_rs_result
1011 }
1012
1013 pub fn get_dim_id(&self, type_: DimType, pos: u32) -> Result<Id, LibISLError> {
1015 let space = self;
1016 let isl_rs_ctx = space.get_ctx();
1017 let space = space.ptr;
1018 let type_ = type_.to_i32();
1019 let isl_rs_result = unsafe { isl_space_get_dim_id(space, type_, pos) };
1020 let isl_rs_result = Id { ptr: isl_rs_result,
1021 should_free_on_drop: true };
1022 let err = isl_rs_ctx.last_error();
1023 if err != Error::None_ {
1024 let err_msg = isl_rs_ctx.last_error_msg();
1025 isl_rs_ctx.reset_error();
1026 return Err(LibISLError::new(err, err_msg));
1027 }
1028 Ok(isl_rs_result)
1029 }
1030
1031 pub fn get_dim_name(&self, type_: DimType, pos: u32) -> Result<&str, LibISLError> {
1033 let space = self;
1034 let isl_rs_ctx = space.get_ctx();
1035 let space = space.ptr;
1036 let type_ = type_.to_i32();
1037 let isl_rs_result = unsafe { isl_space_get_dim_name(space, type_, pos) };
1038 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1039 let isl_rs_result = isl_rs_result.to_str().unwrap();
1040 let err = isl_rs_ctx.last_error();
1041 if err != Error::None_ {
1042 let err_msg = isl_rs_ctx.last_error_msg();
1043 isl_rs_ctx.reset_error();
1044 return Err(LibISLError::new(err, err_msg));
1045 }
1046 Ok(isl_rs_result)
1047 }
1048
1049 pub fn get_domain_tuple_id(&self) -> Result<Id, LibISLError> {
1051 let space = self;
1052 let isl_rs_ctx = space.get_ctx();
1053 let space = space.ptr;
1054 let isl_rs_result = unsafe { isl_space_get_domain_tuple_id(space) };
1055 let isl_rs_result = Id { ptr: isl_rs_result,
1056 should_free_on_drop: true };
1057 let err = isl_rs_ctx.last_error();
1058 if err != Error::None_ {
1059 let err_msg = isl_rs_ctx.last_error_msg();
1060 isl_rs_ctx.reset_error();
1061 return Err(LibISLError::new(err, err_msg));
1062 }
1063 Ok(isl_rs_result)
1064 }
1065
1066 pub fn get_range_tuple_id(&self) -> Result<Id, LibISLError> {
1068 let space = self;
1069 let isl_rs_ctx = space.get_ctx();
1070 let space = space.ptr;
1071 let isl_rs_result = unsafe { isl_space_get_range_tuple_id(space) };
1072 let isl_rs_result = Id { ptr: isl_rs_result,
1073 should_free_on_drop: true };
1074 let err = isl_rs_ctx.last_error();
1075 if err != Error::None_ {
1076 let err_msg = isl_rs_ctx.last_error_msg();
1077 isl_rs_ctx.reset_error();
1078 return Err(LibISLError::new(err, err_msg));
1079 }
1080 Ok(isl_rs_result)
1081 }
1082
1083 pub fn get_tuple_id(&self, type_: DimType) -> Result<Id, LibISLError> {
1085 let space = self;
1086 let isl_rs_ctx = space.get_ctx();
1087 let space = space.ptr;
1088 let type_ = type_.to_i32();
1089 let isl_rs_result = unsafe { isl_space_get_tuple_id(space, type_) };
1090 let isl_rs_result = Id { ptr: isl_rs_result,
1091 should_free_on_drop: true };
1092 let err = isl_rs_ctx.last_error();
1093 if err != Error::None_ {
1094 let err_msg = isl_rs_ctx.last_error_msg();
1095 isl_rs_ctx.reset_error();
1096 return Err(LibISLError::new(err, err_msg));
1097 }
1098 Ok(isl_rs_result)
1099 }
1100
1101 pub fn get_tuple_name(&self, type_: DimType) -> Result<&str, LibISLError> {
1103 let space = self;
1104 let isl_rs_ctx = space.get_ctx();
1105 let space = space.ptr;
1106 let type_ = type_.to_i32();
1107 let isl_rs_result = unsafe { isl_space_get_tuple_name(space, type_) };
1108 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1109 let isl_rs_result = isl_rs_result.to_str().unwrap();
1110 let err = isl_rs_ctx.last_error();
1111 if err != Error::None_ {
1112 let err_msg = isl_rs_ctx.last_error_msg();
1113 isl_rs_ctx.reset_error();
1114 return Err(LibISLError::new(err, err_msg));
1115 }
1116 Ok(isl_rs_result)
1117 }
1118
1119 pub fn has_dim_id(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1121 let space = self;
1122 let isl_rs_ctx = space.get_ctx();
1123 let space = space.ptr;
1124 let type_ = type_.to_i32();
1125 let isl_rs_result = unsafe { isl_space_has_dim_id(space, type_, pos) };
1126 let isl_rs_result = match isl_rs_result {
1127 0 => false,
1128 1 => true,
1129 _ => {
1130 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1131 }
1132 };
1133 let err = isl_rs_ctx.last_error();
1134 if err != Error::None_ {
1135 let err_msg = isl_rs_ctx.last_error_msg();
1136 isl_rs_ctx.reset_error();
1137 return Err(LibISLError::new(err, err_msg));
1138 }
1139 Ok(isl_rs_result)
1140 }
1141
1142 pub fn has_dim_name(&self, type_: DimType, pos: u32) -> Result<bool, LibISLError> {
1144 let space = self;
1145 let isl_rs_ctx = space.get_ctx();
1146 let space = space.ptr;
1147 let type_ = type_.to_i32();
1148 let isl_rs_result = unsafe { isl_space_has_dim_name(space, type_, pos) };
1149 let isl_rs_result = match isl_rs_result {
1150 0 => false,
1151 1 => true,
1152 _ => {
1153 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1154 }
1155 };
1156 let err = isl_rs_ctx.last_error();
1157 if err != Error::None_ {
1158 let err_msg = isl_rs_ctx.last_error_msg();
1159 isl_rs_ctx.reset_error();
1160 return Err(LibISLError::new(err, err_msg));
1161 }
1162 Ok(isl_rs_result)
1163 }
1164
1165 pub fn has_domain_tuple_id(&self) -> Result<bool, LibISLError> {
1167 let space = self;
1168 let isl_rs_ctx = space.get_ctx();
1169 let space = space.ptr;
1170 let isl_rs_result = unsafe { isl_space_has_domain_tuple_id(space) };
1171 let isl_rs_result = match isl_rs_result {
1172 0 => false,
1173 1 => true,
1174 _ => {
1175 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1176 }
1177 };
1178 let err = isl_rs_ctx.last_error();
1179 if err != Error::None_ {
1180 let err_msg = isl_rs_ctx.last_error_msg();
1181 isl_rs_ctx.reset_error();
1182 return Err(LibISLError::new(err, err_msg));
1183 }
1184 Ok(isl_rs_result)
1185 }
1186
1187 pub fn has_equal_params(&self, space2: &Space) -> Result<bool, LibISLError> {
1189 let space1 = self;
1190 let isl_rs_ctx = space1.get_ctx();
1191 let space1 = space1.ptr;
1192 let space2 = space2.ptr;
1193 let isl_rs_result = unsafe { isl_space_has_equal_params(space1, space2) };
1194 let isl_rs_result = match isl_rs_result {
1195 0 => false,
1196 1 => true,
1197 _ => {
1198 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1199 }
1200 };
1201 let err = isl_rs_ctx.last_error();
1202 if err != Error::None_ {
1203 let err_msg = isl_rs_ctx.last_error_msg();
1204 isl_rs_ctx.reset_error();
1205 return Err(LibISLError::new(err, err_msg));
1206 }
1207 Ok(isl_rs_result)
1208 }
1209
1210 pub fn has_equal_tuples(&self, space2: &Space) -> Result<bool, LibISLError> {
1212 let space1 = self;
1213 let isl_rs_ctx = space1.get_ctx();
1214 let space1 = space1.ptr;
1215 let space2 = space2.ptr;
1216 let isl_rs_result = unsafe { isl_space_has_equal_tuples(space1, space2) };
1217 let isl_rs_result = match isl_rs_result {
1218 0 => false,
1219 1 => true,
1220 _ => {
1221 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1222 }
1223 };
1224 let err = isl_rs_ctx.last_error();
1225 if err != Error::None_ {
1226 let err_msg = isl_rs_ctx.last_error_msg();
1227 isl_rs_ctx.reset_error();
1228 return Err(LibISLError::new(err, err_msg));
1229 }
1230 Ok(isl_rs_result)
1231 }
1232
1233 pub fn has_range_tuple_id(&self) -> Result<bool, LibISLError> {
1235 let space = self;
1236 let isl_rs_ctx = space.get_ctx();
1237 let space = space.ptr;
1238 let isl_rs_result = unsafe { isl_space_has_range_tuple_id(space) };
1239 let isl_rs_result = match isl_rs_result {
1240 0 => false,
1241 1 => true,
1242 _ => {
1243 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1244 }
1245 };
1246 let err = isl_rs_ctx.last_error();
1247 if err != Error::None_ {
1248 let err_msg = isl_rs_ctx.last_error_msg();
1249 isl_rs_ctx.reset_error();
1250 return Err(LibISLError::new(err, err_msg));
1251 }
1252 Ok(isl_rs_result)
1253 }
1254
1255 pub fn has_tuple_id(&self, type_: DimType) -> Result<bool, LibISLError> {
1257 let space = self;
1258 let isl_rs_ctx = space.get_ctx();
1259 let space = space.ptr;
1260 let type_ = type_.to_i32();
1261 let isl_rs_result = unsafe { isl_space_has_tuple_id(space, type_) };
1262 let isl_rs_result = match isl_rs_result {
1263 0 => false,
1264 1 => true,
1265 _ => {
1266 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1267 }
1268 };
1269 let err = isl_rs_ctx.last_error();
1270 if err != Error::None_ {
1271 let err_msg = isl_rs_ctx.last_error_msg();
1272 isl_rs_ctx.reset_error();
1273 return Err(LibISLError::new(err, err_msg));
1274 }
1275 Ok(isl_rs_result)
1276 }
1277
1278 pub fn has_tuple_name(&self, type_: DimType) -> Result<bool, LibISLError> {
1280 let space = self;
1281 let isl_rs_ctx = space.get_ctx();
1282 let space = space.ptr;
1283 let type_ = type_.to_i32();
1284 let isl_rs_result = unsafe { isl_space_has_tuple_name(space, type_) };
1285 let isl_rs_result = match isl_rs_result {
1286 0 => false,
1287 1 => true,
1288 _ => {
1289 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1290 }
1291 };
1292 let err = isl_rs_ctx.last_error();
1293 if err != Error::None_ {
1294 let err_msg = isl_rs_ctx.last_error_msg();
1295 isl_rs_ctx.reset_error();
1296 return Err(LibISLError::new(err, err_msg));
1297 }
1298 Ok(isl_rs_result)
1299 }
1300
1301 pub fn identity_multi_aff_on_domain(self) -> Result<MultiAff, LibISLError> {
1303 let space = self;
1304 let isl_rs_ctx = space.get_ctx();
1305 let mut space = space;
1306 space.do_not_free_on_drop();
1307 let space = space.ptr;
1308 let isl_rs_result = unsafe { isl_space_identity_multi_aff_on_domain(space) };
1309 let isl_rs_result = MultiAff { ptr: isl_rs_result,
1310 should_free_on_drop: true };
1311 let err = isl_rs_ctx.last_error();
1312 if err != Error::None_ {
1313 let err_msg = isl_rs_ctx.last_error_msg();
1314 isl_rs_ctx.reset_error();
1315 return Err(LibISLError::new(err, err_msg));
1316 }
1317 Ok(isl_rs_result)
1318 }
1319
1320 pub fn identity_multi_pw_aff_on_domain(self) -> Result<MultiPwAff, LibISLError> {
1322 let space = self;
1323 let isl_rs_ctx = space.get_ctx();
1324 let mut space = space;
1325 space.do_not_free_on_drop();
1326 let space = space.ptr;
1327 let isl_rs_result = unsafe { isl_space_identity_multi_pw_aff_on_domain(space) };
1328 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1329 should_free_on_drop: true };
1330 let err = isl_rs_ctx.last_error();
1331 if err != Error::None_ {
1332 let err_msg = isl_rs_ctx.last_error_msg();
1333 isl_rs_ctx.reset_error();
1334 return Err(LibISLError::new(err, err_msg));
1335 }
1336 Ok(isl_rs_result)
1337 }
1338
1339 pub fn identity_pw_multi_aff_on_domain(self) -> Result<PwMultiAff, LibISLError> {
1341 let space = self;
1342 let isl_rs_ctx = space.get_ctx();
1343 let mut space = space;
1344 space.do_not_free_on_drop();
1345 let space = space.ptr;
1346 let isl_rs_result = unsafe { isl_space_identity_pw_multi_aff_on_domain(space) };
1347 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
1348 should_free_on_drop: true };
1349 let err = isl_rs_ctx.last_error();
1350 if err != Error::None_ {
1351 let err_msg = isl_rs_ctx.last_error_msg();
1352 isl_rs_ctx.reset_error();
1353 return Err(LibISLError::new(err, err_msg));
1354 }
1355 Ok(isl_rs_result)
1356 }
1357
1358 pub fn insert_dims(self, type_: DimType, pos: u32, n: u32) -> Result<Space, LibISLError> {
1360 let space = self;
1361 let isl_rs_ctx = space.get_ctx();
1362 let mut space = space;
1363 space.do_not_free_on_drop();
1364 let space = space.ptr;
1365 let type_ = type_.to_i32();
1366 let isl_rs_result = unsafe { isl_space_insert_dims(space, type_, pos, n) };
1367 let isl_rs_result = Space { ptr: isl_rs_result,
1368 should_free_on_drop: true };
1369 let err = isl_rs_ctx.last_error();
1370 if err != Error::None_ {
1371 let err_msg = isl_rs_ctx.last_error_msg();
1372 isl_rs_ctx.reset_error();
1373 return Err(LibISLError::new(err, err_msg));
1374 }
1375 Ok(isl_rs_result)
1376 }
1377
1378 pub fn is_domain(&self, space2: &Space) -> Result<bool, LibISLError> {
1380 let space1 = self;
1381 let isl_rs_ctx = space1.get_ctx();
1382 let space1 = space1.ptr;
1383 let space2 = space2.ptr;
1384 let isl_rs_result = unsafe { isl_space_is_domain(space1, space2) };
1385 let isl_rs_result = match isl_rs_result {
1386 0 => false,
1387 1 => true,
1388 _ => {
1389 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1390 }
1391 };
1392 let err = isl_rs_ctx.last_error();
1393 if err != Error::None_ {
1394 let err_msg = isl_rs_ctx.last_error_msg();
1395 isl_rs_ctx.reset_error();
1396 return Err(LibISLError::new(err, err_msg));
1397 }
1398 Ok(isl_rs_result)
1399 }
1400
1401 pub fn is_equal(&self, space2: &Space) -> Result<bool, LibISLError> {
1403 let space1 = self;
1404 let isl_rs_ctx = space1.get_ctx();
1405 let space1 = space1.ptr;
1406 let space2 = space2.ptr;
1407 let isl_rs_result = unsafe { isl_space_is_equal(space1, space2) };
1408 let isl_rs_result = match isl_rs_result {
1409 0 => false,
1410 1 => true,
1411 _ => {
1412 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1413 }
1414 };
1415 let err = isl_rs_ctx.last_error();
1416 if err != Error::None_ {
1417 let err_msg = isl_rs_ctx.last_error_msg();
1418 isl_rs_ctx.reset_error();
1419 return Err(LibISLError::new(err, err_msg));
1420 }
1421 Ok(isl_rs_result)
1422 }
1423
1424 pub fn is_map(&self) -> Result<bool, LibISLError> {
1426 let space = self;
1427 let isl_rs_ctx = space.get_ctx();
1428 let space = space.ptr;
1429 let isl_rs_result = unsafe { isl_space_is_map(space) };
1430 let isl_rs_result = match isl_rs_result {
1431 0 => false,
1432 1 => true,
1433 _ => {
1434 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1435 }
1436 };
1437 let err = isl_rs_ctx.last_error();
1438 if err != Error::None_ {
1439 let err_msg = isl_rs_ctx.last_error_msg();
1440 isl_rs_ctx.reset_error();
1441 return Err(LibISLError::new(err, err_msg));
1442 }
1443 Ok(isl_rs_result)
1444 }
1445
1446 pub fn is_params(&self) -> Result<bool, LibISLError> {
1448 let space = self;
1449 let isl_rs_ctx = space.get_ctx();
1450 let space = space.ptr;
1451 let isl_rs_result = unsafe { isl_space_is_params(space) };
1452 let isl_rs_result = match isl_rs_result {
1453 0 => false,
1454 1 => true,
1455 _ => {
1456 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1457 }
1458 };
1459 let err = isl_rs_ctx.last_error();
1460 if err != Error::None_ {
1461 let err_msg = isl_rs_ctx.last_error_msg();
1462 isl_rs_ctx.reset_error();
1463 return Err(LibISLError::new(err, err_msg));
1464 }
1465 Ok(isl_rs_result)
1466 }
1467
1468 pub fn is_product(&self) -> Result<bool, LibISLError> {
1470 let space = self;
1471 let isl_rs_ctx = space.get_ctx();
1472 let space = space.ptr;
1473 let isl_rs_result = unsafe { isl_space_is_product(space) };
1474 let isl_rs_result = match isl_rs_result {
1475 0 => false,
1476 1 => true,
1477 _ => {
1478 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1479 }
1480 };
1481 let err = isl_rs_ctx.last_error();
1482 if err != Error::None_ {
1483 let err_msg = isl_rs_ctx.last_error_msg();
1484 isl_rs_ctx.reset_error();
1485 return Err(LibISLError::new(err, err_msg));
1486 }
1487 Ok(isl_rs_result)
1488 }
1489
1490 pub fn is_range(&self, space2: &Space) -> Result<bool, LibISLError> {
1492 let space1 = self;
1493 let isl_rs_ctx = space1.get_ctx();
1494 let space1 = space1.ptr;
1495 let space2 = space2.ptr;
1496 let isl_rs_result = unsafe { isl_space_is_range(space1, space2) };
1497 let isl_rs_result = match isl_rs_result {
1498 0 => false,
1499 1 => true,
1500 _ => {
1501 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1502 }
1503 };
1504 let err = isl_rs_ctx.last_error();
1505 if err != Error::None_ {
1506 let err_msg = isl_rs_ctx.last_error_msg();
1507 isl_rs_ctx.reset_error();
1508 return Err(LibISLError::new(err, err_msg));
1509 }
1510 Ok(isl_rs_result)
1511 }
1512
1513 pub fn is_set(&self) -> Result<bool, LibISLError> {
1515 let space = self;
1516 let isl_rs_ctx = space.get_ctx();
1517 let space = space.ptr;
1518 let isl_rs_result = unsafe { isl_space_is_set(space) };
1519 let isl_rs_result = match isl_rs_result {
1520 0 => false,
1521 1 => true,
1522 _ => {
1523 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1524 }
1525 };
1526 let err = isl_rs_ctx.last_error();
1527 if err != Error::None_ {
1528 let err_msg = isl_rs_ctx.last_error_msg();
1529 isl_rs_ctx.reset_error();
1530 return Err(LibISLError::new(err, err_msg));
1531 }
1532 Ok(isl_rs_result)
1533 }
1534
1535 pub fn is_wrapping(&self) -> Result<bool, LibISLError> {
1537 let space = self;
1538 let isl_rs_ctx = space.get_ctx();
1539 let space = space.ptr;
1540 let isl_rs_result = unsafe { isl_space_is_wrapping(space) };
1541 let isl_rs_result = match isl_rs_result {
1542 0 => false,
1543 1 => true,
1544 _ => {
1545 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1546 }
1547 };
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 join(self, right: Space) -> Result<Space, LibISLError> {
1559 let left = self;
1560 let isl_rs_ctx = left.get_ctx();
1561 let mut left = left;
1562 left.do_not_free_on_drop();
1563 let left = left.ptr;
1564 let mut right = right;
1565 right.do_not_free_on_drop();
1566 let right = right.ptr;
1567 let isl_rs_result = unsafe { isl_space_join(left, right) };
1568 let isl_rs_result = Space { 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 map_from_domain_and_range(self, range: Space) -> Result<Space, LibISLError> {
1581 let domain = self;
1582 let isl_rs_ctx = domain.get_ctx();
1583 let mut domain = domain;
1584 domain.do_not_free_on_drop();
1585 let domain = domain.ptr;
1586 let mut range = range;
1587 range.do_not_free_on_drop();
1588 let range = range.ptr;
1589 let isl_rs_result = unsafe { isl_space_map_from_domain_and_range(domain, range) };
1590 let isl_rs_result = Space { 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 map_from_set(self) -> Result<Space, LibISLError> {
1603 let space = self;
1604 let isl_rs_ctx = space.get_ctx();
1605 let mut space = space;
1606 space.do_not_free_on_drop();
1607 let space = space.ptr;
1608 let isl_rs_result = unsafe { isl_space_map_from_set(space) };
1609 let isl_rs_result = Space { 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 match_(&self, type1: DimType, space2: &Space, type2: DimType)
1622 -> Result<bool, LibISLError> {
1623 let space1 = self;
1624 let isl_rs_ctx = space1.get_ctx();
1625 let space1 = space1.ptr;
1626 let type1 = type1.to_i32();
1627 let space2 = space2.ptr;
1628 let type2 = type2.to_i32();
1629 let isl_rs_result = unsafe { isl_space_match(space1, type1, space2, type2) };
1630 let isl_rs_result = match isl_rs_result {
1631 0 => false,
1632 1 => true,
1633 _ => {
1634 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1635 }
1636 };
1637 let err = isl_rs_ctx.last_error();
1638 if err != Error::None_ {
1639 let err_msg = isl_rs_ctx.last_error_msg();
1640 isl_rs_ctx.reset_error();
1641 return Err(LibISLError::new(err, err_msg));
1642 }
1643 Ok(isl_rs_result)
1644 }
1645
1646 pub fn move_dims(self, dst_type: DimType, dst_pos: u32, src_type: DimType, src_pos: u32,
1648 n: u32)
1649 -> Result<Space, LibISLError> {
1650 let space = self;
1651 let isl_rs_ctx = space.get_ctx();
1652 let mut space = space;
1653 space.do_not_free_on_drop();
1654 let space = space.ptr;
1655 let dst_type = dst_type.to_i32();
1656 let src_type = src_type.to_i32();
1657 let isl_rs_result =
1658 unsafe { isl_space_move_dims(space, dst_type, dst_pos, src_type, src_pos, n) };
1659 let isl_rs_result = Space { ptr: isl_rs_result,
1660 should_free_on_drop: true };
1661 let err = isl_rs_ctx.last_error();
1662 if err != Error::None_ {
1663 let err_msg = isl_rs_ctx.last_error_msg();
1664 isl_rs_ctx.reset_error();
1665 return Err(LibISLError::new(err, err_msg));
1666 }
1667 Ok(isl_rs_result)
1668 }
1669
1670 pub fn multi_aff(self, list: AffList) -> Result<MultiAff, LibISLError> {
1672 let space = self;
1673 let isl_rs_ctx = space.get_ctx();
1674 let mut space = space;
1675 space.do_not_free_on_drop();
1676 let space = space.ptr;
1677 let mut list = list;
1678 list.do_not_free_on_drop();
1679 let list = list.ptr;
1680 let isl_rs_result = unsafe { isl_space_multi_aff(space, list) };
1681 let isl_rs_result = MultiAff { ptr: isl_rs_result,
1682 should_free_on_drop: true };
1683 let err = isl_rs_ctx.last_error();
1684 if err != Error::None_ {
1685 let err_msg = isl_rs_ctx.last_error_msg();
1686 isl_rs_ctx.reset_error();
1687 return Err(LibISLError::new(err, err_msg));
1688 }
1689 Ok(isl_rs_result)
1690 }
1691
1692 pub fn multi_aff_on_domain_multi_val(self, mv: MultiVal) -> Result<MultiAff, LibISLError> {
1694 let space = self;
1695 let isl_rs_ctx = space.get_ctx();
1696 let mut space = space;
1697 space.do_not_free_on_drop();
1698 let space = space.ptr;
1699 let mut mv = mv;
1700 mv.do_not_free_on_drop();
1701 let mv = mv.ptr;
1702 let isl_rs_result = unsafe { isl_space_multi_aff_on_domain_multi_val(space, mv) };
1703 let isl_rs_result = MultiAff { ptr: isl_rs_result,
1704 should_free_on_drop: true };
1705 let err = isl_rs_ctx.last_error();
1706 if err != Error::None_ {
1707 let err_msg = isl_rs_ctx.last_error_msg();
1708 isl_rs_ctx.reset_error();
1709 return Err(LibISLError::new(err, err_msg));
1710 }
1711 Ok(isl_rs_result)
1712 }
1713
1714 pub fn multi_id(self, list: IdList) -> Result<MultiId, LibISLError> {
1716 let space = self;
1717 let isl_rs_ctx = space.get_ctx();
1718 let mut space = space;
1719 space.do_not_free_on_drop();
1720 let space = space.ptr;
1721 let mut list = list;
1722 list.do_not_free_on_drop();
1723 let list = list.ptr;
1724 let isl_rs_result = unsafe { isl_space_multi_id(space, list) };
1725 let isl_rs_result = MultiId { ptr: isl_rs_result,
1726 should_free_on_drop: true };
1727 let err = isl_rs_ctx.last_error();
1728 if err != Error::None_ {
1729 let err_msg = isl_rs_ctx.last_error_msg();
1730 isl_rs_ctx.reset_error();
1731 return Err(LibISLError::new(err, err_msg));
1732 }
1733 Ok(isl_rs_result)
1734 }
1735
1736 pub fn multi_pw_aff(self, list: PwAffList) -> Result<MultiPwAff, LibISLError> {
1738 let space = self;
1739 let isl_rs_ctx = space.get_ctx();
1740 let mut space = space;
1741 space.do_not_free_on_drop();
1742 let space = space.ptr;
1743 let mut list = list;
1744 list.do_not_free_on_drop();
1745 let list = list.ptr;
1746 let isl_rs_result = unsafe { isl_space_multi_pw_aff(space, list) };
1747 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
1748 should_free_on_drop: true };
1749 let err = isl_rs_ctx.last_error();
1750 if err != Error::None_ {
1751 let err_msg = isl_rs_ctx.last_error_msg();
1752 isl_rs_ctx.reset_error();
1753 return Err(LibISLError::new(err, err_msg));
1754 }
1755 Ok(isl_rs_result)
1756 }
1757
1758 pub fn multi_union_pw_aff(self, list: UnionPwAffList) -> Result<MultiUnionPwAff, LibISLError> {
1760 let space = self;
1761 let isl_rs_ctx = space.get_ctx();
1762 let mut space = space;
1763 space.do_not_free_on_drop();
1764 let space = space.ptr;
1765 let mut list = list;
1766 list.do_not_free_on_drop();
1767 let list = list.ptr;
1768 let isl_rs_result = unsafe { isl_space_multi_union_pw_aff(space, list) };
1769 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1770 should_free_on_drop: true };
1771 let err = isl_rs_ctx.last_error();
1772 if err != Error::None_ {
1773 let err_msg = isl_rs_ctx.last_error_msg();
1774 isl_rs_ctx.reset_error();
1775 return Err(LibISLError::new(err, err_msg));
1776 }
1777 Ok(isl_rs_result)
1778 }
1779
1780 pub fn multi_val(self, list: ValList) -> Result<MultiVal, LibISLError> {
1782 let space = self;
1783 let isl_rs_ctx = space.get_ctx();
1784 let mut space = space;
1785 space.do_not_free_on_drop();
1786 let space = space.ptr;
1787 let mut list = list;
1788 list.do_not_free_on_drop();
1789 let list = list.ptr;
1790 let isl_rs_result = unsafe { isl_space_multi_val(space, list) };
1791 let isl_rs_result = MultiVal { ptr: isl_rs_result,
1792 should_free_on_drop: true };
1793 let err = isl_rs_ctx.last_error();
1794 if err != Error::None_ {
1795 let err_msg = isl_rs_ctx.last_error_msg();
1796 isl_rs_ctx.reset_error();
1797 return Err(LibISLError::new(err, err_msg));
1798 }
1799 Ok(isl_rs_result)
1800 }
1801
1802 pub fn param_aff_on_domain_id(self, id: Id) -> Result<Aff, LibISLError> {
1804 let space = self;
1805 let isl_rs_ctx = space.get_ctx();
1806 let mut space = space;
1807 space.do_not_free_on_drop();
1808 let space = space.ptr;
1809 let mut id = id;
1810 id.do_not_free_on_drop();
1811 let id = id.ptr;
1812 let isl_rs_result = unsafe { isl_space_param_aff_on_domain_id(space, id) };
1813 let isl_rs_result = Aff { ptr: isl_rs_result,
1814 should_free_on_drop: true };
1815 let err = isl_rs_ctx.last_error();
1816 if err != Error::None_ {
1817 let err_msg = isl_rs_ctx.last_error_msg();
1818 isl_rs_ctx.reset_error();
1819 return Err(LibISLError::new(err, err_msg));
1820 }
1821 Ok(isl_rs_result)
1822 }
1823
1824 pub fn params(self) -> Result<Space, LibISLError> {
1826 let space = self;
1827 let isl_rs_ctx = space.get_ctx();
1828 let mut space = space;
1829 space.do_not_free_on_drop();
1830 let space = space.ptr;
1831 let isl_rs_result = unsafe { isl_space_params(space) };
1832 let isl_rs_result = Space { ptr: isl_rs_result,
1833 should_free_on_drop: true };
1834 let err = isl_rs_ctx.last_error();
1835 if err != Error::None_ {
1836 let err_msg = isl_rs_ctx.last_error_msg();
1837 isl_rs_ctx.reset_error();
1838 return Err(LibISLError::new(err, err_msg));
1839 }
1840 Ok(isl_rs_result)
1841 }
1842
1843 pub fn params_alloc(ctx: &Context, nparam: u32) -> Result<Space, LibISLError> {
1845 let isl_rs_ctx = Context { ptr: ctx.ptr,
1846 should_free_on_drop: false };
1847 let ctx = ctx.ptr;
1848 let isl_rs_result = unsafe { isl_space_params_alloc(ctx, nparam) };
1849 let isl_rs_result = Space { ptr: isl_rs_result,
1850 should_free_on_drop: true };
1851 let err = isl_rs_ctx.last_error();
1852 if err != Error::None_ {
1853 let err_msg = isl_rs_ctx.last_error_msg();
1854 isl_rs_ctx.reset_error();
1855 return Err(LibISLError::new(err, err_msg));
1856 }
1857 Ok(isl_rs_result)
1858 }
1859
1860 pub fn product(self, right: Space) -> Result<Space, LibISLError> {
1862 let left = self;
1863 let isl_rs_ctx = left.get_ctx();
1864 let mut left = left;
1865 left.do_not_free_on_drop();
1866 let left = left.ptr;
1867 let mut right = right;
1868 right.do_not_free_on_drop();
1869 let right = right.ptr;
1870 let isl_rs_result = unsafe { isl_space_product(left, right) };
1871 let isl_rs_result = Space { ptr: isl_rs_result,
1872 should_free_on_drop: true };
1873 let err = isl_rs_ctx.last_error();
1874 if err != Error::None_ {
1875 let err_msg = isl_rs_ctx.last_error_msg();
1876 isl_rs_ctx.reset_error();
1877 return Err(LibISLError::new(err, err_msg));
1878 }
1879 Ok(isl_rs_result)
1880 }
1881
1882 pub fn range(self) -> Result<Space, LibISLError> {
1884 let space = self;
1885 let isl_rs_ctx = space.get_ctx();
1886 let mut space = space;
1887 space.do_not_free_on_drop();
1888 let space = space.ptr;
1889 let isl_rs_result = unsafe { isl_space_range(space) };
1890 let isl_rs_result = Space { ptr: isl_rs_result,
1891 should_free_on_drop: true };
1892 let err = isl_rs_ctx.last_error();
1893 if err != Error::None_ {
1894 let err_msg = isl_rs_ctx.last_error_msg();
1895 isl_rs_ctx.reset_error();
1896 return Err(LibISLError::new(err, err_msg));
1897 }
1898 Ok(isl_rs_result)
1899 }
1900
1901 pub fn range_curry(self) -> Result<Space, LibISLError> {
1903 let space = self;
1904 let isl_rs_ctx = space.get_ctx();
1905 let mut space = space;
1906 space.do_not_free_on_drop();
1907 let space = space.ptr;
1908 let isl_rs_result = unsafe { isl_space_range_curry(space) };
1909 let isl_rs_result = Space { ptr: isl_rs_result,
1910 should_free_on_drop: true };
1911 let err = isl_rs_ctx.last_error();
1912 if err != Error::None_ {
1913 let err_msg = isl_rs_ctx.last_error_msg();
1914 isl_rs_ctx.reset_error();
1915 return Err(LibISLError::new(err, err_msg));
1916 }
1917 Ok(isl_rs_result)
1918 }
1919
1920 pub fn range_factor_domain(self) -> Result<Space, LibISLError> {
1922 let space = self;
1923 let isl_rs_ctx = space.get_ctx();
1924 let mut space = space;
1925 space.do_not_free_on_drop();
1926 let space = space.ptr;
1927 let isl_rs_result = unsafe { isl_space_range_factor_domain(space) };
1928 let isl_rs_result = Space { ptr: isl_rs_result,
1929 should_free_on_drop: true };
1930 let err = isl_rs_ctx.last_error();
1931 if err != Error::None_ {
1932 let err_msg = isl_rs_ctx.last_error_msg();
1933 isl_rs_ctx.reset_error();
1934 return Err(LibISLError::new(err, err_msg));
1935 }
1936 Ok(isl_rs_result)
1937 }
1938
1939 pub fn range_factor_range(self) -> Result<Space, LibISLError> {
1941 let space = self;
1942 let isl_rs_ctx = space.get_ctx();
1943 let mut space = space;
1944 space.do_not_free_on_drop();
1945 let space = space.ptr;
1946 let isl_rs_result = unsafe { isl_space_range_factor_range(space) };
1947 let isl_rs_result = Space { ptr: isl_rs_result,
1948 should_free_on_drop: true };
1949 let err = isl_rs_ctx.last_error();
1950 if err != Error::None_ {
1951 let err_msg = isl_rs_ctx.last_error_msg();
1952 isl_rs_ctx.reset_error();
1953 return Err(LibISLError::new(err, err_msg));
1954 }
1955 Ok(isl_rs_result)
1956 }
1957
1958 pub fn range_is_wrapping(&self) -> Result<bool, LibISLError> {
1960 let space = self;
1961 let isl_rs_ctx = space.get_ctx();
1962 let space = space.ptr;
1963 let isl_rs_result = unsafe { isl_space_range_is_wrapping(space) };
1964 let isl_rs_result = match isl_rs_result {
1965 0 => false,
1966 1 => true,
1967 _ => {
1968 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1969 }
1970 };
1971 let err = isl_rs_ctx.last_error();
1972 if err != Error::None_ {
1973 let err_msg = isl_rs_ctx.last_error_msg();
1974 isl_rs_ctx.reset_error();
1975 return Err(LibISLError::new(err, err_msg));
1976 }
1977 Ok(isl_rs_result)
1978 }
1979
1980 pub fn range_map(self) -> Result<Space, LibISLError> {
1982 let space = self;
1983 let isl_rs_ctx = space.get_ctx();
1984 let mut space = space;
1985 space.do_not_free_on_drop();
1986 let space = space.ptr;
1987 let isl_rs_result = unsafe { isl_space_range_map(space) };
1988 let isl_rs_result = Space { ptr: isl_rs_result,
1989 should_free_on_drop: true };
1990 let err = isl_rs_ctx.last_error();
1991 if err != Error::None_ {
1992 let err_msg = isl_rs_ctx.last_error_msg();
1993 isl_rs_ctx.reset_error();
1994 return Err(LibISLError::new(err, err_msg));
1995 }
1996 Ok(isl_rs_result)
1997 }
1998
1999 pub fn range_map_multi_aff(self) -> Result<MultiAff, LibISLError> {
2001 let space = self;
2002 let isl_rs_ctx = space.get_ctx();
2003 let mut space = space;
2004 space.do_not_free_on_drop();
2005 let space = space.ptr;
2006 let isl_rs_result = unsafe { isl_space_range_map_multi_aff(space) };
2007 let isl_rs_result = MultiAff { ptr: isl_rs_result,
2008 should_free_on_drop: true };
2009 let err = isl_rs_ctx.last_error();
2010 if err != Error::None_ {
2011 let err_msg = isl_rs_ctx.last_error_msg();
2012 isl_rs_ctx.reset_error();
2013 return Err(LibISLError::new(err, err_msg));
2014 }
2015 Ok(isl_rs_result)
2016 }
2017
2018 pub fn range_map_pw_multi_aff(self) -> Result<PwMultiAff, LibISLError> {
2020 let space = self;
2021 let isl_rs_ctx = space.get_ctx();
2022 let mut space = space;
2023 space.do_not_free_on_drop();
2024 let space = space.ptr;
2025 let isl_rs_result = unsafe { isl_space_range_map_pw_multi_aff(space) };
2026 let isl_rs_result = PwMultiAff { ptr: isl_rs_result,
2027 should_free_on_drop: true };
2028 let err = isl_rs_ctx.last_error();
2029 if err != Error::None_ {
2030 let err_msg = isl_rs_ctx.last_error_msg();
2031 isl_rs_ctx.reset_error();
2032 return Err(LibISLError::new(err, err_msg));
2033 }
2034 Ok(isl_rs_result)
2035 }
2036
2037 pub fn range_product(self, right: Space) -> Result<Space, LibISLError> {
2039 let left = self;
2040 let isl_rs_ctx = left.get_ctx();
2041 let mut left = left;
2042 left.do_not_free_on_drop();
2043 let left = left.ptr;
2044 let mut right = right;
2045 right.do_not_free_on_drop();
2046 let right = right.ptr;
2047 let isl_rs_result = unsafe { isl_space_range_product(left, right) };
2048 let isl_rs_result = Space { ptr: isl_rs_result,
2049 should_free_on_drop: true };
2050 let err = isl_rs_ctx.last_error();
2051 if err != Error::None_ {
2052 let err_msg = isl_rs_ctx.last_error_msg();
2053 isl_rs_ctx.reset_error();
2054 return Err(LibISLError::new(err, err_msg));
2055 }
2056 Ok(isl_rs_result)
2057 }
2058
2059 pub fn range_reverse(self) -> Result<Space, LibISLError> {
2061 let space = self;
2062 let isl_rs_ctx = space.get_ctx();
2063 let mut space = space;
2064 space.do_not_free_on_drop();
2065 let space = space.ptr;
2066 let isl_rs_result = unsafe { isl_space_range_reverse(space) };
2067 let isl_rs_result = Space { ptr: isl_rs_result,
2068 should_free_on_drop: true };
2069 let err = isl_rs_ctx.last_error();
2070 if err != Error::None_ {
2071 let err_msg = isl_rs_ctx.last_error_msg();
2072 isl_rs_ctx.reset_error();
2073 return Err(LibISLError::new(err, err_msg));
2074 }
2075 Ok(isl_rs_result)
2076 }
2077
2078 pub fn range_wrapped_domain(self) -> Result<Space, LibISLError> {
2080 let space = self;
2081 let isl_rs_ctx = space.get_ctx();
2082 let mut space = space;
2083 space.do_not_free_on_drop();
2084 let space = space.ptr;
2085 let isl_rs_result = unsafe { isl_space_range_wrapped_domain(space) };
2086 let isl_rs_result = Space { ptr: isl_rs_result,
2087 should_free_on_drop: true };
2088 let err = isl_rs_ctx.last_error();
2089 if err != Error::None_ {
2090 let err_msg = isl_rs_ctx.last_error_msg();
2091 isl_rs_ctx.reset_error();
2092 return Err(LibISLError::new(err, err_msg));
2093 }
2094 Ok(isl_rs_result)
2095 }
2096
2097 pub fn range_wrapped_range(self) -> Result<Space, LibISLError> {
2099 let space = self;
2100 let isl_rs_ctx = space.get_ctx();
2101 let mut space = space;
2102 space.do_not_free_on_drop();
2103 let space = space.ptr;
2104 let isl_rs_result = unsafe { isl_space_range_wrapped_range(space) };
2105 let isl_rs_result = Space { ptr: isl_rs_result,
2106 should_free_on_drop: true };
2107 let err = isl_rs_ctx.last_error();
2108 if err != Error::None_ {
2109 let err_msg = isl_rs_ctx.last_error_msg();
2110 isl_rs_ctx.reset_error();
2111 return Err(LibISLError::new(err, err_msg));
2112 }
2113 Ok(isl_rs_result)
2114 }
2115
2116 pub fn read_from_str(ctx: &Context, str_: &str) -> Result<Space, LibISLError> {
2118 let isl_rs_ctx = Context { ptr: ctx.ptr,
2119 should_free_on_drop: false };
2120 let ctx = ctx.ptr;
2121 let str_ = CString::new(str_).unwrap();
2122 let str_ = str_.as_ptr();
2123 let isl_rs_result = unsafe { isl_space_read_from_str(ctx, str_) };
2124 let isl_rs_result = Space { ptr: isl_rs_result,
2125 should_free_on_drop: true };
2126 let err = isl_rs_ctx.last_error();
2127 if err != Error::None_ {
2128 let err_msg = isl_rs_ctx.last_error_msg();
2129 isl_rs_ctx.reset_error();
2130 return Err(LibISLError::new(err, err_msg));
2131 }
2132 Ok(isl_rs_result)
2133 }
2134
2135 pub fn reset_tuple_id(self, type_: DimType) -> Result<Space, LibISLError> {
2137 let space = self;
2138 let isl_rs_ctx = space.get_ctx();
2139 let mut space = space;
2140 space.do_not_free_on_drop();
2141 let space = space.ptr;
2142 let type_ = type_.to_i32();
2143 let isl_rs_result = unsafe { isl_space_reset_tuple_id(space, type_) };
2144 let isl_rs_result = Space { ptr: isl_rs_result,
2145 should_free_on_drop: true };
2146 let err = isl_rs_ctx.last_error();
2147 if err != Error::None_ {
2148 let err_msg = isl_rs_ctx.last_error_msg();
2149 isl_rs_ctx.reset_error();
2150 return Err(LibISLError::new(err, err_msg));
2151 }
2152 Ok(isl_rs_result)
2153 }
2154
2155 pub fn reset_user(self) -> Result<Space, LibISLError> {
2157 let space = self;
2158 let isl_rs_ctx = space.get_ctx();
2159 let mut space = space;
2160 space.do_not_free_on_drop();
2161 let space = space.ptr;
2162 let isl_rs_result = unsafe { isl_space_reset_user(space) };
2163 let isl_rs_result = Space { ptr: isl_rs_result,
2164 should_free_on_drop: true };
2165 let err = isl_rs_ctx.last_error();
2166 if err != Error::None_ {
2167 let err_msg = isl_rs_ctx.last_error_msg();
2168 isl_rs_ctx.reset_error();
2169 return Err(LibISLError::new(err, err_msg));
2170 }
2171 Ok(isl_rs_result)
2172 }
2173
2174 pub fn reverse(self) -> Result<Space, LibISLError> {
2176 let space = self;
2177 let isl_rs_ctx = space.get_ctx();
2178 let mut space = space;
2179 space.do_not_free_on_drop();
2180 let space = space.ptr;
2181 let isl_rs_result = unsafe { isl_space_reverse(space) };
2182 let isl_rs_result = Space { ptr: isl_rs_result,
2183 should_free_on_drop: true };
2184 let err = isl_rs_ctx.last_error();
2185 if err != Error::None_ {
2186 let err_msg = isl_rs_ctx.last_error_msg();
2187 isl_rs_ctx.reset_error();
2188 return Err(LibISLError::new(err, err_msg));
2189 }
2190 Ok(isl_rs_result)
2191 }
2192
2193 pub fn set_alloc(ctx: &Context, nparam: u32, dim: u32) -> Result<Space, LibISLError> {
2195 let isl_rs_ctx = Context { ptr: ctx.ptr,
2196 should_free_on_drop: false };
2197 let ctx = ctx.ptr;
2198 let isl_rs_result = unsafe { isl_space_set_alloc(ctx, nparam, dim) };
2199 let isl_rs_result = Space { ptr: isl_rs_result,
2200 should_free_on_drop: true };
2201 let err = isl_rs_ctx.last_error();
2202 if err != Error::None_ {
2203 let err_msg = isl_rs_ctx.last_error_msg();
2204 isl_rs_ctx.reset_error();
2205 return Err(LibISLError::new(err, err_msg));
2206 }
2207 Ok(isl_rs_result)
2208 }
2209
2210 pub fn set_dim_id(self, type_: DimType, pos: u32, id: Id) -> Result<Space, LibISLError> {
2212 let space = self;
2213 let isl_rs_ctx = space.get_ctx();
2214 let mut space = space;
2215 space.do_not_free_on_drop();
2216 let space = space.ptr;
2217 let type_ = type_.to_i32();
2218 let mut id = id;
2219 id.do_not_free_on_drop();
2220 let id = id.ptr;
2221 let isl_rs_result = unsafe { isl_space_set_dim_id(space, type_, pos, id) };
2222 let isl_rs_result = Space { ptr: isl_rs_result,
2223 should_free_on_drop: true };
2224 let err = isl_rs_ctx.last_error();
2225 if err != Error::None_ {
2226 let err_msg = isl_rs_ctx.last_error_msg();
2227 isl_rs_ctx.reset_error();
2228 return Err(LibISLError::new(err, err_msg));
2229 }
2230 Ok(isl_rs_result)
2231 }
2232
2233 pub fn set_dim_name(self, type_: DimType, pos: u32, name: &str) -> Result<Space, LibISLError> {
2235 let space = self;
2236 let isl_rs_ctx = space.get_ctx();
2237 let mut space = space;
2238 space.do_not_free_on_drop();
2239 let space = space.ptr;
2240 let type_ = type_.to_i32();
2241 let name = CString::new(name).unwrap();
2242 let name = name.as_ptr();
2243 let isl_rs_result = unsafe { isl_space_set_dim_name(space, type_, pos, name) };
2244 let isl_rs_result = Space { ptr: isl_rs_result,
2245 should_free_on_drop: true };
2246 let err = isl_rs_ctx.last_error();
2247 if err != Error::None_ {
2248 let err_msg = isl_rs_ctx.last_error_msg();
2249 isl_rs_ctx.reset_error();
2250 return Err(LibISLError::new(err, err_msg));
2251 }
2252 Ok(isl_rs_result)
2253 }
2254
2255 pub fn set_domain_tuple_id(self, id: Id) -> Result<Space, LibISLError> {
2257 let space = self;
2258 let isl_rs_ctx = space.get_ctx();
2259 let mut space = space;
2260 space.do_not_free_on_drop();
2261 let space = space.ptr;
2262 let mut id = id;
2263 id.do_not_free_on_drop();
2264 let id = id.ptr;
2265 let isl_rs_result = unsafe { isl_space_set_domain_tuple_id(space, id) };
2266 let isl_rs_result = Space { ptr: isl_rs_result,
2267 should_free_on_drop: true };
2268 let err = isl_rs_ctx.last_error();
2269 if err != Error::None_ {
2270 let err_msg = isl_rs_ctx.last_error_msg();
2271 isl_rs_ctx.reset_error();
2272 return Err(LibISLError::new(err, err_msg));
2273 }
2274 Ok(isl_rs_result)
2275 }
2276
2277 pub fn set_from_params(self) -> Result<Space, LibISLError> {
2279 let space = self;
2280 let isl_rs_ctx = space.get_ctx();
2281 let mut space = space;
2282 space.do_not_free_on_drop();
2283 let space = space.ptr;
2284 let isl_rs_result = unsafe { isl_space_set_from_params(space) };
2285 let isl_rs_result = Space { ptr: isl_rs_result,
2286 should_free_on_drop: true };
2287 let err = isl_rs_ctx.last_error();
2288 if err != Error::None_ {
2289 let err_msg = isl_rs_ctx.last_error_msg();
2290 isl_rs_ctx.reset_error();
2291 return Err(LibISLError::new(err, err_msg));
2292 }
2293 Ok(isl_rs_result)
2294 }
2295
2296 pub fn set_range_tuple_id(self, id: Id) -> Result<Space, LibISLError> {
2298 let space = self;
2299 let isl_rs_ctx = space.get_ctx();
2300 let mut space = space;
2301 space.do_not_free_on_drop();
2302 let space = space.ptr;
2303 let mut id = id;
2304 id.do_not_free_on_drop();
2305 let id = id.ptr;
2306 let isl_rs_result = unsafe { isl_space_set_range_tuple_id(space, id) };
2307 let isl_rs_result = Space { ptr: isl_rs_result,
2308 should_free_on_drop: true };
2309 let err = isl_rs_ctx.last_error();
2310 if err != Error::None_ {
2311 let err_msg = isl_rs_ctx.last_error_msg();
2312 isl_rs_ctx.reset_error();
2313 return Err(LibISLError::new(err, err_msg));
2314 }
2315 Ok(isl_rs_result)
2316 }
2317
2318 pub fn set_tuple_id(self, type_: DimType, id: Id) -> Result<Space, LibISLError> {
2320 let space = self;
2321 let isl_rs_ctx = space.get_ctx();
2322 let mut space = space;
2323 space.do_not_free_on_drop();
2324 let space = space.ptr;
2325 let type_ = type_.to_i32();
2326 let mut id = id;
2327 id.do_not_free_on_drop();
2328 let id = id.ptr;
2329 let isl_rs_result = unsafe { isl_space_set_tuple_id(space, type_, id) };
2330 let isl_rs_result = Space { ptr: isl_rs_result,
2331 should_free_on_drop: true };
2332 let err = isl_rs_ctx.last_error();
2333 if err != Error::None_ {
2334 let err_msg = isl_rs_ctx.last_error_msg();
2335 isl_rs_ctx.reset_error();
2336 return Err(LibISLError::new(err, err_msg));
2337 }
2338 Ok(isl_rs_result)
2339 }
2340
2341 pub fn set_tuple_name(self, type_: DimType, s: &str) -> Result<Space, LibISLError> {
2343 let space = self;
2344 let isl_rs_ctx = space.get_ctx();
2345 let mut space = space;
2346 space.do_not_free_on_drop();
2347 let space = space.ptr;
2348 let type_ = type_.to_i32();
2349 let s = CString::new(s).unwrap();
2350 let s = s.as_ptr();
2351 let isl_rs_result = unsafe { isl_space_set_tuple_name(space, type_, s) };
2352 let isl_rs_result = Space { ptr: isl_rs_result,
2353 should_free_on_drop: true };
2354 let err = isl_rs_ctx.last_error();
2355 if err != Error::None_ {
2356 let err_msg = isl_rs_ctx.last_error_msg();
2357 isl_rs_ctx.reset_error();
2358 return Err(LibISLError::new(err, err_msg));
2359 }
2360 Ok(isl_rs_result)
2361 }
2362
2363 pub fn to_str(&self) -> Result<&str, LibISLError> {
2365 let space = self;
2366 let isl_rs_ctx = space.get_ctx();
2367 let space = space.ptr;
2368 let isl_rs_result = unsafe { isl_space_to_str(space) };
2369 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
2370 let isl_rs_result = isl_rs_result.to_str().unwrap();
2371 let err = isl_rs_ctx.last_error();
2372 if err != Error::None_ {
2373 let err_msg = isl_rs_ctx.last_error_msg();
2374 isl_rs_ctx.reset_error();
2375 return Err(LibISLError::new(err, err_msg));
2376 }
2377 Ok(isl_rs_result)
2378 }
2379
2380 pub fn tuple_is_equal(&self, type1: DimType, space2: &Space, type2: DimType)
2382 -> Result<bool, LibISLError> {
2383 let space1 = self;
2384 let isl_rs_ctx = space1.get_ctx();
2385 let space1 = space1.ptr;
2386 let type1 = type1.to_i32();
2387 let space2 = space2.ptr;
2388 let type2 = type2.to_i32();
2389 let isl_rs_result = unsafe { isl_space_tuple_is_equal(space1, type1, space2, type2) };
2390 let isl_rs_result = match isl_rs_result {
2391 0 => false,
2392 1 => true,
2393 _ => {
2394 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
2395 }
2396 };
2397 let err = isl_rs_ctx.last_error();
2398 if err != Error::None_ {
2399 let err_msg = isl_rs_ctx.last_error_msg();
2400 isl_rs_ctx.reset_error();
2401 return Err(LibISLError::new(err, err_msg));
2402 }
2403 Ok(isl_rs_result)
2404 }
2405
2406 pub fn uncurry(self) -> Result<Space, LibISLError> {
2408 let space = self;
2409 let isl_rs_ctx = space.get_ctx();
2410 let mut space = space;
2411 space.do_not_free_on_drop();
2412 let space = space.ptr;
2413 let isl_rs_result = unsafe { isl_space_uncurry(space) };
2414 let isl_rs_result = Space { ptr: isl_rs_result,
2415 should_free_on_drop: true };
2416 let err = isl_rs_ctx.last_error();
2417 if err != Error::None_ {
2418 let err_msg = isl_rs_ctx.last_error_msg();
2419 isl_rs_ctx.reset_error();
2420 return Err(LibISLError::new(err, err_msg));
2421 }
2422 Ok(isl_rs_result)
2423 }
2424
2425 pub fn unit(ctx: &Context) -> Result<Space, LibISLError> {
2427 let isl_rs_ctx = Context { ptr: ctx.ptr,
2428 should_free_on_drop: false };
2429 let ctx = ctx.ptr;
2430 let isl_rs_result = unsafe { isl_space_unit(ctx) };
2431 let isl_rs_result = Space { ptr: isl_rs_result,
2432 should_free_on_drop: true };
2433 let err = isl_rs_ctx.last_error();
2434 if err != Error::None_ {
2435 let err_msg = isl_rs_ctx.last_error_msg();
2436 isl_rs_ctx.reset_error();
2437 return Err(LibISLError::new(err, err_msg));
2438 }
2439 Ok(isl_rs_result)
2440 }
2441
2442 pub fn universe_map(self) -> Result<Map, LibISLError> {
2444 let space = self;
2445 let isl_rs_ctx = space.get_ctx();
2446 let mut space = space;
2447 space.do_not_free_on_drop();
2448 let space = space.ptr;
2449 let isl_rs_result = unsafe { isl_space_universe_map(space) };
2450 let isl_rs_result = Map { ptr: isl_rs_result,
2451 should_free_on_drop: true };
2452 let err = isl_rs_ctx.last_error();
2453 if err != Error::None_ {
2454 let err_msg = isl_rs_ctx.last_error_msg();
2455 isl_rs_ctx.reset_error();
2456 return Err(LibISLError::new(err, err_msg));
2457 }
2458 Ok(isl_rs_result)
2459 }
2460
2461 pub fn universe_set(self) -> Result<Set, LibISLError> {
2463 let space = self;
2464 let isl_rs_ctx = space.get_ctx();
2465 let mut space = space;
2466 space.do_not_free_on_drop();
2467 let space = space.ptr;
2468 let isl_rs_result = unsafe { isl_space_universe_set(space) };
2469 let isl_rs_result = Set { ptr: isl_rs_result,
2470 should_free_on_drop: true };
2471 let err = isl_rs_ctx.last_error();
2472 if err != Error::None_ {
2473 let err_msg = isl_rs_ctx.last_error_msg();
2474 isl_rs_ctx.reset_error();
2475 return Err(LibISLError::new(err, err_msg));
2476 }
2477 Ok(isl_rs_result)
2478 }
2479
2480 pub fn unwrap(self) -> Result<Space, LibISLError> {
2482 let space = self;
2483 let isl_rs_ctx = space.get_ctx();
2484 let mut space = space;
2485 space.do_not_free_on_drop();
2486 let space = space.ptr;
2487 let isl_rs_result = unsafe { isl_space_unwrap(space) };
2488 let isl_rs_result = Space { ptr: isl_rs_result,
2489 should_free_on_drop: true };
2490 let err = isl_rs_ctx.last_error();
2491 if err != Error::None_ {
2492 let err_msg = isl_rs_ctx.last_error_msg();
2493 isl_rs_ctx.reset_error();
2494 return Err(LibISLError::new(err, err_msg));
2495 }
2496 Ok(isl_rs_result)
2497 }
2498
2499 pub fn wrap(self) -> Result<Space, LibISLError> {
2501 let space = self;
2502 let isl_rs_ctx = space.get_ctx();
2503 let mut space = space;
2504 space.do_not_free_on_drop();
2505 let space = space.ptr;
2506 let isl_rs_result = unsafe { isl_space_wrap(space) };
2507 let isl_rs_result = Space { ptr: isl_rs_result,
2508 should_free_on_drop: true };
2509 let err = isl_rs_ctx.last_error();
2510 if err != Error::None_ {
2511 let err_msg = isl_rs_ctx.last_error_msg();
2512 isl_rs_ctx.reset_error();
2513 return Err(LibISLError::new(err, err_msg));
2514 }
2515 Ok(isl_rs_result)
2516 }
2517
2518 pub fn wrapped_reverse(self) -> Result<Space, LibISLError> {
2520 let space = self;
2521 let isl_rs_ctx = space.get_ctx();
2522 let mut space = space;
2523 space.do_not_free_on_drop();
2524 let space = space.ptr;
2525 let isl_rs_result = unsafe { isl_space_wrapped_reverse(space) };
2526 let isl_rs_result = Space { ptr: isl_rs_result,
2527 should_free_on_drop: true };
2528 let err = isl_rs_ctx.last_error();
2529 if err != Error::None_ {
2530 let err_msg = isl_rs_ctx.last_error_msg();
2531 isl_rs_ctx.reset_error();
2532 return Err(LibISLError::new(err, err_msg));
2533 }
2534 Ok(isl_rs_result)
2535 }
2536
2537 pub fn zero_aff_on_domain(self) -> Result<Aff, LibISLError> {
2539 let space = self;
2540 let isl_rs_ctx = space.get_ctx();
2541 let mut space = space;
2542 space.do_not_free_on_drop();
2543 let space = space.ptr;
2544 let isl_rs_result = unsafe { isl_space_zero_aff_on_domain(space) };
2545 let isl_rs_result = Aff { ptr: isl_rs_result,
2546 should_free_on_drop: true };
2547 let err = isl_rs_ctx.last_error();
2548 if err != Error::None_ {
2549 let err_msg = isl_rs_ctx.last_error_msg();
2550 isl_rs_ctx.reset_error();
2551 return Err(LibISLError::new(err, err_msg));
2552 }
2553 Ok(isl_rs_result)
2554 }
2555
2556 pub fn zero_multi_aff(self) -> Result<MultiAff, LibISLError> {
2558 let space = self;
2559 let isl_rs_ctx = space.get_ctx();
2560 let mut space = space;
2561 space.do_not_free_on_drop();
2562 let space = space.ptr;
2563 let isl_rs_result = unsafe { isl_space_zero_multi_aff(space) };
2564 let isl_rs_result = MultiAff { ptr: isl_rs_result,
2565 should_free_on_drop: true };
2566 let err = isl_rs_ctx.last_error();
2567 if err != Error::None_ {
2568 let err_msg = isl_rs_ctx.last_error_msg();
2569 isl_rs_ctx.reset_error();
2570 return Err(LibISLError::new(err, err_msg));
2571 }
2572 Ok(isl_rs_result)
2573 }
2574
2575 pub fn zero_multi_pw_aff(self) -> Result<MultiPwAff, LibISLError> {
2577 let space = self;
2578 let isl_rs_ctx = space.get_ctx();
2579 let mut space = space;
2580 space.do_not_free_on_drop();
2581 let space = space.ptr;
2582 let isl_rs_result = unsafe { isl_space_zero_multi_pw_aff(space) };
2583 let isl_rs_result = MultiPwAff { ptr: isl_rs_result,
2584 should_free_on_drop: true };
2585 let err = isl_rs_ctx.last_error();
2586 if err != Error::None_ {
2587 let err_msg = isl_rs_ctx.last_error_msg();
2588 isl_rs_ctx.reset_error();
2589 return Err(LibISLError::new(err, err_msg));
2590 }
2591 Ok(isl_rs_result)
2592 }
2593
2594 pub fn zero_multi_union_pw_aff(self) -> Result<MultiUnionPwAff, LibISLError> {
2596 let space = self;
2597 let isl_rs_ctx = space.get_ctx();
2598 let mut space = space;
2599 space.do_not_free_on_drop();
2600 let space = space.ptr;
2601 let isl_rs_result = unsafe { isl_space_zero_multi_union_pw_aff(space) };
2602 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
2603 should_free_on_drop: true };
2604 let err = isl_rs_ctx.last_error();
2605 if err != Error::None_ {
2606 let err_msg = isl_rs_ctx.last_error_msg();
2607 isl_rs_ctx.reset_error();
2608 return Err(LibISLError::new(err, err_msg));
2609 }
2610 Ok(isl_rs_result)
2611 }
2612
2613 pub fn zero_multi_val(self) -> Result<MultiVal, LibISLError> {
2615 let space = self;
2616 let isl_rs_ctx = space.get_ctx();
2617 let mut space = space;
2618 space.do_not_free_on_drop();
2619 let space = space.ptr;
2620 let isl_rs_result = unsafe { isl_space_zero_multi_val(space) };
2621 let isl_rs_result = MultiVal { ptr: isl_rs_result,
2622 should_free_on_drop: true };
2623 let err = isl_rs_ctx.last_error();
2624 if err != Error::None_ {
2625 let err_msg = isl_rs_ctx.last_error_msg();
2626 isl_rs_ctx.reset_error();
2627 return Err(LibISLError::new(err, err_msg));
2628 }
2629 Ok(isl_rs_result)
2630 }
2631
2632 pub fn zip(self) -> Result<Space, LibISLError> {
2634 let space = self;
2635 let isl_rs_ctx = space.get_ctx();
2636 let mut space = space;
2637 space.do_not_free_on_drop();
2638 let space = space.ptr;
2639 let isl_rs_result = unsafe { isl_space_zip(space) };
2640 let isl_rs_result = Space { ptr: isl_rs_result,
2641 should_free_on_drop: true };
2642 let err = isl_rs_ctx.last_error();
2643 if err != Error::None_ {
2644 let err_msg = isl_rs_ctx.last_error_msg();
2645 isl_rs_ctx.reset_error();
2646 return Err(LibISLError::new(err, err_msg));
2647 }
2648 Ok(isl_rs_result)
2649 }
2650
2651 pub fn do_not_free_on_drop(&mut self) {
2654 self.should_free_on_drop = false;
2655 }
2656}
2657
2658impl Drop for Space {
2659 fn drop(&mut self) {
2660 if self.should_free_on_drop {
2661 unsafe {
2662 isl_space_free(self.ptr);
2663 }
2664 }
2665 }
2666}