1#![allow(dead_code)]
20
21#[macro_export]
22macro_rules! get_count {
23 ($fn: ident) => {{
25 let mut count = cl_uint::default();
26 let status_code = unsafe { $fn(0, ptr::null_mut(), &mut count) };
27 status_update(status_code, stringify!($fn), count)?
28 }};
29 ($fn: ident, $param_1: ident, $param_2: ident) => {{
31 let mut count = cl_uint::default();
32 let status_code = unsafe { $fn($param_1, $param_2, 0, ptr::null_mut(), &mut count) };
33 status_update(status_code, stringify!($fn), count)?
34 }};
35 ($fn: ident, $param_1: ident, $param_2: ident, $param_3: ident) => {{
37 let mut count = cl_uint::default();
38 let status_code =
39 unsafe { $fn($param_1, $param_2, $param_3, 0, ptr::null_mut(), &mut count) };
40 status_update(status_code, stringify!($fn), count)?
41 }};
42}
43
44#[macro_export]
45macro_rules! size_getter {
46 ($name:ident, $fn:ident) => {
47 let $name = |ret_dat_ptr: *mut libc::c_void, param_name: cl_uint| -> APIResult<size_t> {
48 let mut size: size_t = 0;
49 let status_code = unsafe {
50 $fn(
51 ret_dat_ptr,
52 param_name,
53 0,
54 ptr::null_mut(),
55 &mut size as *mut size_t,
56 )
57 };
58 status_update(status_code, stringify!($fn), size)
59 };
60 };
61}
62
63#[macro_export]
64macro_rules! gen_param_value {
65 ($fn:ident, $typ:tt, $ptr: ident, $param_name: ident, $size: ident) => {{
67 if $size == 0 {
68 Vec::default()
69 } else {
70 let arr_len = $size / Size::$typ.get();
71 let mut param_value: Vec<$typ> = std::vec::from_elem($typ::default(), arr_len);
72 let status_code = unsafe {
73 $fn(
74 $ptr,
75 $param_name,
76 $size,
77 param_value.as_mut_ptr() as *mut c_void,
78 ptr::null_mut(),
79 )
80 };
81 status_update(status_code, stringify!($fn), param_value)?
82 }
83 }};
84
85 ($fn:ident, $typ:tt, $ptr: ident, $param_name: ident) => {{
87 let size = Size::$typ.get();
88 let mut param_value = $typ::default();
89 let status_code = unsafe {
90 $fn(
91 $ptr,
92 $param_name,
93 size,
94 crate::objects::functions::to_mut_ptr(&mut param_value) as *mut c_void,
95 ptr::null_mut(),
96 )
97 };
98 status_update(status_code, stringify!($fn), param_value)?
99 }};
100}
101
102#[macro_export]
103macro_rules! gen_object_list {
104 ($fn:ident, $typ:tt, $count: ident) => {{
106 let arr_len = $count as usize;
107 let mut all_objects: $typ = std::vec::from_elem(ptr::null_mut(), arr_len);
108 let status_code = unsafe { $fn($count, all_objects.as_mut_ptr(), ptr::null_mut()) };
109 status_update(status_code, stringify!($fn), all_objects)
110 }};
111
112 ($fn:ident, $typ:tt, $count: ident, $param_1: ident, $param_2: ident) => {{
114 let arr_len = $count as usize;
115 let mut all_objects: $typ = std::vec::from_elem(ptr::null_mut(), arr_len);
116 let status_code = unsafe {
117 $fn(
118 $param_1,
119 $param_2,
120 $count,
121 all_objects.as_mut_ptr(),
122 ptr::null_mut(),
123 )
124 };
125 status_update(status_code, stringify!($fn), all_objects)
126 }};
127
128 ($fn:ident, $typ:tt, $count: ident, $param_1: ident, $param_2: ident, $param_3: ident) => {{
130 let arr_len = $count as usize;
131 let mut all_objects: Vec<$typ> = std::vec::from_elem($typ::default(), arr_len);
132 let status_code = unsafe {
133 $fn(
134 $param_1,
135 $param_2,
136 $param_3,
137 $count,
138 all_objects.as_mut_ptr() as *mut $typ,
139 ptr::null_mut(),
140 )
141 };
142 status_update(status_code, stringify!($fn), all_objects)
143 }};
144}
145
146#[macro_export]
147macro_rules! gen_add_trait {
148 ($name:ident) => {
149 impl std::ops::Add for $name {
150 type Output = Self;
151 fn add(self, other: Self) -> Self::Output {
152 Self(self.0 | other.0)
153 }
154 }
155 };
156}