From 0966aef6cc18db439eb59a6325a0bac9462b428b Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 7 Nov 2015 08:23:39 +0100 Subject: Adding upstream version 1.6~pre3. Signed-off-by: Daniel Baumann --- decoder.h | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'decoder.h') diff --git a/decoder.h b/decoder.h index aaf85a6..290ab97 100644 --- a/decoder.h +++ b/decoder.h @@ -18,7 +18,6 @@ class Input_buffer { enum { buffer_size = 65536 }; - uint8_t * const buffer; int pos; int stream_pos; // when reached, a new block must be read @@ -73,6 +72,13 @@ public: return ibuf.get_byte(); } + void reload() throw() + { + code = 0; + range = 0xFFFFFFFF; + for( int i = 0; i < 5; ++i ) code = (code << 8) | get_byte(); + } + void normalize() { if( range <= 0x00FFFFFF ) @@ -101,8 +107,7 @@ public: int decode_bit( Bit_model & bm ) { - if( range <= 0x00FFFFFF ) - { range <<= 8; code = (code << 8) | get_byte(); } + normalize(); const uint32_t bound = ( range >> bit_model_total_bits ) * bm.probability; if( code < bound ) { @@ -204,12 +209,13 @@ class LZ_decoder { long long partial_data_pos; const int format_version; + const int dictionary_size; const int buffer_size; uint8_t * const buffer; int pos; + int stream_pos; // first byte not yet written to file uint32_t crc_; const int odes_; - bool member_finished; Bit_model bm_match[State::states][pos_states]; Bit_model bm_rep[State::states]; @@ -264,12 +270,13 @@ public: : partial_data_pos( 0 ), format_version( header.version ), - buffer_size( header.dictionary_size() ), + dictionary_size( header.dictionary_size() ), + buffer_size( std::max( 65536, dictionary_size ) ), buffer( new uint8_t[buffer_size] ), pos( 0 ), + stream_pos( 0 ), crc_( 0xFFFFFFFF ), odes_( odes ), - member_finished( false ), range_decoder( sizeof header, ibuf ), literal_decoder() {} -- cgit v1.2.3