@@ -733,64 +733,61 @@ fn UpdateNodes<AllocF: Allocator<floatX>>(
733733 + i32:: from ( kDistanceCacheOffset[ j] ) )
734734 as usize ;
735735 let mut prev_ix: usize = cur_ix. wrapping_sub ( backward) ;
736- let len: usize ;
737736 let continuation: u8 = ringbuffer[ cur_ix_masked. wrapping_add ( best_len) ] ;
738737 if cur_ix_masked. wrapping_add ( best_len) > ringbuffer_mask {
739738 break ' break29;
740739 }
741740 if backward > max_distance. wrapping_add ( gap) {
742741 break ' continue30;
743742 }
744- if backward <= max_distance {
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 usize ) ]
752- as i32
753- {
754- break ' continue30;
755- }
756- len = FindMatchLengthWithLimit (
757- & ringbuffer[ ( prev_ix as usize ) ..] ,
758- & ringbuffer[ cur_ix_masked..] ,
759- max_len,
760- ) ;
761- } else {
743+ if backward > max_distance {
762744 break ' continue30;
763745 }
746+
747+ if prev_ix >= cur_ix {
748+ break ' continue30;
749+ }
750+ prev_ix &= ringbuffer_mask;
751+ if prev_ix. wrapping_add ( best_len) > ringbuffer_mask
752+ || continuation as i32
753+ != ringbuffer[ prev_ix. wrapping_add ( best_len) ] as i32
764754 {
765- let dist_cost = base_cost + model. get_distance_cost ( j) ;
766- for l in best_len. wrapping_add ( 1 ) ..=len {
767- let copycode: u16 = GetCopyLengthCode ( l) ;
768- let cmdcode: u16 =
769- CombineLengthCodes ( inscode, copycode, ( j == 0usize ) as i32 ) ;
770- let cost: floatX =
771- ( if cmdcode < 128 { base_cost } else { dist_cost } )
772- + ( GetCopyExtra ( copycode) as floatX )
773- + model. get_command_cost ( cmdcode) ;
774- if cost
775- < match ( nodes[ pos. wrapping_add ( l) ] ) . u {
776- Union1 :: cost( cost) => cost,
777- _ => 0.0 ,
778- }
779- {
780- UpdateZopfliNode (
781- nodes,
782- pos,
783- start,
784- l,
785- l,
786- backward,
787- j. wrapping_add ( 1 ) ,
788- cost,
789- ) ;
790- result = max ( result, l) ;
755+ break ' continue30;
756+ }
757+
758+ let len = FindMatchLengthWithLimit (
759+ & ringbuffer[ prev_ix..] ,
760+ & ringbuffer[ cur_ix_masked..] ,
761+ max_len,
762+ ) ;
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 ,
791776 }
792- best_len = l;
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) ;
793789 }
790+ best_len = l;
794791 }
795792 }
796793 break ;
0 commit comments