@@ -731,64 +731,61 @@ fn UpdateNodes<AllocF: Allocator<floatX>>(
731731 + i32:: from ( kDistanceCacheOffset[ j] ) )
732732 as usize ;
733733 let mut prev_ix: usize = cur_ix. wrapping_sub ( backward) ;
734- let len: usize ;
735734 let continuation: u8 = ringbuffer[ cur_ix_masked. wrapping_add ( best_len) ] ;
736735 if cur_ix_masked. wrapping_add ( best_len) > ringbuffer_mask {
737736 break ' break29;
738737 }
739738 if backward > max_distance. wrapping_add ( gap) {
740739 break ' continue30;
741740 }
742- if backward <= max_distance {
743- if prev_ix >= cur_ix {
744- break ' continue30;
745- }
746- prev_ix &= ringbuffer_mask;
747- if prev_ix. wrapping_add ( best_len) > ringbuffer_mask
748- || continuation as i32
749- != ringbuffer[ ( prev_ix. wrapping_add ( best_len) as usize ) ]
750- as i32
751- {
752- break ' continue30;
753- }
754- len = FindMatchLengthWithLimit (
755- & ringbuffer[ ( prev_ix as usize ) ..] ,
756- & ringbuffer[ cur_ix_masked..] ,
757- max_len,
758- ) ;
759- } else {
741+ if backward > max_distance {
760742 break ' continue30;
761743 }
744+
745+ if prev_ix >= cur_ix {
746+ break ' continue30;
747+ }
748+ prev_ix &= ringbuffer_mask;
749+ if prev_ix. wrapping_add ( best_len) > ringbuffer_mask
750+ || continuation as i32
751+ != ringbuffer[ prev_ix. wrapping_add ( best_len) ] as i32
762752 {
763- let dist_cost = base_cost + model. get_distance_cost ( j) ;
764- for l in best_len. wrapping_add ( 1 ) ..=len {
765- let copycode: u16 = GetCopyLengthCode ( l) ;
766- let cmdcode: u16 =
767- CombineLengthCodes ( inscode, copycode, ( j == 0usize ) as i32 ) ;
768- let cost: floatX =
769- ( if cmdcode < 128 { base_cost } else { dist_cost } )
770- + ( GetCopyExtra ( copycode) as floatX )
771- + model. get_command_cost ( cmdcode) ;
772- if cost
773- < match ( nodes[ pos. wrapping_add ( l) ] ) . u {
774- Union1 :: cost( cost) => cost,
775- _ => 0.0 ,
776- }
777- {
778- UpdateZopfliNode (
779- nodes,
780- pos,
781- start,
782- l,
783- l,
784- backward,
785- j. wrapping_add ( 1 ) ,
786- cost,
787- ) ;
788- result = max ( result, l) ;
753+ break ' continue30;
754+ }
755+
756+ let len = FindMatchLengthWithLimit (
757+ & ringbuffer[ prev_ix..] ,
758+ & ringbuffer[ cur_ix_masked..] ,
759+ max_len,
760+ ) ;
761+ let dist_cost = base_cost + model. get_distance_cost ( j) ;
762+ for l in best_len. wrapping_add ( 1 ) ..=len {
763+ let copycode: u16 = GetCopyLengthCode ( l) ;
764+ let cmdcode: u16 =
765+ CombineLengthCodes ( inscode, copycode, ( j == 0usize ) as i32 ) ;
766+ let cost: floatX =
767+ ( if cmdcode < 128 { base_cost } else { dist_cost } )
768+ + ( GetCopyExtra ( copycode) as floatX )
769+ + model. get_command_cost ( cmdcode) ;
770+ if cost
771+ < match ( nodes[ pos. wrapping_add ( l) ] ) . u {
772+ Union1 :: cost( cost) => cost,
773+ _ => 0.0 ,
789774 }
790- best_len = l;
775+ {
776+ UpdateZopfliNode (
777+ nodes,
778+ pos,
779+ start,
780+ l,
781+ l,
782+ backward,
783+ j. wrapping_add ( 1 ) ,
784+ cost,
785+ ) ;
786+ result = max ( result, l) ;
791787 }
788+ best_len = l;
792789 }
793790 }
794791 break ;
0 commit comments