isl_rs/bindings/
id.rs

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