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