isl_rs/bindings/
id_to_ast_expr.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{ASTExpr, Context, Error, Id, LibISLError};
5use libc::uintptr_t;
6use std::ffi::{CStr, CString};
7use std::os::raw::c_char;
8
9/// Wraps `isl_id_to_ast_expr`.
10pub struct IdToASTExpr {
11    pub ptr: uintptr_t,
12    pub should_free_on_drop: bool,
13}
14
15extern "C" {
16
17    fn isl_id_to_ast_expr_alloc(ctx: uintptr_t, min_size: i32) -> uintptr_t;
18
19    fn isl_id_to_ast_expr_copy(hmap: uintptr_t) -> uintptr_t;
20
21    fn isl_id_to_ast_expr_drop(hmap: uintptr_t, key: uintptr_t) -> uintptr_t;
22
23    fn isl_id_to_ast_expr_dump(hmap: uintptr_t) -> ();
24
25    fn isl_id_to_ast_expr_free(hmap: uintptr_t) -> uintptr_t;
26
27    fn isl_id_to_ast_expr_get(hmap: uintptr_t, key: uintptr_t) -> uintptr_t;
28
29    fn isl_id_to_ast_expr_get_ctx(hmap: uintptr_t) -> uintptr_t;
30
31    fn isl_id_to_ast_expr_has(hmap: uintptr_t, key: uintptr_t) -> i32;
32
33    fn isl_id_to_ast_expr_is_equal(hmap1: uintptr_t, hmap2: uintptr_t) -> i32;
34
35    fn isl_id_to_ast_expr_read_from_str(ctx: uintptr_t, str_: *const c_char) -> uintptr_t;
36
37    fn isl_id_to_ast_expr_set(hmap: uintptr_t, key: uintptr_t, val: uintptr_t) -> uintptr_t;
38
39    fn isl_id_to_ast_expr_to_str(hmap: uintptr_t) -> *const c_char;
40
41}
42
43impl IdToASTExpr {
44    /// Wraps `isl_id_to_ast_expr_alloc`.
45    pub fn alloc(ctx: &Context, min_size: i32) -> Result<IdToASTExpr, LibISLError> {
46        let isl_rs_ctx = Context { ptr: ctx.ptr,
47                                   should_free_on_drop: false };
48        let ctx = ctx.ptr;
49        let isl_rs_result = unsafe { isl_id_to_ast_expr_alloc(ctx, min_size) };
50        let isl_rs_result = IdToASTExpr { ptr: isl_rs_result,
51                                          should_free_on_drop: true };
52        let err = isl_rs_ctx.last_error();
53        if err != Error::None_ {
54            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
55        }
56        Ok(isl_rs_result)
57    }
58
59    /// Wraps `isl_id_to_ast_expr_copy`.
60    pub fn copy(&self) -> Result<IdToASTExpr, LibISLError> {
61        let hmap = self;
62        let isl_rs_ctx = hmap.get_ctx();
63        let hmap = hmap.ptr;
64        let isl_rs_result = unsafe { isl_id_to_ast_expr_copy(hmap) };
65        let isl_rs_result = IdToASTExpr { ptr: isl_rs_result,
66                                          should_free_on_drop: true };
67        let err = isl_rs_ctx.last_error();
68        if err != Error::None_ {
69            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
70        }
71        Ok(isl_rs_result)
72    }
73
74    /// Wraps `isl_id_to_ast_expr_drop`.
75    pub fn drop(self, key: Id) -> Result<IdToASTExpr, LibISLError> {
76        let hmap = self;
77        let isl_rs_ctx = hmap.get_ctx();
78        let mut hmap = hmap;
79        hmap.do_not_free_on_drop();
80        let hmap = hmap.ptr;
81        let mut key = key;
82        key.do_not_free_on_drop();
83        let key = key.ptr;
84        let isl_rs_result = unsafe { isl_id_to_ast_expr_drop(hmap, key) };
85        let isl_rs_result = IdToASTExpr { ptr: isl_rs_result,
86                                          should_free_on_drop: true };
87        let err = isl_rs_ctx.last_error();
88        if err != Error::None_ {
89            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
90        }
91        Ok(isl_rs_result)
92    }
93
94    /// Wraps `isl_id_to_ast_expr_dump`.
95    pub fn dump(&self) -> Result<(), LibISLError> {
96        let hmap = self;
97        let isl_rs_ctx = hmap.get_ctx();
98        let hmap = hmap.ptr;
99        let isl_rs_result = unsafe { isl_id_to_ast_expr_dump(hmap) };
100        let err = isl_rs_ctx.last_error();
101        if err != Error::None_ {
102            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
103        }
104        Ok(isl_rs_result)
105    }
106
107    /// Wraps `isl_id_to_ast_expr_free`.
108    pub fn free(self) -> Result<IdToASTExpr, LibISLError> {
109        let hmap = self;
110        let isl_rs_ctx = hmap.get_ctx();
111        let mut hmap = hmap;
112        hmap.do_not_free_on_drop();
113        let hmap = hmap.ptr;
114        let isl_rs_result = unsafe { isl_id_to_ast_expr_free(hmap) };
115        let isl_rs_result = IdToASTExpr { ptr: isl_rs_result,
116                                          should_free_on_drop: true };
117        let err = isl_rs_ctx.last_error();
118        if err != Error::None_ {
119            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
120        }
121        Ok(isl_rs_result)
122    }
123
124    /// Wraps `isl_id_to_ast_expr_get`.
125    pub fn get(&self, key: Id) -> Result<ASTExpr, LibISLError> {
126        let hmap = self;
127        let isl_rs_ctx = hmap.get_ctx();
128        let hmap = hmap.ptr;
129        let mut key = key;
130        key.do_not_free_on_drop();
131        let key = key.ptr;
132        let isl_rs_result = unsafe { isl_id_to_ast_expr_get(hmap, key) };
133        let isl_rs_result = ASTExpr { ptr: isl_rs_result,
134                                      should_free_on_drop: true };
135        let err = isl_rs_ctx.last_error();
136        if err != Error::None_ {
137            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
138        }
139        Ok(isl_rs_result)
140    }
141
142    /// Wraps `isl_id_to_ast_expr_get_ctx`.
143    pub fn get_ctx(&self) -> Context {
144        let hmap = self;
145        let hmap = hmap.ptr;
146        let isl_rs_result = unsafe { isl_id_to_ast_expr_get_ctx(hmap) };
147        let isl_rs_result = Context { ptr: isl_rs_result,
148                                      should_free_on_drop: false };
149        isl_rs_result
150    }
151
152    /// Wraps `isl_id_to_ast_expr_has`.
153    pub fn has(&self, key: &Id) -> Result<bool, LibISLError> {
154        let hmap = self;
155        let isl_rs_ctx = hmap.get_ctx();
156        let hmap = hmap.ptr;
157        let key = key.ptr;
158        let isl_rs_result = unsafe { isl_id_to_ast_expr_has(hmap, key) };
159        let isl_rs_result = match isl_rs_result {
160            0 => false,
161            1 => true,
162            _ => panic!("Got isl_bool = -1"),
163        };
164        let err = isl_rs_ctx.last_error();
165        if err != Error::None_ {
166            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
167        }
168        Ok(isl_rs_result)
169    }
170
171    /// Wraps `isl_id_to_ast_expr_is_equal`.
172    pub fn is_equal(&self, hmap2: &IdToASTExpr) -> Result<bool, LibISLError> {
173        let hmap1 = self;
174        let isl_rs_ctx = hmap1.get_ctx();
175        let hmap1 = hmap1.ptr;
176        let hmap2 = hmap2.ptr;
177        let isl_rs_result = unsafe { isl_id_to_ast_expr_is_equal(hmap1, hmap2) };
178        let isl_rs_result = match isl_rs_result {
179            0 => false,
180            1 => true,
181            _ => panic!("Got isl_bool = -1"),
182        };
183        let err = isl_rs_ctx.last_error();
184        if err != Error::None_ {
185            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
186        }
187        Ok(isl_rs_result)
188    }
189
190    /// Wraps `isl_id_to_ast_expr_read_from_str`.
191    pub fn read_from_str(ctx: &Context, str_: &str) -> Result<IdToASTExpr, LibISLError> {
192        let isl_rs_ctx = Context { ptr: ctx.ptr,
193                                   should_free_on_drop: false };
194        let ctx = ctx.ptr;
195        let str_ = CString::new(str_).unwrap();
196        let str_ = str_.as_ptr();
197        let isl_rs_result = unsafe { isl_id_to_ast_expr_read_from_str(ctx, str_) };
198        let isl_rs_result = IdToASTExpr { ptr: isl_rs_result,
199                                          should_free_on_drop: true };
200        let err = isl_rs_ctx.last_error();
201        if err != Error::None_ {
202            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
203        }
204        Ok(isl_rs_result)
205    }
206
207    /// Wraps `isl_id_to_ast_expr_set`.
208    pub fn set(self, key: Id, val: ASTExpr) -> Result<IdToASTExpr, LibISLError> {
209        let hmap = self;
210        let isl_rs_ctx = hmap.get_ctx();
211        let mut hmap = hmap;
212        hmap.do_not_free_on_drop();
213        let hmap = hmap.ptr;
214        let mut key = key;
215        key.do_not_free_on_drop();
216        let key = key.ptr;
217        let mut val = val;
218        val.do_not_free_on_drop();
219        let val = val.ptr;
220        let isl_rs_result = unsafe { isl_id_to_ast_expr_set(hmap, key, val) };
221        let isl_rs_result = IdToASTExpr { ptr: isl_rs_result,
222                                          should_free_on_drop: true };
223        let err = isl_rs_ctx.last_error();
224        if err != Error::None_ {
225            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
226        }
227        Ok(isl_rs_result)
228    }
229
230    /// Wraps `isl_id_to_ast_expr_to_str`.
231    pub fn to_str(&self) -> Result<&str, LibISLError> {
232        let hmap = self;
233        let isl_rs_ctx = hmap.get_ctx();
234        let hmap = hmap.ptr;
235        let isl_rs_result = unsafe { isl_id_to_ast_expr_to_str(hmap) };
236        let isl_rs_result = unsafe { CStr::from_ptr(isl_rs_result) };
237        let isl_rs_result = isl_rs_result.to_str().unwrap();
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    /// Does not call isl_id_to_ast_expr_free() on being dropped. (For internal
246    /// use only.)
247    pub fn do_not_free_on_drop(&mut self) {
248        self.should_free_on_drop = false;
249    }
250}
251
252impl Drop for IdToASTExpr {
253    fn drop(&mut self) {
254        if self.should_free_on_drop {
255            unsafe {
256                isl_id_to_ast_expr_free(self.ptr);
257            }
258        }
259    }
260}