@@ -950,10 +950,10 @@ unsafe fn HUFv07_decompress4X2_usingDTable_internal(
950950 let opStart2 = ostart. add ( segmentSize) ;
951951 let opStart3 = opStart2. add ( segmentSize) ;
952952 let opStart4 = opStart3. add ( segmentSize) ;
953- let mut op1 = ostart;
954- let mut op2 = opStart2;
955- let mut op3 = opStart3;
956- let mut op4 = opStart4;
953+ let mut op1 = Writer :: from_range ( ostart, opStart2 ) ;
954+ let mut op2 = Writer :: from_range ( opStart2, opStart3 ) ;
955+ let mut op3 = Writer :: from_range ( opStart3, opStart4 ) ;
956+ let mut op4 = Writer :: from_range ( opStart4, oend ) ;
957957 let dtLog = DTable . description . tableLog as u32 ;
958958 if length4 > cSrc. len ( ) {
959959 return Err ( Error :: corruption_detected) ;
@@ -967,97 +967,43 @@ unsafe fn HUFv07_decompress4X2_usingDTable_internal(
967967 endSignal &= bitD2. reload ( ) == StreamStatus :: Unfinished ;
968968 endSignal &= bitD3. reload ( ) == StreamStatus :: Unfinished ;
969969 endSignal &= bitD4. reload ( ) == StreamStatus :: Unfinished ;
970- while endSignal && op4 < oend. sub ( 7 ) {
971- if MEM_64bits ( ) {
972- let fresh18 = op1;
973- op1 = op1. add ( 1 ) ;
974- * fresh18 = HUFv07_decodeSymbolX2 ( & mut bitD1, dt, dtLog) ;
975- }
976- if MEM_64bits ( ) {
977- let fresh19 = op2;
978- op2 = op2. add ( 1 ) ;
979- * fresh19 = HUFv07_decodeSymbolX2 ( & mut bitD2, dt, dtLog) ;
980- }
981- if MEM_64bits ( ) {
982- let fresh20 = op3;
983- op3 = op3. add ( 1 ) ;
984- * fresh20 = HUFv07_decodeSymbolX2 ( & mut bitD3, dt, dtLog) ;
985- }
970+ while endSignal
971+ && op1. capacity ( ) >= 8
972+ && op2. capacity ( ) >= 8
973+ && op3. capacity ( ) >= 8
974+ && op4. capacity ( ) >= 8
975+ {
986976 if MEM_64bits ( ) {
987- let fresh21 = op4;
988- op4 = op4. add ( 1 ) ;
989- * fresh21 = HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ;
990- }
991- if MEM_64bits ( ) || HUFv07_TABLELOG_MAX <= 12 {
992- let fresh22 = op1;
993- op1 = op1. add ( 1 ) ;
994- * fresh22 = HUFv07_decodeSymbolX2 ( & mut bitD1, dt, dtLog) ;
995- }
996- if MEM_64bits ( ) || HUFv07_TABLELOG_MAX <= 12 {
997- let fresh23 = op2;
998- op2 = op2. add ( 1 ) ;
999- * fresh23 = HUFv07_decodeSymbolX2 ( & mut bitD2, dt, dtLog) ;
1000- }
1001- if MEM_64bits ( ) || HUFv07_TABLELOG_MAX <= 12 {
1002- let fresh24 = op3;
1003- op3 = op3. add ( 1 ) ;
1004- * fresh24 = HUFv07_decodeSymbolX2 ( & mut bitD3, dt, dtLog) ;
977+ op1. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD1, dt, dtLog) ) ;
978+ op2. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD2, dt, dtLog) ) ;
979+ op3. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD3, dt, dtLog) ) ;
980+ op4. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ) ;
1005981 }
1006982 if MEM_64bits ( ) || HUFv07_TABLELOG_MAX <= 12 {
1007- let fresh25 = op4;
1008- op4 = op4. add ( 1 ) ;
1009- * fresh25 = HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ;
1010- }
1011- if MEM_64bits ( ) {
1012- let fresh26 = op1;
1013- op1 = op1. add ( 1 ) ;
1014- * fresh26 = HUFv07_decodeSymbolX2 ( & mut bitD1, dt, dtLog) ;
1015- }
1016- if MEM_64bits ( ) {
1017- let fresh27 = op2;
1018- op2 = op2. add ( 1 ) ;
1019- * fresh27 = HUFv07_decodeSymbolX2 ( & mut bitD2, dt, dtLog) ;
1020- }
1021- if MEM_64bits ( ) {
1022- let fresh28 = op3;
1023- op3 = op3. add ( 1 ) ;
1024- * fresh28 = HUFv07_decodeSymbolX2 ( & mut bitD3, dt, dtLog) ;
983+ op1. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD1, dt, dtLog) ) ;
984+ op2. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD2, dt, dtLog) ) ;
985+ op3. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD3, dt, dtLog) ) ;
986+ op4. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ) ;
1025987 }
1026988 if MEM_64bits ( ) {
1027- let fresh29 = op4;
1028- op4 = op4. add ( 1 ) ;
1029- * fresh29 = HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ;
1030- }
1031- let fresh30 = op1;
1032- op1 = op1. add ( 1 ) ;
1033- * fresh30 = HUFv07_decodeSymbolX2 ( & mut bitD1, dt, dtLog) ;
1034- let fresh31 = op2;
1035- op2 = op2. add ( 1 ) ;
1036- * fresh31 = HUFv07_decodeSymbolX2 ( & mut bitD2, dt, dtLog) ;
1037- let fresh32 = op3;
1038- op3 = op3. add ( 1 ) ;
1039- * fresh32 = HUFv07_decodeSymbolX2 ( & mut bitD3, dt, dtLog) ;
1040- let fresh33 = op4;
1041- op4 = op4. add ( 1 ) ;
1042- * fresh33 = HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ;
989+ op1. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD1, dt, dtLog) ) ;
990+ op2. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD2, dt, dtLog) ) ;
991+ op3. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD3, dt, dtLog) ) ;
992+ op4. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ) ;
993+ }
994+ op1. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD1, dt, dtLog) ) ;
995+ op2. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD2, dt, dtLog) ) ;
996+ op3. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD3, dt, dtLog) ) ;
997+ op4. write_u8 ( HUFv07_decodeSymbolX2 ( & mut bitD4, dt, dtLog) ) ;
1043998 endSignal &= bitD1. reload ( ) == StreamStatus :: Unfinished ;
1044999 endSignal &= bitD2. reload ( ) == StreamStatus :: Unfinished ;
10451000 endSignal &= bitD3. reload ( ) == StreamStatus :: Unfinished ;
10461001 endSignal &= bitD4. reload ( ) == StreamStatus :: Unfinished ;
10471002 }
1048- if op1 > opStart2 {
1049- return Err ( Error :: corruption_detected) ;
1050- }
1051- if op2 > opStart3 {
1052- return Err ( Error :: corruption_detected) ;
1053- }
1054- if op3 > opStart4 {
1055- return Err ( Error :: corruption_detected) ;
1056- }
1057- HUFv07_decodeStreamX2 ( Writer :: from_range ( op1, opStart2) , & mut bitD1, dt, dtLog) ;
1058- HUFv07_decodeStreamX2 ( Writer :: from_range ( op2, opStart3) , & mut bitD2, dt, dtLog) ;
1059- HUFv07_decodeStreamX2 ( Writer :: from_range ( op3, opStart4) , & mut bitD3, dt, dtLog) ;
1060- HUFv07_decodeStreamX2 ( Writer :: from_range ( op4, oend) , & mut bitD4, dt, dtLog) ;
1003+ HUFv07_decodeStreamX2 ( op1, & mut bitD1, dt, dtLog) ;
1004+ HUFv07_decodeStreamX2 ( op2, & mut bitD2, dt, dtLog) ;
1005+ HUFv07_decodeStreamX2 ( op3, & mut bitD3, dt, dtLog) ;
1006+ HUFv07_decodeStreamX2 ( op4, & mut bitD4, dt, dtLog) ;
10611007 if !( bitD1. is_empty ( ) && bitD2. is_empty ( ) && bitD3. is_empty ( ) && bitD4. is_empty ( ) ) {
10621008 return Err ( Error :: corruption_detected) ;
10631009 }
@@ -1408,8 +1354,7 @@ unsafe fn HUFv07_decompress4X4_usingDTable_internal(
14081354 let mut op2 = Writer :: from_range ( opStart2, opStart3) ;
14091355 let mut op3 = Writer :: from_range ( opStart3, opStart3) ;
14101356 let mut op4 = Writer :: from_range ( opStart4, oend) ;
1411- let dtd = DTable . description ;
1412- let dtLog = dtd. tableLog as u32 ;
1357+ let dtLog = DTable . description . tableLog as u32 ;
14131358 if length4 > cSrc. len ( ) {
14141359 return Err ( Error :: corruption_detected) ;
14151360 }
0 commit comments