#![allow(dead_code)]
#[macro_export]
macro_rules! get_count {
($fn: ident) => {{
let mut count = cl_uint::default();
let status_code = unsafe { $fn(0, ptr::null_mut(), &mut count) };
status_update(status_code, stringify!($fn), count)?
}};
($fn: ident, $param_1: ident, $param_2: ident) => {{
let mut count = cl_uint::default();
let status_code = unsafe { $fn($param_1, $param_2, 0, ptr::null_mut(), &mut count) };
status_update(status_code, stringify!($fn), count)?
}};
($fn: ident, $param_1: ident, $param_2: ident, $param_3: ident) => {{
let mut count = cl_uint::default();
let status_code =
unsafe { $fn($param_1, $param_2, $param_3, 0, ptr::null_mut(), &mut count) };
status_update(status_code, stringify!($fn), count)?
}};
}
#[macro_export]
macro_rules! size_getter {
($name:ident, $fn:ident) => {
let $name = |ret_dat_ptr: *mut libc::c_void, param_name: cl_uint| -> APIResult<size_t> {
let mut size: size_t = 0;
let status_code = unsafe {
$fn(
ret_dat_ptr,
param_name,
0,
ptr::null_mut(),
&mut size as *mut size_t,
)
};
status_update(status_code, stringify!($fn), size)
};
};
}
#[macro_export]
macro_rules! gen_param_value {
($fn:ident, $typ:tt, $ptr: ident, $param_name: ident, $size: ident) => {{
if $size == 0 {
Vec::default()
} else {
let arr_len = $size / Size::$typ.get();
let mut param_value: Vec<$typ> = std::vec::from_elem($typ::default(), arr_len);
let status_code = unsafe {
$fn(
$ptr,
$param_name,
$size,
param_value.as_mut_ptr() as *mut c_void,
ptr::null_mut(),
)
};
status_update(status_code, stringify!($fn), param_value)?
}
}};
($fn:ident, $typ:tt, $ptr: ident, $param_name: ident) => {{
let size = Size::$typ.get();
let mut param_value = $typ::default();
let status_code = unsafe {
$fn(
$ptr,
$param_name,
size,
crate::objects::functions::to_mut_ptr(&mut param_value) as *mut c_void,
ptr::null_mut(),
)
};
status_update(status_code, stringify!($fn), param_value)?
}};
}
#[macro_export]
macro_rules! gen_object_list {
($fn:ident, $typ:tt, $count: ident) => {{
let arr_len = $count as usize;
let mut all_objects: $typ = std::vec::from_elem(ptr::null_mut(), arr_len);
let status_code = unsafe { $fn($count, all_objects.as_mut_ptr(), ptr::null_mut()) };
status_update(status_code, stringify!($fn), all_objects)
}};
($fn:ident, $typ:tt, $count: ident, $param_1: ident, $param_2: ident) => {{
let arr_len = $count as usize;
let mut all_objects: $typ = std::vec::from_elem(ptr::null_mut(), arr_len);
let status_code = unsafe {
$fn(
$param_1,
$param_2,
$count,
all_objects.as_mut_ptr(),
ptr::null_mut(),
)
};
status_update(status_code, stringify!($fn), all_objects)
}};
($fn:ident, $typ:tt, $count: ident, $param_1: ident, $param_2: ident, $param_3: ident) => {{
let arr_len = $count as usize;
let mut all_objects: Vec<$typ> = std::vec::from_elem($typ::default(), arr_len);
let status_code = unsafe {
$fn(
$param_1,
$param_2,
$param_3,
$count,
all_objects.as_mut_ptr() as *mut $typ,
ptr::null_mut(),
)
};
status_update(status_code, stringify!($fn), all_objects)
}};
}
#[macro_export]
macro_rules! gen_add_trait {
($name:ident) => {
impl std::ops::Add for $name {
type Output = Self;
fn add(self, other: Self) -> Self::Output {
Self(self.0 | other.0)
}
}
};
}