ZSTD_initCStream() optimization : do not allocate a CDict when no dictionary used
This commit is contained in:
parent
bfae317ae3
commit
ee5b725823
@ -2489,13 +2489,13 @@ static size_t ZSTD_checkDictNCount(short* normalizedCounter, unsigned dictMaxSym
|
|||||||
|
|
||||||
|
|
||||||
/* Dictionary format :
|
/* Dictionary format :
|
||||||
Magic == ZSTD_DICT_MAGIC (4 bytes)
|
Magic == ZSTD_DICT_MAGIC (4 bytes)
|
||||||
HUF_writeCTable(256)
|
HUF_writeCTable(256)
|
||||||
FSE_writeNCount(off)
|
FSE_writeNCount(off)
|
||||||
FSE_writeNCount(ml)
|
FSE_writeNCount(ml)
|
||||||
FSE_writeNCount(ll)
|
FSE_writeNCount(ll)
|
||||||
RepOffsets
|
RepOffsets
|
||||||
Dictionary content
|
Dictionary content
|
||||||
*/
|
*/
|
||||||
/*! ZSTD_loadDictEntropyStats() :
|
/*! ZSTD_loadDictEntropyStats() :
|
||||||
@return : size read from dictionary
|
@return : size read from dictionary
|
||||||
@ -2839,6 +2839,7 @@ struct ZSTD_CStream_s {
|
|||||||
ZSTD_cStreamStage stage;
|
ZSTD_cStreamStage stage;
|
||||||
U32 checksum;
|
U32 checksum;
|
||||||
U32 frameEnded;
|
U32 frameEnded;
|
||||||
|
ZSTD_parameters params;
|
||||||
ZSTD_customMem customMem;
|
ZSTD_customMem customMem;
|
||||||
}; /* typedef'd to ZSTD_CStream within "zstd.h" */
|
}; /* typedef'd to ZSTD_CStream within "zstd.h" */
|
||||||
|
|
||||||
@ -2884,7 +2885,10 @@ size_t ZSTD_CStreamOutSize(void) { return ZSTD_compressBound(ZSTD_BLOCKSIZE_ABSO
|
|||||||
|
|
||||||
size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize)
|
size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize)
|
||||||
{
|
{
|
||||||
CHECK_F(ZSTD_compressBegin_usingCDict(zcs->cctx, zcs->cdict, pledgedSrcSize));
|
if (zcs->inBuffSize==0) return ERROR(stage_wrong); /* zcs has not been init at least once */
|
||||||
|
|
||||||
|
if (zcs->cdict) CHECK_F(ZSTD_compressBegin_usingCDict(zcs->cctx, zcs->cdict, pledgedSrcSize))
|
||||||
|
else CHECK_F(ZSTD_compressBegin_advanced(zcs->cctx, NULL, 0, zcs->params, pledgedSrcSize));
|
||||||
|
|
||||||
zcs->inToCompress = 0;
|
zcs->inToCompress = 0;
|
||||||
zcs->inBuffPos = 0;
|
zcs->inBuffPos = 0;
|
||||||
@ -2916,12 +2920,15 @@ size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
|
|||||||
if (zcs->outBuff == NULL) return ERROR(memory_allocation);
|
if (zcs->outBuff == NULL) return ERROR(memory_allocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
ZSTD_freeCDict(zcs->cdictLocal);
|
if (dict) {
|
||||||
zcs->cdictLocal = ZSTD_createCDict_advanced(dict, dictSize, params, zcs->customMem);
|
ZSTD_freeCDict(zcs->cdictLocal);
|
||||||
if (zcs->cdictLocal == NULL) return ERROR(memory_allocation);
|
zcs->cdictLocal = ZSTD_createCDict_advanced(dict, dictSize, params, zcs->customMem);
|
||||||
zcs->cdict = zcs->cdictLocal;
|
if (zcs->cdictLocal == NULL) return ERROR(memory_allocation);
|
||||||
|
zcs->cdict = zcs->cdictLocal;
|
||||||
|
} else zcs->cdict = NULL;
|
||||||
|
|
||||||
zcs->checksum = params.fParams.checksumFlag > 0;
|
zcs->checksum = params.fParams.checksumFlag > 0;
|
||||||
|
zcs->params = params;
|
||||||
|
|
||||||
return ZSTD_resetCStream(zcs, pledgedSrcSize);
|
return ZSTD_resetCStream(zcs, pledgedSrcSize);
|
||||||
}
|
}
|
||||||
|
@ -460,7 +460,7 @@ ZSTDLIB_API size_t ZSTD_initCStream_usingDict(ZSTD_CStream* zcs, const void* dic
|
|||||||
ZSTDLIB_API size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, const void* dict, size_t dictSize,
|
ZSTDLIB_API size_t ZSTD_initCStream_advanced(ZSTD_CStream* zcs, const void* dict, size_t dictSize,
|
||||||
ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize is optional and can be zero == unknown */
|
ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize is optional and can be zero == unknown */
|
||||||
ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict); /**< note : cdict will just be referenced, and must outlive compression session */
|
ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict); /**< note : cdict will just be referenced, and must outlive compression session */
|
||||||
ZSTDLIB_API size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize); /**< re-use compression parameters from previous init; saves dictionary loading */
|
ZSTDLIB_API size_t ZSTD_resetCStream(ZSTD_CStream* zcs, unsigned long long pledgedSrcSize); /**< re-use compression parameters from previous init; skip dictionary loading stage; zcs must be init at least once before */
|
||||||
ZSTDLIB_API size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs);
|
ZSTDLIB_API size_t ZSTD_sizeof_CStream(const ZSTD_CStream* zcs);
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user