isl_rs/bindings/
stride_info.rs1use crate::bindings::{Aff, Context, Val};
5use libc::uintptr_t;
6
7pub struct StrideInfo {
9 pub ptr: uintptr_t,
10 pub should_free_on_drop: bool,
11}
12
13extern "C" {
14
15 fn isl_stride_info_get_ctx(si: uintptr_t) -> uintptr_t;
16
17 fn isl_stride_info_get_stride(si: uintptr_t) -> uintptr_t;
18
19 fn isl_stride_info_get_offset(si: uintptr_t) -> uintptr_t;
20
21 fn isl_stride_info_free(si: uintptr_t) -> uintptr_t;
22
23 fn isl_stride_info_copy(si: uintptr_t) -> uintptr_t;
24
25}
26
27impl StrideInfo {
28 pub fn get_ctx(&self) -> Context {
30 let si = self;
31 let si = si.ptr;
32 let isl_rs_result = unsafe { isl_stride_info_get_ctx(si) };
33 let isl_rs_result = Context { ptr: isl_rs_result,
34 should_free_on_drop: true };
35 let mut isl_rs_result = isl_rs_result;
36 isl_rs_result.do_not_free_on_drop();
37 isl_rs_result
38 }
39
40 pub fn get_stride(&self) -> Val {
42 let si = self;
43 let si = si.ptr;
44 let isl_rs_result = unsafe { isl_stride_info_get_stride(si) };
45 let isl_rs_result = Val { ptr: isl_rs_result,
46 should_free_on_drop: true };
47 isl_rs_result
48 }
49
50 pub fn get_offset(&self) -> Aff {
52 let si = self;
53 let si = si.ptr;
54 let isl_rs_result = unsafe { isl_stride_info_get_offset(si) };
55 let isl_rs_result = Aff { ptr: isl_rs_result,
56 should_free_on_drop: true };
57 isl_rs_result
58 }
59
60 pub fn free(self) -> StrideInfo {
62 let si = self;
63 let mut si = si;
64 si.do_not_free_on_drop();
65 let si = si.ptr;
66 let isl_rs_result = unsafe { isl_stride_info_free(si) };
67 let isl_rs_result = StrideInfo { ptr: isl_rs_result,
68 should_free_on_drop: true };
69 isl_rs_result
70 }
71
72 pub fn copy(&self) -> StrideInfo {
74 let si = self;
75 let si = si.ptr;
76 let isl_rs_result = unsafe { isl_stride_info_copy(si) };
77 let isl_rs_result = StrideInfo { ptr: isl_rs_result,
78 should_free_on_drop: true };
79 isl_rs_result
80 }
81
82 pub fn do_not_free_on_drop(&mut self) {
84 self.should_free_on_drop = false;
85 }
86}
87
88impl Drop for StrideInfo {
89 fn drop(&mut self) {
90 if self.should_free_on_drop {
91 unsafe {
92 isl_stride_info_free(self.ptr);
93 }
94 }
95 }
96}