changed long length format
This commit is contained in:
+15
-3
@@ -718,7 +718,7 @@ _check_compressibility:
|
|||||||
*/
|
*/
|
||||||
MEM_STATIC void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* literals, size_t offsetCode, size_t matchCode)
|
MEM_STATIC void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const BYTE* literals, size_t offsetCode, size_t matchCode)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0 /* for debug */
|
||||||
static const BYTE* g_start = NULL;
|
static const BYTE* g_start = NULL;
|
||||||
if (g_start==NULL) g_start = literals;
|
if (g_start==NULL) g_start = literals;
|
||||||
//if (literals - g_start == 8695)
|
//if (literals - g_start == 8695)
|
||||||
@@ -737,7 +737,13 @@ MEM_STATIC void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const B
|
|||||||
*(seqStorePtr->dumps++) = (BYTE)(litLength - MaxLL);
|
*(seqStorePtr->dumps++) = (BYTE)(litLength - MaxLL);
|
||||||
} else {
|
} else {
|
||||||
*(seqStorePtr->dumps++) = 255;
|
*(seqStorePtr->dumps++) = 255;
|
||||||
MEM_writeLE32(seqStorePtr->dumps, (U32)litLength); seqStorePtr->dumps += 3;
|
if (litLength < (1<<15)) {
|
||||||
|
MEM_writeLE16(seqStorePtr->dumps, (U16)(litLength<<1));
|
||||||
|
seqStorePtr->dumps += 2;
|
||||||
|
} else {
|
||||||
|
MEM_writeLE32(seqStorePtr->dumps, (U32)((litLength<<1)+1));
|
||||||
|
seqStorePtr->dumps += 3;
|
||||||
|
}
|
||||||
} }
|
} }
|
||||||
else *(seqStorePtr->litLength++) = (BYTE)litLength;
|
else *(seqStorePtr->litLength++) = (BYTE)litLength;
|
||||||
|
|
||||||
@@ -751,7 +757,13 @@ MEM_STATIC void ZSTD_storeSeq(seqStore_t* seqStorePtr, size_t litLength, const B
|
|||||||
*(seqStorePtr->dumps++) = (BYTE)(matchCode - MaxML);
|
*(seqStorePtr->dumps++) = (BYTE)(matchCode - MaxML);
|
||||||
} else {
|
} else {
|
||||||
*(seqStorePtr->dumps++) = 255;
|
*(seqStorePtr->dumps++) = 255;
|
||||||
MEM_writeLE32(seqStorePtr->dumps, (U32)matchCode); seqStorePtr->dumps += 3;
|
if (matchCode < (1<<15)) {
|
||||||
|
MEM_writeLE16(seqStorePtr->dumps, (U16)(matchCode<<1));
|
||||||
|
seqStorePtr->dumps += 2;
|
||||||
|
} else {
|
||||||
|
MEM_writeLE32(seqStorePtr->dumps, (U32)((matchCode<<1)+1));
|
||||||
|
seqStorePtr->dumps += 3;
|
||||||
|
}
|
||||||
} }
|
} }
|
||||||
else *(seqStorePtr->matchLength++) = (BYTE)matchCode;
|
else *(seqStorePtr->matchLength++) = (BYTE)matchCode;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -626,8 +626,9 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|||||||
U32 add = *dumps++;
|
U32 add = *dumps++;
|
||||||
if (add < 255) litLength += add;
|
if (add < 255) litLength += add;
|
||||||
else {
|
else {
|
||||||
litLength = MEM_readLE32(dumps) & 0xFFFFFF; /* no pb : dumps is always followed by seq tables > 1 byte */
|
litLength = MEM_readLE32(dumps) & 0xFFFFFF; /* no risk : dumps is always followed by seq tables > 1 byte */
|
||||||
dumps += 3;
|
if (litLength&1) litLength>>=1, dumps += 3;
|
||||||
|
else litLength = (U16)(litLength)>>1, dumps += 2;
|
||||||
}
|
}
|
||||||
if (dumps >= de) dumps = de-1; /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
if (dumps >= de) dumps = de-1; /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
||||||
}
|
}
|
||||||
@@ -659,7 +660,8 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|||||||
if (add < 255) matchLength += add;
|
if (add < 255) matchLength += add;
|
||||||
else {
|
else {
|
||||||
matchLength = MEM_readLE32(dumps) & 0xFFFFFF; /* no pb : dumps is always followed by seq tables > 1 byte */
|
matchLength = MEM_readLE32(dumps) & 0xFFFFFF; /* no pb : dumps is always followed by seq tables > 1 byte */
|
||||||
dumps += 3;
|
if (matchLength&1) matchLength>>=1, dumps += 3;
|
||||||
|
else matchLength = (U16)(matchLength)>>1, dumps += 2;
|
||||||
}
|
}
|
||||||
if (dumps >= de) dumps = de-1; /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
if (dumps >= de) dumps = de-1; /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
||||||
}
|
}
|
||||||
@@ -671,7 +673,7 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|||||||
seq->matchLength = matchLength;
|
seq->matchLength = matchLength;
|
||||||
seqState->dumps = dumps;
|
seqState->dumps = dumps;
|
||||||
|
|
||||||
#if 0
|
#if 0 /* debug */
|
||||||
{
|
{
|
||||||
static U64 totalDecoded = 0;
|
static U64 totalDecoded = 0;
|
||||||
printf("pos %6u : %3u literals & match %3u bytes at distance %6u \n",
|
printf("pos %6u : %3u literals & match %3u bytes at distance %6u \n",
|
||||||
|
|||||||
Reference in New Issue
Block a user