isl_rs/bindings/
stride_info.rs

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