use super::traits::{Storage, StorageMut};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct StackStorage<T, const CAP: usize> {
data: [T; CAP],
}
impl<T, const CAP: usize> StackStorage<T, CAP> {
#[inline]
pub const fn new(data: [T; CAP]) -> Self {
Self { data }
}
#[inline]
pub fn fill(value: T) -> Self
where
T: Copy,
{
Self { data: [value; CAP] }
}
#[inline]
pub fn into_inner(self) -> [T; CAP] {
self.data
}
}
impl<T, const CAP: usize> Storage<T> for StackStorage<T, CAP> {
#[inline]
fn as_slice(&self) -> &[T] {
&self.data
}
}
impl<T, const CAP: usize> StorageMut<T> for StackStorage<T, CAP> {
#[inline]
fn as_mut_slice(&mut self) -> &mut [T] {
&mut self.data
}
}