use minarrow::Vec64;
pub trait StreamBuffer: AsRef<[u8]> + Default + Extend<u8> + Send + Sync + 'static {
const ALIGN: usize;
fn with_capacity(n: usize) -> Self;
fn reserve(&mut self, additional: usize);
fn drain(&mut self, range: std::ops::Range<usize>);
fn len(&self) -> usize;
fn is_empty(&self) -> bool {
self.len() == 0
}
fn extend_from_slice(&mut self, data: &[u8]);
fn push(&mut self, byte: u8);
fn from_slice(data: &[u8]) -> Self;
}
impl StreamBuffer for Vec<u8> {
const ALIGN: usize = 8;
#[inline]
fn with_capacity(n: usize) -> Self {
Vec::with_capacity(n)
}
#[inline]
fn reserve(&mut self, additional: usize) {
Vec::<u8>::reserve(self, additional);
}
#[inline]
fn drain(&mut self, range: std::ops::Range<usize>) {
Vec::<u8>::drain(self, range);
}
#[inline]
fn len(&self) -> usize {
Vec::<u8>::len(self)
}
#[inline]
fn extend_from_slice(&mut self, data: &[u8]) {
Vec::<u8>::extend_from_slice(self, data)
}
#[inline]
fn push(&mut self, byte: u8) {
Vec::<u8>::push(self, byte)
}
#[inline]
fn from_slice(data: &[u8]) -> Self {
data.to_vec()
}
}
impl StreamBuffer for Vec64<u8> {
const ALIGN: usize = 64;
#[inline]
fn with_capacity(n: usize) -> Self {
Vec64::with_capacity(n)
}
#[inline]
fn reserve(&mut self, additional: usize) {
self.0.reserve(additional);
}
#[inline]
fn drain(&mut self, range: std::ops::Range<usize>) {
self.0.drain(range);
}
#[inline]
fn len(&self) -> usize {
self.0.len()
}
#[inline]
fn extend_from_slice(&mut self, data: &[u8]) {
self.0.extend_from_slice(data)
}
#[inline]
fn push(&mut self, byte: u8) {
self.0.push(byte)
}
#[inline]
fn from_slice(data: &[u8]) -> Self {
Vec64::from_slice(data)
}
}