macro_rules! map_ptr {
($buffer:expr) => {
match $buffer {
Some(b) => b.as_ptr() as _,
None => 0 as _,
}
};
}
macro_rules! map_len {
($buffer:expr) => {
match $buffer {
Some(b) => b.capacity() as _,
None => 0,
}
};
}
macro_rules! map_reserve {
($buffer:expr, $size:expr) => {
match $buffer {
Some(ref mut b) => crate::utils::map_reserve_inner(b, $size),
_ => (),
}
};
}
pub(crate) fn map_reserve_inner<T>(b: &mut Vec<T>, size: usize) {
let old_len = b.len();
if size <= old_len {
return;
}
b.reserve_exact(size - old_len);
unsafe {
let ptr = b.as_mut_ptr().add(old_len) as *mut u8;
ptr.write_bytes(0, (size - old_len) * std::mem::size_of::<T>());
}
}
macro_rules! map_set {
($buffer:expr, $min:expr) => {
match $buffer {
Some(ref mut b) => unsafe { b.set_len($min) },
_ => (),
}
};
}