Compare commits

...

2 commits

Author SHA1 Message Date
fd0662b66d
improve phrasing of CompressionScheme docs 2025-10-03 16:10:30 -04:00
a1f5e6843a
fix main 2025-10-03 16:10:03 -04:00
2 changed files with 13 additions and 6 deletions

View file

@ -10,14 +10,14 @@ pub trait CompressionScheme {
/// Encode some bytes into `buf`, returning a [`Header`][Self::Header].
///
/// This does not necessarily have to be deterministic,
/// but it **must** always be decodable by [`decode`](Self::decode).
/// but it **must** be decodable by [`decode`](Self::decode).
/// That is, [`decode`](Self::decode) ∘ [`encode`](Self::encode) = `id`.
fn encode(src: &[u8], buf: &mut BitVec) -> Self::Header;
/// Decode the given bits and header into `buf`.
///
/// This may panic on arbitrary input,
/// but it **must** always decode outputs of [`encode`](Self::encode).
/// but it **must** successfully decode outputs of [`encode`](Self::encode).
/// That is, [`decode`](Self::decode) ∘ [`encode`](Self::encode) = `id`.
fn decode(src: &BitSlice, header: &Self::Header, buf: &mut Vec<u8>);

View file

@ -6,8 +6,10 @@ mod rle;
#[cfg(test)]
mod test;
use bitvec::vec::BitVec;
pub use compression_scheme::CompressionScheme;
pub use freq::Freq;
pub use rle::Rle;
fn main() -> Result<(), io::Error> {
let mut buf = Vec::new();
@ -15,11 +17,16 @@ fn main() -> Result<(), io::Error> {
println!("Original: {len_src}");
// let len_rle = rle::Encoder::new(&buf).count() * 2;
// println!(" Rle'd: {len_rle}");
let mut bitbuf = BitVec::new();
// let len_freq = len_freq_table + len_freq_bits;
// println!(" Freq'd: {len_freq}");
let () = Rle::encode(&buf, &mut bitbuf);
let len_rle = bitbuf.len().div_ceil(8);
println!(" Rle'd: {len_rle}");
bitbuf.clear();
let header = Freq::encode(&buf, &mut bitbuf);
let len_freq = Freq::header_size(&header) + bitbuf.len().div_ceil(8);
println!(" Freq'd: {len_freq}");
Ok(())
}