isl_rs/bindings/
point.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{Context, DimType, Error, LibISLError, MultiVal, Set, Space, Val};
5use libc::uintptr_t;
6use std::ffi::CStr;
7use std::os::raw::c_char;
8
9/// Wraps `isl_point`.
10pub struct Point {
11    pub ptr: uintptr_t,
12    pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17    fn isl_point_add_ui(pnt: uintptr_t, type_: i32, pos: i32, val: u32) -> uintptr_t;
18
19    fn isl_point_copy(pnt: uintptr_t) -> uintptr_t;
20
21    fn isl_point_dump(pnt: uintptr_t) -> ();
22
23    fn isl_point_free(pnt: uintptr_t) -> uintptr_t;
24
25    fn isl_point_get_coordinate_val(pnt: uintptr_t, type_: i32, pos: i32) -> uintptr_t;
26
27    fn isl_point_get_ctx(pnt: uintptr_t) -> uintptr_t;
28
29    fn isl_point_get_multi_val(pnt: uintptr_t) -> uintptr_t;
30
31    fn isl_point_get_space(pnt: uintptr_t) -> uintptr_t;
32
33    fn isl_point_is_void(pnt: uintptr_t) -> i32;
34
35    fn isl_point_set_coordinate_val(pnt: uintptr_t, type_: i32, pos: i32, v: uintptr_t)
36                                    -> uintptr_t;
37
38    fn isl_point_sub_ui(pnt: uintptr_t, type_: i32, pos: i32, val: u32) -> uintptr_t;
39
40    fn isl_point_to_set(pnt: uintptr_t) -> uintptr_t;
41
42    fn isl_point_to_str(pnt: uintptr_t) -> *const c_char;
43
44    fn isl_point_void(space: uintptr_t) -> uintptr_t;
45
46    fn isl_point_zero(space: uintptr_t) -> uintptr_t;
47
48}
49
50impl Point {
51    /// Wraps `isl_point_add_ui`.
52    pub fn add_ui(self, type_: DimType, pos: i32, val: u32) -> Result<Point, LibISLError> {
53        let pnt = self;
54        let isl_rs_ctx = pnt.get_ctx();
55        let mut pnt = pnt;
56        pnt.do_not_free_on_drop();
57        let pnt = pnt.ptr;
58        let type_ = type_.to_i32();
59        let isl_rs_result = unsafe { isl_point_add_ui(pnt, type_, pos, val) };
60        let isl_rs_result = Point { ptr: isl_rs_result,
61                                    should_free_on_drop: true };
62        let err = isl_rs_ctx.last_error();
63        if err != Error::None_ {
64            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
65        }
66        Ok(isl_rs_result)
67    }
68
69    /// Wraps `isl_point_copy`.
70    pub fn copy(&self) -> Result<Point, LibISLError> {
71        let pnt = self;
72        let isl_rs_ctx = pnt.get_ctx();
73        let pnt = pnt.ptr;
74        let isl_rs_result = unsafe { isl_point_copy(pnt) };
75        let isl_rs_result = Point { ptr: isl_rs_result,
76                                    should_free_on_drop: true };
77        let err = isl_rs_ctx.last_error();
78        if err != Error::None_ {
79            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
80        }
81        Ok(isl_rs_result)
82    }
83
84    /// Wraps `isl_point_dump`.
85    pub fn dump(&self) -> Result<(), LibISLError> {
86        let pnt = self;
87        let isl_rs_ctx = pnt.get_ctx();
88        let pnt = pnt.ptr;
89        let isl_rs_result = unsafe { isl_point_dump(pnt) };
90        let err = isl_rs_ctx.last_error();
91        if err != Error::None_ {
92            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
93        }
94        Ok(isl_rs_result)
95    }
96
97    /// Wraps `isl_point_free`.
98    pub fn free(self) -> Result<Point, LibISLError> {
99        let pnt = self;
100        let isl_rs_ctx = pnt.get_ctx();
101        let mut pnt = pnt;
102        pnt.do_not_free_on_drop();
103        let pnt = pnt.ptr;
104        let isl_rs_result = unsafe { isl_point_free(pnt) };
105        let isl_rs_result = Point { ptr: isl_rs_result,
106                                    should_free_on_drop: true };
107        let err = isl_rs_ctx.last_error();
108        if err != Error::None_ {
109            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
110        }
111        Ok(isl_rs_result)
112    }
113
114    /// Wraps `isl_point_get_coordinate_val`.
115    pub fn get_coordinate_val(&self, type_: DimType, pos: i32) -> Result<Val, LibISLError> {
116        let pnt = self;
117        let isl_rs_ctx = pnt.get_ctx();
118        let pnt = pnt.ptr;
119        let type_ = type_.to_i32();
120        let isl_rs_result = unsafe { isl_point_get_coordinate_val(pnt, type_, pos) };
121        let isl_rs_result = Val { ptr: isl_rs_result,
122                                  should_free_on_drop: true };
123        let err = isl_rs_ctx.last_error();
124        if err != Error::None_ {
125            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
126        }
127        Ok(isl_rs_result)
128    }
129
130    /// Wraps `isl_point_get_ctx`.
131    pub fn get_ctx(&self) -> Context {
132        let pnt = self;
133        let pnt = pnt.ptr;
134        let isl_rs_result = unsafe { isl_point_get_ctx(pnt) };
135        let isl_rs_result = Context { ptr: isl_rs_result,
136                                      should_free_on_drop: false };
137        isl_rs_result
138    }
139
140    /// Wraps `isl_point_get_multi_val`.
141    pub fn get_multi_val(&self) -> Result<MultiVal, LibISLError> {
142        let pnt = self;
143        let isl_rs_ctx = pnt.get_ctx();
144        let pnt = pnt.ptr;
145        let isl_rs_result = unsafe { isl_point_get_multi_val(pnt) };
146        let isl_rs_result = MultiVal { ptr: isl_rs_result,
147                                       should_free_on_drop: true };
148        let err = isl_rs_ctx.last_error();
149        if err != Error::None_ {
150            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
151        }
152        Ok(isl_rs_result)
153    }
154
155    /// Wraps `isl_point_get_space`.
156    pub fn get_space(&self) -> Result<Space, LibISLError> {
157        let pnt = self;
158        let isl_rs_ctx = pnt.get_ctx();
159        let pnt = pnt.ptr;
160        let isl_rs_result = unsafe { isl_point_get_space(pnt) };
161        let isl_rs_result = Space { ptr: isl_rs_result,
162                                    should_free_on_drop: true };
163        let err = isl_rs_ctx.last_error();
164        if err != Error::None_ {
165            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
166        }
167        Ok(isl_rs_result)
168    }
169
170    /// Wraps `isl_point_is_void`.
171    pub fn is_void(&self) -> Result<bool, LibISLError> {
172        let pnt = self;
173        let isl_rs_ctx = pnt.get_ctx();
174        let pnt = pnt.ptr;
175        let isl_rs_result = unsafe { isl_point_is_void(pnt) };
176        let isl_rs_result = match isl_rs_result {
177            0 => false,
178            1 => true,
179            _ => panic!("Got isl_bool = -1"),
180        };
181        let err = isl_rs_ctx.last_error();
182        if err != Error::None_ {
183            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
184        }
185        Ok(isl_rs_result)
186    }
187
188    /// Wraps `isl_point_set_coordinate_val`.
189    pub fn set_coordinate_val(self, type_: DimType, pos: i32, v: Val)
190                              -> Result<Point, LibISLError> {
191        let pnt = self;
192        let isl_rs_ctx = pnt.get_ctx();
193        let mut pnt = pnt;
194        pnt.do_not_free_on_drop();
195        let pnt = pnt.ptr;
196        let type_ = type_.to_i32();
197        let mut v = v;
198        v.do_not_free_on_drop();
199        let v = v.ptr;
200        let isl_rs_result = unsafe { isl_point_set_coordinate_val(pnt, type_, pos, v) };
201        let isl_rs_result = Point { ptr: isl_rs_result,
202                                    should_free_on_drop: true };
203        let err = isl_rs_ctx.last_error();
204        if err != Error::None_ {
205            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
206        }
207        Ok(isl_rs_result)
208    }
209
210    /// Wraps `isl_point_sub_ui`.
211    pub fn sub_ui(self, type_: DimType, pos: i32, val: u32) -> Result<Point, LibISLError> {
212        let pnt = self;
213        let isl_rs_ctx = pnt.get_ctx();
214        let mut pnt = pnt;
215        pnt.do_not_free_on_drop();
216        let pnt = pnt.ptr;
217        let type_ = type_.to_i32();
218        let isl_rs_result = unsafe { isl_point_sub_ui(pnt, type_, pos, val) };
219        let isl_rs_result = Point { ptr: isl_rs_result,
220                                    should_free_on_drop: true };
221        let err = isl_rs_ctx.last_error();
222        if err != Error::None_ {
223            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
224        }
225        Ok(isl_rs_result)
226    }
227
228    /// Wraps `isl_point_to_set`.
229    pub fn to_set(self) -> Result<Set, LibISLError> {
230        let pnt = self;
231        let isl_rs_ctx = pnt.get_ctx();
232        let mut pnt = pnt;
233        pnt.do_not_free_on_drop();
234        let pnt = pnt.ptr;
235        let isl_rs_result = unsafe { isl_point_to_set(pnt) };
236        let isl_rs_result = Set { ptr: isl_rs_result,
237                                  should_free_on_drop: true };
238        let err = isl_rs_ctx.last_error();
239        if err != Error::None_ {
240            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
241        }
242        Ok(isl_rs_result)
243    }
244
245    /// Wraps `isl_point_to_str`.
246    pub fn to_str(&self) -> Result<&str, LibISLError> {
247        let pnt = self;
248        let isl_rs_ctx = pnt.get_ctx();
249        let pnt = pnt.ptr;
250        let isl_rs_result = unsafe { isl_point_to_str(pnt) };
251        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
252        let isl_rs_result = isl_rs_result.to_str().unwrap();
253        let err = isl_rs_ctx.last_error();
254        if err != Error::None_ {
255            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
256        }
257        Ok(isl_rs_result)
258    }
259
260    /// Wraps `isl_point_void`.
261    pub fn void(space: Space) -> Result<Point, LibISLError> {
262        let isl_rs_ctx = space.get_ctx();
263        let mut space = space;
264        space.do_not_free_on_drop();
265        let space = space.ptr;
266        let isl_rs_result = unsafe { isl_point_void(space) };
267        let isl_rs_result = Point { ptr: isl_rs_result,
268                                    should_free_on_drop: true };
269        let err = isl_rs_ctx.last_error();
270        if err != Error::None_ {
271            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
272        }
273        Ok(isl_rs_result)
274    }
275
276    /// Wraps `isl_point_zero`.
277    pub fn zero(space: Space) -> Result<Point, LibISLError> {
278        let isl_rs_ctx = space.get_ctx();
279        let mut space = space;
280        space.do_not_free_on_drop();
281        let space = space.ptr;
282        let isl_rs_result = unsafe { isl_point_zero(space) };
283        let isl_rs_result = Point { ptr: isl_rs_result,
284                                    should_free_on_drop: true };
285        let err = isl_rs_ctx.last_error();
286        if err != Error::None_ {
287            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
288        }
289        Ok(isl_rs_result)
290    }
291
292    /// Does not call isl_point_free() on being dropped. (For internal use
293    /// only.)
294    pub fn do_not_free_on_drop(&mut self) {
295        self.should_free_on_drop = false;
296    }
297}
298
299impl Drop for Point {
300    fn drop(&mut self) {
301        if self.should_free_on_drop {
302            unsafe {
303                isl_point_free(self.ptr);
304            }
305        }
306    }
307}