isl_rs/bindings/
union_flow.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{Context, Error, LibISLError, UnionMap};
5use libc::uintptr_t;
6use std::ffi::CStr;
7use std::os::raw::c_char;
8
9/// Wraps `isl_union_flow`.
10pub struct UnionFlow {
11    pub ptr: uintptr_t,
12    pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17    fn isl_union_flow_copy(flow: uintptr_t) -> uintptr_t;
18
19    fn isl_union_flow_free(flow: uintptr_t) -> uintptr_t;
20
21    fn isl_union_flow_get_ctx(flow: uintptr_t) -> uintptr_t;
22
23    fn isl_union_flow_get_full_may_dependence(flow: uintptr_t) -> uintptr_t;
24
25    fn isl_union_flow_get_full_must_dependence(flow: uintptr_t) -> uintptr_t;
26
27    fn isl_union_flow_get_may_dependence(flow: uintptr_t) -> uintptr_t;
28
29    fn isl_union_flow_get_may_no_source(flow: uintptr_t) -> uintptr_t;
30
31    fn isl_union_flow_get_must_dependence(flow: uintptr_t) -> uintptr_t;
32
33    fn isl_union_flow_get_must_no_source(flow: uintptr_t) -> uintptr_t;
34
35    fn isl_union_flow_to_str(flow: uintptr_t) -> *const c_char;
36
37}
38
39impl UnionFlow {
40    /// Wraps `isl_union_flow_copy`.
41    pub fn copy(&self) -> Result<UnionFlow, LibISLError> {
42        let flow = self;
43        let isl_rs_ctx = flow.get_ctx();
44        let flow = flow.ptr;
45        let isl_rs_result = unsafe { isl_union_flow_copy(flow) };
46        let isl_rs_result = UnionFlow { ptr: isl_rs_result,
47                                        should_free_on_drop: true };
48        let err = isl_rs_ctx.last_error();
49        if err != Error::None_ {
50            let err_msg = isl_rs_ctx.last_error_msg();
51            isl_rs_ctx.reset_error();
52            return Err(LibISLError::new(err, err_msg));
53        }
54        Ok(isl_rs_result)
55    }
56
57    /// Wraps `isl_union_flow_free`.
58    pub fn free(self) -> Result<UnionFlow, LibISLError> {
59        let flow = self;
60        let isl_rs_ctx = flow.get_ctx();
61        let mut flow = flow;
62        flow.do_not_free_on_drop();
63        let flow = flow.ptr;
64        let isl_rs_result = unsafe { isl_union_flow_free(flow) };
65        let isl_rs_result = UnionFlow { ptr: isl_rs_result,
66                                        should_free_on_drop: true };
67        let err = isl_rs_ctx.last_error();
68        if err != Error::None_ {
69            let err_msg = isl_rs_ctx.last_error_msg();
70            isl_rs_ctx.reset_error();
71            return Err(LibISLError::new(err, err_msg));
72        }
73        Ok(isl_rs_result)
74    }
75
76    /// Wraps `isl_union_flow_get_ctx`.
77    pub fn get_ctx(&self) -> Context {
78        let flow = self;
79        let flow = flow.ptr;
80        let isl_rs_result = unsafe { isl_union_flow_get_ctx(flow) };
81        let isl_rs_result = Context { ptr: isl_rs_result,
82                                      should_free_on_drop: false };
83        isl_rs_result
84    }
85
86    /// Wraps `isl_union_flow_get_full_may_dependence`.
87    pub fn get_full_may_dependence(&self) -> Result<UnionMap, LibISLError> {
88        let flow = self;
89        let isl_rs_ctx = flow.get_ctx();
90        let flow = flow.ptr;
91        let isl_rs_result = unsafe { isl_union_flow_get_full_may_dependence(flow) };
92        let isl_rs_result = UnionMap { ptr: isl_rs_result,
93                                       should_free_on_drop: true };
94        let err = isl_rs_ctx.last_error();
95        if err != Error::None_ {
96            let err_msg = isl_rs_ctx.last_error_msg();
97            isl_rs_ctx.reset_error();
98            return Err(LibISLError::new(err, err_msg));
99        }
100        Ok(isl_rs_result)
101    }
102
103    /// Wraps `isl_union_flow_get_full_must_dependence`.
104    pub fn get_full_must_dependence(&self) -> Result<UnionMap, LibISLError> {
105        let flow = self;
106        let isl_rs_ctx = flow.get_ctx();
107        let flow = flow.ptr;
108        let isl_rs_result = unsafe { isl_union_flow_get_full_must_dependence(flow) };
109        let isl_rs_result = UnionMap { ptr: isl_rs_result,
110                                       should_free_on_drop: true };
111        let err = isl_rs_ctx.last_error();
112        if err != Error::None_ {
113            let err_msg = isl_rs_ctx.last_error_msg();
114            isl_rs_ctx.reset_error();
115            return Err(LibISLError::new(err, err_msg));
116        }
117        Ok(isl_rs_result)
118    }
119
120    /// Wraps `isl_union_flow_get_may_dependence`.
121    pub fn get_may_dependence(&self) -> Result<UnionMap, LibISLError> {
122        let flow = self;
123        let isl_rs_ctx = flow.get_ctx();
124        let flow = flow.ptr;
125        let isl_rs_result = unsafe { isl_union_flow_get_may_dependence(flow) };
126        let isl_rs_result = UnionMap { ptr: isl_rs_result,
127                                       should_free_on_drop: true };
128        let err = isl_rs_ctx.last_error();
129        if err != Error::None_ {
130            let err_msg = isl_rs_ctx.last_error_msg();
131            isl_rs_ctx.reset_error();
132            return Err(LibISLError::new(err, err_msg));
133        }
134        Ok(isl_rs_result)
135    }
136
137    /// Wraps `isl_union_flow_get_may_no_source`.
138    pub fn get_may_no_source(&self) -> Result<UnionMap, LibISLError> {
139        let flow = self;
140        let isl_rs_ctx = flow.get_ctx();
141        let flow = flow.ptr;
142        let isl_rs_result = unsafe { isl_union_flow_get_may_no_source(flow) };
143        let isl_rs_result = UnionMap { ptr: isl_rs_result,
144                                       should_free_on_drop: true };
145        let err = isl_rs_ctx.last_error();
146        if err != Error::None_ {
147            let err_msg = isl_rs_ctx.last_error_msg();
148            isl_rs_ctx.reset_error();
149            return Err(LibISLError::new(err, err_msg));
150        }
151        Ok(isl_rs_result)
152    }
153
154    /// Wraps `isl_union_flow_get_must_dependence`.
155    pub fn get_must_dependence(&self) -> Result<UnionMap, LibISLError> {
156        let flow = self;
157        let isl_rs_ctx = flow.get_ctx();
158        let flow = flow.ptr;
159        let isl_rs_result = unsafe { isl_union_flow_get_must_dependence(flow) };
160        let isl_rs_result = UnionMap { ptr: isl_rs_result,
161                                       should_free_on_drop: true };
162        let err = isl_rs_ctx.last_error();
163        if err != Error::None_ {
164            let err_msg = isl_rs_ctx.last_error_msg();
165            isl_rs_ctx.reset_error();
166            return Err(LibISLError::new(err, err_msg));
167        }
168        Ok(isl_rs_result)
169    }
170
171    /// Wraps `isl_union_flow_get_must_no_source`.
172    pub fn get_must_no_source(&self) -> Result<UnionMap, LibISLError> {
173        let flow = self;
174        let isl_rs_ctx = flow.get_ctx();
175        let flow = flow.ptr;
176        let isl_rs_result = unsafe { isl_union_flow_get_must_no_source(flow) };
177        let isl_rs_result = UnionMap { ptr: isl_rs_result,
178                                       should_free_on_drop: true };
179        let err = isl_rs_ctx.last_error();
180        if err != Error::None_ {
181            let err_msg = isl_rs_ctx.last_error_msg();
182            isl_rs_ctx.reset_error();
183            return Err(LibISLError::new(err, err_msg));
184        }
185        Ok(isl_rs_result)
186    }
187
188    /// Wraps `isl_union_flow_to_str`.
189    pub fn to_str(&self) -> Result<&str, LibISLError> {
190        let flow = self;
191        let isl_rs_ctx = flow.get_ctx();
192        let flow = flow.ptr;
193        let isl_rs_result = unsafe { isl_union_flow_to_str(flow) };
194        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
195        let isl_rs_result = isl_rs_result.to_str().unwrap();
196        let err = isl_rs_ctx.last_error();
197        if err != Error::None_ {
198            let err_msg = isl_rs_ctx.last_error_msg();
199            isl_rs_ctx.reset_error();
200            return Err(LibISLError::new(err, err_msg));
201        }
202        Ok(isl_rs_result)
203    }
204
205    /// Does not call isl_union_flow_free() on being dropped. (For internal use
206    /// only.)
207    pub fn do_not_free_on_drop(&mut self) {
208        self.should_free_on_drop = false;
209    }
210}
211
212impl Drop for UnionFlow {
213    fn drop(&mut self) {
214        if self.should_free_on_drop {
215            unsafe {
216                isl_union_flow_free(self.ptr);
217            }
218        }
219    }
220}