@@ -32,7 +32,7 @@ pub(crate) struct ZSTDv07_DCtx {
3232 vBase : * const core:: ffi:: c_void ,
3333 dictEnd : * const core:: ffi:: c_void ,
3434 expected : usize ,
35- rep : [ u32 ; 3 ] ,
35+ rep : [ u32 ; ZSTDv07_REP_INIT ] ,
3636 fParams : ZSTDv07_frameParams ,
3737 bType : blockType_t ,
3838 stage : ZSTDv07_dStage ,
@@ -80,16 +80,16 @@ struct blockProperties_t {
8080#[ repr( C ) ]
8181struct seqState_t < ' a > {
8282 DStream : BITv07_DStream_t < ' a > ,
83- stateLL : FSEv07_DState_t < ' a > ,
84- stateOffb : FSEv07_DState_t < ' a > ,
85- stateML : FSEv07_DState_t < ' a > ,
86- prevOffset : [ usize ; 3 ] ,
83+ stateLL : FSEv07_DState_t < ' a , 512 > ,
84+ stateOffb : FSEv07_DState_t < ' a , 256 > ,
85+ stateML : FSEv07_DState_t < ' a , 512 > ,
86+ prevOffset : [ usize ; ZSTDv07_REP_INIT ] ,
8787}
8888#[ derive( Copy , Clone ) ]
8989#[ repr( C ) ]
90- struct FSEv07_DState_t < ' a > {
90+ struct FSEv07_DState_t < ' a , const N : usize > {
9191 state : usize ,
92- table : & ' a [ FSEv07_decode_t ] ,
92+ table : & ' a [ FSEv07_decode_t ; N ] ,
9393}
9494#[ derive( Copy , Clone ) ]
9595#[ repr( C ) ]
@@ -344,7 +344,7 @@ impl<'a> BITv07_DStream_t<'a> {
344344fn FSEv07_initDState < ' a , const N : usize > (
345345 bitD : & mut BITv07_DStream_t ,
346346 dt : & ' a FSEv07_DTable < N > ,
347- ) -> FSEv07_DState_t < ' a > {
347+ ) -> FSEv07_DState_t < ' a , N > {
348348 let state = bitD. read_bits ( dt. header . tableLog as core:: ffi:: c_uint ) ;
349349 bitD. reload ( ) ;
350350 FSEv07_DState_t {
@@ -353,20 +353,23 @@ fn FSEv07_initDState<'a, const N: usize>(
353353 }
354354}
355355#[ inline]
356- unsafe fn FSEv07_peekSymbol ( DStatePtr : & FSEv07_DState_t ) -> u8 {
356+ unsafe fn FSEv07_peekSymbol < const N : usize > ( DStatePtr : & FSEv07_DState_t < N > ) -> u8 {
357357 let DInfo = DStatePtr . table [ DStatePtr . state ] ;
358358 DInfo . symbol
359359}
360360#[ inline]
361- unsafe fn FSEv07_updateState ( DStatePtr : & mut FSEv07_DState_t , bitD : & mut BITv07_DStream_t ) {
361+ unsafe fn FSEv07_updateState < const N : usize > (
362+ DStatePtr : & mut FSEv07_DState_t < N > ,
363+ bitD : & mut BITv07_DStream_t ,
364+ ) {
362365 let DInfo = DStatePtr . table [ DStatePtr . state ] ;
363366 let nbBits = DInfo . nbBits as u32 ;
364367 let lowBits = bitD. read_bits ( nbBits) ;
365368 DStatePtr . state = ( DInfo . newState as usize ) . wrapping_add ( lowBits) ;
366369}
367370#[ inline]
368- unsafe fn FSEv07_decodeSymbol (
369- DStatePtr : & mut FSEv07_DState_t ,
371+ unsafe fn FSEv07_decodeSymbol < const N : usize > (
372+ DStatePtr : & mut FSEv07_DState_t < N > ,
370373 bitD : & mut BITv07_DStream_t ,
371374) -> core:: ffi:: c_uchar {
372375 let DInfo = DStatePtr . table [ DStatePtr . state ] ;
@@ -377,8 +380,8 @@ unsafe fn FSEv07_decodeSymbol(
377380 symbol
378381}
379382#[ inline]
380- unsafe fn FSEv07_decodeSymbolFast (
381- DStatePtr : & mut FSEv07_DState_t ,
383+ unsafe fn FSEv07_decodeSymbolFast < const N : usize > (
384+ DStatePtr : & mut FSEv07_DState_t < N > ,
382385 bitD : & mut BITv07_DStream_t ,
383386) -> core:: ffi:: c_uchar {
384387 let DInfo = DStatePtr . table [ DStatePtr . state ] ;
@@ -2038,7 +2041,7 @@ unsafe fn ZSTDv07_defaultFreeFunction(
20382041}
20392042const ZSTDv07_DICT_MAGIC : core:: ffi:: c_uint = 0xec30a437 as core:: ffi:: c_uint ;
20402043const ZSTDv07_REP_NUM : core:: ffi:: c_int = 3 ;
2041- const ZSTDv07_REP_INIT : core :: ffi :: c_int = 3 ;
2044+ const ZSTDv07_REP_INIT : usize = 3 ;
20422045static repStartValue: [ u32 ; 3 ] = [ 1 , 4 , 8 ] ;
20432046const ZSTDv07_WINDOWLOG_ABSOLUTEMIN : core:: ffi:: c_int = 10 ;
20442047static ZSTDv07_fcs_fieldSize : [ usize ; 4 ] = [ 0 , 2 , 4 , 8 ] ;
@@ -2904,46 +2907,25 @@ unsafe fn ZSTDv07_decompressSequences(
29042907 ) ?;
29052908 ip = ip. add ( seqHSize) ;
29062909 if nbSeq != 0 {
2907- let mut seqState = seqState_t {
2908- DStream : BITv07_DStream_t {
2909- bitContainer : 0 ,
2910- bitsConsumed : 0 ,
2911- ptr : core:: ptr:: null ( ) ,
2912- start : core:: ptr:: null ( ) ,
2913- _marker : PhantomData ,
2914- } ,
2915- stateLL : FSEv07_DState_t {
2916- state : 0 ,
2917- table : & [ ] ,
2918- } ,
2919- stateOffb : FSEv07_DState_t {
2920- state : 0 ,
2921- table : & [ ] ,
2922- } ,
2923- stateML : FSEv07_DState_t {
2924- state : 0 ,
2925- table : & [ ] ,
2926- } ,
2927- prevOffset : [ 0 ; 3 ] ,
2928- } ;
29292910 ( * dctx) . fseEntropy = 1 ;
2930- let mut i: u32 = 0 ;
2931- i = 0 ;
2932- while i < ZSTDv07_REP_INIT as u32 {
2933- * ( seqState. prevOffset ) . as_mut_ptr ( ) . offset ( i as isize ) =
2934- * ( ( * dctx) . rep ) . as_mut_ptr ( ) . offset ( i as isize ) as usize ;
2935- i = i. wrapping_add ( 1 ) ;
2936- }
2937- match BITv07_DStream_t :: new ( core:: slice:: from_raw_parts (
2911+ let prevOffset: [ usize ; ZSTDv07_REP_INIT ] =
2912+ core:: array:: from_fn ( |i| ( * dctx) . rep [ i] as usize ) ;
2913+
2914+ let mut DStream = match BITv07_DStream_t :: new ( core:: slice:: from_raw_parts (
29382915 ip,
29392916 iend. offset_from ( ip) as usize ,
29402917 ) ) {
2941- Ok ( bitD ) => seqState . DStream = bitD ,
2918+ Ok ( DStream ) => DStream ,
29422919 Err ( _) => return Err ( Error :: corruption_detected) ,
29432920 } ;
2944- seqState. stateLL = FSEv07_initDState ( & mut seqState. DStream , DTableLL ) ;
2945- seqState. stateOffb = FSEv07_initDState ( & mut seqState. DStream , DTableOffb ) ;
2946- seqState. stateML = FSEv07_initDState ( & mut seqState. DStream , DTableML ) ;
2921+ let mut seqState = seqState_t {
2922+ stateLL : FSEv07_initDState ( & mut DStream , DTableLL ) ,
2923+ stateOffb : FSEv07_initDState ( & mut DStream , DTableOffb ) ,
2924+ stateML : FSEv07_initDState ( & mut DStream , DTableML ) ,
2925+ DStream ,
2926+ prevOffset,
2927+ } ;
2928+
29472929 while seqState. DStream . reload ( ) as core:: ffi:: c_uint
29482930 <= BITv07_DStream_completed as core:: ffi:: c_int as core:: ffi:: c_uint
29492931 && nbSeq != 0
0 commit comments