From a472b1cdaa8a1f72b96988009b3d4d9820e7128f Mon Sep 17 00:00:00 2001 From: Dylan Date: Sun, 21 Jun 2026 15:01:28 +1200 Subject: feat: Added bitmap writing --- src/writer.rs | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/writer.rs (limited to 'src/writer.rs') diff --git a/src/writer.rs b/src/writer.rs new file mode 100644 index 0000000..dc1ac85 --- /dev/null +++ b/src/writer.rs @@ -0,0 +1,69 @@ +use std::io::Write; +use std::{fs::File, io::BufWriter}; + +pub struct FileWriter +{ + buf_writer: BufWriter +} + +impl FileWriter +{ + pub fn new(buf_writer: BufWriter) -> Self + { + Self + { + buf_writer + } + } + + pub fn write_zeros(&mut self, c: usize) + { + for _ in 0..c + { + self.write(0 as u8); + } + // self.buf_writer.write_all(&[0u8; c]).expect("Could not write 0s"); + } + + pub fn write_array, const C: usize>(&mut self, xs: [T; C]) + { + for x in xs + { + self.write(x); + } + } + pub fn write>(&mut self, x: T) + { + let data = x.to_le_bytes(); + self.buf_writer.write_all(&data).expect("Could not write"); + } + + pub fn flush(&mut self) + { + self.buf_writer.flush().expect("Could not flush"); + } +} + +pub trait ToBytes: Sized + Copy +{ + fn to_le_bytes(&self) -> [u8; N]; +} + +impl ToBytes<4> for u32 +{ + fn to_le_bytes(&self) -> [u8; 4] { + u32::to_le_bytes(*self) + } +} +impl ToBytes<2> for u16 +{ + fn to_le_bytes(&self) -> [u8; 2] { + u16::to_le_bytes(*self) + } +} +impl ToBytes<1> for u8 +{ + fn to_le_bytes(&self) -> [u8; 1] { + u8::to_le_bytes(*self) + } +} -- cgit v1.3.1