use crate::utils::UnsafeSyncCell;
#[cfg(feature = "alloc")]
pub use alloc::heap::HeapStorage;
#[cfg(all(feature = "alloc", feature = "vmem", unix))]
pub use alloc::vmem::VmemStorage;
pub use stack::StackStorage;
pub(crate) mod alloc;
pub(crate) mod stack;
#[allow(clippy::len_without_is_empty)]
pub(crate) trait PStorageComponent: StorageComponent {
fn _index(&self, index: usize) -> &UnsafeSyncCell<Self::Item>;
fn len(&self) -> usize;
fn next_chunk<'a>(&self, index: usize, count: usize) -> Self::SliceOutput<'a>;
fn next_chunk_mut<'a>(&mut self, index: usize, count: usize) -> Self::SliceOutputMut<'a>;
fn _push_slice(
&mut self,
index: usize,
slice: &[Self::Item],
f: fn(&mut [Self::Item], &[Self::Item]),
);
fn _extract_slice(
&mut self,
index: usize,
dst: &mut [Self::Item],
f: fn(&[Self::Item], &mut [Self::Item]),
);
}
pub trait StorageComponent {
type Item;
type SliceOutput<'a>
where
Self::Item: 'a;
type SliceOutputMut<'a>
where
Self::Item: 'a;
}