Moving init/end functions, moving compressSuperBlock inside body()

This commit is contained in:
Bimba Shrestha 2019-12-04 15:23:13 -08:00
parent ffb0463041
commit 2ec556fec2

View File

@ -2457,54 +2457,46 @@ static void ZSTD_confirmRepcodesAndEntropyTables(ZSTD_CCtx* zc)
zc->blockState.nextCBlock = tmp; zc->blockState.nextCBlock = tmp;
} }
static size_t ZSTD_compressBlock_targetCBlockSize_init(ZSTD_CCtx* zc,
void* dst, size_t dstCapacity,
const void* src, size_t srcSize,
U32 lastBlock)
{
const size_t bss = ZSTD_buildSeqStore(zc, src, srcSize);
FORWARD_IF_ERROR(bss);
if (bss == ZSTDbss_compress)
return ZSTD_compressSuperBlock(zc, dst, dstCapacity, lastBlock);
return 0;
}
static void ZSTD_compressBlock_targetCBlockSize_end(ZSTD_CCtx* zc)
{
if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
}
static size_t ZSTD_compressBlock_targetCBlockSize_body(ZSTD_CCtx* zc, static size_t ZSTD_compressBlock_targetCBlockSize_body(ZSTD_CCtx* zc,
size_t cSize, void* dst, size_t dstCapacity, const size_t bss, void* dst, size_t dstCapacity,
const void* src, size_t srcSize, const void* src, size_t srcSize,
U32 lastBlock) U32 lastBlock)
{ {
/* Superblock compression was successful */ /* Attempt superblock compression and return early if successful */
if (cSize != 0) { {
ZSTD_confirmRepcodesAndEntropyTables(zc); if (bss == ZSTDbss_compress) {
return cSize; size_t cSize = ZSTD_compressSuperBlock(zc, dst, dstCapacity, lastBlock);
FORWARD_IF_ERROR(cSize);
if (cSize != 0) {
ZSTD_confirmRepcodesAndEntropyTables(zc);
return cSize;
}
}
} }
/* Superblock compression failed, attempt to emit noCompress superblocks /* Superblock compression failed, attempt to emit noCompress superblocks
* and return early if that is successful and we have enough room for checksum */ * and return early if that is successful and we have enough room for checksum */
cSize = ZSTD_noCompressSuperBlock(dst, dstCapacity, src, srcSize, zc->appliedParams.targetCBlockSize, lastBlock); {
if (cSize != ERROR(dstSize_tooSmall) && (dstCapacity - cSize) >= 4) size_t cSize = ZSTD_noCompressSuperBlock(dst, dstCapacity, src, srcSize, zc->appliedParams.targetCBlockSize, lastBlock);
return cSize; if (cSize != ERROR(dstSize_tooSmall) && (dstCapacity - cSize) >= 4)
return cSize;
}
/* noCompress superblock emission failed. Attempt to compress normally /* noCompress superblock emission failed. Attempt to compress normally
* and return early if that is successful */ * and return early if that is successful */
cSize = ZSTD_compressSequences(&zc->seqStore, {
&zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy, size_t cSize = ZSTD_compressSequences(&zc->seqStore,
&zc->appliedParams, (BYTE*)dst+ZSTD_blockHeaderSize, dstCapacity-ZSTD_blockHeaderSize, &zc->blockState.prevCBlock->entropy, &zc->blockState.nextCBlock->entropy,
srcSize, zc->entropyWorkspace, HUF_WORKSPACE_SIZE, zc->bmi2); &zc->appliedParams, (BYTE*)dst+ZSTD_blockHeaderSize, dstCapacity-ZSTD_blockHeaderSize,
FORWARD_IF_ERROR(cSize); srcSize, zc->entropyWorkspace, HUF_WORKSPACE_SIZE, zc->bmi2);
if (cSize != 0) { FORWARD_IF_ERROR(cSize);
U32 const cBlockHeader24 = lastBlock + (((U32)bt_compressed)<<1) + (U32)(cSize << 3); if (cSize != 0) {
MEM_writeLE24((BYTE*)dst, cBlockHeader24); U32 const cBlockHeader24 = lastBlock + (((U32)bt_compressed)<<1) + (U32)(cSize << 3);
cSize += ZSTD_blockHeaderSize; MEM_writeLE24((BYTE*)dst, cBlockHeader24);
ZSTD_confirmRepcodesAndEntropyTables(zc); cSize += ZSTD_blockHeaderSize;
return cSize; ZSTD_confirmRepcodesAndEntropyTables(zc);
return cSize;
}
} }
/* Everything failed. Just emit a regular noCompress block */ /* Everything failed. Just emit a regular noCompress block */
@ -2517,13 +2509,17 @@ static size_t ZSTD_compressBlock_targetCBlockSize(ZSTD_CCtx* zc,
U32 lastBlock) U32 lastBlock)
{ {
size_t cSize = 0; size_t cSize = 0;
const size_t bss = ZSTD_buildSeqStore(zc, src, srcSize);
DEBUGLOG(5, "ZSTD_compressBlock_targetCBlockSize (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u, srcSize=%zu)", DEBUGLOG(5, "ZSTD_compressBlock_targetCBlockSize (dstCapacity=%u, dictLimit=%u, nextToUpdate=%u, srcSize=%zu)",
(unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit, (unsigned)zc->blockState.matchState.nextToUpdate, srcSize); (unsigned)dstCapacity, (unsigned)zc->blockState.matchState.window.dictLimit, (unsigned)zc->blockState.matchState.nextToUpdate, srcSize);
cSize = ZSTD_compressBlock_targetCBlockSize_init(zc, dst, dstCapacity, src, srcSize, lastBlock); FORWARD_IF_ERROR(bss);
cSize = ZSTD_compressBlock_targetCBlockSize_body(zc, bss, dst, dstCapacity, src, srcSize, lastBlock);
FORWARD_IF_ERROR(cSize); FORWARD_IF_ERROR(cSize);
cSize = ZSTD_compressBlock_targetCBlockSize_body(zc, cSize, dst, dstCapacity, src, srcSize, lastBlock);
FORWARD_IF_ERROR(cSize); if (zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode == FSE_repeat_valid)
ZSTD_compressBlock_targetCBlockSize_end(zc); zc->blockState.prevCBlock->entropy.fse.offcode_repeatMode = FSE_repeat_check;
return cSize; return cSize;
} }