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            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
57        }
58        Ok(isl_rs_result)
59    }
60
61    /// Wraps `isl_union_access_info_copy`.
62    pub fn copy(&self) -> Result<UnionAccessInfo, LibISLError> {
63        let access = self;
64        let isl_rs_ctx = access.get_ctx();
65        let access = access.ptr;
66        let isl_rs_result = unsafe { isl_union_access_info_copy(access) };
67        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
68                                              should_free_on_drop: true };
69        let err = isl_rs_ctx.last_error();
70        if err != Error::None_ {
71            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
72        }
73        Ok(isl_rs_result)
74    }
75
76    /// Wraps `isl_union_access_info_free`.
77    pub fn free(self) -> Result<UnionAccessInfo, LibISLError> {
78        let access = self;
79        let isl_rs_ctx = access.get_ctx();
80        let mut access = access;
81        access.do_not_free_on_drop();
82        let access = access.ptr;
83        let isl_rs_result = unsafe { isl_union_access_info_free(access) };
84        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
85                                              should_free_on_drop: true };
86        let err = isl_rs_ctx.last_error();
87        if err != Error::None_ {
88            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
89        }
90        Ok(isl_rs_result)
91    }
92
93    /// Wraps `isl_union_access_info_from_sink`.
94    pub fn from_sink(sink: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
95        let isl_rs_ctx = sink.get_ctx();
96        let mut sink = sink;
97        sink.do_not_free_on_drop();
98        let sink = sink.ptr;
99        let isl_rs_result = unsafe { isl_union_access_info_from_sink(sink) };
100        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
101                                              should_free_on_drop: true };
102        let err = isl_rs_ctx.last_error();
103        if err != Error::None_ {
104            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
105        }
106        Ok(isl_rs_result)
107    }
108
109    /// Wraps `isl_union_access_info_get_ctx`.
110    pub fn get_ctx(&self) -> Context {
111        let access = self;
112        let access = access.ptr;
113        let isl_rs_result = unsafe { isl_union_access_info_get_ctx(access) };
114        let isl_rs_result = Context { ptr: isl_rs_result,
115                                      should_free_on_drop: false };
116        isl_rs_result
117    }
118
119    /// Wraps `isl_union_access_info_set_kill`.
120    pub fn set_kill(self, kill: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
121        let access = self;
122        let isl_rs_ctx = access.get_ctx();
123        let mut access = access;
124        access.do_not_free_on_drop();
125        let access = access.ptr;
126        let mut kill = kill;
127        kill.do_not_free_on_drop();
128        let kill = kill.ptr;
129        let isl_rs_result = unsafe { isl_union_access_info_set_kill(access, kill) };
130        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
131                                              should_free_on_drop: true };
132        let err = isl_rs_ctx.last_error();
133        if err != Error::None_ {
134            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
135        }
136        Ok(isl_rs_result)
137    }
138
139    /// Wraps `isl_union_access_info_set_may_source`.
140    pub fn set_may_source(self, may_source: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
141        let access = self;
142        let isl_rs_ctx = access.get_ctx();
143        let mut access = access;
144        access.do_not_free_on_drop();
145        let access = access.ptr;
146        let mut may_source = may_source;
147        may_source.do_not_free_on_drop();
148        let may_source = may_source.ptr;
149        let isl_rs_result = unsafe { isl_union_access_info_set_may_source(access, may_source) };
150        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
151                                              should_free_on_drop: true };
152        let err = isl_rs_ctx.last_error();
153        if err != Error::None_ {
154            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
155        }
156        Ok(isl_rs_result)
157    }
158
159    /// Wraps `isl_union_access_info_set_must_source`.
160    pub fn set_must_source(self, must_source: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
161        let access = self;
162        let isl_rs_ctx = access.get_ctx();
163        let mut access = access;
164        access.do_not_free_on_drop();
165        let access = access.ptr;
166        let mut must_source = must_source;
167        must_source.do_not_free_on_drop();
168        let must_source = must_source.ptr;
169        let isl_rs_result = unsafe { isl_union_access_info_set_must_source(access, must_source) };
170        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
171                                              should_free_on_drop: true };
172        let err = isl_rs_ctx.last_error();
173        if err != Error::None_ {
174            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
175        }
176        Ok(isl_rs_result)
177    }
178
179    /// Wraps `isl_union_access_info_set_schedule`.
180    pub fn set_schedule(self, schedule: Schedule) -> Result<UnionAccessInfo, LibISLError> {
181        let access = self;
182        let isl_rs_ctx = access.get_ctx();
183        let mut access = access;
184        access.do_not_free_on_drop();
185        let access = access.ptr;
186        let mut schedule = schedule;
187        schedule.do_not_free_on_drop();
188        let schedule = schedule.ptr;
189        let isl_rs_result = unsafe { isl_union_access_info_set_schedule(access, schedule) };
190        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
191                                              should_free_on_drop: true };
192        let err = isl_rs_ctx.last_error();
193        if err != Error::None_ {
194            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
195        }
196        Ok(isl_rs_result)
197    }
198
199    /// Wraps `isl_union_access_info_set_schedule_map`.
200    pub fn set_schedule_map(self, schedule_map: UnionMap) -> Result<UnionAccessInfo, LibISLError> {
201        let access = self;
202        let isl_rs_ctx = access.get_ctx();
203        let mut access = access;
204        access.do_not_free_on_drop();
205        let access = access.ptr;
206        let mut schedule_map = schedule_map;
207        schedule_map.do_not_free_on_drop();
208        let schedule_map = schedule_map.ptr;
209        let isl_rs_result = unsafe { isl_union_access_info_set_schedule_map(access, schedule_map) };
210        let isl_rs_result = UnionAccessInfo { ptr: isl_rs_result,
211                                              should_free_on_drop: true };
212        let err = isl_rs_ctx.last_error();
213        if err != Error::None_ {
214            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
215        }
216        Ok(isl_rs_result)
217    }
218
219    /// Wraps `isl_union_access_info_to_str`.
220    pub fn to_str(&self) -> Result<&str, LibISLError> {
221        let access = self;
222        let isl_rs_ctx = access.get_ctx();
223        let access = access.ptr;
224        let isl_rs_result = unsafe { isl_union_access_info_to_str(access) };
225        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
226        let isl_rs_result = isl_rs_result.to_str().unwrap();
227        let err = isl_rs_ctx.last_error();
228        if err != Error::None_ {
229            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
230        }
231        Ok(isl_rs_result)
232    }
233
234    /// Does not call isl_union_access_info_free() on being dropped. (For
235    /// internal use only.)
236    pub fn do_not_free_on_drop(&mut self) {
237        self.should_free_on_drop = false;
238    }
239}
240
241impl Drop for UnionAccessInfo {
242    fn drop(&mut self) {
243        if self.should_free_on_drop {
244            unsafe {
245                isl_union_access_info_free(self.ptr);
246            }
247        }
248    }
249}