removed ZSTD_decompressBegin() from ZSTD_initDCtx_internal()
It does not feel "right" from a dependency perspective. ZSTD_initDCtx_internal() is triggered once, on DCtx creation, while ZSTD_decompressBegin() is invoked at the beginning of each new frame, and is also a user-facing prototype. Downside : a DCtx must be init before first usage ! This was always the intention by the way, and is documented as such. This stage is automatically done within ZSTD_decompress() and variants, and also within ZSTD_decompressStream(). Only ZSTD_decompressContinue() is impacted, it must be preceded by a ZSTD_decompressBegin(), as detailed in doc. A test has been fixed, to no longer rely on undocumented assumption that ZSTD_decompressBegin() is invoked during init.
This commit is contained in:
parent
c994932788
commit
ea1f50bf73
@ -162,33 +162,9 @@ static size_t ZSTD_startingInputLength(ZSTD_format_e format)
|
|||||||
return startingInputLength;
|
return startingInputLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note : this function cannot fail */
|
|
||||||
size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx)
|
|
||||||
{
|
|
||||||
assert(dctx != NULL);
|
|
||||||
dctx->expected = ZSTD_startingInputLength(dctx->format);
|
|
||||||
dctx->stage = ZSTDds_getFrameHeaderSize;
|
|
||||||
dctx->decodedSize = 0;
|
|
||||||
dctx->previousDstEnd = NULL;
|
|
||||||
dctx->base = NULL;
|
|
||||||
dctx->vBase = NULL;
|
|
||||||
dctx->dictEnd = NULL;
|
|
||||||
dctx->entropy.hufTable[0] = (HUF_DTable)((HufLog)*0x1000001); /* cover both little and big endian */
|
|
||||||
dctx->litEntropy = dctx->fseEntropy = 0;
|
|
||||||
dctx->dictID = 0;
|
|
||||||
ZSTD_STATIC_ASSERT(sizeof(dctx->entropy.rep) == sizeof(repStartValue));
|
|
||||||
memcpy(dctx->entropy.rep, repStartValue, sizeof(repStartValue)); /* initial repcodes */
|
|
||||||
dctx->LLTptr = dctx->entropy.LLTable;
|
|
||||||
dctx->MLTptr = dctx->entropy.MLTable;
|
|
||||||
dctx->OFTptr = dctx->entropy.OFTable;
|
|
||||||
dctx->HUFptr = dctx->entropy.hufTable;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
|
static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
|
||||||
{
|
{
|
||||||
dctx->format = ZSTD_f_zstd1; /* ZSTD_decompressBegin() invokes ZSTD_startingInputLength() with argument dctx->format */
|
dctx->format = ZSTD_f_zstd1; /* ZSTD_decompressBegin() invokes ZSTD_startingInputLength() with argument dctx->format */
|
||||||
ZSTD_decompressBegin(dctx); /* cannot fail */
|
|
||||||
dctx->staticSize = 0;
|
dctx->staticSize = 0;
|
||||||
dctx->maxWindowSize = ZSTD_MAXWINDOWSIZE_DEFAULT;
|
dctx->maxWindowSize = ZSTD_MAXWINDOWSIZE_DEFAULT;
|
||||||
dctx->ddict = NULL;
|
dctx->ddict = NULL;
|
||||||
@ -542,7 +518,8 @@ static size_t ZSTD_setRleBlock(void* dst, size_t dstCapacity,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*! ZSTD_decodeLiteralsBlock() :
|
/*! ZSTD_decodeLiteralsBlock() :
|
||||||
* @return : nb of bytes read from src (< srcSize ) */
|
* @return : nb of bytes read from src (< srcSize )
|
||||||
|
* note : symbol not declared but exposed for fullbench */
|
||||||
size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
|
size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
|
||||||
const void* src, size_t srcSize) /* note : srcSize < BLOCKSIZE */
|
const void* src, size_t srcSize) /* note : srcSize < BLOCKSIZE */
|
||||||
{
|
{
|
||||||
@ -2003,6 +1980,29 @@ static size_t ZSTD_decompress_insertDictionary(ZSTD_DCtx* dctx, const void* dict
|
|||||||
return ZSTD_refDictContent(dctx, dict, dictSize);
|
return ZSTD_refDictContent(dctx, dict, dictSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Note : this function cannot fail */
|
||||||
|
size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx)
|
||||||
|
{
|
||||||
|
assert(dctx != NULL);
|
||||||
|
dctx->expected = ZSTD_startingInputLength(dctx->format); /* dctx->format must be properly set */
|
||||||
|
dctx->stage = ZSTDds_getFrameHeaderSize;
|
||||||
|
dctx->decodedSize = 0;
|
||||||
|
dctx->previousDstEnd = NULL;
|
||||||
|
dctx->base = NULL;
|
||||||
|
dctx->vBase = NULL;
|
||||||
|
dctx->dictEnd = NULL;
|
||||||
|
dctx->entropy.hufTable[0] = (HUF_DTable)((HufLog)*0x1000001); /* cover both little and big endian */
|
||||||
|
dctx->litEntropy = dctx->fseEntropy = 0;
|
||||||
|
dctx->dictID = 0;
|
||||||
|
ZSTD_STATIC_ASSERT(sizeof(dctx->entropy.rep) == sizeof(repStartValue));
|
||||||
|
memcpy(dctx->entropy.rep, repStartValue, sizeof(repStartValue)); /* initial repcodes */
|
||||||
|
dctx->LLTptr = dctx->entropy.LLTable;
|
||||||
|
dctx->MLTptr = dctx->entropy.MLTable;
|
||||||
|
dctx->OFTptr = dctx->entropy.OFTable;
|
||||||
|
dctx->HUFptr = dctx->entropy.hufTable;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize)
|
size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize)
|
||||||
{
|
{
|
||||||
CHECK_F( ZSTD_decompressBegin(dctx) );
|
CHECK_F( ZSTD_decompressBegin(dctx) );
|
||||||
|
@ -376,6 +376,7 @@ static size_t benchMem(const void* src, size_t srcSize, U32 benchNb)
|
|||||||
skippedSize = frameHeaderSize + ZSTD_blockHeaderSize;
|
skippedSize = frameHeaderSize + ZSTD_blockHeaderSize;
|
||||||
memcpy(buff2, dstBuff+skippedSize, g_cSize-skippedSize);
|
memcpy(buff2, dstBuff+skippedSize, g_cSize-skippedSize);
|
||||||
srcSize = srcSize > 128 KB ? 128 KB : srcSize; /* speed relative to block */
|
srcSize = srcSize > 128 KB ? 128 KB : srcSize; /* speed relative to block */
|
||||||
|
ZSTD_decompressBegin(g_zdc);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 32: /* ZSTD_decodeSeqHeaders */
|
case 32: /* ZSTD_decodeSeqHeaders */
|
||||||
|
Loading…
Reference in New Issue
Block a user