use core::mem::MaybeUninit;
use core::ops::{Deref, DerefMut};
use super::DEFAULT_ARRAY_BUFFER;
#[repr(align(8))]
pub struct ArrayBuffer<const N: usize = DEFAULT_ARRAY_BUFFER> {
data: [MaybeUninit<u8>; N],
}
impl ArrayBuffer {
pub const fn new() -> Self {
Self::with_size()
}
}
impl Default for ArrayBuffer {
#[inline]
fn default() -> Self {
Self::new()
}
}
impl<const N: usize> ArrayBuffer<N> {
pub const fn with_size() -> Self {
Self {
data: unsafe { MaybeUninit::uninit().assume_init() },
}
}
}
impl<const N: usize> Deref for ArrayBuffer<N> {
type Target = [MaybeUninit<u8>];
#[inline]
fn deref(&self) -> &Self::Target {
&self.data
}
}
impl<const N: usize> DerefMut for ArrayBuffer<N> {
#[inline]
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.data
}
}