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            let err_msg = isl_rs_ctx.last_error_msg();
41            isl_rs_ctx.reset_error();
42            return Err(LibISLError::new(err, err_msg));
43        }
44        Ok(isl_rs_result)
45    }
46
47    /// Wraps `isl_vertex_get_ctx`.
48    pub fn get_ctx(&self) -> Context {
49        let vertex = self;
50        let vertex = vertex.ptr;
51        let isl_rs_result = unsafe { isl_vertex_get_ctx(vertex) };
52        let isl_rs_result = Context { ptr: isl_rs_result,
53                                      should_free_on_drop: false };
54        isl_rs_result
55    }
56
57    /// Wraps `isl_vertex_get_domain`.
58    pub fn get_domain(&self) -> Result<BasicSet, LibISLError> {
59        let vertex = self;
60        let isl_rs_ctx = vertex.get_ctx();
61        let vertex = vertex.ptr;
62        let isl_rs_result = unsafe { isl_vertex_get_domain(vertex) };
63        let isl_rs_result = BasicSet { ptr: isl_rs_result,
64                                       should_free_on_drop: true };
65        let err = isl_rs_ctx.last_error();
66        if err != Error::None_ {
67            let err_msg = isl_rs_ctx.last_error_msg();
68            isl_rs_ctx.reset_error();
69            return Err(LibISLError::new(err, err_msg));
70        }
71        Ok(isl_rs_result)
72    }
73
74    /// Wraps `isl_vertex_get_expr`.
75    pub fn get_expr(&self) -> Result<MultiAff, LibISLError> {
76        let vertex = self;
77        let isl_rs_ctx = vertex.get_ctx();
78        let vertex = vertex.ptr;
79        let isl_rs_result = unsafe { isl_vertex_get_expr(vertex) };
80        let isl_rs_result = MultiAff { 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_vertex_get_id`.
92    pub fn get_id(&self) -> Result<i32, LibISLError> {
93        let vertex = self;
94        let isl_rs_ctx = vertex.get_ctx();
95        let vertex = vertex.ptr;
96        let isl_rs_result = unsafe { isl_vertex_get_id(vertex) };
97        let err = isl_rs_ctx.last_error();
98        if err != Error::None_ {
99            let err_msg = isl_rs_ctx.last_error_msg();
100            isl_rs_ctx.reset_error();
101            return Err(LibISLError::new(err, err_msg));
102        }
103        Ok(isl_rs_result)
104    }
105
106    /// Does not call isl_vertex_free() on being dropped. (For internal use
107    /// only.)
108    pub fn do_not_free_on_drop(&mut self) {
109        self.should_free_on_drop = false;
110    }
111}
112
113impl Drop for Vertex {
114    fn drop(&mut self) {
115        if self.should_free_on_drop {
116            unsafe {
117                isl_vertex_free(self.ptr);
118            }
119        }
120    }
121}