use std::io::{self, Write};
pub struct BatchBuffer {
inner: Vec<u8>,
}
impl BatchBuffer {
pub fn new(capacity: usize) -> Self {
Self {
inner: Vec::with_capacity(capacity),
}
}
pub fn len(&self) -> usize {
self.inner.len()
}
pub fn capacity(&self) -> usize {
self.inner.capacity()
}
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
pub fn as_slice(&self) -> &[u8] {
&self.inner
}
pub fn smart_clear(&mut self, shrink_threshold: usize, initial_capacity: usize) {
if self.inner.capacity() > shrink_threshold {
self.inner = Vec::with_capacity(initial_capacity);
} else {
self.inner.clear();
}
}
pub fn clear(&mut self) {
self.inner.clear();
}
}
impl Write for BatchBuffer {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.inner.extend_from_slice(buf);
Ok(buf.len())
}
fn flush(&mut self) -> io::Result<()> {
Ok(())
}
}