Coverage Report

Created: 2026-09-28 07:39

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/lzma-rs-0.2.0/src/decode/rangecoder.rs
Line
Count
Source
1
use crate::decode::util;
2
use crate::error;
3
use byteorder::{BigEndian, ReadBytesExt};
4
use std::io;
5
6
pub struct RangeDecoder<'a, R>
7
where
8
    R: 'a + io::BufRead,
9
{
10
    pub stream: &'a mut R,
11
    pub range: u32,
12
    pub code: u32,
13
}
14
15
impl<'a, R> RangeDecoder<'a, R>
16
where
17
    R: io::BufRead,
18
{
19
55.8k
    pub fn new(stream: &'a mut R) -> io::Result<Self> {
20
55.8k
        let mut dec = Self {
21
55.8k
            stream,
22
55.8k
            range: 0xFFFF_FFFF,
23
55.8k
            code: 0,
24
55.8k
        };
25
55.8k
        let _ = dec.stream.read_u8()?;
26
50.8k
        dec.code = dec.stream.read_u32::<BigEndian>()?;
27
        lzma_debug!("0 {{ range: {:08x}, code: {:08x} }}", dec.range, dec.code);
28
36.3k
        Ok(dec)
29
55.8k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::new
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::new
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::new
Line
Count
Source
19
4.84k
    pub fn new(stream: &'a mut R) -> io::Result<Self> {
20
4.84k
        let mut dec = Self {
21
4.84k
            stream,
22
4.84k
            range: 0xFFFF_FFFF,
23
4.84k
            code: 0,
24
4.84k
        };
25
4.84k
        let _ = dec.stream.read_u8()?;
26
4.84k
        dec.code = dec.stream.read_u32::<BigEndian>()?;
27
        lzma_debug!("0 {{ range: {:08x}, code: {:08x} }}", dec.range, dec.code);
28
4.79k
        Ok(dec)
29
4.84k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::new
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::new
Line
Count
Source
19
51.0k
    pub fn new(stream: &'a mut R) -> io::Result<Self> {
20
51.0k
        let mut dec = Self {
21
51.0k
            stream,
22
51.0k
            range: 0xFFFF_FFFF,
23
51.0k
            code: 0,
24
51.0k
        };
25
51.0k
        let _ = dec.stream.read_u8()?;
26
46.0k
        dec.code = dec.stream.read_u32::<BigEndian>()?;
27
        lzma_debug!("0 {{ range: {:08x}, code: {:08x} }}", dec.range, dec.code);
28
31.5k
        Ok(dec)
29
51.0k
    }
30
31
586k
    pub fn from_parts(stream: &'a mut R, range: u32, code: u32) -> Self {
32
586k
        Self {
33
586k
            stream,
34
586k
            range,
35
586k
            code,
36
586k
        }
37
586k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::from_parts
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::from_parts
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::from_parts
Line
Count
Source
31
28.5k
    pub fn from_parts(stream: &'a mut R, range: u32, code: u32) -> Self {
32
28.5k
        Self {
33
28.5k
            stream,
34
28.5k
            range,
35
28.5k
            code,
36
28.5k
        }
37
28.5k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::from_parts
Line
Count
Source
31
6.55k
    pub fn from_parts(stream: &'a mut R, range: u32, code: u32) -> Self {
32
6.55k
        Self {
33
6.55k
            stream,
34
6.55k
            range,
35
6.55k
            code,
36
6.55k
        }
37
6.55k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::from_parts
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::from_parts
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::from_parts
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::from_parts
Line
Count
Source
31
463k
    pub fn from_parts(stream: &'a mut R, range: u32, code: u32) -> Self {
32
463k
        Self {
33
463k
            stream,
34
463k
            range,
35
463k
            code,
36
463k
        }
37
463k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::from_parts
Line
Count
Source
31
87.7k
    pub fn from_parts(stream: &'a mut R, range: u32, code: u32) -> Self {
32
87.7k
        Self {
33
87.7k
            stream,
34
87.7k
            range,
35
87.7k
            code,
36
87.7k
        }
37
87.7k
    }
38
39
74.5k
    pub fn set(&mut self, range: u32, code: u32) {
40
74.5k
        self.range = range;
41
74.5k
        self.code = code;
42
74.5k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::set
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::set
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::set
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::set
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::set
Line
Count
Source
39
3.05k
    pub fn set(&mut self, range: u32, code: u32) {
40
3.05k
        self.range = range;
41
3.05k
        self.code = code;
42
3.05k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::set
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::set
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::set
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::set
Line
Count
Source
39
71.5k
    pub fn set(&mut self, range: u32, code: u32) {
40
71.5k
        self.range = range;
41
71.5k
        self.code = code;
42
71.5k
    }
43
44
139k
    pub fn read_into(&mut self, dst: &mut [u8]) -> io::Result<usize> {
45
139k
        self.stream.read(dst)
46
139k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::read_into
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::read_into
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::read_into
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::read_into
Line
Count
Source
44
5
    pub fn read_into(&mut self, dst: &mut [u8]) -> io::Result<usize> {
45
5
        self.stream.read(dst)
46
5
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::read_into
Line
Count
Source
44
7.38k
    pub fn read_into(&mut self, dst: &mut [u8]) -> io::Result<usize> {
45
7.38k
        self.stream.read(dst)
46
7.38k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::read_into
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::read_into
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::read_into
Line
Count
Source
44
293
    pub fn read_into(&mut self, dst: &mut [u8]) -> io::Result<usize> {
45
293
        self.stream.read(dst)
46
293
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::read_into
Line
Count
Source
44
131k
    pub fn read_into(&mut self, dst: &mut [u8]) -> io::Result<usize> {
45
131k
        self.stream.read(dst)
46
131k
    }
47
48
    #[inline]
49
1.18k
    pub fn is_finished_ok(&mut self) -> io::Result<bool> {
50
1.18k
        Ok(self.code == 0 && self.is_eof()?)
51
1.18k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::is_finished_ok
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::is_finished_ok
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::is_finished_ok
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::is_finished_ok
Line
Count
Source
49
1
    pub fn is_finished_ok(&mut self) -> io::Result<bool> {
50
1
        Ok(self.code == 0 && self.is_eof()?)
51
1
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::is_finished_ok
Line
Count
Source
49
1
    pub fn is_finished_ok(&mut self) -> io::Result<bool> {
50
1
        Ok(self.code == 0 && self.is_eof()?)
51
1
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::is_finished_ok
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::is_finished_ok
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::is_finished_ok
Line
Count
Source
49
611
    pub fn is_finished_ok(&mut self) -> io::Result<bool> {
50
611
        Ok(self.code == 0 && self.is_eof()?)
51
611
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::is_finished_ok
Line
Count
Source
49
572
    pub fn is_finished_ok(&mut self) -> io::Result<bool> {
50
572
        Ok(self.code == 0 && self.is_eof()?)
51
572
    }
52
53
    #[inline]
54
34.9k
    pub fn is_eof(&mut self) -> io::Result<bool> {
55
34.9k
        util::is_eof(self.stream)
56
34.9k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::is_eof
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::is_eof
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::is_eof
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::is_eof
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::is_eof
Line
Count
Source
54
65
    pub fn is_eof(&mut self) -> io::Result<bool> {
55
65
        util::is_eof(self.stream)
56
65
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::is_eof
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::is_eof
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::is_eof
Line
Count
Source
54
38
    pub fn is_eof(&mut self) -> io::Result<bool> {
55
38
        util::is_eof(self.stream)
56
38
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::is_eof
Line
Count
Source
54
34.8k
    pub fn is_eof(&mut self) -> io::Result<bool> {
55
34.8k
        util::is_eof(self.stream)
56
34.8k
    }
57
58
    #[inline]
59
40.4M
    fn normalize(&mut self) -> io::Result<()> {
60
        lzma_trace!("  {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
61
40.4M
        if self.range < 0x0100_0000 {
62
1.02M
            self.range <<= 8;
63
1.02M
            self.code = (self.code << 8) ^ (self.stream.read_u8()? as u32);
64
65
            lzma_debug!("+ {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
66
39.4M
        }
67
40.3M
        Ok(())
68
40.4M
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::normalize
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::normalize
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::normalize
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::normalize
Line
Count
Source
59
320k
    fn normalize(&mut self) -> io::Result<()> {
60
        lzma_trace!("  {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
61
320k
        if self.range < 0x0100_0000 {
62
33.6k
            self.range <<= 8;
63
33.6k
            self.code = (self.code << 8) ^ (self.stream.read_u8()? as u32);
64
65
            lzma_debug!("+ {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
66
286k
        }
67
317k
        Ok(())
68
320k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::normalize
Line
Count
Source
59
1.09M
    fn normalize(&mut self) -> io::Result<()> {
60
        lzma_trace!("  {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
61
1.09M
        if self.range < 0x0100_0000 {
62
36.2k
            self.range <<= 8;
63
36.2k
            self.code = (self.code << 8) ^ (self.stream.read_u8()? as u32);
64
65
            lzma_debug!("+ {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
66
1.06M
        }
67
1.09M
        Ok(())
68
1.09M
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::normalize
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::normalize
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::normalize
Line
Count
Source
59
5.70M
    fn normalize(&mut self) -> io::Result<()> {
60
        lzma_trace!("  {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
61
5.70M
        if self.range < 0x0100_0000 {
62
504k
            self.range <<= 8;
63
504k
            self.code = (self.code << 8) ^ (self.stream.read_u8()? as u32);
64
65
            lzma_debug!("+ {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
66
5.20M
        }
67
5.65M
        Ok(())
68
5.70M
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::normalize
Line
Count
Source
59
33.2M
    fn normalize(&mut self) -> io::Result<()> {
60
        lzma_trace!("  {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
61
33.2M
        if self.range < 0x0100_0000 {
62
449k
            self.range <<= 8;
63
449k
            self.code = (self.code << 8) ^ (self.stream.read_u8()? as u32);
64
65
            lzma_debug!("+ {{ range: {:08x}, code: {:08x} }}", self.range, self.code);
66
32.8M
        }
67
33.2M
        Ok(())
68
33.2M
    }
69
70
    #[inline]
71
699k
    fn get_bit(&mut self) -> error::Result<bool> {
72
699k
        self.range >>= 1;
73
74
699k
        let bit = self.code >= self.range;
75
699k
        if bit {
76
372k
            self.code -= self.range
77
327k
        }
78
79
699k
        self.normalize()?;
80
695k
        Ok(bit)
81
699k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::get_bit
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::get_bit
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::get_bit
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::get_bit
Line
Count
Source
71
38.6k
    fn get_bit(&mut self) -> error::Result<bool> {
72
38.6k
        self.range >>= 1;
73
74
38.6k
        let bit = self.code >= self.range;
75
38.6k
        if bit {
76
16.7k
            self.code -= self.range
77
21.8k
        }
78
79
38.6k
        self.normalize()?;
80
37.8k
        Ok(bit)
81
38.6k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::get_bit
Line
Count
Source
71
13.5k
    fn get_bit(&mut self) -> error::Result<bool> {
72
13.5k
        self.range >>= 1;
73
74
13.5k
        let bit = self.code >= self.range;
75
13.5k
        if bit {
76
7.19k
            self.code -= self.range
77
6.35k
        }
78
79
13.5k
        self.normalize()?;
80
13.5k
        Ok(bit)
81
13.5k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::get_bit
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::get_bit
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::get_bit
Line
Count
Source
71
418k
    fn get_bit(&mut self) -> error::Result<bool> {
72
418k
        self.range >>= 1;
73
74
418k
        let bit = self.code >= self.range;
75
418k
        if bit {
76
226k
            self.code -= self.range
77
192k
        }
78
79
418k
        self.normalize()?;
80
414k
        Ok(bit)
81
418k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::get_bit
Line
Count
Source
71
229k
    fn get_bit(&mut self) -> error::Result<bool> {
72
229k
        self.range >>= 1;
73
74
229k
        let bit = self.code >= self.range;
75
229k
        if bit {
76
122k
            self.code -= self.range
77
106k
        }
78
79
229k
        self.normalize()?;
80
229k
        Ok(bit)
81
229k
    }
82
83
50.4k
    pub fn get(&mut self, count: usize) -> error::Result<u32> {
84
50.4k
        let mut result = 0u32;
85
50.4k
        for _ in 0..count {
86
699k
            result = (result << 1) ^ (self.get_bit()? as u32)
87
        }
88
46.1k
        Ok(result)
89
50.4k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::get
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::get
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::get
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::get
Line
Count
Source
83
2.88k
    pub fn get(&mut self, count: usize) -> error::Result<u32> {
84
2.88k
        let mut result = 0u32;
85
2.88k
        for _ in 0..count {
86
38.6k
            result = (result << 1) ^ (self.get_bit()? as u32)
87
        }
88
2.14k
        Ok(result)
89
2.88k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::get
Line
Count
Source
83
1.12k
    pub fn get(&mut self, count: usize) -> error::Result<u32> {
84
1.12k
        let mut result = 0u32;
85
1.12k
        for _ in 0..count {
86
13.5k
            result = (result << 1) ^ (self.get_bit()? as u32)
87
        }
88
1.12k
        Ok(result)
89
1.12k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::get
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::get
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::get
Line
Count
Source
83
31.3k
    pub fn get(&mut self, count: usize) -> error::Result<u32> {
84
31.3k
        let mut result = 0u32;
85
31.3k
        for _ in 0..count {
86
418k
            result = (result << 1) ^ (self.get_bit()? as u32)
87
        }
88
27.7k
        Ok(result)
89
31.3k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::get
Line
Count
Source
83
15.0k
    pub fn get(&mut self, count: usize) -> error::Result<u32> {
84
15.0k
        let mut result = 0u32;
85
15.0k
        for _ in 0..count {
86
229k
            result = (result << 1) ^ (self.get_bit()? as u32)
87
        }
88
15.0k
        Ok(result)
89
15.0k
    }
90
91
    #[inline]
92
39.7M
    pub fn decode_bit(&mut self, prob: &mut u16, update: bool) -> io::Result<bool> {
93
39.7M
        let bound: u32 = (self.range >> 11) * (*prob as u32);
94
95
        lzma_trace!(
96
            " bound: {:08x}, prob: {:04x}, bit: {}",
97
            bound,
98
            prob,
99
            (self.code > bound) as u8
100
        );
101
39.7M
        if self.code < bound {
102
29.3M
            if update {
103
27.8M
                *prob += (0x800_u16 - *prob) >> 5;
104
27.8M
            }
105
29.3M
            self.range = bound;
106
107
29.3M
            self.normalize()?;
108
29.2M
            Ok(false)
109
        } else {
110
10.4M
            if update {
111
7.30M
                *prob -= *prob >> 5;
112
7.30M
            }
113
10.4M
            self.code -= bound;
114
10.4M
            self.range -= bound;
115
116
10.4M
            self.normalize()?;
117
10.3M
            Ok(true)
118
        }
119
39.7M
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::decode_bit
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::decode_bit
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::decode_bit
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::decode_bit
Line
Count
Source
92
281k
    pub fn decode_bit(&mut self, prob: &mut u16, update: bool) -> io::Result<bool> {
93
281k
        let bound: u32 = (self.range >> 11) * (*prob as u32);
94
95
        lzma_trace!(
96
            " bound: {:08x}, prob: {:04x}, bit: {}",
97
            bound,
98
            prob,
99
            (self.code > bound) as u8
100
        );
101
281k
        if self.code < bound {
102
170k
            if update {
103
24.6k
                *prob += (0x800_u16 - *prob) >> 5;
104
145k
            }
105
170k
            self.range = bound;
106
107
170k
            self.normalize()?;
108
167k
            Ok(false)
109
        } else {
110
111k
            if update {
111
23.8k
                *prob -= *prob >> 5;
112
87.8k
            }
113
111k
            self.code -= bound;
114
111k
            self.range -= bound;
115
116
111k
            self.normalize()?;
117
111k
            Ok(true)
118
        }
119
281k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::decode_bit
Line
Count
Source
92
1.08M
    pub fn decode_bit(&mut self, prob: &mut u16, update: bool) -> io::Result<bool> {
93
1.08M
        let bound: u32 = (self.range >> 11) * (*prob as u32);
94
95
        lzma_trace!(
96
            " bound: {:08x}, prob: {:04x}, bit: {}",
97
            bound,
98
            prob,
99
            (self.code > bound) as u8
100
        );
101
1.08M
        if self.code < bound {
102
560k
            if update {
103
560k
                *prob += (0x800_u16 - *prob) >> 5;
104
560k
            }
105
560k
            self.range = bound;
106
107
560k
            self.normalize()?;
108
560k
            Ok(false)
109
        } else {
110
526k
            if update {
111
526k
                *prob -= *prob >> 5;
112
526k
            }
113
526k
            self.code -= bound;
114
526k
            self.range -= bound;
115
116
526k
            self.normalize()?;
117
526k
            Ok(true)
118
        }
119
1.08M
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::decode_bit
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::decode_bit
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::decode_bit
Line
Count
Source
92
5.28M
    pub fn decode_bit(&mut self, prob: &mut u16, update: bool) -> io::Result<bool> {
93
5.28M
        let bound: u32 = (self.range >> 11) * (*prob as u32);
94
95
        lzma_trace!(
96
            " bound: {:08x}, prob: {:04x}, bit: {}",
97
            bound,
98
            prob,
99
            (self.code > bound) as u8
100
        );
101
5.28M
        if self.code < bound {
102
1.75M
            if update {
103
400k
                *prob += (0x800_u16 - *prob) >> 5;
104
1.35M
            }
105
1.75M
            self.range = bound;
106
107
1.75M
            self.normalize()?;
108
1.72M
            Ok(false)
109
        } else {
110
3.53M
            if update {
111
512k
                *prob -= *prob >> 5;
112
3.01M
            }
113
3.53M
            self.code -= bound;
114
3.53M
            self.range -= bound;
115
116
3.53M
            self.normalize()?;
117
3.51M
            Ok(true)
118
        }
119
5.28M
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::decode_bit
Line
Count
Source
92
33.0M
    pub fn decode_bit(&mut self, prob: &mut u16, update: bool) -> io::Result<bool> {
93
33.0M
        let bound: u32 = (self.range >> 11) * (*prob as u32);
94
95
        lzma_trace!(
96
            " bound: {:08x}, prob: {:04x}, bit: {}",
97
            bound,
98
            prob,
99
            (self.code > bound) as u8
100
        );
101
33.0M
        if self.code < bound {
102
26.8M
            if update {
103
26.8M
                *prob += (0x800_u16 - *prob) >> 5;
104
26.8M
            }
105
26.8M
            self.range = bound;
106
107
26.8M
            self.normalize()?;
108
26.8M
            Ok(false)
109
        } else {
110
6.24M
            if update {
111
6.24M
                *prob -= *prob >> 5;
112
6.24M
            }
113
6.24M
            self.code -= bound;
114
6.24M
            self.range -= bound;
115
116
6.24M
            self.normalize()?;
117
6.24M
            Ok(true)
118
        }
119
33.0M
    }
120
121
822k
    fn parse_bit_tree(
122
822k
        &mut self,
123
822k
        num_bits: usize,
124
822k
        probs: &mut [u16],
125
822k
        update: bool,
126
822k
    ) -> io::Result<u32> {
127
822k
        let mut tmp: u32 = 1;
128
822k
        for _ in 0..num_bits {
129
5.61M
            let bit = self.decode_bit(&mut probs[tmp as usize], update)?;
130
5.59M
            tmp = (tmp << 1) ^ (bit as u32);
131
        }
132
803k
        Ok(tmp - (1 << num_bits))
133
822k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::parse_bit_tree
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::parse_bit_tree
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::parse_bit_tree
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::parse_bit_tree
Line
Count
Source
121
12.7k
    fn parse_bit_tree(
122
12.7k
        &mut self,
123
12.7k
        num_bits: usize,
124
12.7k
        probs: &mut [u16],
125
12.7k
        update: bool,
126
12.7k
    ) -> io::Result<u32> {
127
12.7k
        let mut tmp: u32 = 1;
128
12.7k
        for _ in 0..num_bits {
129
64.5k
            let bit = self.decode_bit(&mut probs[tmp as usize], update)?;
130
64.1k
            tmp = (tmp << 1) ^ (bit as u32);
131
        }
132
12.2k
        Ok(tmp - (1 << num_bits))
133
12.7k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::parse_bit_tree
Line
Count
Source
121
38.7k
    fn parse_bit_tree(
122
38.7k
        &mut self,
123
38.7k
        num_bits: usize,
124
38.7k
        probs: &mut [u16],
125
38.7k
        update: bool,
126
38.7k
    ) -> io::Result<u32> {
127
38.7k
        let mut tmp: u32 = 1;
128
38.7k
        for _ in 0..num_bits {
129
283k
            let bit = self.decode_bit(&mut probs[tmp as usize], update)?;
130
283k
            tmp = (tmp << 1) ^ (bit as u32);
131
        }
132
38.7k
        Ok(tmp - (1 << num_bits))
133
38.7k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::parse_bit_tree
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::parse_bit_tree
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::parse_bit_tree
Line
Count
Source
121
322k
    fn parse_bit_tree(
122
322k
        &mut self,
123
322k
        num_bits: usize,
124
322k
        probs: &mut [u16],
125
322k
        update: bool,
126
322k
    ) -> io::Result<u32> {
127
322k
        let mut tmp: u32 = 1;
128
322k
        for _ in 0..num_bits {
129
1.97M
            let bit = self.decode_bit(&mut probs[tmp as usize], update)?;
130
1.96M
            tmp = (tmp << 1) ^ (bit as u32);
131
        }
132
304k
        Ok(tmp - (1 << num_bits))
133
322k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::parse_bit_tree
Line
Count
Source
121
448k
    fn parse_bit_tree(
122
448k
        &mut self,
123
448k
        num_bits: usize,
124
448k
        probs: &mut [u16],
125
448k
        update: bool,
126
448k
    ) -> io::Result<u32> {
127
448k
        let mut tmp: u32 = 1;
128
448k
        for _ in 0..num_bits {
129
3.28M
            let bit = self.decode_bit(&mut probs[tmp as usize], update)?;
130
3.28M
            tmp = (tmp << 1) ^ (bit as u32);
131
        }
132
448k
        Ok(tmp - (1 << num_bits))
133
448k
    }
134
135
63.3k
    pub fn parse_reverse_bit_tree(
136
63.3k
        &mut self,
137
63.3k
        num_bits: usize,
138
63.3k
        probs: &mut [u16],
139
63.3k
        offset: usize,
140
63.3k
        update: bool,
141
63.3k
    ) -> io::Result<u32> {
142
63.3k
        let mut result = 0u32;
143
63.3k
        let mut tmp: usize = 1;
144
231k
        for i in 0..num_bits {
145
231k
            let bit = self.decode_bit(&mut probs[offset + tmp], update)?;
146
225k
            tmp = (tmp << 1) ^ (bit as usize);
147
225k
            result ^= (bit as u32) << i;
148
        }
149
58.0k
        Ok(result)
150
63.3k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::parse_reverse_bit_tree
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::parse_reverse_bit_tree
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<_>>::parse_reverse_bit_tree
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::parse_reverse_bit_tree
Line
Count
Source
135
2.27k
    pub fn parse_reverse_bit_tree(
136
2.27k
        &mut self,
137
2.27k
        num_bits: usize,
138
2.27k
        probs: &mut [u16],
139
2.27k
        offset: usize,
140
2.27k
        update: bool,
141
2.27k
    ) -> io::Result<u32> {
142
2.27k
        let mut result = 0u32;
143
2.27k
        let mut tmp: usize = 1;
144
7.44k
        for i in 0..num_bits {
145
7.44k
            let bit = self.decode_bit(&mut probs[offset + tmp], update)?;
146
6.96k
            tmp = (tmp << 1) ^ (bit as usize);
147
6.96k
            result ^= (bit as u32) << i;
148
        }
149
1.79k
        Ok(result)
150
2.27k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::parse_reverse_bit_tree
Line
Count
Source
135
2.31k
    pub fn parse_reverse_bit_tree(
136
2.31k
        &mut self,
137
2.31k
        num_bits: usize,
138
2.31k
        probs: &mut [u16],
139
2.31k
        offset: usize,
140
2.31k
        update: bool,
141
2.31k
    ) -> io::Result<u32> {
142
2.31k
        let mut result = 0u32;
143
2.31k
        let mut tmp: usize = 1;
144
6.13k
        for i in 0..num_bits {
145
6.13k
            let bit = self.decode_bit(&mut probs[offset + tmp], update)?;
146
6.13k
            tmp = (tmp << 1) ^ (bit as usize);
147
6.13k
            result ^= (bit as u32) << i;
148
        }
149
2.31k
        Ok(result)
150
2.31k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::parse_reverse_bit_tree
Unexecuted instantiation: <lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::parse_reverse_bit_tree
<lzma_rs::decode::rangecoder::RangeDecoder<std::io::cursor::Cursor<&[u8]>>>::parse_reverse_bit_tree
Line
Count
Source
135
39.3k
    pub fn parse_reverse_bit_tree(
136
39.3k
        &mut self,
137
39.3k
        num_bits: usize,
138
39.3k
        probs: &mut [u16],
139
39.3k
        offset: usize,
140
39.3k
        update: bool,
141
39.3k
    ) -> io::Result<u32> {
142
39.3k
        let mut result = 0u32;
143
39.3k
        let mut tmp: usize = 1;
144
143k
        for i in 0..num_bits {
145
143k
            let bit = self.decode_bit(&mut probs[offset + tmp], update)?;
146
139k
            tmp = (tmp << 1) ^ (bit as usize);
147
139k
            result ^= (bit as u32) << i;
148
        }
149
34.5k
        Ok(result)
150
39.3k
    }
<lzma_rs::decode::rangecoder::RangeDecoder<&mut std::io::cursor::Cursor<&[u8]>>>::parse_reverse_bit_tree
Line
Count
Source
135
19.4k
    pub fn parse_reverse_bit_tree(
136
19.4k
        &mut self,
137
19.4k
        num_bits: usize,
138
19.4k
        probs: &mut [u16],
139
19.4k
        offset: usize,
140
19.4k
        update: bool,
141
19.4k
    ) -> io::Result<u32> {
142
19.4k
        let mut result = 0u32;
143
19.4k
        let mut tmp: usize = 1;
144
73.4k
        for i in 0..num_bits {
145
73.4k
            let bit = self.decode_bit(&mut probs[offset + tmp], update)?;
146
73.4k
            tmp = (tmp << 1) ^ (bit as usize);
147
73.4k
            result ^= (bit as u32) << i;
148
        }
149
19.4k
        Ok(result)
150
19.4k
    }
151
}
152
153
// TODO: parametrize by constant and use [u16; 1 << num_bits] as soon as Rust supports this
154
#[derive(Clone)]
155
pub struct BitTree {
156
    num_bits: usize,
157
    probs: Vec<u16>,
158
}
159
160
impl BitTree {
161
447k
    pub fn new(num_bits: usize) -> Self {
162
447k
        BitTree {
163
447k
            num_bits,
164
447k
            probs: vec![0x400; 1 << num_bits],
165
447k
        }
166
447k
    }
167
168
822k
    pub fn parse<R: io::BufRead>(
169
822k
        &mut self,
170
822k
        rangecoder: &mut RangeDecoder<R>,
171
822k
        update: bool,
172
822k
    ) -> io::Result<u32> {
173
822k
        rangecoder.parse_bit_tree(self.num_bits, self.probs.as_mut_slice(), update)
174
822k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse::<std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse::<&mut std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse::<_>
<lzma_rs::decode::rangecoder::BitTree>::parse::<std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
168
12.7k
    pub fn parse<R: io::BufRead>(
169
12.7k
        &mut self,
170
12.7k
        rangecoder: &mut RangeDecoder<R>,
171
12.7k
        update: bool,
172
12.7k
    ) -> io::Result<u32> {
173
12.7k
        rangecoder.parse_bit_tree(self.num_bits, self.probs.as_mut_slice(), update)
174
12.7k
    }
<lzma_rs::decode::rangecoder::BitTree>::parse::<&mut std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
168
38.7k
    pub fn parse<R: io::BufRead>(
169
38.7k
        &mut self,
170
38.7k
        rangecoder: &mut RangeDecoder<R>,
171
38.7k
        update: bool,
172
38.7k
    ) -> io::Result<u32> {
173
38.7k
        rangecoder.parse_bit_tree(self.num_bits, self.probs.as_mut_slice(), update)
174
38.7k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse::<std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse::<&mut std::io::cursor::Cursor<&[u8]>>
<lzma_rs::decode::rangecoder::BitTree>::parse::<std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
168
322k
    pub fn parse<R: io::BufRead>(
169
322k
        &mut self,
170
322k
        rangecoder: &mut RangeDecoder<R>,
171
322k
        update: bool,
172
322k
    ) -> io::Result<u32> {
173
322k
        rangecoder.parse_bit_tree(self.num_bits, self.probs.as_mut_slice(), update)
174
322k
    }
<lzma_rs::decode::rangecoder::BitTree>::parse::<&mut std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
168
448k
    pub fn parse<R: io::BufRead>(
169
448k
        &mut self,
170
448k
        rangecoder: &mut RangeDecoder<R>,
171
448k
        update: bool,
172
448k
    ) -> io::Result<u32> {
173
448k
        rangecoder.parse_bit_tree(self.num_bits, self.probs.as_mut_slice(), update)
174
448k
    }
175
176
46.1k
    pub fn parse_reverse<R: io::BufRead>(
177
46.1k
        &mut self,
178
46.1k
        rangecoder: &mut RangeDecoder<R>,
179
46.1k
        update: bool,
180
46.1k
    ) -> io::Result<u32> {
181
46.1k
        rangecoder.parse_reverse_bit_tree(self.num_bits, self.probs.as_mut_slice(), 0, update)
182
46.1k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<&mut std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<_>
<lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
176
2.14k
    pub fn parse_reverse<R: io::BufRead>(
177
2.14k
        &mut self,
178
2.14k
        rangecoder: &mut RangeDecoder<R>,
179
2.14k
        update: bool,
180
2.14k
    ) -> io::Result<u32> {
181
2.14k
        rangecoder.parse_reverse_bit_tree(self.num_bits, self.probs.as_mut_slice(), 0, update)
182
2.14k
    }
<lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<&mut std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
176
1.12k
    pub fn parse_reverse<R: io::BufRead>(
177
1.12k
        &mut self,
178
1.12k
        rangecoder: &mut RangeDecoder<R>,
179
1.12k
        update: bool,
180
1.12k
    ) -> io::Result<u32> {
181
1.12k
        rangecoder.parse_reverse_bit_tree(self.num_bits, self.probs.as_mut_slice(), 0, update)
182
1.12k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<&mut std::io::cursor::Cursor<&[u8]>>
<lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
176
27.7k
    pub fn parse_reverse<R: io::BufRead>(
177
27.7k
        &mut self,
178
27.7k
        rangecoder: &mut RangeDecoder<R>,
179
27.7k
        update: bool,
180
27.7k
    ) -> io::Result<u32> {
181
27.7k
        rangecoder.parse_reverse_bit_tree(self.num_bits, self.probs.as_mut_slice(), 0, update)
182
27.7k
    }
<lzma_rs::decode::rangecoder::BitTree>::parse_reverse::<&mut std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
176
15.0k
    pub fn parse_reverse<R: io::BufRead>(
177
15.0k
        &mut self,
178
15.0k
        rangecoder: &mut RangeDecoder<R>,
179
15.0k
        update: bool,
180
15.0k
    ) -> io::Result<u32> {
181
15.0k
        rangecoder.parse_reverse_bit_tree(self.num_bits, self.probs.as_mut_slice(), 0, update)
182
15.0k
    }
183
}
184
185
pub struct LenDecoder {
186
    choice: u16,
187
    choice2: u16,
188
    low_coder: Vec<BitTree>,
189
    mid_coder: Vec<BitTree>,
190
    high_coder: BitTree,
191
}
192
193
impl LenDecoder {
194
111k
    pub fn new() -> Self {
195
111k
        LenDecoder {
196
111k
            choice: 0x400,
197
111k
            choice2: 0x400,
198
111k
            low_coder: vec![BitTree::new(3); 16],
199
111k
            mid_coder: vec![BitTree::new(3); 16],
200
111k
            high_coder: BitTree::new(8),
201
111k
        }
202
111k
    }
203
204
741k
    pub fn decode<R: io::BufRead>(
205
741k
        &mut self,
206
741k
        rangecoder: &mut RangeDecoder<R>,
207
741k
        pos_state: usize,
208
741k
        update: bool,
209
741k
    ) -> io::Result<usize> {
210
741k
        if !rangecoder.decode_bit(&mut self.choice, update)? {
211
94.6k
            Ok(self.low_coder[pos_state].parse(rangecoder, update)? as usize)
212
645k
        } else if !rangecoder.decode_bit(&mut self.choice2, update)? {
213
55.7k
            Ok(self.mid_coder[pos_state].parse(rangecoder, update)? as usize + 8)
214
        } else {
215
587k
            Ok(self.high_coder.parse(rangecoder, update)? as usize + 16)
216
        }
217
741k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::LenDecoder>::decode::<std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::LenDecoder>::decode::<&mut std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::LenDecoder>::decode::<_>
<lzma_rs::decode::rangecoder::LenDecoder>::decode::<std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
204
9.21k
    pub fn decode<R: io::BufRead>(
205
9.21k
        &mut self,
206
9.21k
        rangecoder: &mut RangeDecoder<R>,
207
9.21k
        pos_state: usize,
208
9.21k
        update: bool,
209
9.21k
    ) -> io::Result<usize> {
210
9.21k
        if !rangecoder.decode_bit(&mut self.choice, update)? {
211
3.52k
            Ok(self.low_coder[pos_state].parse(rangecoder, update)? as usize)
212
5.67k
        } else if !rangecoder.decode_bit(&mut self.choice2, update)? {
213
2.33k
            Ok(self.mid_coder[pos_state].parse(rangecoder, update)? as usize + 8)
214
        } else {
215
3.32k
            Ok(self.high_coder.parse(rangecoder, update)? as usize + 16)
216
        }
217
9.21k
    }
<lzma_rs::decode::rangecoder::LenDecoder>::decode::<&mut std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
204
35.9k
    pub fn decode<R: io::BufRead>(
205
35.9k
        &mut self,
206
35.9k
        rangecoder: &mut RangeDecoder<R>,
207
35.9k
        pos_state: usize,
208
35.9k
        update: bool,
209
35.9k
    ) -> io::Result<usize> {
210
35.9k
        if !rangecoder.decode_bit(&mut self.choice, update)? {
211
2.60k
            Ok(self.low_coder[pos_state].parse(rangecoder, update)? as usize)
212
33.3k
        } else if !rangecoder.decode_bit(&mut self.choice2, update)? {
213
1.53k
            Ok(self.mid_coder[pos_state].parse(rangecoder, update)? as usize + 8)
214
        } else {
215
31.7k
            Ok(self.high_coder.parse(rangecoder, update)? as usize + 16)
216
        }
217
35.9k
    }
Unexecuted instantiation: <lzma_rs::decode::rangecoder::LenDecoder>::decode::<std::io::cursor::Cursor<&[u8]>>
Unexecuted instantiation: <lzma_rs::decode::rangecoder::LenDecoder>::decode::<&mut std::io::cursor::Cursor<&[u8]>>
<lzma_rs::decode::rangecoder::LenDecoder>::decode::<std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
204
272k
    pub fn decode<R: io::BufRead>(
205
272k
        &mut self,
206
272k
        rangecoder: &mut RangeDecoder<R>,
207
272k
        pos_state: usize,
208
272k
        update: bool,
209
272k
    ) -> io::Result<usize> {
210
272k
        if !rangecoder.decode_bit(&mut self.choice, update)? {
211
57.2k
            Ok(self.low_coder[pos_state].parse(rangecoder, update)? as usize)
212
213k
        } else if !rangecoder.decode_bit(&mut self.choice2, update)? {
213
32.7k
            Ok(self.mid_coder[pos_state].parse(rangecoder, update)? as usize + 8)
214
        } else {
215
178k
            Ok(self.high_coder.parse(rangecoder, update)? as usize + 16)
216
        }
217
272k
    }
<lzma_rs::decode::rangecoder::LenDecoder>::decode::<&mut std::io::cursor::Cursor<&[u8]>>
Line
Count
Source
204
424k
    pub fn decode<R: io::BufRead>(
205
424k
        &mut self,
206
424k
        rangecoder: &mut RangeDecoder<R>,
207
424k
        pos_state: usize,
208
424k
        update: bool,
209
424k
    ) -> io::Result<usize> {
210
424k
        if !rangecoder.decode_bit(&mut self.choice, update)? {
211
31.2k
            Ok(self.low_coder[pos_state].parse(rangecoder, update)? as usize)
212
393k
        } else if !rangecoder.decode_bit(&mut self.choice2, update)? {
213
19.1k
            Ok(self.mid_coder[pos_state].parse(rangecoder, update)? as usize + 8)
214
        } else {
215
374k
            Ok(self.high_coder.parse(rangecoder, update)? as usize + 16)
216
        }
217
424k
    }
218
}