]> git.ipfire.org Git - thirdparty/zstd.git/commitdiff
MaxLit
authorinikep <inikep@gmail.com>
Wed, 3 Feb 2016 21:56:55 +0000 (22:56 +0100)
committerinikep <inikep@gmail.com>
Wed, 3 Feb 2016 21:56:55 +0000 (22:56 +0100)
lib/zstd_compress.c
lib/zstd_internal.h

index 4b345c4aa702305b0a364648297cb0db42cbcb7f..601df81597ca4c745e412e8b3370a383dbc86ade 100644 (file)
@@ -88,10 +88,10 @@ typedef struct {
     BYTE* matchLength;
     BYTE* dumpsStart;
     BYTE* dumps;
-    BYTE* matchLengthFreq;
-    BYTE* litLengthFreq;
-    BYTE* litFreq;
-    BYTE* offCodeFreq;
+    U32* matchLengthFreq;
+    U32* litLengthFreq;
+    U32* litFreq;
+    U32* offCodeFreq;
     U32 matchLengthSum;
     U32 litLengthSum;
     U32 litSum;
@@ -111,10 +111,14 @@ static void ZSTD_resetSeqStore(seqStore_t* ssPtr)
     ssPtr->litSum = (1<<Litbits);
     ssPtr->offCodeSum = (1<<Offbits);
 
-    memset(ssPtr->litFreq, 1, (1<<Litbits));
-    memset(ssPtr->litLengthFreq, 1, (1<<LLbits));
-    memset(ssPtr->matchLengthFreq, 1, (1<<MLbits));
-    memset(ssPtr->offCodeFreq, 1, (1<<Offbits));
+    for (int i=0; i<=MaxLit; i++)
+        ssPtr->litFreq[i] = 1;
+    for (int i=0; i<=MaxLL; i++)
+        ssPtr->litLengthFreq[i] = 1;
+    for (int i=0; i<=MaxML; i++)
+        ssPtr->matchLengthFreq[i] = 1;
+    for (int i=0; i<=MaxOff; i++)
+        ssPtr->offCodeFreq[i] = 1;
 }
 
 
@@ -202,7 +206,7 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
     /* reserve table memory */
     const U32 contentLog = (params.strategy == ZSTD_fast) ? 1 : params.contentLog;
     const size_t tableSpace = ((1 << contentLog) + (1 << params.hashLog)) * sizeof(U32);
-    const size_t neededSpace = tableSpace + (256*sizeof(U32)) + (3*blockSize) + (1<<MLbits) + (1<<LLbits) + (1<<Offbits) + (1<<Litbits);
+    const size_t neededSpace = tableSpace + (256*sizeof(U32)) + (3*blockSize) + ((1<<MLbits) + (1<<LLbits) + (1<<Offbits) + (1<<Litbits))*sizeof(U32);
     if (zc->workSpaceSize < neededSpace) {
         free(zc->workSpace);
         zc->workSpace = malloc(neededSpace);
@@ -231,11 +235,11 @@ static size_t ZSTD_resetCCtx_advanced (ZSTD_CCtx* zc,
     zc->seqStore.litLengthStart =  zc->seqStore.litStart + blockSize;
     zc->seqStore.matchLengthStart = zc->seqStore.litLengthStart + (blockSize>>2);
     zc->seqStore.dumpsStart = zc->seqStore.matchLengthStart + (blockSize>>2);
-    zc->seqStore.litFreq = zc->seqStore.dumpsStart + (blockSize>>2);
+    zc->seqStore.litFreq = (U32*) (zc->seqStore.dumpsStart + (blockSize>>2));
     zc->seqStore.litLengthFreq = zc->seqStore.litFreq + (1<<Litbits);
     zc->seqStore.matchLengthFreq = zc->seqStore.litLengthFreq + (1<<LLbits);
     zc->seqStore.offCodeFreq = zc->seqStore.matchLengthFreq + (1<<MLbits);
- //   zc->seqStore.XXX = zc->seqStore.offCodeFreq + (1<<Offbits);
+ //   zc->seqStore.XXX = zc->seqStore.offCodeFreq + (1<<Offbits)*sizeof(U32);
 
     zc->hbSize = 0;
     zc->stage = 0;
index f2af062f747dbef3b288304586166693f7d43249..eebcc0d77c22f1523bbd966d34983c562cd11e0d 100644 (file)
@@ -87,6 +87,7 @@ static const size_t ZSTD_frameHeaderSize_min = 5;
 #define MLbits   7
 #define LLbits   6
 #define Offbits  5
+#define MaxLit ((1<<Litbits) - 1)
 #define MaxML  ((1<<MLbits) - 1)
 #define MaxLL  ((1<<LLbits) - 1)
 #define MaxOff ((1<<Offbits)- 1)