#![doc(hidden)]
use std::fs::File;
use std::io::{self, Read, Write};
pub struct OutputBuffer {
data: Vec<u8>,
}
impl Default for OutputBuffer {
fn default() -> Self {
Self::new()
}
}
impl OutputBuffer {
pub fn new() -> Self {
Self { data: Vec::new() }
}
pub fn append(&mut self, bytes: &[u8]) {
self.data.extend_from_slice(bytes);
}
pub fn append_zeros(&mut self, count: usize) {
self.data.resize(self.data.len() + count, 0);
}
pub fn append_from_file(&mut self, source: &mut File, byte_count: u64) -> io::Result<()> {
let start = self.data.len();
self.data.resize(start + byte_count as usize, 0);
source.read_exact(&mut self.data[start..])?;
Ok(())
}
pub fn slice(&self, start: usize, end: usize) -> &[u8] {
&self.data[start..end]
}
pub fn patch(&mut self, offset: usize, data: &[u8]) {
self.data[offset..offset + data.len()].copy_from_slice(data);
}
pub fn len(&self) -> usize {
self.data.len()
}
pub fn is_empty(&self) -> bool {
self.data.is_empty()
}
pub fn write_to_file(&self, file: &mut File) -> io::Result<()> {
file.write_all(&self.data)
}
}