struct BitReader<'a> {
bytes: &'a [u8],
pos: u32,
}Fields§
§bytes: &'a [u8]§pos: u32Implementations§
Source§impl<'a> BitReader<'a>
impl<'a> BitReader<'a>
Sourcefn new(bytes: &'a [u8]) -> Self
fn new(bytes: &'a [u8]) -> Self
Examples found in repository?
crates/competitive/src/tools/coding.rs (line 335)
318fn huffman_decoding(bytes: &[u8]) -> Vec<u8> {
319 fn read_tree(reader: &mut BitReader) -> HuffmanTree {
320 if reader.read_bit() {
321 HuffmanTree::Node(Box::new(read_tree(reader)), Box::new(read_tree(reader)))
322 } else {
323 HuffmanTree::Leaf(reader.read_u8())
324 }
325 }
326 fn decode(mut t: &HuffmanTree, reader: &mut BitReader) -> u8 {
327 loop {
328 match t {
329 HuffmanTree::Leaf(i) => break *i,
330 HuffmanTree::Node(l, r) => t = if reader.read_bit() { r } else { l },
331 }
332 }
333 }
334
335 let mut reader = BitReader::new(bytes);
336 let t = read_tree(&mut reader);
337 const C: usize = size_of::<usize>();
338 let mut size: [u8; C] = [0u8; C];
339 for b in &mut size {
340 *b = decode(&t, &mut reader);
341 }
342 let size = usize::from_le_bytes(size);
343 let mut buf = vec![];
344 for i in 0..size {
345 buf.push(decode(&t, &mut reader));
346 if i < 10 {}
347 }
348 buf
349}Sourcefn read_bit(&mut self) -> bool
fn read_bit(&mut self) -> bool
Examples found in repository?
crates/competitive/src/tools/coding.rs (line 320)
319 fn read_tree(reader: &mut BitReader) -> HuffmanTree {
320 if reader.read_bit() {
321 HuffmanTree::Node(Box::new(read_tree(reader)), Box::new(read_tree(reader)))
322 } else {
323 HuffmanTree::Leaf(reader.read_u8())
324 }
325 }
326 fn decode(mut t: &HuffmanTree, reader: &mut BitReader) -> u8 {
327 loop {
328 match t {
329 HuffmanTree::Leaf(i) => break *i,
330 HuffmanTree::Node(l, r) => t = if reader.read_bit() { r } else { l },
331 }
332 }
333 }Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for BitReader<'a>
impl<'a> RefUnwindSafe for BitReader<'a>
impl<'a> Send for BitReader<'a>
impl<'a> Sync for BitReader<'a>
impl<'a> Unpin for BitReader<'a>
impl<'a> UnwindSafe for BitReader<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more