struct_compression_analyzer/utils/
bitstream_ext.rs

1use bitstream_io::{BitReader, Endianness};
2use std::io::{self, Read, Seek, SeekFrom};
3
4/// Extension trait for BitReader to add remaining bits functionality
5pub(crate) trait BitReaderExt {
6    /// Returns the number of bits remaining from the current position
7    fn remaining_bits(&mut self) -> io::Result<u64>;
8}
9
10impl<R, E> BitReaderExt for BitReader<R, E>
11where
12    R: Read + Seek,
13    E: Endianness,
14{
15    fn remaining_bits(&mut self) -> io::Result<u64> {
16        // Store current position
17        let current_pos = self.position_in_bits()?;
18
19        // Get total size in bits
20        let total_bits = self.seek_bits(SeekFrom::End(0))?;
21
22        // Restore original position
23        self.seek_bits(SeekFrom::Start(current_pos))?;
24
25        // Calculate remaining bits
26        Ok(total_bits - current_pos)
27    }
28}