use std::{cell::UnsafeCell, mem::MaybeUninit};
pub mod array;
pub mod dynamic;
pub trait Buffer<T>: Sync {
fn size(&self) -> usize;
fn at(&self, idx: usize) -> *const UnsafeCell<MaybeUninit<T>>;
}
impl<T, B: Buffer<T>> Buffer<T> for &mut B {
fn size(&self) -> usize {
(**self).size()
}
fn at(&self, idx: usize) -> *const UnsafeCell<MaybeUninit<T>> {
(**self).at(idx)
}
}
impl<T, B: Buffer<T>> Buffer<T> for Box<B> {
fn size(&self) -> usize {
(**self).size()
}
fn at(&self, idx: usize) -> * const UnsafeCell<MaybeUninit<T>> {
(**self).at(idx)
}
}