fn main() {
let data = include_bytes!("../tests/uc2/normal.uc2");
let compressed = &data[29..];
println!(
"First 4 bytes: {:02x} {:02x} {:02x} {:02x}",
compressed[0], compressed[1], compressed[2], compressed[3]
);
let word0 = u16::from_le_bytes([compressed[0], compressed[1]]);
let word1 = u16::from_le_bytes([compressed[2], compressed[3]]);
println!("word0 = 0x{:04x} = {:016b}", word0, word0);
println!("word1 = 0x{:04x} = {:016b}", word1, word1);
let mut word_buf = word0;
let mut bits_left = 16u8;
let mut preview = 0u16;
{
let bits_from_word = 13.min(bits_left);
let mask = (1u16 << bits_from_word) - 1;
let shift_amount = 16 - bits_from_word;
let new_bits = (word_buf >> shift_amount) & mask;
preview = (preview << bits_from_word) | new_bits;
word_buf <<= bits_from_word;
bits_left -= bits_from_word;
preview &= (1 << 13) - 1;
println!("After skip(13): preview=0x{:04x} ({:013b}), bits_left={}", preview, preview, bits_left);
}
{
let n = 1;
let result = preview >> (13 - n);
println!("get(1) for has_block: bit = {}", result);
preview = (preview << 1) & ((1 << 13) - 1);
if bits_left == 0 {
word_buf = word1;
bits_left = 16;
}
let new_bit = (word_buf >> 15) & 1;
preview |= new_bit;
bits_left -= 1;
println!("After get(1): preview=0x{:04x} ({:013b}), bits_left={}", preview, preview, bits_left);
}
{
let n = 1;
let result = preview >> (13 - n);
println!("get(1) for has_tree: bit = {}", result);
}
}