use alloc::vec::Vec;
use core::{mem::MaybeUninit, ptr};
mod executor;
pub use executor::block_on;
#[cfg(not(feature = "crossbeam-utils"))]
mod backoff;
#[cfg(not(feature = "crossbeam-utils"))]
mod cache_padded;
#[cfg(not(feature = "crossbeam-utils"))]
pub use backoff::Backoff;
#[cfg(not(feature = "crossbeam-utils"))]
pub use cache_padded::CachePadded;
#[cfg(feature = "crossbeam-utils")]
pub use crossbeam_utils::{Backoff, CachePadded};
pub(crate) unsafe fn extend_vec_from_slice<T>(
vec: &mut Vec<T>,
slice: &[MaybeUninit<T>],
) {
let len = vec.len();
vec.reserve(slice.len());
let src = slice;
let dst = &mut vec.spare_capacity_mut()[..slice.len()];
unsafe {
ptr::copy_nonoverlapping(src.as_ptr(), dst.as_mut_ptr(), slice.len());
}
unsafe { vec.set_len(len + slice.len()) };
}