From e9d153cbb3f2d324182e34899404446537334a56 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 21 Feb 2022 13:25:31 +0100 Subject: Merging upstream version 1.13. Signed-off-by: Daniel Baumann --- fast_encoder.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) (limited to 'fast_encoder.c') diff --git a/fast_encoder.c b/fast_encoder.c index 1904428..f69b999 100644 --- a/fast_encoder.c +++ b/fast_encoder.c @@ -1,5 +1,5 @@ /* Clzip - LZMA lossless data compressor - Copyright (C) 2010-2021 Antonio Diaz Diaz. + Copyright (C) 2010-2022 Antonio Diaz Diaz. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -31,25 +31,24 @@ int FLZe_longest_match_len( struct FLZ_encoder * const fe, int * const distance ) { enum { len_limit = 16 }; - const uint8_t * const data = Mb_ptr_to_current_pos( &fe->eb.mb ); - int32_t * ptr0 = fe->eb.mb.pos_array + fe->eb.mb.cyclic_pos; - const int pos1 = fe->eb.mb.pos + 1; - int maxlen = 0, newpos1, count; const int available = min( Mb_available_bytes( &fe->eb.mb ), max_match_len ); if( available < len_limit ) return 0; + const uint8_t * const data = Mb_ptr_to_current_pos( &fe->eb.mb ); fe->key4 = ( ( fe->key4 << 4 ) ^ data[3] ) & fe->eb.mb.key4_mask; - newpos1 = fe->eb.mb.prev_positions[fe->key4]; + const int pos1 = fe->eb.mb.pos + 1; + int newpos1 = fe->eb.mb.prev_positions[fe->key4]; fe->eb.mb.prev_positions[fe->key4] = pos1; + int32_t * ptr0 = fe->eb.mb.pos_array + fe->eb.mb.cyclic_pos; + int maxlen = 0, count; for( count = 4; ; ) { - int32_t * newptr; int delta; if( newpos1 <= 0 || --count < 0 || ( delta = pos1 - newpos1 ) > fe->eb.mb.dictionary_size ) { *ptr0 = 0; break; } - newptr = fe->eb.mb.pos_array + + int32_t * const newptr = fe->eb.mb.pos_array + ( fe->eb.mb.cyclic_pos - delta + ( ( fe->eb.mb.cyclic_pos >= delta ) ? 0 : fe->eb.mb.dictionary_size + 1 ) ); @@ -118,11 +117,10 @@ bool FLZe_encode_member( struct FLZ_encoder * const fe, Re_encode_bit( &fe->eb.renc, &fe->eb.bm_len[state][pos_state], 1 ); else { - int distance; Re_encode_bit( &fe->eb.renc, &fe->eb.bm_rep1[state], rep > 1 ); if( rep > 1 ) Re_encode_bit( &fe->eb.renc, &fe->eb.bm_rep2[state], rep > 2 ); - distance = reps[rep]; + const int distance = reps[rep]; for( i = rep; i > 0; --i ) reps[i] = reps[i-1]; reps[0] = distance; } @@ -147,7 +145,6 @@ bool FLZe_encode_member( struct FLZ_encoder * const fe, continue; } - { const uint8_t prev_byte = Mb_peek( &fe->eb.mb, 1 ); const uint8_t cur_byte = Mb_peek( &fe->eb.mb, 0 ); const uint8_t match_byte = Mb_peek( &fe->eb.mb, reps[0] + 1 ); @@ -178,12 +175,10 @@ bool FLZe_encode_member( struct FLZ_encoder * const fe, /* literal byte */ Re_encode_bit( &fe->eb.renc, &fe->eb.bm_match[state][pos_state], 0 ); - if( St_is_char( state ) ) + if( ( state = St_set_char( state ) ) < 4 ) LZeb_encode_literal( &fe->eb, prev_byte, cur_byte ); else LZeb_encode_matched( &fe->eb, prev_byte, cur_byte, match_byte ); - state = St_set_char( state ); - } } LZeb_full_flush( &fe->eb, state ); -- cgit v1.2.3