#[macro_export]
macro_rules! for_each_static_allocator {
($alloc:ident => $action:expr) => {{
$crate::allocator::STATIC_ALLOCATORS.iter().any(|(alloc_ref, _)| {
let $alloc = *alloc_ref;
$action
})
}};
}
#[macro_export]
macro_rules! try_each_static_allocator {
($memory_type_var:ident, $alloc:ident => $action:expr) => {{
let mut found = false;
for (alloc_ref, mem_type) in $crate::allocator::STATIC_ALLOCATORS.iter() {
let $alloc = *alloc_ref;
if $action.is_ok() {
$memory_type_var = *mem_type;
found = true;
break;
}
}
found
}};
}
#[macro_export]
macro_rules! match_static_allocator {
($memory_type:expr, $alloc:ident => $action:expr, $fallback:expr) => {{
let mut result = None;
for (alloc_ref, mem_type) in $crate::allocator::STATIC_ALLOCATORS.iter() {
if *mem_type == $memory_type {
let $alloc = *alloc_ref;
result = Some($action);
break;
}
}
match result {
Some(value) => value,
None => $fallback,
}
}};
}