isl_rs/bindings/
schedule_node.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use 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
12/// Wraps `isl_schedule_node`.
13pub 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    /// Wraps `isl_schedule_node_align_params`.
208    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    /// Wraps `isl_schedule_node_ancestor`.
230    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    /// Wraps `isl_schedule_node_band_get_ast_build_options`.
249    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    /// Wraps `isl_schedule_node_band_get_ast_isolate_option`.
266    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    /// Wraps `isl_schedule_node_band_get_partial_schedule`.
283    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    /// Wraps `isl_schedule_node_band_get_partial_schedule_union_map`.
300    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    /// Wraps `isl_schedule_node_band_get_permutable`.
317    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    /// Wraps `isl_schedule_node_band_get_space`.
339    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    /// Wraps `isl_schedule_node_band_member_get_ast_loop_type`.
356    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    /// Wraps `isl_schedule_node_band_member_get_coincident`.
372    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    /// Wraps `isl_schedule_node_band_member_get_isolate_ast_loop_type`.
394    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    /// Wraps `isl_schedule_node_band_member_set_ast_loop_type`.
412    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    /// Wraps `isl_schedule_node_band_member_set_coincident`.
434    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    /// Wraps `isl_schedule_node_band_member_set_isolate_ast_loop_type`.
455    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    /// Wraps `isl_schedule_node_band_mod`.
477    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    /// Wraps `isl_schedule_node_band_n_member`.
499    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    /// Wraps `isl_schedule_node_band_scale`.
514    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    /// Wraps `isl_schedule_node_band_scale_down`.
536    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    /// Wraps `isl_schedule_node_band_set_ast_build_options`.
558    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    /// Wraps `isl_schedule_node_band_set_permutable`.
581    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    /// Wraps `isl_schedule_node_band_shift`.
600    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    /// Wraps `isl_schedule_node_band_sink`.
622    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    /// Wraps `isl_schedule_node_band_split`.
641    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    /// Wraps `isl_schedule_node_band_tile`.
660    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    /// Wraps `isl_schedule_node_child`.
682    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    /// Wraps `isl_schedule_node_context_get_context`.
701    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    /// Wraps `isl_schedule_node_copy`.
718    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    /// Wraps `isl_schedule_node_cut`.
735    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    /// Wraps `isl_schedule_node_delete`.
754    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    /// Wraps `isl_schedule_node_domain_get_domain`.
773    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    /// Wraps `isl_schedule_node_dump`.
790    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    /// Wraps `isl_schedule_node_expansion_get_contraction`.
805    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    /// Wraps `isl_schedule_node_expansion_get_expansion`.
822    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    /// Wraps `isl_schedule_node_extension_get_extension`.
839    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    /// Wraps `isl_schedule_node_filter_get_filter`.
856    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    /// Wraps `isl_schedule_node_first_child`.
873    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    /// Wraps `isl_schedule_node_free`.
892    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    /// Wraps `isl_schedule_node_from_domain`.
911    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    /// Wraps `isl_schedule_node_from_extension`.
929    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    /// Wraps `isl_schedule_node_get_ancestor_child_position`.
947    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    /// Wraps `isl_schedule_node_get_child`.
964    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    /// Wraps `isl_schedule_node_get_child_position`.
981    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    /// Wraps `isl_schedule_node_get_ctx`.
996    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    /// Wraps `isl_schedule_node_get_domain`.
1006    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    /// Wraps `isl_schedule_node_get_parent_type`.
1023    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    /// Wraps `isl_schedule_node_get_prefix_schedule_multi_union_pw_aff`.
1039    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    /// Wraps `isl_schedule_node_get_prefix_schedule_relation`.
1057    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    /// Wraps `isl_schedule_node_get_prefix_schedule_union_map`.
1074    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    /// Wraps `isl_schedule_node_get_prefix_schedule_union_pw_multi_aff`.
1091    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    /// Wraps `isl_schedule_node_get_schedule`.
1109    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    /// Wraps `isl_schedule_node_get_schedule_depth`.
1126    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    /// Wraps `isl_schedule_node_get_shared_ancestor`.
1141    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    /// Wraps `isl_schedule_node_get_subtree_contraction`.
1159    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    /// Wraps `isl_schedule_node_get_subtree_expansion`.
1176    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    /// Wraps `isl_schedule_node_get_subtree_schedule_union_map`.
1193    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    /// Wraps `isl_schedule_node_get_tree_depth`.
1210    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    /// Wraps `isl_schedule_node_get_type`.
1225    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    /// Wraps `isl_schedule_node_get_universe_domain`.
1241    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    /// Wraps `isl_schedule_node_graft_after`.
1258    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    /// Wraps `isl_schedule_node_graft_before`.
1280    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    /// Wraps `isl_schedule_node_grandchild`.
1302    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    /// Wraps `isl_schedule_node_grandparent`.
1321    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    /// Wraps `isl_schedule_node_group`.
1340    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    /// Wraps `isl_schedule_node_guard_get_guard`.
1362    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    /// Wraps `isl_schedule_node_has_children`.
1379    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    /// Wraps `isl_schedule_node_has_next_sibling`.
1401    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    /// Wraps `isl_schedule_node_has_parent`.
1423    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    /// Wraps `isl_schedule_node_has_previous_sibling`.
1445    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    /// Wraps `isl_schedule_node_insert_context`.
1467    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    /// Wraps `isl_schedule_node_insert_filter`.
1489    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    /// Wraps `isl_schedule_node_insert_guard`.
1511    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    /// Wraps `isl_schedule_node_insert_mark`.
1533    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    /// Wraps `isl_schedule_node_insert_partial_schedule`.
1555    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    /// Wraps `isl_schedule_node_insert_sequence`.
1578    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    /// Wraps `isl_schedule_node_insert_set`.
1600    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    /// Wraps `isl_schedule_node_is_equal`.
1622    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    /// Wraps `isl_schedule_node_is_subtree_anchored`.
1645    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    /// Wraps `isl_schedule_node_mark_get_id`.
1667    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    /// Wraps `isl_schedule_node_n_children`.
1684    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    /// Wraps `isl_schedule_node_next_sibling`.
1699    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    /// Wraps `isl_schedule_node_order_after`.
1718    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    /// Wraps `isl_schedule_node_order_before`.
1740    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    /// Wraps `isl_schedule_node_parent`.
1762    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    /// Wraps `isl_schedule_node_previous_sibling`.
1781    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    /// Wraps `isl_schedule_node_reset_user`.
1800    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    /// Wraps `isl_schedule_node_root`.
1819    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    /// Wraps `isl_schedule_node_sequence_splice_child`.
1838    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    /// Wraps `isl_schedule_node_sequence_splice_children`.
1857    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    /// Wraps `isl_schedule_node_to_str`.
1876    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    /// Does not call isl_schedule_node_free() on being dropped. (For internal
1893    /// use only.)
1894    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}