isl_rs/bindings/
union_access_info.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{Context, Error, LibISLError, Schedule, UnionFlow, UnionMap};
5use libc::uintptr_t;
6use std::ffi::CStr;
7use std::os::raw::c_char;
8
9/// Wraps `isl_union_access_info`.
10pub struct UnionAccessInfo {
11    pub ptr: uintptr_t,
12    pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17    fn isl_union_access_info_compute_flow(access: uintptr_t) -> uintptr_t;
18
19    fn isl_union_access_info_copy(access: uintptr_t) -> uintptr_t;
20
21    fn isl_union_access_info_free(access: uintptr_t) -> uintptr_t;
22
23    fn isl_union_access_info_from_sink(sink: uintptr_t) -> uintptr_t;
24
25    fn isl_union_access_info_get_ctx(access: uintptr_t) -> uintptr_t;
26
27    fn isl_union_access_info_set_kill(access: uintptr_t, kill: uintptr_t) -> uintptr_t;
28
29    fn isl_union_access_info_set_may_source(access: uintptr_t, may_source: uintptr_t) -> uintptr_t;
30
31    fn isl_union_access_info_set_must_source(access: uintptr_t, must_source: uintptr_t)
32                                             -> uintptr_t;
33
34    fn isl_union_access_info_set_schedule(access: uintptr_t, schedule: uintptr_t) -> uintptr_t;
35
36    fn isl_union_access_info_set_schedule_map(access: uintptr_t, schedule_map: uintptr_t)
37                                              -> uintptr_t;
38
39    fn isl_union_access_info_to_str(access: uintptr_t) -> *const c_char;
40
41}
42
43impl UnionAccessInfo {
44    /// Wraps `isl_union_access_info_compute_flow`.
45    pub fn compute_flow(self) -> Result<UnionFlow, LibISLError> {
46        let access = self;
47        let isl_rs_ctx = access.get_ctx();
48        let mut access = access;
49        access.do_not_free_on_drop();
50        let access = access.ptr;
51        let isl_rs_result = unsafe { isl_union_access_info_compute_flow(access) };
52        let isl_rs_result = UnionFlow { ptr: isl_rs_result,
53                                        should_free_on_drop: true };
54        let err = isl_rs_ctx.last_error();
55        if err != Error::None_ {
56            let err_msg = isl_rs_ctx.last_error_msg();
57            isl_rs_ctx.reset_error();
58            return Err(LibISLError::new(err, err_msg));
59        }
60        Ok(isl_rs_result)
61    }
62
63    /// Wraps `isl_union_access_info_copy`.
64    pub fn copy(&self) -> Result<UnionAccessInfo, LibISLError> {
65        let access = self;
66        let isl_rs_ctx = access.get_ctx();
67        let access = access.ptr;
68        let isl_rs_result = unsafe { isl_union_access_info_copy(access) };
69        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
70                                              should_free_on_drop: true };
71        let err = isl_rs_ctx.last_error();
72        if err != Error::None_ {
73            let err_msg = isl_rs_ctx.last_error_msg();
74            isl_rs_ctx.reset_error();
75            return Err(LibISLError::new(err, err_msg));
76        }
77        Ok(isl_rs_result)
78    }
79
80    /// Wraps `isl_union_access_info_free`.
81    pub fn free(self) -> Result<UnionAccessInfo, LibISLError> {
82        let access = self;
83        let isl_rs_ctx = access.get_ctx();
84        let mut access = access;
85        access.do_not_free_on_drop();
86        let access = access.ptr;
87        let isl_rs_result = unsafe { isl_union_access_info_free(access) };
88        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
89                                              should_free_on_drop: true };
90        let err = isl_rs_ctx.last_error();
91        if err != Error::None_ {
92            let err_msg = isl_rs_ctx.last_error_msg();
93            isl_rs_ctx.reset_error();
94            return Err(LibISLError::new(err, err_msg));
95        }
96        Ok(isl_rs_result)
97    }
98
99    /// Wraps `isl_union_access_info_from_sink`.
100    pub fn from_sink(sink: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
101        let isl_rs_ctx = sink.get_ctx();
102        let mut sink = sink;
103        sink.do_not_free_on_drop();
104        let sink = sink.ptr;
105        let isl_rs_result = unsafe { isl_union_access_info_from_sink(sink) };
106        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
107                                              should_free_on_drop: true };
108        let err = isl_rs_ctx.last_error();
109        if err != Error::None_ {
110            let err_msg = isl_rs_ctx.last_error_msg();
111            isl_rs_ctx.reset_error();
112            return Err(LibISLError::new(err, err_msg));
113        }
114        Ok(isl_rs_result)
115    }
116
117    /// Wraps `isl_union_access_info_get_ctx`.
118    pub fn get_ctx(&self) -> Context {
119        let access = self;
120        let access = access.ptr;
121        let isl_rs_result = unsafe { isl_union_access_info_get_ctx(access) };
122        let isl_rs_result = Context { ptr: isl_rs_result,
123                                      should_free_on_drop: false };
124        isl_rs_result
125    }
126
127    /// Wraps `isl_union_access_info_set_kill`.
128    pub fn set_kill(self, kill: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
129        let access = self;
130        let isl_rs_ctx = access.get_ctx();
131        let mut access = access;
132        access.do_not_free_on_drop();
133        let access = access.ptr;
134        let mut kill = kill;
135        kill.do_not_free_on_drop();
136        let kill = kill.ptr;
137        let isl_rs_result = unsafe { isl_union_access_info_set_kill(access, kill) };
138        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
139                                              should_free_on_drop: true };
140        let err = isl_rs_ctx.last_error();
141        if err != Error::None_ {
142            let err_msg = isl_rs_ctx.last_error_msg();
143            isl_rs_ctx.reset_error();
144            return Err(LibISLError::new(err, err_msg));
145        }
146        Ok(isl_rs_result)
147    }
148
149    /// Wraps `isl_union_access_info_set_may_source`.
150    pub fn set_may_source(self, may_source: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
151        let access = self;
152        let isl_rs_ctx = access.get_ctx();
153        let mut access = access;
154        access.do_not_free_on_drop();
155        let access = access.ptr;
156        let mut may_source = may_source;
157        may_source.do_not_free_on_drop();
158        let may_source = may_source.ptr;
159        let isl_rs_result = unsafe { isl_union_access_info_set_may_source(access, may_source) };
160        let isl_rs_result = UnionAccessInfo { 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_access_info_set_must_source`.
172    pub fn set_must_source(self, must_source: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
173        let access = self;
174        let isl_rs_ctx = access.get_ctx();
175        let mut access = access;
176        access.do_not_free_on_drop();
177        let access = access.ptr;
178        let mut must_source = must_source;
179        must_source.do_not_free_on_drop();
180        let must_source = must_source.ptr;
181        let isl_rs_result = unsafe { isl_union_access_info_set_must_source(access, must_source) };
182        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
183                                              should_free_on_drop: true };
184        let err = isl_rs_ctx.last_error();
185        if err != Error::None_ {
186            let err_msg = isl_rs_ctx.last_error_msg();
187            isl_rs_ctx.reset_error();
188            return Err(LibISLError::new(err, err_msg));
189        }
190        Ok(isl_rs_result)
191    }
192
193    /// Wraps `isl_union_access_info_set_schedule`.
194    pub fn set_schedule(self, schedule: Schedule) -> Result<UnionAccessInfo, LibISLError> {
195        let access = self;
196        let isl_rs_ctx = access.get_ctx();
197        let mut access = access;
198        access.do_not_free_on_drop();
199        let access = access.ptr;
200        let mut schedule = schedule;
201        schedule.do_not_free_on_drop();
202        let schedule = schedule.ptr;
203        let isl_rs_result = unsafe { isl_union_access_info_set_schedule(access, schedule) };
204        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
205                                              should_free_on_drop: true };
206        let err = isl_rs_ctx.last_error();
207        if err != Error::None_ {
208            let err_msg = isl_rs_ctx.last_error_msg();
209            isl_rs_ctx.reset_error();
210            return Err(LibISLError::new(err, err_msg));
211        }
212        Ok(isl_rs_result)
213    }
214
215    /// Wraps `isl_union_access_info_set_schedule_map`.
216    pub fn set_schedule_map(self, schedule_map: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
217        let access = self;
218        let isl_rs_ctx = access.get_ctx();
219        let mut access = access;
220        access.do_not_free_on_drop();
221        let access = access.ptr;
222        let mut schedule_map = schedule_map;
223        schedule_map.do_not_free_on_drop();
224        let schedule_map = schedule_map.ptr;
225        let isl_rs_result = unsafe { isl_union_access_info_set_schedule_map(access, schedule_map) };
226        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
227                                              should_free_on_drop: true };
228        let err = isl_rs_ctx.last_error();
229        if err != Error::None_ {
230            let err_msg = isl_rs_ctx.last_error_msg();
231            isl_rs_ctx.reset_error();
232            return Err(LibISLError::new(err, err_msg));
233        }
234        Ok(isl_rs_result)
235    }
236
237    /// Wraps `isl_union_access_info_to_str`.
238    pub fn to_str(&self) -> Result<&str, LibISLError> {
239        let access = self;
240        let isl_rs_ctx = access.get_ctx();
241        let access = access.ptr;
242        let isl_rs_result = unsafe { isl_union_access_info_to_str(access) };
243        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
244        let isl_rs_result = isl_rs_result.to_str().unwrap();
245        let err = isl_rs_ctx.last_error();
246        if err != Error::None_ {
247            let err_msg = isl_rs_ctx.last_error_msg();
248            isl_rs_ctx.reset_error();
249            return Err(LibISLError::new(err, err_msg));
250        }
251        Ok(isl_rs_result)
252    }
253
254    /// Does not call isl_union_access_info_free() on being dropped. (For
255    /// internal use only.)
256    pub fn do_not_free_on_drop(&mut self) {
257        self.should_free_on_drop = false;
258    }
259}
260
261impl Drop for UnionAccessInfo {
262    fn drop(&mut self) {
263        if self.should_free_on_drop {
264            unsafe {
265                isl_union_access_info_free(self.ptr);
266            }
267        }
268    }
269}