Merge pull request #1675 from ephiepark/dev
Factor out the logic to build sequences
This commit is contained in:
commit
b01c1c679f
@ -2761,30 +2761,24 @@ void ZSTD_resetSeqStore(seqStore_t* ssPtr)
|
|||||||
ssPtr->longLengthID = 0;
|
ssPtr->longLengthID = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
|
typedef enum { ZSTDbss_compress, ZSTDbss_noCompress } ZSTD_buildSeqStore_e;
|
||||||
void* dst, size_t dstCapacity,
|
|
||||||
const void* src, size_t srcSize)
|
static size_t ZSTD_buildSeqStore(ZSTD_CCtx* zc, const void* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
ZSTD_matchState_t* const ms = &zc->blockState.matchState;
|
ZSTD_matchState_t* const ms = &zc->blockState.matchState;
|
||||||
size_t cSize;
|
DEBUGLOG(5, "ZSTD_buildSeqStore (srcSize=%zu)", srcSize);
|
||||||
DEBUGLOG(5, "ZSTD_compressBlock_internal (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u)",
|
|
||||||
(unsigned)dstCapacity, (unsigned)ms->window.dictLimit, (unsigned)ms->nextToUpdate);
|
|
||||||
assert(srcSize <= ZSTD_BLOCKSIZE_MAX);
|
assert(srcSize <= ZSTD_BLOCKSIZE_MAX);
|
||||||
|
|
||||||
/* Assert that we have correctly flushed the ctx params into the ms's copy */
|
/* Assert that we have correctly flushed the ctx params into the ms's copy */
|
||||||
ZSTD_assertEqualCParams(zc->appliedParams.cParams, ms->cParams);
|
ZSTD_assertEqualCParams(zc->appliedParams.cParams, ms->cParams);
|
||||||
|
|
||||||
if (srcSize < MIN_CBLOCK_SIZE+ZSTD_blockHeaderSize+1) {
|
if (srcSize < MIN_CBLOCK_SIZE+ZSTD_blockHeaderSize+1) {
|
||||||
ZSTD_ldm_skipSequences(&zc->externSeqStore, srcSize, zc->appliedParams.cParams.minMatch);
|
ZSTD_ldm_skipSequences(&zc->externSeqStore, srcSize, zc->appliedParams.cParams.minMatch);
|
||||||
cSize = 0;
|
return ZSTDbss_noCompress; /* don't even attempt compression below a certain srcSize */
|
||||||
goto out; /* don't even attempt compression below a certain srcSize */
|
|
||||||
}
|
}
|
||||||
ZSTD_resetSeqStore(&(zc->seqStore));
|
ZSTD_resetSeqStore(&(zc->seqStore));
|
||||||
/* required for optimal parser to read stats from dictionary */
|
/* required for optimal parser to read stats from dictionary */
|
||||||
ms->opt.symbolCosts = &zc->blockState.prevCBlock->entropy;
|
ms->opt.symbolCosts = &zc->blockState.prevCBlock->entropy;
|
||||||
/* tell the optimal parser how we expect to compress literals */
|
/* tell the optimal parser how we expect to compress literals */
|
||||||
ms->opt.literalCompressionMode = zc->appliedParams.literalCompressionMode;
|
ms->opt.literalCompressionMode = zc->appliedParams.literalCompressionMode;
|
||||||
|
|
||||||
/* a gap between an attached dict and the current window is not safe,
|
/* a gap between an attached dict and the current window is not safe,
|
||||||
* they must remain adjacent,
|
* they must remain adjacent,
|
||||||
* and when that stops being the case, the dict must be unset */
|
* and when that stops being the case, the dict must be unset */
|
||||||
@ -2838,6 +2832,21 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
|
|||||||
{ const BYTE* const lastLiterals = (const BYTE*)src + srcSize - lastLLSize;
|
{ const BYTE* const lastLiterals = (const BYTE*)src + srcSize - lastLLSize;
|
||||||
ZSTD_storeLastLiterals(&zc->seqStore, lastLiterals, lastLLSize);
|
ZSTD_storeLastLiterals(&zc->seqStore, lastLiterals, lastLLSize);
|
||||||
} }
|
} }
|
||||||
|
return ZSTDbss_compress;
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
|
||||||
|
void* dst, size_t dstCapacity,
|
||||||
|
const void* src, size_t srcSize)
|
||||||
|
{
|
||||||
|
size_t cSize;
|
||||||
|
DEBUGLOG(5, "ZSTD_compressBlock_internal (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u)",
|
||||||
|
(unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit, (unsigned)zc->blockState.matchState.nextToUpdate);
|
||||||
|
|
||||||
|
{ const size_t bss = ZSTD_buildSeqStore(zc, src, srcSize);
|
||||||
|
FORWARD_IF_ERROR(bss);
|
||||||
|
if (bss == ZSTDbss_noCompress) { cSize = 0; goto out; }
|
||||||
|
}
|
||||||
|
|
||||||
/* encode sequences and literals */
|
/* encode sequences and literals */
|
||||||
cSize = ZSTD_compressSequences(&zc->seqStore,
|
cSize = ZSTD_compressSequences(&zc->seqStore,
|
||||||
|
Loading…
Reference in New Issue
Block a user