1use super::{
5 ASTLoopType, Context, Error, Id, LibISLError, MultiUnionPwAff, MultiVal, Schedule,
6 ScheduleNodeType, Set, Space, UnionMap, UnionPwMultiAff, UnionSet, UnionSetList,
7};
8use libc::uintptr_t;
9use std::ffi::CStr;
10use std::os::raw::c_char;
11
12pub struct ScheduleNode {
14 pub ptr: uintptr_t,
15 pub should_free_on_drop: bool,
16}
17
18extern "C" {
19
20 fn isl_schedule_node_align_params(node: uintptr_t, space: uintptr_t) -> uintptr_t;
21
22 fn isl_schedule_node_ancestor(node: uintptr_t, generation: i32) -> uintptr_t;
23
24 fn isl_schedule_node_band_get_ast_build_options(node: uintptr_t) -> uintptr_t;
25
26 fn isl_schedule_node_band_get_ast_isolate_option(node: uintptr_t) -> uintptr_t;
27
28 fn isl_schedule_node_band_get_partial_schedule(node: uintptr_t) -> uintptr_t;
29
30 fn isl_schedule_node_band_get_partial_schedule_union_map(node: uintptr_t) -> uintptr_t;
31
32 fn isl_schedule_node_band_get_permutable(node: uintptr_t) -> i32;
33
34 fn isl_schedule_node_band_get_space(node: uintptr_t) -> uintptr_t;
35
36 fn isl_schedule_node_band_member_get_ast_loop_type(node: uintptr_t, pos: i32) -> i32;
37
38 fn isl_schedule_node_band_member_get_coincident(node: uintptr_t, pos: i32) -> i32;
39
40 fn isl_schedule_node_band_member_get_isolate_ast_loop_type(node: uintptr_t, pos: i32) -> i32;
41
42 fn isl_schedule_node_band_member_set_ast_loop_type(node: uintptr_t, pos: i32, type_: i32)
43 -> uintptr_t;
44
45 fn isl_schedule_node_band_member_set_coincident(node: uintptr_t, pos: i32, coincident: i32)
46 -> uintptr_t;
47
48 fn isl_schedule_node_band_member_set_isolate_ast_loop_type(node: uintptr_t, pos: i32,
49 type_: i32)
50 -> uintptr_t;
51
52 fn isl_schedule_node_band_mod(node: uintptr_t, mv: uintptr_t) -> uintptr_t;
53
54 fn isl_schedule_node_band_n_member(node: uintptr_t) -> i32;
55
56 fn isl_schedule_node_band_scale(node: uintptr_t, mv: uintptr_t) -> uintptr_t;
57
58 fn isl_schedule_node_band_scale_down(node: uintptr_t, mv: uintptr_t) -> uintptr_t;
59
60 fn isl_schedule_node_band_set_ast_build_options(node: uintptr_t, options: uintptr_t)
61 -> uintptr_t;
62
63 fn isl_schedule_node_band_set_permutable(node: uintptr_t, permutable: i32) -> uintptr_t;
64
65 fn isl_schedule_node_band_shift(node: uintptr_t, shift: uintptr_t) -> uintptr_t;
66
67 fn isl_schedule_node_band_sink(node: uintptr_t) -> uintptr_t;
68
69 fn isl_schedule_node_band_split(node: uintptr_t, pos: i32) -> uintptr_t;
70
71 fn isl_schedule_node_band_tile(node: uintptr_t, sizes: uintptr_t) -> uintptr_t;
72
73 fn isl_schedule_node_child(node: uintptr_t, pos: i32) -> uintptr_t;
74
75 fn isl_schedule_node_context_get_context(node: uintptr_t) -> uintptr_t;
76
77 fn isl_schedule_node_copy(node: uintptr_t) -> uintptr_t;
78
79 fn isl_schedule_node_cut(node: uintptr_t) -> uintptr_t;
80
81 fn isl_schedule_node_delete(node: uintptr_t) -> uintptr_t;
82
83 fn isl_schedule_node_domain_get_domain(node: uintptr_t) -> uintptr_t;
84
85 fn isl_schedule_node_dump(node: uintptr_t) -> ();
86
87 fn isl_schedule_node_expansion_get_contraction(node: uintptr_t) -> uintptr_t;
88
89 fn isl_schedule_node_expansion_get_expansion(node: uintptr_t) -> uintptr_t;
90
91 fn isl_schedule_node_extension_get_extension(node: uintptr_t) -> uintptr_t;
92
93 fn isl_schedule_node_filter_get_filter(node: uintptr_t) -> uintptr_t;
94
95 fn isl_schedule_node_first_child(node: uintptr_t) -> uintptr_t;
96
97 fn isl_schedule_node_free(node: uintptr_t) -> uintptr_t;
98
99 fn isl_schedule_node_from_domain(domain: uintptr_t) -> uintptr_t;
100
101 fn isl_schedule_node_from_extension(extension: uintptr_t) -> uintptr_t;
102
103 fn isl_schedule_node_get_ancestor_child_position(node: uintptr_t, ancestor: uintptr_t) -> i32;
104
105 fn isl_schedule_node_get_child(node: uintptr_t, pos: i32) -> uintptr_t;
106
107 fn isl_schedule_node_get_child_position(node: uintptr_t) -> i32;
108
109 fn isl_schedule_node_get_ctx(node: uintptr_t) -> uintptr_t;
110
111 fn isl_schedule_node_get_domain(node: uintptr_t) -> uintptr_t;
112
113 fn isl_schedule_node_get_parent_type(node: uintptr_t) -> i32;
114
115 fn isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(node: uintptr_t) -> uintptr_t;
116
117 fn isl_schedule_node_get_prefix_schedule_relation(node: uintptr_t) -> uintptr_t;
118
119 fn isl_schedule_node_get_prefix_schedule_union_map(node: uintptr_t) -> uintptr_t;
120
121 fn isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(node: uintptr_t) -> uintptr_t;
122
123 fn isl_schedule_node_get_schedule(node: uintptr_t) -> uintptr_t;
124
125 fn isl_schedule_node_get_schedule_depth(node: uintptr_t) -> i32;
126
127 fn isl_schedule_node_get_shared_ancestor(node1: uintptr_t, node2: uintptr_t) -> uintptr_t;
128
129 fn isl_schedule_node_get_subtree_contraction(node: uintptr_t) -> uintptr_t;
130
131 fn isl_schedule_node_get_subtree_expansion(node: uintptr_t) -> uintptr_t;
132
133 fn isl_schedule_node_get_subtree_schedule_union_map(node: uintptr_t) -> uintptr_t;
134
135 fn isl_schedule_node_get_tree_depth(node: uintptr_t) -> i32;
136
137 fn isl_schedule_node_get_type(node: uintptr_t) -> i32;
138
139 fn isl_schedule_node_get_universe_domain(node: uintptr_t) -> uintptr_t;
140
141 fn isl_schedule_node_graft_after(node: uintptr_t, graft: uintptr_t) -> uintptr_t;
142
143 fn isl_schedule_node_graft_before(node: uintptr_t, graft: uintptr_t) -> uintptr_t;
144
145 fn isl_schedule_node_grandchild(node: uintptr_t, pos1: i32, pos2: i32) -> uintptr_t;
146
147 fn isl_schedule_node_grandparent(node: uintptr_t) -> uintptr_t;
148
149 fn isl_schedule_node_group(node: uintptr_t, group_id: uintptr_t) -> uintptr_t;
150
151 fn isl_schedule_node_guard_get_guard(node: uintptr_t) -> uintptr_t;
152
153 fn isl_schedule_node_has_children(node: uintptr_t) -> i32;
154
155 fn isl_schedule_node_has_next_sibling(node: uintptr_t) -> i32;
156
157 fn isl_schedule_node_has_parent(node: uintptr_t) -> i32;
158
159 fn isl_schedule_node_has_previous_sibling(node: uintptr_t) -> i32;
160
161 fn isl_schedule_node_insert_context(node: uintptr_t, context: uintptr_t) -> uintptr_t;
162
163 fn isl_schedule_node_insert_filter(node: uintptr_t, filter: uintptr_t) -> uintptr_t;
164
165 fn isl_schedule_node_insert_guard(node: uintptr_t, context: uintptr_t) -> uintptr_t;
166
167 fn isl_schedule_node_insert_mark(node: uintptr_t, mark: uintptr_t) -> uintptr_t;
168
169 fn isl_schedule_node_insert_partial_schedule(node: uintptr_t, schedule: uintptr_t)
170 -> uintptr_t;
171
172 fn isl_schedule_node_insert_sequence(node: uintptr_t, filters: uintptr_t) -> uintptr_t;
173
174 fn isl_schedule_node_insert_set(node: uintptr_t, filters: uintptr_t) -> uintptr_t;
175
176 fn isl_schedule_node_is_equal(node1: uintptr_t, node2: uintptr_t) -> i32;
177
178 fn isl_schedule_node_is_subtree_anchored(node: uintptr_t) -> i32;
179
180 fn isl_schedule_node_mark_get_id(node: uintptr_t) -> uintptr_t;
181
182 fn isl_schedule_node_n_children(node: uintptr_t) -> i32;
183
184 fn isl_schedule_node_next_sibling(node: uintptr_t) -> uintptr_t;
185
186 fn isl_schedule_node_order_after(node: uintptr_t, filter: uintptr_t) -> uintptr_t;
187
188 fn isl_schedule_node_order_before(node: uintptr_t, filter: uintptr_t) -> uintptr_t;
189
190 fn isl_schedule_node_parent(node: uintptr_t) -> uintptr_t;
191
192 fn isl_schedule_node_previous_sibling(node: uintptr_t) -> uintptr_t;
193
194 fn isl_schedule_node_reset_user(node: uintptr_t) -> uintptr_t;
195
196 fn isl_schedule_node_root(node: uintptr_t) -> uintptr_t;
197
198 fn isl_schedule_node_sequence_splice_child(node: uintptr_t, pos: i32) -> uintptr_t;
199
200 fn isl_schedule_node_sequence_splice_children(node: uintptr_t) -> uintptr_t;
201
202 fn isl_schedule_node_to_str(node: uintptr_t) -> *const c_char;
203
204}
205
206impl ScheduleNode {
207 pub fn align_params(self, space: Space) -> Result<ScheduleNode, LibISLError> {
209 let node = self;
210 let isl_rs_ctx = node.get_ctx();
211 let mut node = node;
212 node.do_not_free_on_drop();
213 let node = node.ptr;
214 let mut space = space;
215 space.do_not_free_on_drop();
216 let space = space.ptr;
217 let isl_rs_result = unsafe { isl_schedule_node_align_params(node, space) };
218 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
219 should_free_on_drop: true };
220 let err = isl_rs_ctx.last_error();
221 if err != Error::None_ {
222 let err_msg = isl_rs_ctx.last_error_msg();
223 isl_rs_ctx.reset_error();
224 return Err(LibISLError::new(err, err_msg));
225 }
226 Ok(isl_rs_result)
227 }
228
229 pub fn ancestor(self, generation: i32) -> Result<ScheduleNode, LibISLError> {
231 let node = self;
232 let isl_rs_ctx = node.get_ctx();
233 let mut node = node;
234 node.do_not_free_on_drop();
235 let node = node.ptr;
236 let isl_rs_result = unsafe { isl_schedule_node_ancestor(node, generation) };
237 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
238 should_free_on_drop: true };
239 let err = isl_rs_ctx.last_error();
240 if err != Error::None_ {
241 let err_msg = isl_rs_ctx.last_error_msg();
242 isl_rs_ctx.reset_error();
243 return Err(LibISLError::new(err, err_msg));
244 }
245 Ok(isl_rs_result)
246 }
247
248 pub fn band_get_ast_build_options(&self) -> Result<UnionSet, LibISLError> {
250 let node = self;
251 let isl_rs_ctx = node.get_ctx();
252 let node = node.ptr;
253 let isl_rs_result = unsafe { isl_schedule_node_band_get_ast_build_options(node) };
254 let isl_rs_result = UnionSet { ptr: isl_rs_result,
255 should_free_on_drop: true };
256 let err = isl_rs_ctx.last_error();
257 if err != Error::None_ {
258 let err_msg = isl_rs_ctx.last_error_msg();
259 isl_rs_ctx.reset_error();
260 return Err(LibISLError::new(err, err_msg));
261 }
262 Ok(isl_rs_result)
263 }
264
265 pub fn band_get_ast_isolate_option(&self) -> Result<Set, LibISLError> {
267 let node = self;
268 let isl_rs_ctx = node.get_ctx();
269 let node = node.ptr;
270 let isl_rs_result = unsafe { isl_schedule_node_band_get_ast_isolate_option(node) };
271 let isl_rs_result = Set { ptr: isl_rs_result,
272 should_free_on_drop: true };
273 let err = isl_rs_ctx.last_error();
274 if err != Error::None_ {
275 let err_msg = isl_rs_ctx.last_error_msg();
276 isl_rs_ctx.reset_error();
277 return Err(LibISLError::new(err, err_msg));
278 }
279 Ok(isl_rs_result)
280 }
281
282 pub fn band_get_partial_schedule(&self) -> Result<MultiUnionPwAff, LibISLError> {
284 let node = self;
285 let isl_rs_ctx = node.get_ctx();
286 let node = node.ptr;
287 let isl_rs_result = unsafe { isl_schedule_node_band_get_partial_schedule(node) };
288 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
289 should_free_on_drop: true };
290 let err = isl_rs_ctx.last_error();
291 if err != Error::None_ {
292 let err_msg = isl_rs_ctx.last_error_msg();
293 isl_rs_ctx.reset_error();
294 return Err(LibISLError::new(err, err_msg));
295 }
296 Ok(isl_rs_result)
297 }
298
299 pub fn band_get_partial_schedule_union_map(&self) -> Result<UnionMap, LibISLError> {
301 let node = self;
302 let isl_rs_ctx = node.get_ctx();
303 let node = node.ptr;
304 let isl_rs_result = unsafe { isl_schedule_node_band_get_partial_schedule_union_map(node) };
305 let isl_rs_result = UnionMap { ptr: isl_rs_result,
306 should_free_on_drop: true };
307 let err = isl_rs_ctx.last_error();
308 if err != Error::None_ {
309 let err_msg = isl_rs_ctx.last_error_msg();
310 isl_rs_ctx.reset_error();
311 return Err(LibISLError::new(err, err_msg));
312 }
313 Ok(isl_rs_result)
314 }
315
316 pub fn band_get_permutable(&self) -> Result<bool, LibISLError> {
318 let node = self;
319 let isl_rs_ctx = node.get_ctx();
320 let node = node.ptr;
321 let isl_rs_result = unsafe { isl_schedule_node_band_get_permutable(node) };
322 let isl_rs_result = match isl_rs_result {
323 0 => false,
324 1 => true,
325 _ => {
326 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
327 }
328 };
329 let err = isl_rs_ctx.last_error();
330 if err != Error::None_ {
331 let err_msg = isl_rs_ctx.last_error_msg();
332 isl_rs_ctx.reset_error();
333 return Err(LibISLError::new(err, err_msg));
334 }
335 Ok(isl_rs_result)
336 }
337
338 pub fn band_get_space(&self) -> Result<Space, LibISLError> {
340 let node = self;
341 let isl_rs_ctx = node.get_ctx();
342 let node = node.ptr;
343 let isl_rs_result = unsafe { isl_schedule_node_band_get_space(node) };
344 let isl_rs_result = Space { ptr: isl_rs_result,
345 should_free_on_drop: true };
346 let err = isl_rs_ctx.last_error();
347 if err != Error::None_ {
348 let err_msg = isl_rs_ctx.last_error_msg();
349 isl_rs_ctx.reset_error();
350 return Err(LibISLError::new(err, err_msg));
351 }
352 Ok(isl_rs_result)
353 }
354
355 pub fn band_member_get_ast_loop_type(&self, pos: i32) -> Result<ASTLoopType, LibISLError> {
357 let node = self;
358 let isl_rs_ctx = node.get_ctx();
359 let node = node.ptr;
360 let isl_rs_result = unsafe { isl_schedule_node_band_member_get_ast_loop_type(node, pos) };
361 let isl_rs_result = ASTLoopType::from_i32(isl_rs_result);
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 band_member_get_coincident(&self, pos: i32) -> Result<bool, LibISLError> {
373 let node = self;
374 let isl_rs_ctx = node.get_ctx();
375 let node = node.ptr;
376 let isl_rs_result = unsafe { isl_schedule_node_band_member_get_coincident(node, pos) };
377 let isl_rs_result = match isl_rs_result {
378 0 => false,
379 1 => true,
380 _ => {
381 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
382 }
383 };
384 let err = isl_rs_ctx.last_error();
385 if err != Error::None_ {
386 let err_msg = isl_rs_ctx.last_error_msg();
387 isl_rs_ctx.reset_error();
388 return Err(LibISLError::new(err, err_msg));
389 }
390 Ok(isl_rs_result)
391 }
392
393 pub fn band_member_get_isolate_ast_loop_type(&self, pos: i32)
395 -> Result<ASTLoopType, LibISLError> {
396 let node = self;
397 let isl_rs_ctx = node.get_ctx();
398 let node = node.ptr;
399 let isl_rs_result =
400 unsafe { isl_schedule_node_band_member_get_isolate_ast_loop_type(node, pos) };
401 let isl_rs_result = ASTLoopType::from_i32(isl_rs_result);
402 let err = isl_rs_ctx.last_error();
403 if err != Error::None_ {
404 let err_msg = isl_rs_ctx.last_error_msg();
405 isl_rs_ctx.reset_error();
406 return Err(LibISLError::new(err, err_msg));
407 }
408 Ok(isl_rs_result)
409 }
410
411 pub fn band_member_set_ast_loop_type(self, pos: i32, type_: ASTLoopType)
413 -> Result<ScheduleNode, LibISLError> {
414 let node = self;
415 let isl_rs_ctx = node.get_ctx();
416 let mut node = node;
417 node.do_not_free_on_drop();
418 let node = node.ptr;
419 let type_ = type_.to_i32();
420 let isl_rs_result =
421 unsafe { isl_schedule_node_band_member_set_ast_loop_type(node, pos, type_) };
422 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
423 should_free_on_drop: true };
424 let err = isl_rs_ctx.last_error();
425 if err != Error::None_ {
426 let err_msg = isl_rs_ctx.last_error_msg();
427 isl_rs_ctx.reset_error();
428 return Err(LibISLError::new(err, err_msg));
429 }
430 Ok(isl_rs_result)
431 }
432
433 pub fn band_member_set_coincident(self, pos: i32, coincident: i32)
435 -> Result<ScheduleNode, LibISLError> {
436 let node = self;
437 let isl_rs_ctx = node.get_ctx();
438 let mut node = node;
439 node.do_not_free_on_drop();
440 let node = node.ptr;
441 let isl_rs_result =
442 unsafe { isl_schedule_node_band_member_set_coincident(node, pos, coincident) };
443 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
444 should_free_on_drop: true };
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 band_member_set_isolate_ast_loop_type(self, pos: i32, type_: ASTLoopType)
456 -> Result<ScheduleNode, LibISLError> {
457 let node = self;
458 let isl_rs_ctx = node.get_ctx();
459 let mut node = node;
460 node.do_not_free_on_drop();
461 let node = node.ptr;
462 let type_ = type_.to_i32();
463 let isl_rs_result =
464 unsafe { isl_schedule_node_band_member_set_isolate_ast_loop_type(node, pos, type_) };
465 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
466 should_free_on_drop: true };
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 band_mod(self, mv: MultiVal) -> Result<ScheduleNode, LibISLError> {
478 let node = self;
479 let isl_rs_ctx = node.get_ctx();
480 let mut node = node;
481 node.do_not_free_on_drop();
482 let node = node.ptr;
483 let mut mv = mv;
484 mv.do_not_free_on_drop();
485 let mv = mv.ptr;
486 let isl_rs_result = unsafe { isl_schedule_node_band_mod(node, mv) };
487 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
488 should_free_on_drop: true };
489 let err = isl_rs_ctx.last_error();
490 if err != Error::None_ {
491 let err_msg = isl_rs_ctx.last_error_msg();
492 isl_rs_ctx.reset_error();
493 return Err(LibISLError::new(err, err_msg));
494 }
495 Ok(isl_rs_result)
496 }
497
498 pub fn band_n_member(&self) -> Result<i32, LibISLError> {
500 let node = self;
501 let isl_rs_ctx = node.get_ctx();
502 let node = node.ptr;
503 let isl_rs_result = unsafe { isl_schedule_node_band_n_member(node) };
504 let err = isl_rs_ctx.last_error();
505 if err != Error::None_ {
506 let err_msg = isl_rs_ctx.last_error_msg();
507 isl_rs_ctx.reset_error();
508 return Err(LibISLError::new(err, err_msg));
509 }
510 Ok(isl_rs_result)
511 }
512
513 pub fn band_scale(self, mv: MultiVal) -> Result<ScheduleNode, LibISLError> {
515 let node = self;
516 let isl_rs_ctx = node.get_ctx();
517 let mut node = node;
518 node.do_not_free_on_drop();
519 let node = node.ptr;
520 let mut mv = mv;
521 mv.do_not_free_on_drop();
522 let mv = mv.ptr;
523 let isl_rs_result = unsafe { isl_schedule_node_band_scale(node, mv) };
524 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
525 should_free_on_drop: true };
526 let err = isl_rs_ctx.last_error();
527 if err != Error::None_ {
528 let err_msg = isl_rs_ctx.last_error_msg();
529 isl_rs_ctx.reset_error();
530 return Err(LibISLError::new(err, err_msg));
531 }
532 Ok(isl_rs_result)
533 }
534
535 pub fn band_scale_down(self, mv: MultiVal) -> Result<ScheduleNode, LibISLError> {
537 let node = self;
538 let isl_rs_ctx = node.get_ctx();
539 let mut node = node;
540 node.do_not_free_on_drop();
541 let node = node.ptr;
542 let mut mv = mv;
543 mv.do_not_free_on_drop();
544 let mv = mv.ptr;
545 let isl_rs_result = unsafe { isl_schedule_node_band_scale_down(node, mv) };
546 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
547 should_free_on_drop: true };
548 let err = isl_rs_ctx.last_error();
549 if err != Error::None_ {
550 let err_msg = isl_rs_ctx.last_error_msg();
551 isl_rs_ctx.reset_error();
552 return Err(LibISLError::new(err, err_msg));
553 }
554 Ok(isl_rs_result)
555 }
556
557 pub fn band_set_ast_build_options(self, options: UnionSet)
559 -> Result<ScheduleNode, LibISLError> {
560 let node = self;
561 let isl_rs_ctx = node.get_ctx();
562 let mut node = node;
563 node.do_not_free_on_drop();
564 let node = node.ptr;
565 let mut options = options;
566 options.do_not_free_on_drop();
567 let options = options.ptr;
568 let isl_rs_result = unsafe { isl_schedule_node_band_set_ast_build_options(node, options) };
569 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
570 should_free_on_drop: true };
571 let err = isl_rs_ctx.last_error();
572 if err != Error::None_ {
573 let err_msg = isl_rs_ctx.last_error_msg();
574 isl_rs_ctx.reset_error();
575 return Err(LibISLError::new(err, err_msg));
576 }
577 Ok(isl_rs_result)
578 }
579
580 pub fn band_set_permutable(self, permutable: i32) -> Result<ScheduleNode, LibISLError> {
582 let node = self;
583 let isl_rs_ctx = node.get_ctx();
584 let mut node = node;
585 node.do_not_free_on_drop();
586 let node = node.ptr;
587 let isl_rs_result = unsafe { isl_schedule_node_band_set_permutable(node, permutable) };
588 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
589 should_free_on_drop: true };
590 let err = isl_rs_ctx.last_error();
591 if err != Error::None_ {
592 let err_msg = isl_rs_ctx.last_error_msg();
593 isl_rs_ctx.reset_error();
594 return Err(LibISLError::new(err, err_msg));
595 }
596 Ok(isl_rs_result)
597 }
598
599 pub fn band_shift(self, shift: MultiUnionPwAff) -> Result<ScheduleNode, LibISLError> {
601 let node = self;
602 let isl_rs_ctx = node.get_ctx();
603 let mut node = node;
604 node.do_not_free_on_drop();
605 let node = node.ptr;
606 let mut shift = shift;
607 shift.do_not_free_on_drop();
608 let shift = shift.ptr;
609 let isl_rs_result = unsafe { isl_schedule_node_band_shift(node, shift) };
610 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
611 should_free_on_drop: true };
612 let err = isl_rs_ctx.last_error();
613 if err != Error::None_ {
614 let err_msg = isl_rs_ctx.last_error_msg();
615 isl_rs_ctx.reset_error();
616 return Err(LibISLError::new(err, err_msg));
617 }
618 Ok(isl_rs_result)
619 }
620
621 pub fn band_sink(self) -> Result<ScheduleNode, LibISLError> {
623 let node = self;
624 let isl_rs_ctx = node.get_ctx();
625 let mut node = node;
626 node.do_not_free_on_drop();
627 let node = node.ptr;
628 let isl_rs_result = unsafe { isl_schedule_node_band_sink(node) };
629 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
630 should_free_on_drop: true };
631 let err = isl_rs_ctx.last_error();
632 if err != Error::None_ {
633 let err_msg = isl_rs_ctx.last_error_msg();
634 isl_rs_ctx.reset_error();
635 return Err(LibISLError::new(err, err_msg));
636 }
637 Ok(isl_rs_result)
638 }
639
640 pub fn band_split(self, pos: i32) -> Result<ScheduleNode, LibISLError> {
642 let node = self;
643 let isl_rs_ctx = node.get_ctx();
644 let mut node = node;
645 node.do_not_free_on_drop();
646 let node = node.ptr;
647 let isl_rs_result = unsafe { isl_schedule_node_band_split(node, pos) };
648 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
649 should_free_on_drop: true };
650 let err = isl_rs_ctx.last_error();
651 if err != Error::None_ {
652 let err_msg = isl_rs_ctx.last_error_msg();
653 isl_rs_ctx.reset_error();
654 return Err(LibISLError::new(err, err_msg));
655 }
656 Ok(isl_rs_result)
657 }
658
659 pub fn band_tile(self, sizes: MultiVal) -> Result<ScheduleNode, LibISLError> {
661 let node = self;
662 let isl_rs_ctx = node.get_ctx();
663 let mut node = node;
664 node.do_not_free_on_drop();
665 let node = node.ptr;
666 let mut sizes = sizes;
667 sizes.do_not_free_on_drop();
668 let sizes = sizes.ptr;
669 let isl_rs_result = unsafe { isl_schedule_node_band_tile(node, sizes) };
670 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
671 should_free_on_drop: true };
672 let err = isl_rs_ctx.last_error();
673 if err != Error::None_ {
674 let err_msg = isl_rs_ctx.last_error_msg();
675 isl_rs_ctx.reset_error();
676 return Err(LibISLError::new(err, err_msg));
677 }
678 Ok(isl_rs_result)
679 }
680
681 pub fn child(self, pos: i32) -> Result<ScheduleNode, LibISLError> {
683 let node = self;
684 let isl_rs_ctx = node.get_ctx();
685 let mut node = node;
686 node.do_not_free_on_drop();
687 let node = node.ptr;
688 let isl_rs_result = unsafe { isl_schedule_node_child(node, pos) };
689 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
690 should_free_on_drop: true };
691 let err = isl_rs_ctx.last_error();
692 if err != Error::None_ {
693 let err_msg = isl_rs_ctx.last_error_msg();
694 isl_rs_ctx.reset_error();
695 return Err(LibISLError::new(err, err_msg));
696 }
697 Ok(isl_rs_result)
698 }
699
700 pub fn context_get_context(&self) -> Result<Set, LibISLError> {
702 let node = self;
703 let isl_rs_ctx = node.get_ctx();
704 let node = node.ptr;
705 let isl_rs_result = unsafe { isl_schedule_node_context_get_context(node) };
706 let isl_rs_result = Set { ptr: isl_rs_result,
707 should_free_on_drop: true };
708 let err = isl_rs_ctx.last_error();
709 if err != Error::None_ {
710 let err_msg = isl_rs_ctx.last_error_msg();
711 isl_rs_ctx.reset_error();
712 return Err(LibISLError::new(err, err_msg));
713 }
714 Ok(isl_rs_result)
715 }
716
717 pub fn copy(&self) -> Result<ScheduleNode, LibISLError> {
719 let node = self;
720 let isl_rs_ctx = node.get_ctx();
721 let node = node.ptr;
722 let isl_rs_result = unsafe { isl_schedule_node_copy(node) };
723 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
724 should_free_on_drop: true };
725 let err = isl_rs_ctx.last_error();
726 if err != Error::None_ {
727 let err_msg = isl_rs_ctx.last_error_msg();
728 isl_rs_ctx.reset_error();
729 return Err(LibISLError::new(err, err_msg));
730 }
731 Ok(isl_rs_result)
732 }
733
734 pub fn cut(self) -> Result<ScheduleNode, LibISLError> {
736 let node = self;
737 let isl_rs_ctx = node.get_ctx();
738 let mut node = node;
739 node.do_not_free_on_drop();
740 let node = node.ptr;
741 let isl_rs_result = unsafe { isl_schedule_node_cut(node) };
742 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
743 should_free_on_drop: true };
744 let err = isl_rs_ctx.last_error();
745 if err != Error::None_ {
746 let err_msg = isl_rs_ctx.last_error_msg();
747 isl_rs_ctx.reset_error();
748 return Err(LibISLError::new(err, err_msg));
749 }
750 Ok(isl_rs_result)
751 }
752
753 pub fn delete(self) -> Result<ScheduleNode, LibISLError> {
755 let node = self;
756 let isl_rs_ctx = node.get_ctx();
757 let mut node = node;
758 node.do_not_free_on_drop();
759 let node = node.ptr;
760 let isl_rs_result = unsafe { isl_schedule_node_delete(node) };
761 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
762 should_free_on_drop: true };
763 let err = isl_rs_ctx.last_error();
764 if err != Error::None_ {
765 let err_msg = isl_rs_ctx.last_error_msg();
766 isl_rs_ctx.reset_error();
767 return Err(LibISLError::new(err, err_msg));
768 }
769 Ok(isl_rs_result)
770 }
771
772 pub fn domain_get_domain(&self) -> Result<UnionSet, LibISLError> {
774 let node = self;
775 let isl_rs_ctx = node.get_ctx();
776 let node = node.ptr;
777 let isl_rs_result = unsafe { isl_schedule_node_domain_get_domain(node) };
778 let isl_rs_result = UnionSet { ptr: isl_rs_result,
779 should_free_on_drop: true };
780 let err = isl_rs_ctx.last_error();
781 if err != Error::None_ {
782 let err_msg = isl_rs_ctx.last_error_msg();
783 isl_rs_ctx.reset_error();
784 return Err(LibISLError::new(err, err_msg));
785 }
786 Ok(isl_rs_result)
787 }
788
789 pub fn dump(&self) -> Result<(), LibISLError> {
791 let node = self;
792 let isl_rs_ctx = node.get_ctx();
793 let node = node.ptr;
794 let isl_rs_result = unsafe { isl_schedule_node_dump(node) };
795 let err = isl_rs_ctx.last_error();
796 if err != Error::None_ {
797 let err_msg = isl_rs_ctx.last_error_msg();
798 isl_rs_ctx.reset_error();
799 return Err(LibISLError::new(err, err_msg));
800 }
801 Ok(isl_rs_result)
802 }
803
804 pub fn expansion_get_contraction(&self) -> Result<UnionPwMultiAff, LibISLError> {
806 let node = self;
807 let isl_rs_ctx = node.get_ctx();
808 let node = node.ptr;
809 let isl_rs_result = unsafe { isl_schedule_node_expansion_get_contraction(node) };
810 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
811 should_free_on_drop: true };
812 let err = isl_rs_ctx.last_error();
813 if err != Error::None_ {
814 let err_msg = isl_rs_ctx.last_error_msg();
815 isl_rs_ctx.reset_error();
816 return Err(LibISLError::new(err, err_msg));
817 }
818 Ok(isl_rs_result)
819 }
820
821 pub fn expansion_get_expansion(&self) -> Result<UnionMap, LibISLError> {
823 let node = self;
824 let isl_rs_ctx = node.get_ctx();
825 let node = node.ptr;
826 let isl_rs_result = unsafe { isl_schedule_node_expansion_get_expansion(node) };
827 let isl_rs_result = UnionMap { ptr: isl_rs_result,
828 should_free_on_drop: true };
829 let err = isl_rs_ctx.last_error();
830 if err != Error::None_ {
831 let err_msg = isl_rs_ctx.last_error_msg();
832 isl_rs_ctx.reset_error();
833 return Err(LibISLError::new(err, err_msg));
834 }
835 Ok(isl_rs_result)
836 }
837
838 pub fn extension_get_extension(&self) -> Result<UnionMap, LibISLError> {
840 let node = self;
841 let isl_rs_ctx = node.get_ctx();
842 let node = node.ptr;
843 let isl_rs_result = unsafe { isl_schedule_node_extension_get_extension(node) };
844 let isl_rs_result = UnionMap { ptr: isl_rs_result,
845 should_free_on_drop: true };
846 let err = isl_rs_ctx.last_error();
847 if err != Error::None_ {
848 let err_msg = isl_rs_ctx.last_error_msg();
849 isl_rs_ctx.reset_error();
850 return Err(LibISLError::new(err, err_msg));
851 }
852 Ok(isl_rs_result)
853 }
854
855 pub fn filter_get_filter(&self) -> Result<UnionSet, LibISLError> {
857 let node = self;
858 let isl_rs_ctx = node.get_ctx();
859 let node = node.ptr;
860 let isl_rs_result = unsafe { isl_schedule_node_filter_get_filter(node) };
861 let isl_rs_result = UnionSet { ptr: isl_rs_result,
862 should_free_on_drop: true };
863 let err = isl_rs_ctx.last_error();
864 if err != Error::None_ {
865 let err_msg = isl_rs_ctx.last_error_msg();
866 isl_rs_ctx.reset_error();
867 return Err(LibISLError::new(err, err_msg));
868 }
869 Ok(isl_rs_result)
870 }
871
872 pub fn first_child(self) -> Result<ScheduleNode, LibISLError> {
874 let node = self;
875 let isl_rs_ctx = node.get_ctx();
876 let mut node = node;
877 node.do_not_free_on_drop();
878 let node = node.ptr;
879 let isl_rs_result = unsafe { isl_schedule_node_first_child(node) };
880 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
881 should_free_on_drop: true };
882 let err = isl_rs_ctx.last_error();
883 if err != Error::None_ {
884 let err_msg = isl_rs_ctx.last_error_msg();
885 isl_rs_ctx.reset_error();
886 return Err(LibISLError::new(err, err_msg));
887 }
888 Ok(isl_rs_result)
889 }
890
891 pub fn free(self) -> Result<ScheduleNode, LibISLError> {
893 let node = self;
894 let isl_rs_ctx = node.get_ctx();
895 let mut node = node;
896 node.do_not_free_on_drop();
897 let node = node.ptr;
898 let isl_rs_result = unsafe { isl_schedule_node_free(node) };
899 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
900 should_free_on_drop: true };
901 let err = isl_rs_ctx.last_error();
902 if err != Error::None_ {
903 let err_msg = isl_rs_ctx.last_error_msg();
904 isl_rs_ctx.reset_error();
905 return Err(LibISLError::new(err, err_msg));
906 }
907 Ok(isl_rs_result)
908 }
909
910 pub fn from_domain(domain: UnionSet) -> Result<ScheduleNode, LibISLError> {
912 let isl_rs_ctx = domain.get_ctx();
913 let mut domain = domain;
914 domain.do_not_free_on_drop();
915 let domain = domain.ptr;
916 let isl_rs_result = unsafe { isl_schedule_node_from_domain(domain) };
917 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
918 should_free_on_drop: true };
919 let err = isl_rs_ctx.last_error();
920 if err != Error::None_ {
921 let err_msg = isl_rs_ctx.last_error_msg();
922 isl_rs_ctx.reset_error();
923 return Err(LibISLError::new(err, err_msg));
924 }
925 Ok(isl_rs_result)
926 }
927
928 pub fn from_extension(extension: UnionMap) -> Result<ScheduleNode, LibISLError> {
930 let isl_rs_ctx = extension.get_ctx();
931 let mut extension = extension;
932 extension.do_not_free_on_drop();
933 let extension = extension.ptr;
934 let isl_rs_result = unsafe { isl_schedule_node_from_extension(extension) };
935 let isl_rs_result = ScheduleNode { 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 get_ancestor_child_position(&self, ancestor: &ScheduleNode) -> Result<i32, LibISLError> {
948 let node = self;
949 let isl_rs_ctx = node.get_ctx();
950 let node = node.ptr;
951 let ancestor = ancestor.ptr;
952 let isl_rs_result =
953 unsafe { isl_schedule_node_get_ancestor_child_position(node, ancestor) };
954 let err = isl_rs_ctx.last_error();
955 if err != Error::None_ {
956 let err_msg = isl_rs_ctx.last_error_msg();
957 isl_rs_ctx.reset_error();
958 return Err(LibISLError::new(err, err_msg));
959 }
960 Ok(isl_rs_result)
961 }
962
963 pub fn get_child(&self, pos: i32) -> Result<ScheduleNode, LibISLError> {
965 let node = self;
966 let isl_rs_ctx = node.get_ctx();
967 let node = node.ptr;
968 let isl_rs_result = unsafe { isl_schedule_node_get_child(node, pos) };
969 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
970 should_free_on_drop: true };
971 let err = isl_rs_ctx.last_error();
972 if err != Error::None_ {
973 let err_msg = isl_rs_ctx.last_error_msg();
974 isl_rs_ctx.reset_error();
975 return Err(LibISLError::new(err, err_msg));
976 }
977 Ok(isl_rs_result)
978 }
979
980 pub fn get_child_position(&self) -> Result<i32, LibISLError> {
982 let node = self;
983 let isl_rs_ctx = node.get_ctx();
984 let node = node.ptr;
985 let isl_rs_result = unsafe { isl_schedule_node_get_child_position(node) };
986 let err = isl_rs_ctx.last_error();
987 if err != Error::None_ {
988 let err_msg = isl_rs_ctx.last_error_msg();
989 isl_rs_ctx.reset_error();
990 return Err(LibISLError::new(err, err_msg));
991 }
992 Ok(isl_rs_result)
993 }
994
995 pub fn get_ctx(&self) -> Context {
997 let node = self;
998 let node = node.ptr;
999 let isl_rs_result = unsafe { isl_schedule_node_get_ctx(node) };
1000 let isl_rs_result = Context { ptr: isl_rs_result,
1001 should_free_on_drop: false };
1002 isl_rs_result
1003 }
1004
1005 pub fn get_domain(&self) -> Result<UnionSet, LibISLError> {
1007 let node = self;
1008 let isl_rs_ctx = node.get_ctx();
1009 let node = node.ptr;
1010 let isl_rs_result = unsafe { isl_schedule_node_get_domain(node) };
1011 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1012 should_free_on_drop: true };
1013 let err = isl_rs_ctx.last_error();
1014 if err != Error::None_ {
1015 let err_msg = isl_rs_ctx.last_error_msg();
1016 isl_rs_ctx.reset_error();
1017 return Err(LibISLError::new(err, err_msg));
1018 }
1019 Ok(isl_rs_result)
1020 }
1021
1022 pub fn get_parent_type(&self) -> Result<ScheduleNodeType, LibISLError> {
1024 let node = self;
1025 let isl_rs_ctx = node.get_ctx();
1026 let node = node.ptr;
1027 let isl_rs_result = unsafe { isl_schedule_node_get_parent_type(node) };
1028 let isl_rs_result = ScheduleNodeType::from_i32(isl_rs_result);
1029 let err = isl_rs_ctx.last_error();
1030 if err != Error::None_ {
1031 let err_msg = isl_rs_ctx.last_error_msg();
1032 isl_rs_ctx.reset_error();
1033 return Err(LibISLError::new(err, err_msg));
1034 }
1035 Ok(isl_rs_result)
1036 }
1037
1038 pub fn get_prefix_schedule_multi_union_pw_aff(&self) -> Result<MultiUnionPwAff, LibISLError> {
1040 let node = self;
1041 let isl_rs_ctx = node.get_ctx();
1042 let node = node.ptr;
1043 let isl_rs_result =
1044 unsafe { isl_schedule_node_get_prefix_schedule_multi_union_pw_aff(node) };
1045 let isl_rs_result = MultiUnionPwAff { ptr: isl_rs_result,
1046 should_free_on_drop: true };
1047 let err = isl_rs_ctx.last_error();
1048 if err != Error::None_ {
1049 let err_msg = isl_rs_ctx.last_error_msg();
1050 isl_rs_ctx.reset_error();
1051 return Err(LibISLError::new(err, err_msg));
1052 }
1053 Ok(isl_rs_result)
1054 }
1055
1056 pub fn get_prefix_schedule_relation(&self) -> Result<UnionMap, LibISLError> {
1058 let node = self;
1059 let isl_rs_ctx = node.get_ctx();
1060 let node = node.ptr;
1061 let isl_rs_result = unsafe { isl_schedule_node_get_prefix_schedule_relation(node) };
1062 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1063 should_free_on_drop: true };
1064 let err = isl_rs_ctx.last_error();
1065 if err != Error::None_ {
1066 let err_msg = isl_rs_ctx.last_error_msg();
1067 isl_rs_ctx.reset_error();
1068 return Err(LibISLError::new(err, err_msg));
1069 }
1070 Ok(isl_rs_result)
1071 }
1072
1073 pub fn get_prefix_schedule_union_map(&self) -> Result<UnionMap, LibISLError> {
1075 let node = self;
1076 let isl_rs_ctx = node.get_ctx();
1077 let node = node.ptr;
1078 let isl_rs_result = unsafe { isl_schedule_node_get_prefix_schedule_union_map(node) };
1079 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1080 should_free_on_drop: true };
1081 let err = isl_rs_ctx.last_error();
1082 if err != Error::None_ {
1083 let err_msg = isl_rs_ctx.last_error_msg();
1084 isl_rs_ctx.reset_error();
1085 return Err(LibISLError::new(err, err_msg));
1086 }
1087 Ok(isl_rs_result)
1088 }
1089
1090 pub fn get_prefix_schedule_union_pw_multi_aff(&self) -> Result<UnionPwMultiAff, LibISLError> {
1092 let node = self;
1093 let isl_rs_ctx = node.get_ctx();
1094 let node = node.ptr;
1095 let isl_rs_result =
1096 unsafe { isl_schedule_node_get_prefix_schedule_union_pw_multi_aff(node) };
1097 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1098 should_free_on_drop: true };
1099 let err = isl_rs_ctx.last_error();
1100 if err != Error::None_ {
1101 let err_msg = isl_rs_ctx.last_error_msg();
1102 isl_rs_ctx.reset_error();
1103 return Err(LibISLError::new(err, err_msg));
1104 }
1105 Ok(isl_rs_result)
1106 }
1107
1108 pub fn get_schedule(&self) -> Result<Schedule, LibISLError> {
1110 let node = self;
1111 let isl_rs_ctx = node.get_ctx();
1112 let node = node.ptr;
1113 let isl_rs_result = unsafe { isl_schedule_node_get_schedule(node) };
1114 let isl_rs_result = Schedule { ptr: isl_rs_result,
1115 should_free_on_drop: true };
1116 let err = isl_rs_ctx.last_error();
1117 if err != Error::None_ {
1118 let err_msg = isl_rs_ctx.last_error_msg();
1119 isl_rs_ctx.reset_error();
1120 return Err(LibISLError::new(err, err_msg));
1121 }
1122 Ok(isl_rs_result)
1123 }
1124
1125 pub fn get_schedule_depth(&self) -> Result<i32, LibISLError> {
1127 let node = self;
1128 let isl_rs_ctx = node.get_ctx();
1129 let node = node.ptr;
1130 let isl_rs_result = unsafe { isl_schedule_node_get_schedule_depth(node) };
1131 let err = isl_rs_ctx.last_error();
1132 if err != Error::None_ {
1133 let err_msg = isl_rs_ctx.last_error_msg();
1134 isl_rs_ctx.reset_error();
1135 return Err(LibISLError::new(err, err_msg));
1136 }
1137 Ok(isl_rs_result)
1138 }
1139
1140 pub fn get_shared_ancestor(&self, node2: &ScheduleNode) -> Result<ScheduleNode, LibISLError> {
1142 let node1 = self;
1143 let isl_rs_ctx = node1.get_ctx();
1144 let node1 = node1.ptr;
1145 let node2 = node2.ptr;
1146 let isl_rs_result = unsafe { isl_schedule_node_get_shared_ancestor(node1, node2) };
1147 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1148 should_free_on_drop: true };
1149 let err = isl_rs_ctx.last_error();
1150 if err != Error::None_ {
1151 let err_msg = isl_rs_ctx.last_error_msg();
1152 isl_rs_ctx.reset_error();
1153 return Err(LibISLError::new(err, err_msg));
1154 }
1155 Ok(isl_rs_result)
1156 }
1157
1158 pub fn get_subtree_contraction(&self) -> Result<UnionPwMultiAff, LibISLError> {
1160 let node = self;
1161 let isl_rs_ctx = node.get_ctx();
1162 let node = node.ptr;
1163 let isl_rs_result = unsafe { isl_schedule_node_get_subtree_contraction(node) };
1164 let isl_rs_result = UnionPwMultiAff { ptr: isl_rs_result,
1165 should_free_on_drop: true };
1166 let err = isl_rs_ctx.last_error();
1167 if err != Error::None_ {
1168 let err_msg = isl_rs_ctx.last_error_msg();
1169 isl_rs_ctx.reset_error();
1170 return Err(LibISLError::new(err, err_msg));
1171 }
1172 Ok(isl_rs_result)
1173 }
1174
1175 pub fn get_subtree_expansion(&self) -> Result<UnionMap, LibISLError> {
1177 let node = self;
1178 let isl_rs_ctx = node.get_ctx();
1179 let node = node.ptr;
1180 let isl_rs_result = unsafe { isl_schedule_node_get_subtree_expansion(node) };
1181 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1182 should_free_on_drop: true };
1183 let err = isl_rs_ctx.last_error();
1184 if err != Error::None_ {
1185 let err_msg = isl_rs_ctx.last_error_msg();
1186 isl_rs_ctx.reset_error();
1187 return Err(LibISLError::new(err, err_msg));
1188 }
1189 Ok(isl_rs_result)
1190 }
1191
1192 pub fn get_subtree_schedule_union_map(&self) -> Result<UnionMap, LibISLError> {
1194 let node = self;
1195 let isl_rs_ctx = node.get_ctx();
1196 let node = node.ptr;
1197 let isl_rs_result = unsafe { isl_schedule_node_get_subtree_schedule_union_map(node) };
1198 let isl_rs_result = UnionMap { ptr: isl_rs_result,
1199 should_free_on_drop: true };
1200 let err = isl_rs_ctx.last_error();
1201 if err != Error::None_ {
1202 let err_msg = isl_rs_ctx.last_error_msg();
1203 isl_rs_ctx.reset_error();
1204 return Err(LibISLError::new(err, err_msg));
1205 }
1206 Ok(isl_rs_result)
1207 }
1208
1209 pub fn get_tree_depth(&self) -> Result<i32, LibISLError> {
1211 let node = self;
1212 let isl_rs_ctx = node.get_ctx();
1213 let node = node.ptr;
1214 let isl_rs_result = unsafe { isl_schedule_node_get_tree_depth(node) };
1215 let err = isl_rs_ctx.last_error();
1216 if err != Error::None_ {
1217 let err_msg = isl_rs_ctx.last_error_msg();
1218 isl_rs_ctx.reset_error();
1219 return Err(LibISLError::new(err, err_msg));
1220 }
1221 Ok(isl_rs_result)
1222 }
1223
1224 pub fn get_type(&self) -> Result<ScheduleNodeType, LibISLError> {
1226 let node = self;
1227 let isl_rs_ctx = node.get_ctx();
1228 let node = node.ptr;
1229 let isl_rs_result = unsafe { isl_schedule_node_get_type(node) };
1230 let isl_rs_result = ScheduleNodeType::from_i32(isl_rs_result);
1231 let err = isl_rs_ctx.last_error();
1232 if err != Error::None_ {
1233 let err_msg = isl_rs_ctx.last_error_msg();
1234 isl_rs_ctx.reset_error();
1235 return Err(LibISLError::new(err, err_msg));
1236 }
1237 Ok(isl_rs_result)
1238 }
1239
1240 pub fn get_universe_domain(&self) -> Result<UnionSet, LibISLError> {
1242 let node = self;
1243 let isl_rs_ctx = node.get_ctx();
1244 let node = node.ptr;
1245 let isl_rs_result = unsafe { isl_schedule_node_get_universe_domain(node) };
1246 let isl_rs_result = UnionSet { ptr: isl_rs_result,
1247 should_free_on_drop: true };
1248 let err = isl_rs_ctx.last_error();
1249 if err != Error::None_ {
1250 let err_msg = isl_rs_ctx.last_error_msg();
1251 isl_rs_ctx.reset_error();
1252 return Err(LibISLError::new(err, err_msg));
1253 }
1254 Ok(isl_rs_result)
1255 }
1256
1257 pub fn graft_after(self, graft: ScheduleNode) -> Result<ScheduleNode, LibISLError> {
1259 let node = self;
1260 let isl_rs_ctx = node.get_ctx();
1261 let mut node = node;
1262 node.do_not_free_on_drop();
1263 let node = node.ptr;
1264 let mut graft = graft;
1265 graft.do_not_free_on_drop();
1266 let graft = graft.ptr;
1267 let isl_rs_result = unsafe { isl_schedule_node_graft_after(node, graft) };
1268 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1269 should_free_on_drop: true };
1270 let err = isl_rs_ctx.last_error();
1271 if err != Error::None_ {
1272 let err_msg = isl_rs_ctx.last_error_msg();
1273 isl_rs_ctx.reset_error();
1274 return Err(LibISLError::new(err, err_msg));
1275 }
1276 Ok(isl_rs_result)
1277 }
1278
1279 pub fn graft_before(self, graft: ScheduleNode) -> Result<ScheduleNode, LibISLError> {
1281 let node = self;
1282 let isl_rs_ctx = node.get_ctx();
1283 let mut node = node;
1284 node.do_not_free_on_drop();
1285 let node = node.ptr;
1286 let mut graft = graft;
1287 graft.do_not_free_on_drop();
1288 let graft = graft.ptr;
1289 let isl_rs_result = unsafe { isl_schedule_node_graft_before(node, graft) };
1290 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1291 should_free_on_drop: true };
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 grandchild(self, pos1: i32, pos2: i32) -> Result<ScheduleNode, LibISLError> {
1303 let node = self;
1304 let isl_rs_ctx = node.get_ctx();
1305 let mut node = node;
1306 node.do_not_free_on_drop();
1307 let node = node.ptr;
1308 let isl_rs_result = unsafe { isl_schedule_node_grandchild(node, pos1, pos2) };
1309 let isl_rs_result = ScheduleNode { 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 grandparent(self) -> Result<ScheduleNode, LibISLError> {
1322 let node = self;
1323 let isl_rs_ctx = node.get_ctx();
1324 let mut node = node;
1325 node.do_not_free_on_drop();
1326 let node = node.ptr;
1327 let isl_rs_result = unsafe { isl_schedule_node_grandparent(node) };
1328 let isl_rs_result = ScheduleNode { 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 group(self, group_id: Id) -> Result<ScheduleNode, LibISLError> {
1341 let node = self;
1342 let isl_rs_ctx = node.get_ctx();
1343 let mut node = node;
1344 node.do_not_free_on_drop();
1345 let node = node.ptr;
1346 let mut group_id = group_id;
1347 group_id.do_not_free_on_drop();
1348 let group_id = group_id.ptr;
1349 let isl_rs_result = unsafe { isl_schedule_node_group(node, group_id) };
1350 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1351 should_free_on_drop: true };
1352 let err = isl_rs_ctx.last_error();
1353 if err != Error::None_ {
1354 let err_msg = isl_rs_ctx.last_error_msg();
1355 isl_rs_ctx.reset_error();
1356 return Err(LibISLError::new(err, err_msg));
1357 }
1358 Ok(isl_rs_result)
1359 }
1360
1361 pub fn guard_get_guard(&self) -> Result<Set, LibISLError> {
1363 let node = self;
1364 let isl_rs_ctx = node.get_ctx();
1365 let node = node.ptr;
1366 let isl_rs_result = unsafe { isl_schedule_node_guard_get_guard(node) };
1367 let isl_rs_result = Set { 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 has_children(&self) -> Result<bool, LibISLError> {
1380 let node = self;
1381 let isl_rs_ctx = node.get_ctx();
1382 let node = node.ptr;
1383 let isl_rs_result = unsafe { isl_schedule_node_has_children(node) };
1384 let isl_rs_result = match isl_rs_result {
1385 0 => false,
1386 1 => true,
1387 _ => {
1388 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1389 }
1390 };
1391 let err = isl_rs_ctx.last_error();
1392 if err != Error::None_ {
1393 let err_msg = isl_rs_ctx.last_error_msg();
1394 isl_rs_ctx.reset_error();
1395 return Err(LibISLError::new(err, err_msg));
1396 }
1397 Ok(isl_rs_result)
1398 }
1399
1400 pub fn has_next_sibling(&self) -> Result<bool, LibISLError> {
1402 let node = self;
1403 let isl_rs_ctx = node.get_ctx();
1404 let node = node.ptr;
1405 let isl_rs_result = unsafe { isl_schedule_node_has_next_sibling(node) };
1406 let isl_rs_result = match isl_rs_result {
1407 0 => false,
1408 1 => true,
1409 _ => {
1410 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1411 }
1412 };
1413 let err = isl_rs_ctx.last_error();
1414 if err != Error::None_ {
1415 let err_msg = isl_rs_ctx.last_error_msg();
1416 isl_rs_ctx.reset_error();
1417 return Err(LibISLError::new(err, err_msg));
1418 }
1419 Ok(isl_rs_result)
1420 }
1421
1422 pub fn has_parent(&self) -> Result<bool, LibISLError> {
1424 let node = self;
1425 let isl_rs_ctx = node.get_ctx();
1426 let node = node.ptr;
1427 let isl_rs_result = unsafe { isl_schedule_node_has_parent(node) };
1428 let isl_rs_result = match isl_rs_result {
1429 0 => false,
1430 1 => true,
1431 _ => {
1432 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1433 }
1434 };
1435 let err = isl_rs_ctx.last_error();
1436 if err != Error::None_ {
1437 let err_msg = isl_rs_ctx.last_error_msg();
1438 isl_rs_ctx.reset_error();
1439 return Err(LibISLError::new(err, err_msg));
1440 }
1441 Ok(isl_rs_result)
1442 }
1443
1444 pub fn has_previous_sibling(&self) -> Result<bool, LibISLError> {
1446 let node = self;
1447 let isl_rs_ctx = node.get_ctx();
1448 let node = node.ptr;
1449 let isl_rs_result = unsafe { isl_schedule_node_has_previous_sibling(node) };
1450 let isl_rs_result = match isl_rs_result {
1451 0 => false,
1452 1 => true,
1453 _ => {
1454 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1455 }
1456 };
1457 let err = isl_rs_ctx.last_error();
1458 if err != Error::None_ {
1459 let err_msg = isl_rs_ctx.last_error_msg();
1460 isl_rs_ctx.reset_error();
1461 return Err(LibISLError::new(err, err_msg));
1462 }
1463 Ok(isl_rs_result)
1464 }
1465
1466 pub fn insert_context(self, context: Set) -> Result<ScheduleNode, LibISLError> {
1468 let node = self;
1469 let isl_rs_ctx = node.get_ctx();
1470 let mut node = node;
1471 node.do_not_free_on_drop();
1472 let node = node.ptr;
1473 let mut context = context;
1474 context.do_not_free_on_drop();
1475 let context = context.ptr;
1476 let isl_rs_result = unsafe { isl_schedule_node_insert_context(node, context) };
1477 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1478 should_free_on_drop: true };
1479 let err = isl_rs_ctx.last_error();
1480 if err != Error::None_ {
1481 let err_msg = isl_rs_ctx.last_error_msg();
1482 isl_rs_ctx.reset_error();
1483 return Err(LibISLError::new(err, err_msg));
1484 }
1485 Ok(isl_rs_result)
1486 }
1487
1488 pub fn insert_filter(self, filter: UnionSet) -> Result<ScheduleNode, LibISLError> {
1490 let node = self;
1491 let isl_rs_ctx = node.get_ctx();
1492 let mut node = node;
1493 node.do_not_free_on_drop();
1494 let node = node.ptr;
1495 let mut filter = filter;
1496 filter.do_not_free_on_drop();
1497 let filter = filter.ptr;
1498 let isl_rs_result = unsafe { isl_schedule_node_insert_filter(node, filter) };
1499 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1500 should_free_on_drop: true };
1501 let err = isl_rs_ctx.last_error();
1502 if err != Error::None_ {
1503 let err_msg = isl_rs_ctx.last_error_msg();
1504 isl_rs_ctx.reset_error();
1505 return Err(LibISLError::new(err, err_msg));
1506 }
1507 Ok(isl_rs_result)
1508 }
1509
1510 pub fn insert_guard(self, context: Set) -> Result<ScheduleNode, LibISLError> {
1512 let node = self;
1513 let isl_rs_ctx = node.get_ctx();
1514 let mut node = node;
1515 node.do_not_free_on_drop();
1516 let node = node.ptr;
1517 let mut context = context;
1518 context.do_not_free_on_drop();
1519 let context = context.ptr;
1520 let isl_rs_result = unsafe { isl_schedule_node_insert_guard(node, context) };
1521 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1522 should_free_on_drop: true };
1523 let err = isl_rs_ctx.last_error();
1524 if err != Error::None_ {
1525 let err_msg = isl_rs_ctx.last_error_msg();
1526 isl_rs_ctx.reset_error();
1527 return Err(LibISLError::new(err, err_msg));
1528 }
1529 Ok(isl_rs_result)
1530 }
1531
1532 pub fn insert_mark(self, mark: Id) -> Result<ScheduleNode, LibISLError> {
1534 let node = self;
1535 let isl_rs_ctx = node.get_ctx();
1536 let mut node = node;
1537 node.do_not_free_on_drop();
1538 let node = node.ptr;
1539 let mut mark = mark;
1540 mark.do_not_free_on_drop();
1541 let mark = mark.ptr;
1542 let isl_rs_result = unsafe { isl_schedule_node_insert_mark(node, mark) };
1543 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1544 should_free_on_drop: true };
1545 let err = isl_rs_ctx.last_error();
1546 if err != Error::None_ {
1547 let err_msg = isl_rs_ctx.last_error_msg();
1548 isl_rs_ctx.reset_error();
1549 return Err(LibISLError::new(err, err_msg));
1550 }
1551 Ok(isl_rs_result)
1552 }
1553
1554 pub fn insert_partial_schedule(self, schedule: MultiUnionPwAff)
1556 -> Result<ScheduleNode, LibISLError> {
1557 let node = self;
1558 let isl_rs_ctx = node.get_ctx();
1559 let mut node = node;
1560 node.do_not_free_on_drop();
1561 let node = node.ptr;
1562 let mut schedule = schedule;
1563 schedule.do_not_free_on_drop();
1564 let schedule = schedule.ptr;
1565 let isl_rs_result = unsafe { isl_schedule_node_insert_partial_schedule(node, schedule) };
1566 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1567 should_free_on_drop: true };
1568 let err = isl_rs_ctx.last_error();
1569 if err != Error::None_ {
1570 let err_msg = isl_rs_ctx.last_error_msg();
1571 isl_rs_ctx.reset_error();
1572 return Err(LibISLError::new(err, err_msg));
1573 }
1574 Ok(isl_rs_result)
1575 }
1576
1577 pub fn insert_sequence(self, filters: UnionSetList) -> Result<ScheduleNode, LibISLError> {
1579 let node = self;
1580 let isl_rs_ctx = node.get_ctx();
1581 let mut node = node;
1582 node.do_not_free_on_drop();
1583 let node = node.ptr;
1584 let mut filters = filters;
1585 filters.do_not_free_on_drop();
1586 let filters = filters.ptr;
1587 let isl_rs_result = unsafe { isl_schedule_node_insert_sequence(node, filters) };
1588 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1589 should_free_on_drop: true };
1590 let err = isl_rs_ctx.last_error();
1591 if err != Error::None_ {
1592 let err_msg = isl_rs_ctx.last_error_msg();
1593 isl_rs_ctx.reset_error();
1594 return Err(LibISLError::new(err, err_msg));
1595 }
1596 Ok(isl_rs_result)
1597 }
1598
1599 pub fn insert_set(self, filters: UnionSetList) -> Result<ScheduleNode, LibISLError> {
1601 let node = self;
1602 let isl_rs_ctx = node.get_ctx();
1603 let mut node = node;
1604 node.do_not_free_on_drop();
1605 let node = node.ptr;
1606 let mut filters = filters;
1607 filters.do_not_free_on_drop();
1608 let filters = filters.ptr;
1609 let isl_rs_result = unsafe { isl_schedule_node_insert_set(node, filters) };
1610 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1611 should_free_on_drop: true };
1612 let err = isl_rs_ctx.last_error();
1613 if err != Error::None_ {
1614 let err_msg = isl_rs_ctx.last_error_msg();
1615 isl_rs_ctx.reset_error();
1616 return Err(LibISLError::new(err, err_msg));
1617 }
1618 Ok(isl_rs_result)
1619 }
1620
1621 pub fn is_equal(&self, node2: &ScheduleNode) -> Result<bool, LibISLError> {
1623 let node1 = self;
1624 let isl_rs_ctx = node1.get_ctx();
1625 let node1 = node1.ptr;
1626 let node2 = node2.ptr;
1627 let isl_rs_result = unsafe { isl_schedule_node_is_equal(node1, node2) };
1628 let isl_rs_result = match isl_rs_result {
1629 0 => false,
1630 1 => true,
1631 _ => {
1632 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1633 }
1634 };
1635 let err = isl_rs_ctx.last_error();
1636 if err != Error::None_ {
1637 let err_msg = isl_rs_ctx.last_error_msg();
1638 isl_rs_ctx.reset_error();
1639 return Err(LibISLError::new(err, err_msg));
1640 }
1641 Ok(isl_rs_result)
1642 }
1643
1644 pub fn is_subtree_anchored(&self) -> Result<bool, LibISLError> {
1646 let node = self;
1647 let isl_rs_ctx = node.get_ctx();
1648 let node = node.ptr;
1649 let isl_rs_result = unsafe { isl_schedule_node_is_subtree_anchored(node) };
1650 let isl_rs_result = match isl_rs_result {
1651 0 => false,
1652 1 => true,
1653 _ => {
1654 return Err(LibISLError::new(Error::Unknown, "Got isl_bool = -1"));
1655 }
1656 };
1657 let err = isl_rs_ctx.last_error();
1658 if err != Error::None_ {
1659 let err_msg = isl_rs_ctx.last_error_msg();
1660 isl_rs_ctx.reset_error();
1661 return Err(LibISLError::new(err, err_msg));
1662 }
1663 Ok(isl_rs_result)
1664 }
1665
1666 pub fn mark_get_id(&self) -> Result<Id, LibISLError> {
1668 let node = self;
1669 let isl_rs_ctx = node.get_ctx();
1670 let node = node.ptr;
1671 let isl_rs_result = unsafe { isl_schedule_node_mark_get_id(node) };
1672 let isl_rs_result = Id { ptr: isl_rs_result,
1673 should_free_on_drop: true };
1674 let err = isl_rs_ctx.last_error();
1675 if err != Error::None_ {
1676 let err_msg = isl_rs_ctx.last_error_msg();
1677 isl_rs_ctx.reset_error();
1678 return Err(LibISLError::new(err, err_msg));
1679 }
1680 Ok(isl_rs_result)
1681 }
1682
1683 pub fn n_children(&self) -> Result<i32, LibISLError> {
1685 let node = self;
1686 let isl_rs_ctx = node.get_ctx();
1687 let node = node.ptr;
1688 let isl_rs_result = unsafe { isl_schedule_node_n_children(node) };
1689 let err = isl_rs_ctx.last_error();
1690 if err != Error::None_ {
1691 let err_msg = isl_rs_ctx.last_error_msg();
1692 isl_rs_ctx.reset_error();
1693 return Err(LibISLError::new(err, err_msg));
1694 }
1695 Ok(isl_rs_result)
1696 }
1697
1698 pub fn next_sibling(self) -> Result<ScheduleNode, LibISLError> {
1700 let node = self;
1701 let isl_rs_ctx = node.get_ctx();
1702 let mut node = node;
1703 node.do_not_free_on_drop();
1704 let node = node.ptr;
1705 let isl_rs_result = unsafe { isl_schedule_node_next_sibling(node) };
1706 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1707 should_free_on_drop: true };
1708 let err = isl_rs_ctx.last_error();
1709 if err != Error::None_ {
1710 let err_msg = isl_rs_ctx.last_error_msg();
1711 isl_rs_ctx.reset_error();
1712 return Err(LibISLError::new(err, err_msg));
1713 }
1714 Ok(isl_rs_result)
1715 }
1716
1717 pub fn order_after(self, filter: UnionSet) -> Result<ScheduleNode, LibISLError> {
1719 let node = self;
1720 let isl_rs_ctx = node.get_ctx();
1721 let mut node = node;
1722 node.do_not_free_on_drop();
1723 let node = node.ptr;
1724 let mut filter = filter;
1725 filter.do_not_free_on_drop();
1726 let filter = filter.ptr;
1727 let isl_rs_result = unsafe { isl_schedule_node_order_after(node, filter) };
1728 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1729 should_free_on_drop: true };
1730 let err = isl_rs_ctx.last_error();
1731 if err != Error::None_ {
1732 let err_msg = isl_rs_ctx.last_error_msg();
1733 isl_rs_ctx.reset_error();
1734 return Err(LibISLError::new(err, err_msg));
1735 }
1736 Ok(isl_rs_result)
1737 }
1738
1739 pub fn order_before(self, filter: UnionSet) -> Result<ScheduleNode, LibISLError> {
1741 let node = self;
1742 let isl_rs_ctx = node.get_ctx();
1743 let mut node = node;
1744 node.do_not_free_on_drop();
1745 let node = node.ptr;
1746 let mut filter = filter;
1747 filter.do_not_free_on_drop();
1748 let filter = filter.ptr;
1749 let isl_rs_result = unsafe { isl_schedule_node_order_before(node, filter) };
1750 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1751 should_free_on_drop: true };
1752 let err = isl_rs_ctx.last_error();
1753 if err != Error::None_ {
1754 let err_msg = isl_rs_ctx.last_error_msg();
1755 isl_rs_ctx.reset_error();
1756 return Err(LibISLError::new(err, err_msg));
1757 }
1758 Ok(isl_rs_result)
1759 }
1760
1761 pub fn parent(self) -> Result<ScheduleNode, LibISLError> {
1763 let node = self;
1764 let isl_rs_ctx = node.get_ctx();
1765 let mut node = node;
1766 node.do_not_free_on_drop();
1767 let node = node.ptr;
1768 let isl_rs_result = unsafe { isl_schedule_node_parent(node) };
1769 let isl_rs_result = ScheduleNode { 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 previous_sibling(self) -> Result<ScheduleNode, LibISLError> {
1782 let node = self;
1783 let isl_rs_ctx = node.get_ctx();
1784 let mut node = node;
1785 node.do_not_free_on_drop();
1786 let node = node.ptr;
1787 let isl_rs_result = unsafe { isl_schedule_node_previous_sibling(node) };
1788 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1789 should_free_on_drop: true };
1790 let err = isl_rs_ctx.last_error();
1791 if err != Error::None_ {
1792 let err_msg = isl_rs_ctx.last_error_msg();
1793 isl_rs_ctx.reset_error();
1794 return Err(LibISLError::new(err, err_msg));
1795 }
1796 Ok(isl_rs_result)
1797 }
1798
1799 pub fn reset_user(self) -> Result<ScheduleNode, LibISLError> {
1801 let node = self;
1802 let isl_rs_ctx = node.get_ctx();
1803 let mut node = node;
1804 node.do_not_free_on_drop();
1805 let node = node.ptr;
1806 let isl_rs_result = unsafe { isl_schedule_node_reset_user(node) };
1807 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1808 should_free_on_drop: true };
1809 let err = isl_rs_ctx.last_error();
1810 if err != Error::None_ {
1811 let err_msg = isl_rs_ctx.last_error_msg();
1812 isl_rs_ctx.reset_error();
1813 return Err(LibISLError::new(err, err_msg));
1814 }
1815 Ok(isl_rs_result)
1816 }
1817
1818 pub fn root(self) -> Result<ScheduleNode, LibISLError> {
1820 let node = self;
1821 let isl_rs_ctx = node.get_ctx();
1822 let mut node = node;
1823 node.do_not_free_on_drop();
1824 let node = node.ptr;
1825 let isl_rs_result = unsafe { isl_schedule_node_root(node) };
1826 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1827 should_free_on_drop: true };
1828 let err = isl_rs_ctx.last_error();
1829 if err != Error::None_ {
1830 let err_msg = isl_rs_ctx.last_error_msg();
1831 isl_rs_ctx.reset_error();
1832 return Err(LibISLError::new(err, err_msg));
1833 }
1834 Ok(isl_rs_result)
1835 }
1836
1837 pub fn sequence_splice_child(self, pos: i32) -> Result<ScheduleNode, LibISLError> {
1839 let node = self;
1840 let isl_rs_ctx = node.get_ctx();
1841 let mut node = node;
1842 node.do_not_free_on_drop();
1843 let node = node.ptr;
1844 let isl_rs_result = unsafe { isl_schedule_node_sequence_splice_child(node, pos) };
1845 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1846 should_free_on_drop: true };
1847 let err = isl_rs_ctx.last_error();
1848 if err != Error::None_ {
1849 let err_msg = isl_rs_ctx.last_error_msg();
1850 isl_rs_ctx.reset_error();
1851 return Err(LibISLError::new(err, err_msg));
1852 }
1853 Ok(isl_rs_result)
1854 }
1855
1856 pub fn sequence_splice_children(self) -> Result<ScheduleNode, LibISLError> {
1858 let node = self;
1859 let isl_rs_ctx = node.get_ctx();
1860 let mut node = node;
1861 node.do_not_free_on_drop();
1862 let node = node.ptr;
1863 let isl_rs_result = unsafe { isl_schedule_node_sequence_splice_children(node) };
1864 let isl_rs_result = ScheduleNode { ptr: isl_rs_result,
1865 should_free_on_drop: true };
1866 let err = isl_rs_ctx.last_error();
1867 if err != Error::None_ {
1868 let err_msg = isl_rs_ctx.last_error_msg();
1869 isl_rs_ctx.reset_error();
1870 return Err(LibISLError::new(err, err_msg));
1871 }
1872 Ok(isl_rs_result)
1873 }
1874
1875 pub fn to_str(&self) -> Result<&str, LibISLError> {
1877 let node = self;
1878 let isl_rs_ctx = node.get_ctx();
1879 let node = node.ptr;
1880 let isl_rs_result = unsafe { isl_schedule_node_to_str(node) };
1881 let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
1882 let isl_rs_result = isl_rs_result.to_str().unwrap();
1883 let err = isl_rs_ctx.last_error();
1884 if err != Error::None_ {
1885 let err_msg = isl_rs_ctx.last_error_msg();
1886 isl_rs_ctx.reset_error();
1887 return Err(LibISLError::new(err, err_msg));
1888 }
1889 Ok(isl_rs_result)
1890 }
1891
1892 pub fn do_not_free_on_drop(&mut self) {
1895 self.should_free_on_drop = false;
1896 }
1897}
1898
1899impl Drop for ScheduleNode {
1900 fn drop(&mut self) {
1901 if self.should_free_on_drop {
1902 unsafe {
1903 isl_schedule_node_free(self.ptr);
1904 }
1905 }
1906 }
1907}