isl_rs/bindings/
vertex.rs

1// Automatically generated by isl_bindings_generator.
2// LICENSE: MIT
3
4use super::{BasicSet, Context, Error, LibISLError, MultiAff};
5use libc::uintptr_t;
6
7/// Wraps `isl_vertex`.
8pub struct Vertex {
9    pub ptr: uintptr_t,
10    pub should_free_on_drop: bool,
11}
12
13extern "C" {
14
15    fn isl_vertex_free(vertex: uintptr_t) -> uintptr_t;
16
17    fn isl_vertex_get_ctx(vertex: uintptr_t) -> uintptr_t;
18
19    fn isl_vertex_get_domain(vertex: uintptr_t) -> uintptr_t;
20
21    fn isl_vertex_get_expr(vertex: uintptr_t) -> uintptr_t;
22
23    fn isl_vertex_get_id(vertex: uintptr_t) -> i32;
24
25}
26
27impl Vertex {
28    /// Wraps `isl_vertex_free`.
29    pub fn free(self) -> Result<Vertex, LibISLError> {
30        let vertex = self;
31        let isl_rs_ctx = vertex.get_ctx();
32        let mut vertex = vertex;
33        vertex.do_not_free_on_drop();
34        let vertex = vertex.ptr;
35        let isl_rs_result = unsafe { isl_vertex_free(vertex) };
36        let isl_rs_result = Vertex { ptr: isl_rs_result,
37                                     should_free_on_drop: true };
38        let err = isl_rs_ctx.last_error();
39        if err != Error::None_ {
40            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
41        }
42        Ok(isl_rs_result)
43    }
44
45    /// Wraps `isl_vertex_get_ctx`.
46    pub fn get_ctx(&self) -> Context {
47        let vertex = self;
48        let vertex = vertex.ptr;
49        let isl_rs_result = unsafe { isl_vertex_get_ctx(vertex) };
50        let isl_rs_result = Context { ptr: isl_rs_result,
51                                      should_free_on_drop: false };
52        isl_rs_result
53    }
54
55    /// Wraps `isl_vertex_get_domain`.
56    pub fn get_domain(&self) -> Result<BasicSet, LibISLError> {
57        let vertex = self;
58        let isl_rs_ctx = vertex.get_ctx();
59        let vertex = vertex.ptr;
60        let isl_rs_result = unsafe { isl_vertex_get_domain(vertex) };
61        let isl_rs_result = BasicSet { ptr: isl_rs_result,
62                                       should_free_on_drop: true };
63        let err = isl_rs_ctx.last_error();
64        if err != Error::None_ {
65            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
66        }
67        Ok(isl_rs_result)
68    }
69
70    /// Wraps `isl_vertex_get_expr`.
71    pub fn get_expr(&self) -> Result<MultiAff, LibISLError> {
72        let vertex = self;
73        let isl_rs_ctx = vertex.get_ctx();
74        let vertex = vertex.ptr;
75        let isl_rs_result = unsafe { isl_vertex_get_expr(vertex) };
76        let isl_rs_result = MultiAff { ptr: isl_rs_result,
77                                       should_free_on_drop: true };
78        let err = isl_rs_ctx.last_error();
79        if err != Error::None_ {
80            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
81        }
82        Ok(isl_rs_result)
83    }
84
85    /// Wraps `isl_vertex_get_id`.
86    pub fn get_id(&self) -> Result<i32, LibISLError> {
87        let vertex = self;
88        let isl_rs_ctx = vertex.get_ctx();
89        let vertex = vertex.ptr;
90        let isl_rs_result = unsafe { isl_vertex_get_id(vertex) };
91        let err = isl_rs_ctx.last_error();
92        if err != Error::None_ {
93            return Err(LibISLError::new(err, isl_rs_ctx.last_error_msg()));
94        }
95        Ok(isl_rs_result)
96    }
97
98    /// Does not call isl_vertex_free() on being dropped. (For internal use
99    /// only.)
100    pub fn do_not_free_on_drop(&mut self) {
101        self.should_free_on_drop = false;
102    }
103}
104
105impl Drop for Vertex {
106    fn drop(&mut self) {
107        if self.should_free_on_drop {
108            unsafe {
109                isl_vertex_free(self.ptr);
110            }
111        }
112    }
113}