changed searchLength into minMatch
refactored all relevant API and calls for consistency.
This commit is contained in:
parent
114bd4346e
commit
e874dacc08
@ -419,9 +419,11 @@ size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
|
|||||||
* More attempts result in better and slower compression.
|
* More attempts result in better and slower compression.
|
||||||
* This parameter is useless when using "fast" and "dFast" strategies.
|
* This parameter is useless when using "fast" and "dFast" strategies.
|
||||||
* Special: value 0 means "use default searchLog". */
|
* Special: value 0 means "use default searchLog". */
|
||||||
ZSTD_p_minMatch=105, </b>/* Minimum size of searched matches (note : repCode matches can be smaller).<b>
|
ZSTD_p_minMatch=105, </b>/* Minimum size of searched matches.<b>
|
||||||
* Larger values make faster compression and decompression, but decrease ratio.
|
* Note that Zstandard can still find matches of smaller size,
|
||||||
* Must be clamped between ZSTD_SEARCHLENGTH_MIN and ZSTD_SEARCHLENGTH_MAX.
|
* it just tweaks its search algorithm to look for this size and larger.
|
||||||
|
* Larger values increase compression and decompression speed, but decrease ratio.
|
||||||
|
* Must be clamped between ZSTD_MINMATCH_MIN and ZSTD_MINMATCH_MAX.
|
||||||
* Note that currently, for all strategies < btopt, effective minimum is 4.
|
* Note that currently, for all strategies < btopt, effective minimum is 4.
|
||||||
* , for all strategies > fast, effective maximum is 6.
|
* , for all strategies > fast, effective maximum is 6.
|
||||||
* Special: value 0 means "use default minMatchLength". */
|
* Special: value 0 means "use default minMatchLength". */
|
||||||
@ -434,7 +436,6 @@ size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
|
|||||||
* Larger values make compression faster, and weaker.
|
* Larger values make compression faster, and weaker.
|
||||||
* Special: value 0 means "use default targetLength". */
|
* Special: value 0 means "use default targetLength". */
|
||||||
ZSTD_p_compressionStrategy=107, </b>/* See ZSTD_strategy enum definition.<b>
|
ZSTD_p_compressionStrategy=107, </b>/* See ZSTD_strategy enum definition.<b>
|
||||||
* Cast selected strategy as unsigned for ZSTD_CCtx_setParameter() compatibility.
|
|
||||||
* The higher the value of selected strategy, the more complex it is,
|
* The higher the value of selected strategy, the more complex it is,
|
||||||
* resulting in stronger and slower compression.
|
* resulting in stronger and slower compression.
|
||||||
* Special: value 0 means "use default strategy". */
|
* Special: value 0 means "use default strategy". */
|
||||||
@ -536,13 +537,18 @@ size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
|
|||||||
*/
|
*/
|
||||||
} ZSTD_cParameter;
|
} ZSTD_cParameter;
|
||||||
</b></pre><BR>
|
</b></pre><BR>
|
||||||
<pre><b>int ZSTD_cParam_lowerBound(ZSTD_cParameter cParam);
|
<pre><b>typedef struct {
|
||||||
int ZSTD_cParam_upperBound(ZSTD_cParameter cParam);
|
size_t error;
|
||||||
</b><p> All parameters must respect lower/upper bounds,
|
int lowerBound;
|
||||||
otherwise they will either trigger an error
|
int upperBound;
|
||||||
or be automatically clamped.
|
} ZSTD_bounds;
|
||||||
@return : requested bound (inclusive)
|
</b></pre><BR>
|
||||||
note : if the request specifies a non-existing parameter, it will return 0.
|
<pre><b>ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter cParam);
|
||||||
|
</b><p> All parameters must belong to an interval with lower and upper bounds,
|
||||||
|
otherwise they will either trigger an error or be automatically clamped.
|
||||||
|
@return : a structure, ZSTD_bounds, which contains
|
||||||
|
- an error status field, which must be tested using ZSTD_isError()
|
||||||
|
- both lower and upper bounds, inclusive
|
||||||
|
|
||||||
</p></pre><BR>
|
</p></pre><BR>
|
||||||
|
|
||||||
@ -555,8 +561,7 @@ int ZSTD_cParam_upperBound(ZSTD_cParameter cParam);
|
|||||||
the following parameters can be updated _during_ compression (within same frame):
|
the following parameters can be updated _during_ compression (within same frame):
|
||||||
=> compressionLevel, hashLog, chainLog, searchLog, minMatch, targetLength and strategy.
|
=> compressionLevel, hashLog, chainLog, searchLog, minMatch, targetLength and strategy.
|
||||||
new parameters will be active for next job only (after a flush()).
|
new parameters will be active for next job only (after a flush()).
|
||||||
@result : informational value (typically, value being effectively set, after clamping),
|
@return : an error code (which can be tested using ZSTD_isError()).
|
||||||
or an error code (which can be tested with ZSTD_isError()).
|
|
||||||
</p></pre><BR>
|
</p></pre><BR>
|
||||||
|
|
||||||
<pre><b>size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize);
|
<pre><b>size_t ZSTD_CCtx_setPledgedSrcSize(ZSTD_CCtx* cctx, unsigned long long pledgedSrcSize);
|
||||||
@ -767,7 +772,7 @@ int ZSTD_cParam_upperBound(ZSTD_cParameter cParam);
|
|||||||
unsigned chainLog; </b>/**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */<b>
|
unsigned chainLog; </b>/**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */<b>
|
||||||
unsigned hashLog; </b>/**< dispatch table : larger == faster, more memory */<b>
|
unsigned hashLog; </b>/**< dispatch table : larger == faster, more memory */<b>
|
||||||
unsigned searchLog; </b>/**< nb of searches : larger == more compression, slower */<b>
|
unsigned searchLog; </b>/**< nb of searches : larger == more compression, slower */<b>
|
||||||
unsigned searchLength; </b>/**< match length searched : larger == faster decompression, sometimes less compression */<b>
|
unsigned minMatch; </b>/**< match length searched : larger == faster decompression, sometimes less compression */<b>
|
||||||
unsigned targetLength; </b>/**< acceptable match size for optimal parser (only) : larger == more compression, slower */<b>
|
unsigned targetLength; </b>/**< acceptable match size for optimal parser (only) : larger == more compression, slower */<b>
|
||||||
ZSTD_strategy strategy; </b>/**< see ZSTD_strategy definition above */<b>
|
ZSTD_strategy strategy; </b>/**< see ZSTD_strategy definition above */<b>
|
||||||
} ZSTD_compressionParameters;
|
} ZSTD_compressionParameters;
|
||||||
|
@ -226,6 +226,66 @@ static ZSTD_CCtx_params ZSTD_assignParamsToCCtxParams(
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter param)
|
||||||
|
{
|
||||||
|
ZSTD_bounds bounds = { 0, 0, 0 };
|
||||||
|
|
||||||
|
switch(param)
|
||||||
|
{
|
||||||
|
case ZSTD_p_compressionLevel:
|
||||||
|
bounds.lowerBound = ZSTD_minCLevel();
|
||||||
|
bounds.upperBound = ZSTD_maxCLevel();
|
||||||
|
return bounds;
|
||||||
|
|
||||||
|
case ZSTD_p_windowLog:
|
||||||
|
bounds.lowerBound = ZSTD_WINDOWLOG_MIN;
|
||||||
|
bounds.upperBound = ZSTD_WINDOWLOG_MAX;
|
||||||
|
return bounds;
|
||||||
|
|
||||||
|
case ZSTD_p_hashLog:
|
||||||
|
bounds.lowerBound = ZSTD_HASHLOG_MIN;
|
||||||
|
bounds.upperBound = ZSTD_HASHLOG_MAX;
|
||||||
|
return bounds;
|
||||||
|
|
||||||
|
case ZSTD_p_chainLog:
|
||||||
|
bounds.lowerBound = ZSTD_CHAINLOG_MIN;
|
||||||
|
bounds.upperBound = ZSTD_CHAINLOG_MAX;
|
||||||
|
return bounds;
|
||||||
|
|
||||||
|
case ZSTD_p_searchLog:
|
||||||
|
bounds.lowerBound = ZSTD_SEARCHLOG_MIN;
|
||||||
|
bounds.upperBound = ZSTD_SEARCHLOG_MAX;
|
||||||
|
return bounds;
|
||||||
|
|
||||||
|
case ZSTD_p_minMatch:
|
||||||
|
bounds.lowerBound = ZSTD_MINMATCH_MIN;
|
||||||
|
bounds.upperBound = ZSTD_MINMATCH_MAX;
|
||||||
|
return bounds;
|
||||||
|
|
||||||
|
case ZSTD_p_targetLength:
|
||||||
|
case ZSTD_p_compressionStrategy:
|
||||||
|
case ZSTD_p_format:
|
||||||
|
case ZSTD_p_contentSizeFlag:
|
||||||
|
case ZSTD_p_checksumFlag:
|
||||||
|
case ZSTD_p_dictIDFlag:
|
||||||
|
case ZSTD_p_forceMaxWindow :
|
||||||
|
case ZSTD_p_nbWorkers:
|
||||||
|
case ZSTD_p_jobSize:
|
||||||
|
case ZSTD_p_overlapSizeLog:
|
||||||
|
case ZSTD_p_rsyncable:
|
||||||
|
case ZSTD_p_enableLongDistanceMatching:
|
||||||
|
case ZSTD_p_ldmHashLog:
|
||||||
|
case ZSTD_p_ldmMinMatch:
|
||||||
|
case ZSTD_p_ldmBucketSizeLog:
|
||||||
|
case ZSTD_p_ldmHashEveryLog:
|
||||||
|
case ZSTD_p_forceAttachDict:
|
||||||
|
default:
|
||||||
|
{ ZSTD_bounds const boundError = { ERROR(parameter_unsupported), 0, 0 };
|
||||||
|
return boundError;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#define CLAMPCHECK(val,min,max) { \
|
#define CLAMPCHECK(val,min,max) { \
|
||||||
if (((val)<(min)) | ((val)>(max))) { \
|
if (((val)<(min)) | ((val)>(max))) { \
|
||||||
return ERROR(parameter_outOfBound); \
|
return ERROR(parameter_outOfBound); \
|
||||||
@ -379,9 +439,9 @@ size_t ZSTD_CCtxParam_setParameter(ZSTD_CCtx_params* CCtxParams,
|
|||||||
|
|
||||||
case ZSTD_p_minMatch :
|
case ZSTD_p_minMatch :
|
||||||
if (value>0) /* 0 => use default */
|
if (value>0) /* 0 => use default */
|
||||||
CLAMPCHECK(value, ZSTD_SEARCHLENGTH_MIN, ZSTD_SEARCHLENGTH_MAX);
|
CLAMPCHECK(value, ZSTD_MINMATCH_MIN, ZSTD_MINMATCH_MAX);
|
||||||
CCtxParams->cParams.searchLength = value;
|
CCtxParams->cParams.minMatch = value;
|
||||||
return CCtxParams->cParams.searchLength;
|
return CCtxParams->cParams.minMatch;
|
||||||
|
|
||||||
case ZSTD_p_targetLength :
|
case ZSTD_p_targetLength :
|
||||||
/* all values are valid. 0 => use default */
|
/* all values are valid. 0 => use default */
|
||||||
@ -511,7 +571,7 @@ size_t ZSTD_CCtxParam_getParameter(
|
|||||||
*value = CCtxParams->cParams.searchLog;
|
*value = CCtxParams->cParams.searchLog;
|
||||||
break;
|
break;
|
||||||
case ZSTD_p_minMatch :
|
case ZSTD_p_minMatch :
|
||||||
*value = CCtxParams->cParams.searchLength;
|
*value = CCtxParams->cParams.minMatch;
|
||||||
break;
|
break;
|
||||||
case ZSTD_p_targetLength :
|
case ZSTD_p_targetLength :
|
||||||
*value = CCtxParams->cParams.targetLength;
|
*value = CCtxParams->cParams.targetLength;
|
||||||
@ -698,7 +758,7 @@ size_t ZSTD_checkCParams(ZSTD_compressionParameters cParams)
|
|||||||
CLAMPCHECK(cParams.chainLog, ZSTD_CHAINLOG_MIN, ZSTD_CHAINLOG_MAX);
|
CLAMPCHECK(cParams.chainLog, ZSTD_CHAINLOG_MIN, ZSTD_CHAINLOG_MAX);
|
||||||
CLAMPCHECK(cParams.hashLog, ZSTD_HASHLOG_MIN, ZSTD_HASHLOG_MAX);
|
CLAMPCHECK(cParams.hashLog, ZSTD_HASHLOG_MIN, ZSTD_HASHLOG_MAX);
|
||||||
CLAMPCHECK(cParams.searchLog, ZSTD_SEARCHLOG_MIN, ZSTD_SEARCHLOG_MAX);
|
CLAMPCHECK(cParams.searchLog, ZSTD_SEARCHLOG_MIN, ZSTD_SEARCHLOG_MAX);
|
||||||
CLAMPCHECK(cParams.searchLength, ZSTD_SEARCHLENGTH_MIN, ZSTD_SEARCHLENGTH_MAX);
|
CLAMPCHECK(cParams.minMatch, ZSTD_MINMATCH_MIN, ZSTD_MINMATCH_MAX);
|
||||||
ZSTD_STATIC_ASSERT(ZSTD_TARGETLENGTH_MIN == 0);
|
ZSTD_STATIC_ASSERT(ZSTD_TARGETLENGTH_MIN == 0);
|
||||||
if (cParams.targetLength > ZSTD_TARGETLENGTH_MAX)
|
if (cParams.targetLength > ZSTD_TARGETLENGTH_MAX)
|
||||||
return ERROR(parameter_outOfBound);
|
return ERROR(parameter_outOfBound);
|
||||||
@ -721,7 +781,7 @@ ZSTD_clampCParams(ZSTD_compressionParameters cParams)
|
|||||||
CLAMP(cParams.chainLog, ZSTD_CHAINLOG_MIN, ZSTD_CHAINLOG_MAX);
|
CLAMP(cParams.chainLog, ZSTD_CHAINLOG_MIN, ZSTD_CHAINLOG_MAX);
|
||||||
CLAMP(cParams.hashLog, ZSTD_HASHLOG_MIN, ZSTD_HASHLOG_MAX);
|
CLAMP(cParams.hashLog, ZSTD_HASHLOG_MIN, ZSTD_HASHLOG_MAX);
|
||||||
CLAMP(cParams.searchLog, ZSTD_SEARCHLOG_MIN, ZSTD_SEARCHLOG_MAX);
|
CLAMP(cParams.searchLog, ZSTD_SEARCHLOG_MIN, ZSTD_SEARCHLOG_MAX);
|
||||||
CLAMP(cParams.searchLength, ZSTD_SEARCHLENGTH_MIN, ZSTD_SEARCHLENGTH_MAX);
|
CLAMP(cParams.minMatch, ZSTD_MINMATCH_MIN, ZSTD_MINMATCH_MAX);
|
||||||
ZSTD_STATIC_ASSERT(ZSTD_TARGETLENGTH_MIN == 0);
|
ZSTD_STATIC_ASSERT(ZSTD_TARGETLENGTH_MIN == 0);
|
||||||
if (cParams.targetLength > ZSTD_TARGETLENGTH_MAX)
|
if (cParams.targetLength > ZSTD_TARGETLENGTH_MAX)
|
||||||
cParams.targetLength = ZSTD_TARGETLENGTH_MAX;
|
cParams.targetLength = ZSTD_TARGETLENGTH_MAX;
|
||||||
@ -795,7 +855,7 @@ ZSTD_compressionParameters ZSTD_getCParamsFromCCtxParams(
|
|||||||
if (CCtxParams->cParams.hashLog) cParams.hashLog = CCtxParams->cParams.hashLog;
|
if (CCtxParams->cParams.hashLog) cParams.hashLog = CCtxParams->cParams.hashLog;
|
||||||
if (CCtxParams->cParams.chainLog) cParams.chainLog = CCtxParams->cParams.chainLog;
|
if (CCtxParams->cParams.chainLog) cParams.chainLog = CCtxParams->cParams.chainLog;
|
||||||
if (CCtxParams->cParams.searchLog) cParams.searchLog = CCtxParams->cParams.searchLog;
|
if (CCtxParams->cParams.searchLog) cParams.searchLog = CCtxParams->cParams.searchLog;
|
||||||
if (CCtxParams->cParams.searchLength) cParams.searchLength = CCtxParams->cParams.searchLength;
|
if (CCtxParams->cParams.minMatch) cParams.minMatch = CCtxParams->cParams.minMatch;
|
||||||
if (CCtxParams->cParams.targetLength) cParams.targetLength = CCtxParams->cParams.targetLength;
|
if (CCtxParams->cParams.targetLength) cParams.targetLength = CCtxParams->cParams.targetLength;
|
||||||
if (CCtxParams->cParams.strategy) cParams.strategy = CCtxParams->cParams.strategy;
|
if (CCtxParams->cParams.strategy) cParams.strategy = CCtxParams->cParams.strategy;
|
||||||
assert(!ZSTD_checkCParams(cParams));
|
assert(!ZSTD_checkCParams(cParams));
|
||||||
@ -808,7 +868,7 @@ ZSTD_sizeof_matchState(const ZSTD_compressionParameters* const cParams,
|
|||||||
{
|
{
|
||||||
size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog);
|
size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog);
|
||||||
size_t const hSize = ((size_t)1) << cParams->hashLog;
|
size_t const hSize = ((size_t)1) << cParams->hashLog;
|
||||||
U32 const hashLog3 = (forCCtx && cParams->searchLength==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0;
|
U32 const hashLog3 = (forCCtx && cParams->minMatch==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0;
|
||||||
size_t const h3Size = ((size_t)1) << hashLog3;
|
size_t const h3Size = ((size_t)1) << hashLog3;
|
||||||
size_t const tableSpace = (chainSize + hSize + h3Size) * sizeof(U32);
|
size_t const tableSpace = (chainSize + hSize + h3Size) * sizeof(U32);
|
||||||
size_t const optPotentialSpace = ((MaxML+1) + (MaxLL+1) + (MaxOff+1) + (1<<Litbits)) * sizeof(U32)
|
size_t const optPotentialSpace = ((MaxML+1) + (MaxLL+1) + (MaxOff+1) + (1<<Litbits)) * sizeof(U32)
|
||||||
@ -829,7 +889,7 @@ size_t ZSTD_estimateCCtxSize_usingCCtxParams(const ZSTD_CCtx_params* params)
|
|||||||
{ ZSTD_compressionParameters const cParams =
|
{ ZSTD_compressionParameters const cParams =
|
||||||
ZSTD_getCParamsFromCCtxParams(params, 0, 0);
|
ZSTD_getCParamsFromCCtxParams(params, 0, 0);
|
||||||
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, (size_t)1 << cParams.windowLog);
|
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, (size_t)1 << cParams.windowLog);
|
||||||
U32 const divider = (cParams.searchLength==3) ? 3 : 4;
|
U32 const divider = (cParams.minMatch==3) ? 3 : 4;
|
||||||
size_t const maxNbSeq = blockSize / divider;
|
size_t const maxNbSeq = blockSize / divider;
|
||||||
size_t const tokenSpace = WILDCOPY_OVERLENGTH + blockSize + 11*maxNbSeq;
|
size_t const tokenSpace = WILDCOPY_OVERLENGTH + blockSize + 11*maxNbSeq;
|
||||||
size_t const entropySpace = HUF_WORKSPACE_SIZE;
|
size_t const entropySpace = HUF_WORKSPACE_SIZE;
|
||||||
@ -954,7 +1014,7 @@ static U32 ZSTD_equivalentCParams(ZSTD_compressionParameters cParams1,
|
|||||||
return (cParams1.hashLog == cParams2.hashLog)
|
return (cParams1.hashLog == cParams2.hashLog)
|
||||||
& (cParams1.chainLog == cParams2.chainLog)
|
& (cParams1.chainLog == cParams2.chainLog)
|
||||||
& (cParams1.strategy == cParams2.strategy) /* opt parser space */
|
& (cParams1.strategy == cParams2.strategy) /* opt parser space */
|
||||||
& ((cParams1.searchLength==3) == (cParams2.searchLength==3)); /* hashlog3 space */
|
& ((cParams1.minMatch==3) == (cParams2.minMatch==3)); /* hashlog3 space */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void ZSTD_assertEqualCParams(ZSTD_compressionParameters cParams1,
|
static void ZSTD_assertEqualCParams(ZSTD_compressionParameters cParams1,
|
||||||
@ -966,7 +1026,7 @@ static void ZSTD_assertEqualCParams(ZSTD_compressionParameters cParams1,
|
|||||||
assert(cParams1.chainLog == cParams2.chainLog);
|
assert(cParams1.chainLog == cParams2.chainLog);
|
||||||
assert(cParams1.hashLog == cParams2.hashLog);
|
assert(cParams1.hashLog == cParams2.hashLog);
|
||||||
assert(cParams1.searchLog == cParams2.searchLog);
|
assert(cParams1.searchLog == cParams2.searchLog);
|
||||||
assert(cParams1.searchLength == cParams2.searchLength);
|
assert(cParams1.minMatch == cParams2.minMatch);
|
||||||
assert(cParams1.targetLength == cParams2.targetLength);
|
assert(cParams1.targetLength == cParams2.targetLength);
|
||||||
assert(cParams1.strategy == cParams2.strategy);
|
assert(cParams1.strategy == cParams2.strategy);
|
||||||
}
|
}
|
||||||
@ -997,7 +1057,7 @@ static U32 ZSTD_sufficientBuff(size_t bufferSize1, size_t maxNbSeq1,
|
|||||||
{
|
{
|
||||||
size_t const windowSize2 = MAX(1, (size_t)MIN(((U64)1 << cParams2.windowLog), pledgedSrcSize));
|
size_t const windowSize2 = MAX(1, (size_t)MIN(((U64)1 << cParams2.windowLog), pledgedSrcSize));
|
||||||
size_t const blockSize2 = MIN(ZSTD_BLOCKSIZE_MAX, windowSize2);
|
size_t const blockSize2 = MIN(ZSTD_BLOCKSIZE_MAX, windowSize2);
|
||||||
size_t const maxNbSeq2 = blockSize2 / ((cParams2.searchLength == 3) ? 3 : 4);
|
size_t const maxNbSeq2 = blockSize2 / ((cParams2.minMatch == 3) ? 3 : 4);
|
||||||
size_t const maxNbLit2 = blockSize2;
|
size_t const maxNbLit2 = blockSize2;
|
||||||
size_t const neededBufferSize2 = (buffPol2==ZSTDb_buffered) ? windowSize2 + blockSize2 : 0;
|
size_t const neededBufferSize2 = (buffPol2==ZSTDb_buffered) ? windowSize2 + blockSize2 : 0;
|
||||||
DEBUGLOG(4, "ZSTD_sufficientBuff: is neededBufferSize2=%u <= bufferSize1=%u",
|
DEBUGLOG(4, "ZSTD_sufficientBuff: is neededBufferSize2=%u <= bufferSize1=%u",
|
||||||
@ -1101,7 +1161,7 @@ ZSTD_reset_matchState(ZSTD_matchState_t* ms,
|
|||||||
{
|
{
|
||||||
size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog);
|
size_t const chainSize = (cParams->strategy == ZSTD_fast) ? 0 : ((size_t)1 << cParams->chainLog);
|
||||||
size_t const hSize = ((size_t)1) << cParams->hashLog;
|
size_t const hSize = ((size_t)1) << cParams->hashLog;
|
||||||
U32 const hashLog3 = (forCCtx && cParams->searchLength==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0;
|
U32 const hashLog3 = (forCCtx && cParams->minMatch==3) ? MIN(ZSTD_HASHLOG3_MAX, cParams->windowLog) : 0;
|
||||||
size_t const h3Size = ((size_t)1) << hashLog3;
|
size_t const h3Size = ((size_t)1) << hashLog3;
|
||||||
size_t const tableSpace = (chainSize + hSize + h3Size) * sizeof(U32);
|
size_t const tableSpace = (chainSize + hSize + h3Size) * sizeof(U32);
|
||||||
|
|
||||||
@ -1185,7 +1245,7 @@ static size_t ZSTD_resetCCtx_internal(ZSTD_CCtx* zc,
|
|||||||
|
|
||||||
{ size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params.cParams.windowLog), pledgedSrcSize));
|
{ size_t const windowSize = MAX(1, (size_t)MIN(((U64)1 << params.cParams.windowLog), pledgedSrcSize));
|
||||||
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize);
|
size_t const blockSize = MIN(ZSTD_BLOCKSIZE_MAX, windowSize);
|
||||||
U32 const divider = (params.cParams.searchLength==3) ? 3 : 4;
|
U32 const divider = (params.cParams.minMatch==3) ? 3 : 4;
|
||||||
size_t const maxNbSeq = blockSize / divider;
|
size_t const maxNbSeq = blockSize / divider;
|
||||||
size_t const tokenSpace = WILDCOPY_OVERLENGTH + blockSize + 11*maxNbSeq;
|
size_t const tokenSpace = WILDCOPY_OVERLENGTH + blockSize + 11*maxNbSeq;
|
||||||
size_t const buffOutSize = (zbuff==ZSTDb_buffered) ? ZSTD_compressBound(blockSize)+1 : 0;
|
size_t const buffOutSize = (zbuff==ZSTDb_buffered) ? ZSTD_compressBound(blockSize)+1 : 0;
|
||||||
@ -2465,7 +2525,7 @@ static size_t ZSTD_compressBlock_internal(ZSTD_CCtx* zc,
|
|||||||
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.searchLength);
|
ZSTD_ldm_skipSequences(&zc->externSeqStore, srcSize, zc->appliedParams.cParams.minMatch);
|
||||||
cSize = 0;
|
cSize = 0;
|
||||||
goto out; /* don't even attempt compression below a certain srcSize */
|
goto out; /* don't even attempt compression below a certain srcSize */
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@ void ZSTD_fillDoubleHashTable(ZSTD_matchState_t* ms,
|
|||||||
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
||||||
U32* const hashLarge = ms->hashTable;
|
U32* const hashLarge = ms->hashTable;
|
||||||
U32 const hBitsL = cParams->hashLog;
|
U32 const hBitsL = cParams->hashLog;
|
||||||
U32 const mls = cParams->searchLength;
|
U32 const mls = cParams->minMatch;
|
||||||
U32* const hashSmall = ms->chainTable;
|
U32* const hashSmall = ms->chainTable;
|
||||||
U32 const hBitsS = cParams->chainLog;
|
U32 const hBitsS = cParams->chainLog;
|
||||||
const BYTE* const base = ms->window.base;
|
const BYTE* const base = ms->window.base;
|
||||||
@ -309,7 +309,7 @@ size_t ZSTD_compressBlock_doubleFast(
|
|||||||
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
|
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
|
||||||
void const* src, size_t srcSize)
|
void const* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
const U32 mls = ms->cParams.searchLength;
|
const U32 mls = ms->cParams.minMatch;
|
||||||
switch(mls)
|
switch(mls)
|
||||||
{
|
{
|
||||||
default: /* includes case 3 */
|
default: /* includes case 3 */
|
||||||
@ -329,7 +329,7 @@ size_t ZSTD_compressBlock_doubleFast_dictMatchState(
|
|||||||
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
|
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
|
||||||
void const* src, size_t srcSize)
|
void const* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
const U32 mls = ms->cParams.searchLength;
|
const U32 mls = ms->cParams.minMatch;
|
||||||
switch(mls)
|
switch(mls)
|
||||||
{
|
{
|
||||||
default: /* includes case 3 */
|
default: /* includes case 3 */
|
||||||
@ -483,7 +483,7 @@ size_t ZSTD_compressBlock_doubleFast_extDict(
|
|||||||
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
|
ZSTD_matchState_t* ms, seqStore_t* seqStore, U32 rep[ZSTD_REP_NUM],
|
||||||
void const* src, size_t srcSize)
|
void const* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
U32 const mls = ms->cParams.searchLength;
|
U32 const mls = ms->cParams.minMatch;
|
||||||
switch(mls)
|
switch(mls)
|
||||||
{
|
{
|
||||||
default: /* includes case 3 */
|
default: /* includes case 3 */
|
||||||
|
@ -18,7 +18,7 @@ void ZSTD_fillHashTable(ZSTD_matchState_t* ms,
|
|||||||
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
||||||
U32* const hashTable = ms->hashTable;
|
U32* const hashTable = ms->hashTable;
|
||||||
U32 const hBits = cParams->hashLog;
|
U32 const hBits = cParams->hashLog;
|
||||||
U32 const mls = cParams->searchLength;
|
U32 const mls = cParams->minMatch;
|
||||||
const BYTE* const base = ms->window.base;
|
const BYTE* const base = ms->window.base;
|
||||||
const BYTE* ip = base + ms->nextToUpdate;
|
const BYTE* ip = base + ms->nextToUpdate;
|
||||||
const BYTE* const iend = ((const BYTE*)end) - HASH_READ_SIZE;
|
const BYTE* const iend = ((const BYTE*)end) - HASH_READ_SIZE;
|
||||||
@ -235,7 +235,7 @@ size_t ZSTD_compressBlock_fast(
|
|||||||
void const* src, size_t srcSize)
|
void const* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
ZSTD_compressionParameters const* cParams = &ms->cParams;
|
ZSTD_compressionParameters const* cParams = &ms->cParams;
|
||||||
U32 const mls = cParams->searchLength;
|
U32 const mls = cParams->minMatch;
|
||||||
assert(ms->dictMatchState == NULL);
|
assert(ms->dictMatchState == NULL);
|
||||||
switch(mls)
|
switch(mls)
|
||||||
{
|
{
|
||||||
@ -256,7 +256,7 @@ size_t ZSTD_compressBlock_fast_dictMatchState(
|
|||||||
void const* src, size_t srcSize)
|
void const* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
ZSTD_compressionParameters const* cParams = &ms->cParams;
|
ZSTD_compressionParameters const* cParams = &ms->cParams;
|
||||||
U32 const mls = cParams->searchLength;
|
U32 const mls = cParams->minMatch;
|
||||||
assert(ms->dictMatchState != NULL);
|
assert(ms->dictMatchState != NULL);
|
||||||
switch(mls)
|
switch(mls)
|
||||||
{
|
{
|
||||||
@ -375,7 +375,7 @@ size_t ZSTD_compressBlock_fast_extDict(
|
|||||||
void const* src, size_t srcSize)
|
void const* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
ZSTD_compressionParameters const* cParams = &ms->cParams;
|
ZSTD_compressionParameters const* cParams = &ms->cParams;
|
||||||
U32 const mls = cParams->searchLength;
|
U32 const mls = cParams->minMatch;
|
||||||
switch(mls)
|
switch(mls)
|
||||||
{
|
{
|
||||||
default: /* includes case 3 */
|
default: /* includes case 3 */
|
||||||
|
@ -392,7 +392,7 @@ ZSTD_BtFindBestMatch_selectMLS ( ZSTD_matchState_t* ms,
|
|||||||
const BYTE* ip, const BYTE* const iLimit,
|
const BYTE* ip, const BYTE* const iLimit,
|
||||||
size_t* offsetPtr)
|
size_t* offsetPtr)
|
||||||
{
|
{
|
||||||
switch(ms->cParams.searchLength)
|
switch(ms->cParams.minMatch)
|
||||||
{
|
{
|
||||||
default : /* includes case 3 */
|
default : /* includes case 3 */
|
||||||
case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_noDict);
|
case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_noDict);
|
||||||
@ -408,7 +408,7 @@ static size_t ZSTD_BtFindBestMatch_dictMatchState_selectMLS (
|
|||||||
const BYTE* ip, const BYTE* const iLimit,
|
const BYTE* ip, const BYTE* const iLimit,
|
||||||
size_t* offsetPtr)
|
size_t* offsetPtr)
|
||||||
{
|
{
|
||||||
switch(ms->cParams.searchLength)
|
switch(ms->cParams.minMatch)
|
||||||
{
|
{
|
||||||
default : /* includes case 3 */
|
default : /* includes case 3 */
|
||||||
case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_dictMatchState);
|
case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_dictMatchState);
|
||||||
@ -424,7 +424,7 @@ static size_t ZSTD_BtFindBestMatch_extDict_selectMLS (
|
|||||||
const BYTE* ip, const BYTE* const iLimit,
|
const BYTE* ip, const BYTE* const iLimit,
|
||||||
size_t* offsetPtr)
|
size_t* offsetPtr)
|
||||||
{
|
{
|
||||||
switch(ms->cParams.searchLength)
|
switch(ms->cParams.minMatch)
|
||||||
{
|
{
|
||||||
default : /* includes case 3 */
|
default : /* includes case 3 */
|
||||||
case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_extDict);
|
case 4 : return ZSTD_BtFindBestMatch(ms, ip, iLimit, offsetPtr, 4, ZSTD_extDict);
|
||||||
@ -469,7 +469,7 @@ static U32 ZSTD_insertAndFindFirstIndex_internal(
|
|||||||
|
|
||||||
U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) {
|
U32 ZSTD_insertAndFindFirstIndex(ZSTD_matchState_t* ms, const BYTE* ip) {
|
||||||
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
||||||
return ZSTD_insertAndFindFirstIndex_internal(ms, cParams, ip, ms->cParams.searchLength);
|
return ZSTD_insertAndFindFirstIndex_internal(ms, cParams, ip, ms->cParams.minMatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -566,7 +566,7 @@ FORCE_INLINE_TEMPLATE size_t ZSTD_HcFindBestMatch_selectMLS (
|
|||||||
const BYTE* ip, const BYTE* const iLimit,
|
const BYTE* ip, const BYTE* const iLimit,
|
||||||
size_t* offsetPtr)
|
size_t* offsetPtr)
|
||||||
{
|
{
|
||||||
switch(ms->cParams.searchLength)
|
switch(ms->cParams.minMatch)
|
||||||
{
|
{
|
||||||
default : /* includes case 3 */
|
default : /* includes case 3 */
|
||||||
case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_noDict);
|
case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_noDict);
|
||||||
@ -582,7 +582,7 @@ static size_t ZSTD_HcFindBestMatch_dictMatchState_selectMLS (
|
|||||||
const BYTE* ip, const BYTE* const iLimit,
|
const BYTE* ip, const BYTE* const iLimit,
|
||||||
size_t* offsetPtr)
|
size_t* offsetPtr)
|
||||||
{
|
{
|
||||||
switch(ms->cParams.searchLength)
|
switch(ms->cParams.minMatch)
|
||||||
{
|
{
|
||||||
default : /* includes case 3 */
|
default : /* includes case 3 */
|
||||||
case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_dictMatchState);
|
case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_dictMatchState);
|
||||||
@ -598,7 +598,7 @@ FORCE_INLINE_TEMPLATE size_t ZSTD_HcFindBestMatch_extDict_selectMLS (
|
|||||||
const BYTE* ip, const BYTE* const iLimit,
|
const BYTE* ip, const BYTE* const iLimit,
|
||||||
size_t* offsetPtr)
|
size_t* offsetPtr)
|
||||||
{
|
{
|
||||||
switch(ms->cParams.searchLength)
|
switch(ms->cParams.minMatch)
|
||||||
{
|
{
|
||||||
default : /* includes case 3 */
|
default : /* includes case 3 */
|
||||||
case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_extDict);
|
case 4 : return ZSTD_HcFindBestMatch_generic(ms, ip, iLimit, offsetPtr, 4, ZSTD_extDict);
|
||||||
|
@ -543,7 +543,7 @@ size_t ZSTD_ldm_blockCompress(rawSeqStore_t* rawSeqStore,
|
|||||||
void const* src, size_t srcSize)
|
void const* src, size_t srcSize)
|
||||||
{
|
{
|
||||||
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
||||||
unsigned const minMatch = cParams->searchLength;
|
unsigned const minMatch = cParams->minMatch;
|
||||||
ZSTD_blockCompressor const blockCompressor =
|
ZSTD_blockCompressor const blockCompressor =
|
||||||
ZSTD_selectBlockCompressor(cParams->strategy, ZSTD_matchState_dictMode(ms));
|
ZSTD_selectBlockCompressor(cParams->strategy, ZSTD_matchState_dictMode(ms));
|
||||||
/* Input bounds */
|
/* Input bounds */
|
||||||
|
@ -488,7 +488,7 @@ void ZSTD_updateTree_internal(
|
|||||||
}
|
}
|
||||||
|
|
||||||
void ZSTD_updateTree(ZSTD_matchState_t* ms, const BYTE* ip, const BYTE* iend) {
|
void ZSTD_updateTree(ZSTD_matchState_t* ms, const BYTE* ip, const BYTE* iend) {
|
||||||
ZSTD_updateTree_internal(ms, ip, iend, ms->cParams.searchLength, ZSTD_noDict);
|
ZSTD_updateTree_internal(ms, ip, iend, ms->cParams.minMatch, ZSTD_noDict);
|
||||||
}
|
}
|
||||||
|
|
||||||
FORCE_INLINE_TEMPLATE
|
FORCE_INLINE_TEMPLATE
|
||||||
@ -728,7 +728,7 @@ FORCE_INLINE_TEMPLATE U32 ZSTD_BtGetAllMatches (
|
|||||||
ZSTD_match_t* matches, U32 const lengthToBeat)
|
ZSTD_match_t* matches, U32 const lengthToBeat)
|
||||||
{
|
{
|
||||||
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
||||||
U32 const matchLengthSearch = cParams->searchLength;
|
U32 const matchLengthSearch = cParams->minMatch;
|
||||||
DEBUGLOG(8, "ZSTD_BtGetAllMatches");
|
DEBUGLOG(8, "ZSTD_BtGetAllMatches");
|
||||||
if (ip < ms->window.base + ms->nextToUpdate) return 0; /* skipped area */
|
if (ip < ms->window.base + ms->nextToUpdate) return 0; /* skipped area */
|
||||||
ZSTD_updateTree_internal(ms, ip, iHighLimit, matchLengthSearch, dictMode);
|
ZSTD_updateTree_internal(ms, ip, iHighLimit, matchLengthSearch, dictMode);
|
||||||
@ -796,7 +796,7 @@ ZSTD_compressBlock_opt_generic(ZSTD_matchState_t* ms,
|
|||||||
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
const ZSTD_compressionParameters* const cParams = &ms->cParams;
|
||||||
|
|
||||||
U32 const sufficient_len = MIN(cParams->targetLength, ZSTD_OPT_NUM -1);
|
U32 const sufficient_len = MIN(cParams->targetLength, ZSTD_OPT_NUM -1);
|
||||||
U32 const minMatch = (cParams->searchLength == 3) ? 3 : 4;
|
U32 const minMatch = (cParams->minMatch == 3) ? 3 : 4;
|
||||||
|
|
||||||
ZSTD_optimal_t* const opt = optStatePtr->priceTable;
|
ZSTD_optimal_t* const opt = optStatePtr->priceTable;
|
||||||
ZSTD_match_t* const matches = optStatePtr->matchTable;
|
ZSTD_match_t* const matches = optStatePtr->matchTable;
|
||||||
|
@ -240,17 +240,7 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr)
|
|||||||
/* *************************************
|
/* *************************************
|
||||||
* Types
|
* Types
|
||||||
***************************************/
|
***************************************/
|
||||||
#define ZSTD_WINDOWLOG_MAX 26
|
|
||||||
#define ZSTD_WINDOWLOG_MIN 18
|
|
||||||
#define ZSTD_WINDOWLOG_ABSOLUTEMIN 11
|
#define ZSTD_WINDOWLOG_ABSOLUTEMIN 11
|
||||||
#define ZSTD_CONTENTLOG_MAX (ZSTD_WINDOWLOG_MAX+1)
|
|
||||||
#define ZSTD_CONTENTLOG_MIN 4
|
|
||||||
#define ZSTD_HASHLOG_MAX 28
|
|
||||||
#define ZSTD_HASHLOG_MIN 4
|
|
||||||
#define ZSTD_SEARCHLOG_MAX (ZSTD_CONTENTLOG_MAX-1)
|
|
||||||
#define ZSTD_SEARCHLOG_MIN 1
|
|
||||||
#define ZSTD_SEARCHLENGTH_MAX 7
|
|
||||||
#define ZSTD_SEARCHLENGTH_MIN 4
|
|
||||||
|
|
||||||
/** from faster to stronger */
|
/** from faster to stronger */
|
||||||
typedef enum { ZSTD_fast, ZSTD_greedy, ZSTD_lazy, ZSTD_lazy2, ZSTD_btlazy2 } ZSTD_strategy;
|
typedef enum { ZSTD_fast, ZSTD_greedy, ZSTD_lazy, ZSTD_lazy2, ZSTD_btlazy2 } ZSTD_strategy;
|
||||||
|
40
lib/zstd.h
40
lib/zstd.h
@ -513,9 +513,11 @@ typedef enum {
|
|||||||
* More attempts result in better and slower compression.
|
* More attempts result in better and slower compression.
|
||||||
* This parameter is useless when using "fast" and "dFast" strategies.
|
* This parameter is useless when using "fast" and "dFast" strategies.
|
||||||
* Special: value 0 means "use default searchLog". */
|
* Special: value 0 means "use default searchLog". */
|
||||||
ZSTD_p_minMatch=105, /* Minimum size of searched matches (note : repCode matches can be smaller).
|
ZSTD_p_minMatch=105, /* Minimum size of searched matches.
|
||||||
* Larger values make faster compression and decompression, but decrease ratio.
|
* Note that Zstandard can still find matches of smaller size,
|
||||||
* Must be clamped between ZSTD_SEARCHLENGTH_MIN and ZSTD_SEARCHLENGTH_MAX.
|
* it just tweaks its search algorithm to look for this size and larger.
|
||||||
|
* Larger values increase compression and decompression speed, but decrease ratio.
|
||||||
|
* Must be clamped between ZSTD_MINMATCH_MIN and ZSTD_MINMATCH_MAX.
|
||||||
* Note that currently, for all strategies < btopt, effective minimum is 4.
|
* Note that currently, for all strategies < btopt, effective minimum is 4.
|
||||||
* , for all strategies > fast, effective maximum is 6.
|
* , for all strategies > fast, effective maximum is 6.
|
||||||
* Special: value 0 means "use default minMatchLength". */
|
* Special: value 0 means "use default minMatchLength". */
|
||||||
@ -528,7 +530,6 @@ typedef enum {
|
|||||||
* Larger values make compression faster, and weaker.
|
* Larger values make compression faster, and weaker.
|
||||||
* Special: value 0 means "use default targetLength". */
|
* Special: value 0 means "use default targetLength". */
|
||||||
ZSTD_p_compressionStrategy=107, /* See ZSTD_strategy enum definition.
|
ZSTD_p_compressionStrategy=107, /* See ZSTD_strategy enum definition.
|
||||||
* Cast selected strategy as unsigned for ZSTD_CCtx_setParameter() compatibility.
|
|
||||||
* The higher the value of selected strategy, the more complex it is,
|
* The higher the value of selected strategy, the more complex it is,
|
||||||
* resulting in stronger and slower compression.
|
* resulting in stronger and slower compression.
|
||||||
* Special: value 0 means "use default strategy". */
|
* Special: value 0 means "use default strategy". */
|
||||||
@ -631,16 +632,20 @@ typedef enum {
|
|||||||
} ZSTD_cParameter;
|
} ZSTD_cParameter;
|
||||||
|
|
||||||
|
|
||||||
/*! ZSTD_cParam_lowerBound() and ZSTD_cParam_upperBound() :
|
typedef struct {
|
||||||
* All parameters must respect lower/upper bounds,
|
size_t error;
|
||||||
* otherwise they will either trigger an error
|
int lowerBound;
|
||||||
* or be automatically clamped.
|
int upperBound;
|
||||||
* @return : requested bound (inclusive)
|
} ZSTD_bounds;
|
||||||
* note : if the request specifies a non-existing parameter, it will return 0.
|
|
||||||
*/
|
|
||||||
ZSTDLIB_API int ZSTD_cParam_lowerBound(ZSTD_cParameter cParam);
|
|
||||||
ZSTDLIB_API int ZSTD_cParam_upperBound(ZSTD_cParameter cParam);
|
|
||||||
|
|
||||||
|
/*! ZSTD_cParam_getBounds() :
|
||||||
|
* All parameters must belong to an interval with lower and upper bounds,
|
||||||
|
* otherwise they will either trigger an error or be automatically clamped.
|
||||||
|
* @return : a structure, ZSTD_bounds, which contains
|
||||||
|
* - an error status field, which must be tested using ZSTD_isError()
|
||||||
|
* - both lower and upper bounds, inclusive
|
||||||
|
*/
|
||||||
|
ZSTDLIB_API ZSTD_bounds ZSTD_cParam_getBounds(ZSTD_cParameter cParam);
|
||||||
|
|
||||||
/*! ZSTD_CCtx_setParameter() :
|
/*! ZSTD_CCtx_setParameter() :
|
||||||
* Set one compression parameter, selected by enum ZSTD_cParameter.
|
* Set one compression parameter, selected by enum ZSTD_cParameter.
|
||||||
@ -651,8 +656,7 @@ ZSTDLIB_API int ZSTD_cParam_upperBound(ZSTD_cParameter cParam);
|
|||||||
* the following parameters can be updated _during_ compression (within same frame):
|
* the following parameters can be updated _during_ compression (within same frame):
|
||||||
* => compressionLevel, hashLog, chainLog, searchLog, minMatch, targetLength and strategy.
|
* => compressionLevel, hashLog, chainLog, searchLog, minMatch, targetLength and strategy.
|
||||||
* new parameters will be active for next job only (after a flush()).
|
* new parameters will be active for next job only (after a flush()).
|
||||||
* @result : informational value (typically, value being effectively set, after clamping),
|
* @return : an error code (which can be tested using ZSTD_isError()). */
|
||||||
* or an error code (which can be tested with ZSTD_isError()). */
|
|
||||||
ZSTDLIB_API size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value);
|
ZSTDLIB_API size_t ZSTD_CCtx_setParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int value);
|
||||||
|
|
||||||
/*! ZSTD_CCtx_setPledgedSrcSize() :
|
/*! ZSTD_CCtx_setPledgedSrcSize() :
|
||||||
@ -903,8 +907,8 @@ ZSTDLIB_API size_t ZSTD_decompress_generic(ZSTD_DCtx* dctx,
|
|||||||
#define ZSTD_CHAINLOG_MIN ZSTD_HASHLOG_MIN
|
#define ZSTD_CHAINLOG_MIN ZSTD_HASHLOG_MIN
|
||||||
#define ZSTD_SEARCHLOG_MAX (ZSTD_WINDOWLOG_MAX-1)
|
#define ZSTD_SEARCHLOG_MAX (ZSTD_WINDOWLOG_MAX-1)
|
||||||
#define ZSTD_SEARCHLOG_MIN 1
|
#define ZSTD_SEARCHLOG_MIN 1
|
||||||
#define ZSTD_SEARCHLENGTH_MAX 7 /* only for ZSTD_fast, other strategies are limited to 6 */
|
#define ZSTD_MINMATCH_MAX 7 /* only for ZSTD_fast, other strategies are limited to 6 */
|
||||||
#define ZSTD_SEARCHLENGTH_MIN 3 /* only for ZSTD_btopt, other strategies are limited to 4 */
|
#define ZSTD_MINMATCH_MIN 3 /* only for ZSTD_btopt+, faster strategies are limited to 4 */
|
||||||
#define ZSTD_TARGETLENGTH_MAX ZSTD_BLOCKSIZE_MAX
|
#define ZSTD_TARGETLENGTH_MAX ZSTD_BLOCKSIZE_MAX
|
||||||
#define ZSTD_TARGETLENGTH_MIN 0 /* note : comparing this constant to an unsigned results in a tautological test */
|
#define ZSTD_TARGETLENGTH_MIN 0 /* note : comparing this constant to an unsigned results in a tautological test */
|
||||||
|
|
||||||
@ -923,7 +927,7 @@ typedef struct {
|
|||||||
unsigned chainLog; /**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */
|
unsigned chainLog; /**< fully searched segment : larger == more compression, slower, more memory (useless for fast) */
|
||||||
unsigned hashLog; /**< dispatch table : larger == faster, more memory */
|
unsigned hashLog; /**< dispatch table : larger == faster, more memory */
|
||||||
unsigned searchLog; /**< nb of searches : larger == more compression, slower */
|
unsigned searchLog; /**< nb of searches : larger == more compression, slower */
|
||||||
unsigned searchLength; /**< match length searched : larger == faster decompression, sometimes less compression */
|
unsigned minMatch; /**< match length searched : larger == faster decompression, sometimes less compression */
|
||||||
unsigned targetLength; /**< acceptable match size for optimal parser (only) : larger == more compression, slower */
|
unsigned targetLength; /**< acceptable match size for optimal parser (only) : larger == more compression, slower */
|
||||||
ZSTD_strategy strategy; /**< see ZSTD_strategy definition above */
|
ZSTD_strategy strategy; /**< see ZSTD_strategy definition above */
|
||||||
} ZSTD_compressionParameters;
|
} ZSTD_compressionParameters;
|
||||||
|
@ -176,7 +176,7 @@ static void BMK_initCCtx(ZSTD_CCtx* ctx,
|
|||||||
ZSTD_CCtx_setParameter(ctx, ZSTD_p_hashLog, comprParams->hashLog);
|
ZSTD_CCtx_setParameter(ctx, ZSTD_p_hashLog, comprParams->hashLog);
|
||||||
ZSTD_CCtx_setParameter(ctx, ZSTD_p_chainLog, comprParams->chainLog);
|
ZSTD_CCtx_setParameter(ctx, ZSTD_p_chainLog, comprParams->chainLog);
|
||||||
ZSTD_CCtx_setParameter(ctx, ZSTD_p_searchLog, comprParams->searchLog);
|
ZSTD_CCtx_setParameter(ctx, ZSTD_p_searchLog, comprParams->searchLog);
|
||||||
ZSTD_CCtx_setParameter(ctx, ZSTD_p_minMatch, comprParams->searchLength);
|
ZSTD_CCtx_setParameter(ctx, ZSTD_p_minMatch, comprParams->minMatch);
|
||||||
ZSTD_CCtx_setParameter(ctx, ZSTD_p_targetLength, comprParams->targetLength);
|
ZSTD_CCtx_setParameter(ctx, ZSTD_p_targetLength, comprParams->targetLength);
|
||||||
ZSTD_CCtx_setParameter(ctx, ZSTD_p_compressionStrategy, comprParams->strategy);
|
ZSTD_CCtx_setParameter(ctx, ZSTD_p_compressionStrategy, comprParams->strategy);
|
||||||
ZSTD_CCtx_loadDictionary(ctx, dictBuffer, dictBufferSize);
|
ZSTD_CCtx_loadDictionary(ctx, dictBuffer, dictBufferSize);
|
||||||
|
@ -549,7 +549,7 @@ static cRess_t FIO_createCResources(const char* dictFileName, int cLevel,
|
|||||||
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_chainLog, comprParams.chainLog) );
|
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_chainLog, comprParams.chainLog) );
|
||||||
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_hashLog, comprParams.hashLog) );
|
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_hashLog, comprParams.hashLog) );
|
||||||
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_searchLog, comprParams.searchLog) );
|
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_searchLog, comprParams.searchLog) );
|
||||||
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_minMatch, comprParams.searchLength) );
|
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_minMatch, comprParams.minMatch) );
|
||||||
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_targetLength, comprParams.targetLength) );
|
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_targetLength, comprParams.targetLength) );
|
||||||
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_compressionStrategy, comprParams.strategy) );
|
CHECK( ZSTD_CCtx_setParameter(ress.cctx, ZSTD_p_compressionStrategy, comprParams.strategy) );
|
||||||
/* multi-threading */
|
/* multi-threading */
|
||||||
|
@ -127,6 +127,10 @@ Does not spawn a thread for compression, use a single thread for both I/O and co
|
|||||||
\fBzstd\fR will dynamically adapt compression level to perceived I/O conditions\. Compression level adaptation can be observed live by using command \fB\-v\fR\. Adaptation can be constrained between supplied \fBmin\fR and \fBmax\fR levels\. The feature works when combined with multi\-threading and \fB\-\-long\fR mode\. It does not work with \fB\-\-single\-thread\fR\. It sets window size to 8 MB by default (can be changed manually, see \fBwlog\fR)\. Due to the chaotic nature of dynamic adaptation, compressed result is not reproducible\. \fInote\fR : at the time of this writing, \fB\-\-adapt\fR can remain stuck at low speed when combined with multiple worker threads (>=2)\.
|
\fBzstd\fR will dynamically adapt compression level to perceived I/O conditions\. Compression level adaptation can be observed live by using command \fB\-v\fR\. Adaptation can be constrained between supplied \fBmin\fR and \fBmax\fR levels\. The feature works when combined with multi\-threading and \fB\-\-long\fR mode\. It does not work with \fB\-\-single\-thread\fR\. It sets window size to 8 MB by default (can be changed manually, see \fBwlog\fR)\. Due to the chaotic nature of dynamic adaptation, compressed result is not reproducible\. \fInote\fR : at the time of this writing, \fB\-\-adapt\fR can remain stuck at low speed when combined with multiple worker threads (>=2)\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
|
\fB\-\-rsyncable\fR
|
||||||
|
\fBzstd\fR will periodically synchronize the compression state to make the compressed file more rsync\-friendly\. There is a negligible impact to compression ratio, and the faster compression levels will see a small compression speed hit\. This feature does not work with \fB\-\-single\-thread\fR\. You probably don\'t want to use it with long range mode, since it will decrease the effectiveness of the synchronization points, but your milage may vary\.
|
||||||
|
.
|
||||||
|
.TP
|
||||||
\fB\-D file\fR
|
\fB\-D file\fR
|
||||||
use \fBfile\fR as Dictionary to compress or decompress FILE(s)
|
use \fBfile\fR as Dictionary to compress or decompress FILE(s)
|
||||||
.
|
.
|
||||||
@ -355,14 +359,14 @@ More searches increases the chance to find a match which usually increases compr
|
|||||||
The minimum \fIslog\fR is 1 and the maximum is 26\.
|
The minimum \fIslog\fR is 1 and the maximum is 26\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBsearchLength\fR=\fIslen\fR, \fBslen\fR=\fIslen\fR
|
\fBminMatch\fR=\fImml\fR, \fBmml\fR=\fImml\fR
|
||||||
Specify the minimum searched length of a match in a hash table\.
|
Specify the minimum searched length of a match in a hash table\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
Larger search lengths usually decrease compression ratio but improve decompression speed\.
|
Larger search lengths usually decrease compression ratio but improve decompression speed\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
The minimum \fIslen\fR is 3 and the maximum is 7\.
|
The minimum \fImml\fR is 3 and the maximum is 7\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBtargetLen\fR=\fItlen\fR, \fBtlen\fR=\fItlen\fR
|
\fBtargetLen\fR=\fItlen\fR, \fBtlen\fR=\fItlen\fR
|
||||||
@ -388,7 +392,7 @@ Determine \fBoverlapSize\fR, amount of data reloaded from previous job\. This pa
|
|||||||
The minimum \fIovlog\fR is 0, and the maximum is 9\. 0 means "no overlap", hence completely independent jobs\. 9 means "full overlap", meaning up to \fBwindowSize\fR is reloaded from previous job\. Reducing \fIovlog\fR by 1 reduces the amount of reload by a factor 2\. Default \fIovlog\fR is 6, which means "reload \fBwindowSize / 8\fR"\. Exception : the maximum compression level (22) has a default \fIovlog\fR of 9\.
|
The minimum \fIovlog\fR is 0, and the maximum is 9\. 0 means "no overlap", hence completely independent jobs\. 9 means "full overlap", meaning up to \fBwindowSize\fR is reloaded from previous job\. Reducing \fIovlog\fR by 1 reduces the amount of reload by a factor 2\. Default \fIovlog\fR is 6, which means "reload \fBwindowSize / 8\fR"\. Exception : the maximum compression level (22) has a default \fIovlog\fR of 9\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBldmHashLog\fR=\fIldmhlog\fR, \fBldmhlog\fR=\fIldmhlog\fR
|
\fBldmHashLog\fR=\fIlhlog\fR, \fBlhlog\fR=\fIlhlog\fR
|
||||||
Specify the maximum size for a hash table used for long distance matching\.
|
Specify the maximum size for a hash table used for long distance matching\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
@ -398,10 +402,10 @@ This option is ignored unless long distance matching is enabled\.
|
|||||||
Bigger hash tables usually improve compression ratio at the expense of more memory during compression and a decrease in compression speed\.
|
Bigger hash tables usually improve compression ratio at the expense of more memory during compression and a decrease in compression speed\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
The minimum \fIldmhlog\fR is 6 and the maximum is 26 (default: 20)\.
|
The minimum \fIlhlog\fR is 6 and the maximum is 26 (default: 20)\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBldmSearchLength\fR=\fIldmslen\fR, \fBldmslen\fR=\fIldmslen\fR
|
\fBldmMinMatch\fR=\fIlmml\fR, \fBlmml\fR=\fIlmml\fR
|
||||||
Specify the minimum searched length of a match for long distance matching\.
|
Specify the minimum searched length of a match for long distance matching\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
@ -411,10 +415,10 @@ This option is ignored unless long distance matching is enabled\.
|
|||||||
Larger/very small values usually decrease compression ratio\.
|
Larger/very small values usually decrease compression ratio\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
The minimum \fIldmslen\fR is 4 and the maximum is 4096 (default: 64)\.
|
The minimum \fIlmml\fR is 4 and the maximum is 4096 (default: 64)\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBldmBucketSizeLog\fR=\fIldmblog\fR, \fBldmblog\fR=\fIldmblog\fR
|
\fBldmBucketSizeLog\fR=\fIlblog\fR, \fBlblog\fR=\fIlblog\fR
|
||||||
Specify the size of each bucket for the hash table used for long distance matching\.
|
Specify the size of each bucket for the hash table used for long distance matching\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
@ -424,10 +428,10 @@ This option is ignored unless long distance matching is enabled\.
|
|||||||
Larger bucket sizes improve collision resolution but decrease compression speed\.
|
Larger bucket sizes improve collision resolution but decrease compression speed\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
The minimum \fIldmblog\fR is 0 and the maximum is 8 (default: 3)\.
|
The minimum \fIlblog\fR is 0 and the maximum is 8 (default: 3)\.
|
||||||
.
|
.
|
||||||
.TP
|
.TP
|
||||||
\fBldmHashEveryLog\fR=\fIldmhevery\fR, \fBldmhevery\fR=\fIldmhevery\fR
|
\fBldmHashEveryLog\fR=\fIlhevery\fR, \fBlhevery\fR=\fIlhevery\fR
|
||||||
Specify the frequency of inserting entries into the long distance matching hash table\.
|
Specify the frequency of inserting entries into the long distance matching hash table\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
@ -437,13 +441,13 @@ This option is ignored unless long distance matching is enabled\.
|
|||||||
Larger values will improve compression speed\. Deviating far from the default value will likely result in a decrease in compression ratio\.
|
Larger values will improve compression speed\. Deviating far from the default value will likely result in a decrease in compression ratio\.
|
||||||
.
|
.
|
||||||
.IP
|
.IP
|
||||||
The default value is \fBwlog \- ldmhlog\fR\.
|
The default value is \fBwlog \- lhlog\fR\.
|
||||||
.
|
.
|
||||||
.SS "Example"
|
.SS "Example"
|
||||||
The following parameters sets advanced compression options to something similar to predefined level 19 for files bigger than 256 KB:
|
The following parameters sets advanced compression options to something similar to predefined level 19 for files bigger than 256 KB:
|
||||||
.
|
.
|
||||||
.P
|
.P
|
||||||
\fB\-\-zstd\fR=wlog=23,clog=23,hlog=22,slog=6,slen=3,tlen=48,strat=6
|
\fB\-\-zstd\fR=wlog=23,clog=23,hlog=22,slog=6,mml=3,tlen=48,strat=6
|
||||||
.
|
.
|
||||||
.SS "\-B#:"
|
.SS "\-B#:"
|
||||||
Select the size of each compression job\. This parameter is available only when multi\-threading is enabled\. Default value is \fB4 * windowSize\fR, which means it varies depending on compression level\. \fB\-B#\fR makes it possible to select a custom value\. Note that job size must respect a minimum value which is enforced transparently\. This minimum is either 1 MB, or \fBoverlapSize\fR, whichever is largest\.
|
Select the size of each compression job\. This parameter is available only when multi\-threading is enabled\. Default value is \fB4 * windowSize\fR, which means it varies depending on compression level\. \fB\-B#\fR makes it possible to select a custom value\. Note that job size must respect a minimum value which is enforced transparently\. This minimum is either 1 MB, or \fBoverlapSize\fR, whichever is largest\.
|
||||||
|
@ -383,13 +383,13 @@ The list of available _options_:
|
|||||||
|
|
||||||
The minimum _slog_ is 1 and the maximum is 26.
|
The minimum _slog_ is 1 and the maximum is 26.
|
||||||
|
|
||||||
- `searchLength`=_slen_, `slen`=_slen_:
|
- `minMatch`=_mml_, `mml`=_mml_:
|
||||||
Specify the minimum searched length of a match in a hash table.
|
Specify the minimum searched length of a match in a hash table.
|
||||||
|
|
||||||
Larger search lengths usually decrease compression ratio but improve
|
Larger search lengths usually decrease compression ratio but improve
|
||||||
decompression speed.
|
decompression speed.
|
||||||
|
|
||||||
The minimum _slen_ is 3 and the maximum is 7.
|
The minimum _mml_ is 3 and the maximum is 7.
|
||||||
|
|
||||||
- `targetLen`=_tlen_, `tlen`=_tlen_:
|
- `targetLen`=_tlen_, `tlen`=_tlen_:
|
||||||
The impact of this field vary depending on selected strategy.
|
The impact of this field vary depending on selected strategy.
|
||||||
@ -420,7 +420,7 @@ The list of available _options_:
|
|||||||
Default _ovlog_ is 6, which means "reload `windowSize / 8`".
|
Default _ovlog_ is 6, which means "reload `windowSize / 8`".
|
||||||
Exception : the maximum compression level (22) has a default _ovlog_ of 9.
|
Exception : the maximum compression level (22) has a default _ovlog_ of 9.
|
||||||
|
|
||||||
- `ldmHashLog`=_ldmhlog_, `ldmhlog`=_ldmhlog_:
|
- `ldmHashLog`=_lhlog_, `lhlog`=_lhlog_:
|
||||||
Specify the maximum size for a hash table used for long distance matching.
|
Specify the maximum size for a hash table used for long distance matching.
|
||||||
|
|
||||||
This option is ignored unless long distance matching is enabled.
|
This option is ignored unless long distance matching is enabled.
|
||||||
@ -428,18 +428,18 @@ The list of available _options_:
|
|||||||
Bigger hash tables usually improve compression ratio at the expense of more
|
Bigger hash tables usually improve compression ratio at the expense of more
|
||||||
memory during compression and a decrease in compression speed.
|
memory during compression and a decrease in compression speed.
|
||||||
|
|
||||||
The minimum _ldmhlog_ is 6 and the maximum is 26 (default: 20).
|
The minimum _lhlog_ is 6 and the maximum is 26 (default: 20).
|
||||||
|
|
||||||
- `ldmSearchLength`=_ldmslen_, `ldmslen`=_ldmslen_:
|
- `ldmMinMatch`=_lmml_, `lmml`=_lmml_:
|
||||||
Specify the minimum searched length of a match for long distance matching.
|
Specify the minimum searched length of a match for long distance matching.
|
||||||
|
|
||||||
This option is ignored unless long distance matching is enabled.
|
This option is ignored unless long distance matching is enabled.
|
||||||
|
|
||||||
Larger/very small values usually decrease compression ratio.
|
Larger/very small values usually decrease compression ratio.
|
||||||
|
|
||||||
The minimum _ldmslen_ is 4 and the maximum is 4096 (default: 64).
|
The minimum _lmml_ is 4 and the maximum is 4096 (default: 64).
|
||||||
|
|
||||||
- `ldmBucketSizeLog`=_ldmblog_, `ldmblog`=_ldmblog_:
|
- `ldmBucketSizeLog`=_lblog_, `lblog`=_lblog_:
|
||||||
Specify the size of each bucket for the hash table used for long distance
|
Specify the size of each bucket for the hash table used for long distance
|
||||||
matching.
|
matching.
|
||||||
|
|
||||||
@ -448,9 +448,9 @@ The list of available _options_:
|
|||||||
Larger bucket sizes improve collision resolution but decrease compression
|
Larger bucket sizes improve collision resolution but decrease compression
|
||||||
speed.
|
speed.
|
||||||
|
|
||||||
The minimum _ldmblog_ is 0 and the maximum is 8 (default: 3).
|
The minimum _lblog_ is 0 and the maximum is 8 (default: 3).
|
||||||
|
|
||||||
- `ldmHashEveryLog`=_ldmhevery_, `ldmhevery`=_ldmhevery_:
|
- `ldmHashEveryLog`=_lhevery_, `lhevery`=_lhevery_:
|
||||||
Specify the frequency of inserting entries into the long distance matching
|
Specify the frequency of inserting entries into the long distance matching
|
||||||
hash table.
|
hash table.
|
||||||
|
|
||||||
@ -459,13 +459,13 @@ The list of available _options_:
|
|||||||
Larger values will improve compression speed. Deviating far from the
|
Larger values will improve compression speed. Deviating far from the
|
||||||
default value will likely result in a decrease in compression ratio.
|
default value will likely result in a decrease in compression ratio.
|
||||||
|
|
||||||
The default value is `wlog - ldmhlog`.
|
The default value is `wlog - lhlog`.
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
The following parameters sets advanced compression options to something
|
The following parameters sets advanced compression options to something
|
||||||
similar to predefined level 19 for files bigger than 256 KB:
|
similar to predefined level 19 for files bigger than 256 KB:
|
||||||
|
|
||||||
`--zstd`=wlog=23,clog=23,hlog=22,slog=6,slen=3,tlen=48,strat=6
|
`--zstd`=wlog=23,clog=23,hlog=22,slog=6,mml=3,tlen=48,strat=6
|
||||||
|
|
||||||
### -B#:
|
### -B#:
|
||||||
Select the size of each compression job.
|
Select the size of each compression job.
|
||||||
|
@ -392,7 +392,7 @@ static unsigned parseAdaptParameters(const char* stringPtr, int* adaptMinPtr, in
|
|||||||
|
|
||||||
|
|
||||||
/** parseCompressionParameters() :
|
/** parseCompressionParameters() :
|
||||||
* reads compression parameters from *stringPtr (e.g. "--zstd=wlog=23,clog=23,hlog=22,slog=6,slen=3,tlen=48,strat=6") into *params
|
* reads compression parameters from *stringPtr (e.g. "--zstd=wlog=23,clog=23,hlog=22,slog=6,mml=3,tlen=48,strat=6") into *params
|
||||||
* @return 1 means that compression parameters were correct
|
* @return 1 means that compression parameters were correct
|
||||||
* @return 0 in case of malformed parameters
|
* @return 0 in case of malformed parameters
|
||||||
*/
|
*/
|
||||||
@ -403,20 +403,20 @@ static unsigned parseCompressionParameters(const char* stringPtr, ZSTD_compressi
|
|||||||
if (longCommandWArg(&stringPtr, "chainLog=") || longCommandWArg(&stringPtr, "clog=")) { params->chainLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "chainLog=") || longCommandWArg(&stringPtr, "clog=")) { params->chainLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "hashLog=") || longCommandWArg(&stringPtr, "hlog=")) { params->hashLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "hashLog=") || longCommandWArg(&stringPtr, "hlog=")) { params->hashLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "searchLog=") || longCommandWArg(&stringPtr, "slog=")) { params->searchLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "searchLog=") || longCommandWArg(&stringPtr, "slog=")) { params->searchLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "searchLength=") || longCommandWArg(&stringPtr, "slen=")) { params->searchLength = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "minMatch=") || longCommandWArg(&stringPtr, "mml=")) { params->minMatch = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "targetLength=") || longCommandWArg(&stringPtr, "tlen=")) { params->targetLength = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "targetLength=") || longCommandWArg(&stringPtr, "tlen=")) { params->targetLength = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "strategy=") || longCommandWArg(&stringPtr, "strat=")) { params->strategy = (ZSTD_strategy)(readU32FromChar(&stringPtr)); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "strategy=") || longCommandWArg(&stringPtr, "strat=")) { params->strategy = (ZSTD_strategy)(readU32FromChar(&stringPtr)); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "overlapLog=") || longCommandWArg(&stringPtr, "ovlog=")) { g_overlapLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "overlapLog=") || longCommandWArg(&stringPtr, "ovlog=")) { g_overlapLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "ldmHashLog=") || longCommandWArg(&stringPtr, "ldmhlog=")) { g_ldmHashLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "ldmHashLog=") || longCommandWArg(&stringPtr, "lhlog=")) { g_ldmHashLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "ldmSearchLength=") || longCommandWArg(&stringPtr, "ldmslen=")) { g_ldmMinMatch = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "ldmMinMatch=") || longCommandWArg(&stringPtr, "lmml=")) { g_ldmMinMatch = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "ldmBucketSizeLog=") || longCommandWArg(&stringPtr, "ldmblog=")) { g_ldmBucketSizeLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "ldmBucketSizeLog=") || longCommandWArg(&stringPtr, "lblog=")) { g_ldmBucketSizeLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
if (longCommandWArg(&stringPtr, "ldmHashEveryLog=") || longCommandWArg(&stringPtr, "ldmhevery=")) { g_ldmHashEveryLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
if (longCommandWArg(&stringPtr, "ldmHashEveryLog=") || longCommandWArg(&stringPtr, "lhevery=")) { g_ldmHashEveryLog = readU32FromChar(&stringPtr); if (stringPtr[0]==',') { stringPtr++; continue; } else break; }
|
||||||
DISPLAYLEVEL(4, "invalid compression parameter \n");
|
DISPLAYLEVEL(4, "invalid compression parameter \n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
DISPLAYLEVEL(4, "windowLog=%d, chainLog=%d, hashLog=%d, searchLog=%d \n", params->windowLog, params->chainLog, params->hashLog, params->searchLog);
|
DISPLAYLEVEL(4, "windowLog=%d, chainLog=%d, hashLog=%d, searchLog=%d \n", params->windowLog, params->chainLog, params->hashLog, params->searchLog);
|
||||||
DISPLAYLEVEL(4, "searchLength=%d, targetLength=%d, strategy=%d \n", params->searchLength, params->targetLength, params->strategy);
|
DISPLAYLEVEL(4, "minMatch=%d, targetLength=%d, strategy=%d \n", params->minMatch, params->targetLength, params->strategy);
|
||||||
if (stringPtr[0] != 0) return 0; /* check the end of string */
|
if (stringPtr[0] != 0) return 0; /* check the end of string */
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
@ -408,16 +408,16 @@ static size_t benchMem(U32 benchNb,
|
|||||||
if (g_cstream==NULL) g_cstream = ZSTD_createCStream();
|
if (g_cstream==NULL) g_cstream = ZSTD_createCStream();
|
||||||
if (g_dstream==NULL) g_dstream = ZSTD_createDStream();
|
if (g_dstream==NULL) g_dstream = ZSTD_createDStream();
|
||||||
|
|
||||||
/* DISPLAY("params: cLevel %d, wlog %d hlog %d clog %d slog %d slen %d tlen %d strat %d \n",
|
/* DISPLAY("params: cLevel %d, wlog %d hlog %d clog %d slog %d mml %d tlen %d strat %d \n",
|
||||||
cLevel, cparams->windowLog, cparams->hashLog, cparams->chainLog, cparams->searchLog,
|
cLevel, cparams->windowLog, cparams->hashLog, cparams->chainLog, cparams->searchLog,
|
||||||
cparams->searchLength, cparams->targetLength, cparams->strategy); */
|
cparams->minMatch, cparams->targetLength, cparams->strategy); */
|
||||||
|
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_compressionLevel, cLevel);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_compressionLevel, cLevel);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_windowLog, cparams.windowLog);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_windowLog, cparams.windowLog);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_hashLog, cparams.hashLog);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_hashLog, cparams.hashLog);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_chainLog, cparams.chainLog);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_chainLog, cparams.chainLog);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_searchLog, cparams.searchLog);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_searchLog, cparams.searchLog);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_minMatch, cparams.searchLength);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_minMatch, cparams.minMatch);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_targetLength, cparams.targetLength);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_targetLength, cparams.targetLength);
|
||||||
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_compressionStrategy, cparams.strategy);
|
ZSTD_CCtx_setParameter(g_zcc, ZSTD_p_compressionStrategy, cparams.strategy);
|
||||||
|
|
||||||
@ -427,7 +427,7 @@ static size_t benchMem(U32 benchNb,
|
|||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_hashLog, cparams.hashLog);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_hashLog, cparams.hashLog);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_chainLog, cparams.chainLog);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_chainLog, cparams.chainLog);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_searchLog, cparams.searchLog);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_searchLog, cparams.searchLog);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_minMatch, cparams.searchLength);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_minMatch, cparams.minMatch);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_targetLength, cparams.targetLength);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_targetLength, cparams.targetLength);
|
||||||
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_compressionStrategy, cparams.strategy);
|
ZSTD_CCtx_setParameter(g_cstream, ZSTD_p_compressionStrategy, cparams.strategy);
|
||||||
|
|
||||||
@ -752,7 +752,7 @@ int main(int argc, const char** argv)
|
|||||||
if (longCommandWArg(&argument, "chainLog=") || longCommandWArg(&argument, "clog=")) { cparams.chainLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "chainLog=") || longCommandWArg(&argument, "clog=")) { cparams.chainLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
if (longCommandWArg(&argument, "hashLog=") || longCommandWArg(&argument, "hlog=")) { cparams.hashLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "hashLog=") || longCommandWArg(&argument, "hlog=")) { cparams.hashLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
if (longCommandWArg(&argument, "searchLog=") || longCommandWArg(&argument, "slog=")) { cparams.searchLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "searchLog=") || longCommandWArg(&argument, "slog=")) { cparams.searchLog = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
if (longCommandWArg(&argument, "searchLength=") || longCommandWArg(&argument, "slen=")) { cparams.searchLength = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "minMatch=") || longCommandWArg(&argument, "mml=")) { cparams.minMatch = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
if (longCommandWArg(&argument, "targetLength=") || longCommandWArg(&argument, "tlen=")) { cparams.targetLength = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "targetLength=") || longCommandWArg(&argument, "tlen=")) { cparams.targetLength = readU32FromChar(&argument); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
if (longCommandWArg(&argument, "strategy=") || longCommandWArg(&argument, "strat=")) { cparams.strategy = (ZSTD_strategy)(readU32FromChar(&argument)); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "strategy=") || longCommandWArg(&argument, "strat=")) { cparams.strategy = (ZSTD_strategy)(readU32FromChar(&argument)); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
if (longCommandWArg(&argument, "level=") || longCommandWArg(&argument, "lvl=")) { cLevel = (int)readU32FromChar(&argument); cparams = ZSTD_getCParams(cLevel, 0, 0); if (argument[0]==',') { argument++; continue; } else break; }
|
if (longCommandWArg(&argument, "level=") || longCommandWArg(&argument, "lvl=")) { cLevel = (int)readU32FromChar(&argument); cparams = ZSTD_getCParams(cLevel, 0, 0); if (argument[0]==',') { argument++; continue; } else break; }
|
||||||
|
@ -75,7 +75,7 @@ static const int g_maxNbVariations = 64;
|
|||||||
#define CLOG_RANGE (ZSTD_CHAINLOG_MAX - ZSTD_CHAINLOG_MIN + 1)
|
#define CLOG_RANGE (ZSTD_CHAINLOG_MAX - ZSTD_CHAINLOG_MIN + 1)
|
||||||
#define HLOG_RANGE (ZSTD_HASHLOG_MAX - ZSTD_HASHLOG_MIN + 1)
|
#define HLOG_RANGE (ZSTD_HASHLOG_MAX - ZSTD_HASHLOG_MIN + 1)
|
||||||
#define SLOG_RANGE (ZSTD_SEARCHLOG_MAX - ZSTD_SEARCHLOG_MIN + 1)
|
#define SLOG_RANGE (ZSTD_SEARCHLOG_MAX - ZSTD_SEARCHLOG_MIN + 1)
|
||||||
#define SLEN_RANGE (ZSTD_SEARCHLENGTH_MAX - ZSTD_SEARCHLENGTH_MIN + 1)
|
#define MML_RANGE (ZSTD_MINMATCH_MAX - ZSTD_MINMATCH_MIN + 1)
|
||||||
#define TLEN_RANGE 17
|
#define TLEN_RANGE 17
|
||||||
#define STRT_RANGE (ZSTD_btultra - ZSTD_fast + 1)
|
#define STRT_RANGE (ZSTD_btultra - ZSTD_fast + 1)
|
||||||
#define FADT_RANGE 3
|
#define FADT_RANGE 3
|
||||||
@ -103,7 +103,7 @@ typedef enum {
|
|||||||
clog_ind = 1,
|
clog_ind = 1,
|
||||||
hlog_ind = 2,
|
hlog_ind = 2,
|
||||||
slog_ind = 3,
|
slog_ind = 3,
|
||||||
slen_ind = 4,
|
mml_ind = 4,
|
||||||
tlen_ind = 5,
|
tlen_ind = 5,
|
||||||
strt_ind = 6,
|
strt_ind = 6,
|
||||||
fadt_ind = 7, /* forceAttachDict */
|
fadt_ind = 7, /* forceAttachDict */
|
||||||
@ -116,15 +116,15 @@ typedef struct {
|
|||||||
|
|
||||||
/* maximum value of parameters */
|
/* maximum value of parameters */
|
||||||
static const U32 mintable[NUM_PARAMS] =
|
static const U32 mintable[NUM_PARAMS] =
|
||||||
{ ZSTD_WINDOWLOG_MIN, ZSTD_CHAINLOG_MIN, ZSTD_HASHLOG_MIN, ZSTD_SEARCHLOG_MIN, ZSTD_SEARCHLENGTH_MIN, ZSTD_TARGETLENGTH_MIN, ZSTD_fast, FADT_MIN };
|
{ ZSTD_WINDOWLOG_MIN, ZSTD_CHAINLOG_MIN, ZSTD_HASHLOG_MIN, ZSTD_SEARCHLOG_MIN, ZSTD_MINMATCH_MIN, ZSTD_TARGETLENGTH_MIN, ZSTD_fast, FADT_MIN };
|
||||||
|
|
||||||
/* minimum value of parameters */
|
/* minimum value of parameters */
|
||||||
static const U32 maxtable[NUM_PARAMS] =
|
static const U32 maxtable[NUM_PARAMS] =
|
||||||
{ ZSTD_WINDOWLOG_MAX, ZSTD_CHAINLOG_MAX, ZSTD_HASHLOG_MAX, ZSTD_SEARCHLOG_MAX, ZSTD_SEARCHLENGTH_MAX, ZSTD_TARGETLENGTH_MAX, ZSTD_btultra, FADT_MAX };
|
{ ZSTD_WINDOWLOG_MAX, ZSTD_CHAINLOG_MAX, ZSTD_HASHLOG_MAX, ZSTD_SEARCHLOG_MAX, ZSTD_MINMATCH_MAX, ZSTD_TARGETLENGTH_MAX, ZSTD_btultra, FADT_MAX };
|
||||||
|
|
||||||
/* # of values parameters can take on */
|
/* # of values parameters can take on */
|
||||||
static const U32 rangetable[NUM_PARAMS] =
|
static const U32 rangetable[NUM_PARAMS] =
|
||||||
{ WLOG_RANGE, CLOG_RANGE, HLOG_RANGE, SLOG_RANGE, SLEN_RANGE, TLEN_RANGE, STRT_RANGE, FADT_RANGE };
|
{ WLOG_RANGE, CLOG_RANGE, HLOG_RANGE, SLOG_RANGE, MML_RANGE, TLEN_RANGE, STRT_RANGE, FADT_RANGE };
|
||||||
|
|
||||||
/* ZSTD_cctxSetParameter() index to set */
|
/* ZSTD_cctxSetParameter() index to set */
|
||||||
static const ZSTD_cParameter cctxSetParamTable[NUM_PARAMS] =
|
static const ZSTD_cParameter cctxSetParamTable[NUM_PARAMS] =
|
||||||
@ -132,11 +132,11 @@ static const ZSTD_cParameter cctxSetParamTable[NUM_PARAMS] =
|
|||||||
|
|
||||||
/* names of parameters */
|
/* names of parameters */
|
||||||
static const char* g_paramNames[NUM_PARAMS] =
|
static const char* g_paramNames[NUM_PARAMS] =
|
||||||
{ "windowLog", "chainLog", "hashLog","searchLog", "searchLength", "targetLength", "strategy", "forceAttachDict" };
|
{ "windowLog", "chainLog", "hashLog","searchLog", "minMatch", "targetLength", "strategy", "forceAttachDict" };
|
||||||
|
|
||||||
/* shortened names of parameters */
|
/* shortened names of parameters */
|
||||||
static const char* g_shortParamNames[NUM_PARAMS] =
|
static const char* g_shortParamNames[NUM_PARAMS] =
|
||||||
{ "wlog", "clog", "hlog","slog", "slen", "tlen", "strt", "fadt" };
|
{ "wlog", "clog", "hlog", "slog", "mml", "tlen", "strat", "fadt" };
|
||||||
|
|
||||||
/* maps value from { 0 to rangetable[param] - 1 } to valid paramvalues */
|
/* maps value from { 0 to rangetable[param] - 1 } to valid paramvalues */
|
||||||
static U32 rangeMap(varInds_t param, int ind) {
|
static U32 rangeMap(varInds_t param, int ind) {
|
||||||
@ -150,7 +150,7 @@ static U32 rangeMap(varInds_t param, int ind) {
|
|||||||
case clog_ind:
|
case clog_ind:
|
||||||
case hlog_ind:
|
case hlog_ind:
|
||||||
case slog_ind:
|
case slog_ind:
|
||||||
case slen_ind:
|
case mml_ind:
|
||||||
case strt_ind:
|
case strt_ind:
|
||||||
return mintable[param] + ind;
|
return mintable[param] + ind;
|
||||||
case NUM_PARAMS:
|
case NUM_PARAMS:
|
||||||
@ -186,7 +186,7 @@ static int invRangeMap(varInds_t param, U32 value) {
|
|||||||
case clog_ind:
|
case clog_ind:
|
||||||
case hlog_ind:
|
case hlog_ind:
|
||||||
case slog_ind:
|
case slog_ind:
|
||||||
case slen_ind:
|
case mml_ind:
|
||||||
case strt_ind:
|
case strt_ind:
|
||||||
return value - mintable[param];
|
return value - mintable[param];
|
||||||
case NUM_PARAMS:
|
case NUM_PARAMS:
|
||||||
@ -205,7 +205,7 @@ static void displayParamVal(FILE* f, varInds_t param, U32 value, int width) {
|
|||||||
case clog_ind:
|
case clog_ind:
|
||||||
case hlog_ind:
|
case hlog_ind:
|
||||||
case slog_ind:
|
case slog_ind:
|
||||||
case slen_ind:
|
case mml_ind:
|
||||||
case tlen_ind: if(width) { fprintf(f, "%*u", width, value); } else { fprintf(f, "%u", value); } break;
|
case tlen_ind: if(width) { fprintf(f, "%*u", width, value); } else { fprintf(f, "%u", value); } break;
|
||||||
case NUM_PARAMS:
|
case NUM_PARAMS:
|
||||||
DISPLAY("Error, not a valid param\n "); break;
|
DISPLAY("Error, not a valid param\n "); break;
|
||||||
@ -311,7 +311,7 @@ static ZSTD_compressionParameters pvalsToCParams(paramValues_t p) {
|
|||||||
c.chainLog = p.vals[clog_ind];
|
c.chainLog = p.vals[clog_ind];
|
||||||
c.hashLog = p.vals[hlog_ind];
|
c.hashLog = p.vals[hlog_ind];
|
||||||
c.searchLog = p.vals[slog_ind];
|
c.searchLog = p.vals[slog_ind];
|
||||||
c.searchLength = p.vals[slen_ind];
|
c.minMatch = p.vals[mml_ind];
|
||||||
c.targetLength = p.vals[tlen_ind];
|
c.targetLength = p.vals[tlen_ind];
|
||||||
c.strategy = p.vals[strt_ind];
|
c.strategy = p.vals[strt_ind];
|
||||||
/* no forceAttachDict */
|
/* no forceAttachDict */
|
||||||
@ -325,7 +325,7 @@ static paramValues_t cParamsToPVals(ZSTD_compressionParameters c) {
|
|||||||
p.vals[clog_ind] = c.chainLog;
|
p.vals[clog_ind] = c.chainLog;
|
||||||
p.vals[hlog_ind] = c.hashLog;
|
p.vals[hlog_ind] = c.hashLog;
|
||||||
p.vals[slog_ind] = c.searchLog;
|
p.vals[slog_ind] = c.searchLog;
|
||||||
p.vals[slen_ind] = c.searchLength;
|
p.vals[mml_ind] = c.minMatch;
|
||||||
p.vals[tlen_ind] = c.targetLength;
|
p.vals[tlen_ind] = c.targetLength;
|
||||||
p.vals[strt_ind] = c.strategy;
|
p.vals[strt_ind] = c.strategy;
|
||||||
|
|
||||||
@ -2664,7 +2664,7 @@ int main(int argc, const char** argv)
|
|||||||
continue;
|
continue;
|
||||||
case 'l': /* search length */
|
case 'l': /* search length */
|
||||||
argument++;
|
argument++;
|
||||||
g_params.vals[slen_ind] = readU32FromChar(&argument);
|
g_params.vals[mml_ind] = readU32FromChar(&argument);
|
||||||
continue;
|
continue;
|
||||||
case 't': /* target length */
|
case 't': /* target length */
|
||||||
argument++;
|
argument++;
|
||||||
|
@ -239,11 +239,11 @@ $ECHO "Hello world!" | $ZSTD --zstd=windowLo=21 - -o tmp.zst && die "wron
|
|||||||
$ECHO "Hello world!" | $ZSTD --zstd=windowLog=21,slog - -o tmp.zst && die "wrong parameters not detected!"
|
$ECHO "Hello world!" | $ZSTD --zstd=windowLog=21,slog - -o tmp.zst && die "wrong parameters not detected!"
|
||||||
test ! -f tmp.zst # tmp.zst should not be created
|
test ! -f tmp.zst # tmp.zst should not be created
|
||||||
roundTripTest -g512K
|
roundTripTest -g512K
|
||||||
roundTripTest -g512K " --zstd=slen=3,tlen=48,strat=6"
|
roundTripTest -g512K " --zstd=mml=3,tlen=48,strat=6"
|
||||||
roundTripTest -g512K " --zstd=strat=6,wlog=23,clog=23,hlog=22,slog=6"
|
roundTripTest -g512K " --zstd=strat=6,wlog=23,clog=23,hlog=22,slog=6"
|
||||||
roundTripTest -g512K " --zstd=windowLog=23,chainLog=23,hashLog=22,searchLog=6,searchLength=3,targetLength=48,strategy=6"
|
roundTripTest -g512K " --zstd=windowLog=23,chainLog=23,hashLog=22,searchLog=6,minMatch=3,targetLength=48,strategy=6"
|
||||||
roundTripTest -g512K " --single-thread --long --zstd=ldmHashLog=20,ldmSearchLength=64,ldmBucketSizeLog=1,ldmHashEveryLog=7"
|
roundTripTest -g512K " --single-thread --long --zstd=ldmHashLog=20,ldmMinMatch=64,ldmBucketSizeLog=1,ldmHashEveryLog=7"
|
||||||
roundTripTest -g512K " --single-thread --long --zstd=ldmhlog=20,ldmslen=64,ldmblog=1,ldmhevery=7"
|
roundTripTest -g512K " --single-thread --long --zstd=lhlog=20,lmml=64,lblog=1,lhevery=7"
|
||||||
roundTripTest -g512K 19
|
roundTripTest -g512K 19
|
||||||
|
|
||||||
|
|
||||||
|
@ -228,7 +228,7 @@ static size_t getCCtxParams(ZSTD_CCtx* zc, ZSTD_parameters* savedParams)
|
|||||||
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_hashLog, &savedParams->cParams.hashLog));
|
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_hashLog, &savedParams->cParams.hashLog));
|
||||||
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_chainLog, &savedParams->cParams.chainLog));
|
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_chainLog, &savedParams->cParams.chainLog));
|
||||||
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_searchLog, &savedParams->cParams.searchLog));
|
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_searchLog, &savedParams->cParams.searchLog));
|
||||||
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_minMatch, &savedParams->cParams.searchLength));
|
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_minMatch, &savedParams->cParams.minMatch));
|
||||||
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_targetLength, &savedParams->cParams.targetLength));
|
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_targetLength, &savedParams->cParams.targetLength));
|
||||||
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_compressionStrategy, &value));
|
CHECK_RET_Z(ZSTD_CCtx_getParameter(zc, ZSTD_p_compressionStrategy, &value));
|
||||||
savedParams->cParams.strategy = value;
|
savedParams->cParams.strategy = value;
|
||||||
@ -248,7 +248,7 @@ static U32 badParameters(ZSTD_CCtx* zc, ZSTD_parameters const savedParams)
|
|||||||
CHECK_RET(2, params.cParams.hashLog != savedParams.cParams.hashLog, "hashLog");
|
CHECK_RET(2, params.cParams.hashLog != savedParams.cParams.hashLog, "hashLog");
|
||||||
CHECK_RET(3, params.cParams.chainLog != savedParams.cParams.chainLog, "chainLog");
|
CHECK_RET(3, params.cParams.chainLog != savedParams.cParams.chainLog, "chainLog");
|
||||||
CHECK_RET(4, params.cParams.searchLog != savedParams.cParams.searchLog, "searchLog");
|
CHECK_RET(4, params.cParams.searchLog != savedParams.cParams.searchLog, "searchLog");
|
||||||
CHECK_RET(5, params.cParams.searchLength != savedParams.cParams.searchLength, "searchLength");
|
CHECK_RET(5, params.cParams.minMatch != savedParams.cParams.minMatch, "minMatch");
|
||||||
CHECK_RET(6, params.cParams.targetLength != savedParams.cParams.targetLength, "targetLength");
|
CHECK_RET(6, params.cParams.targetLength != savedParams.cParams.targetLength, "targetLength");
|
||||||
|
|
||||||
CHECK_RET(7, params.fParams.checksumFlag != savedParams.fParams.checksumFlag, "checksumFlag");
|
CHECK_RET(7, params.fParams.checksumFlag != savedParams.fParams.checksumFlag, "checksumFlag");
|
||||||
@ -353,7 +353,7 @@ static int basicUnitTests(U32 seed, double compressibility)
|
|||||||
DISPLAYLEVEL(3, "test%3i : use bad compression parameters : ", testNb++);
|
DISPLAYLEVEL(3, "test%3i : use bad compression parameters : ", testNb++);
|
||||||
{ size_t r;
|
{ size_t r;
|
||||||
ZSTD_parameters params = ZSTD_getParams(1, 0, 0);
|
ZSTD_parameters params = ZSTD_getParams(1, 0, 0);
|
||||||
params.cParams.searchLength = 2;
|
params.cParams.minMatch = 2;
|
||||||
r = ZSTD_initCStream_advanced(zc, NULL, 0, params, 0);
|
r = ZSTD_initCStream_advanced(zc, NULL, 0, params, 0);
|
||||||
if (!ZSTD_isError(r)) goto _output_error;
|
if (!ZSTD_isError(r)) goto _output_error;
|
||||||
DISPLAYLEVEL(3, "init error : %s \n", ZSTD_getErrorName(r));
|
DISPLAYLEVEL(3, "init error : %s \n", ZSTD_getErrorName(r));
|
||||||
@ -1851,7 +1851,7 @@ static int fuzzerTests_newAPI(U32 seed, U32 nbTests, unsigned startTest,
|
|||||||
cParams.chainLog += (FUZ_rand(&lseed) & 3) - 1;
|
cParams.chainLog += (FUZ_rand(&lseed) & 3) - 1;
|
||||||
cParams.searchLog += (FUZ_rand(&lseed) & 3) - 1;
|
cParams.searchLog += (FUZ_rand(&lseed) & 3) - 1;
|
||||||
cParams.searchLog = MIN(searchLogMax, cParams.searchLog);
|
cParams.searchLog = MIN(searchLogMax, cParams.searchLog);
|
||||||
cParams.searchLength += (FUZ_rand(&lseed) & 3) - 1;
|
cParams.minMatch += (FUZ_rand(&lseed) & 3) - 1;
|
||||||
cParams.targetLength = (U32)((cParams.targetLength + 1 ) * (0.5 + ((double)(FUZ_rand(&lseed) & 127) / 128)));
|
cParams.targetLength = (U32)((cParams.targetLength + 1 ) * (0.5 + ((double)(FUZ_rand(&lseed) & 127) / 128)));
|
||||||
cParams = ZSTD_adjustCParams(cParams, pledgedSrcSize, dictSize);
|
cParams = ZSTD_adjustCParams(cParams, pledgedSrcSize, dictSize);
|
||||||
|
|
||||||
@ -1870,7 +1870,7 @@ static int fuzzerTests_newAPI(U32 seed, U32 nbTests, unsigned startTest,
|
|||||||
CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_p_chainLog, cParams.chainLog, opaqueAPI) );
|
CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_p_chainLog, cParams.chainLog, opaqueAPI) );
|
||||||
}
|
}
|
||||||
if (FUZ_rand(&lseed) & 1) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_p_searchLog, cParams.searchLog, opaqueAPI) );
|
if (FUZ_rand(&lseed) & 1) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_p_searchLog, cParams.searchLog, opaqueAPI) );
|
||||||
if (FUZ_rand(&lseed) & 1) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_p_minMatch, cParams.searchLength, opaqueAPI) );
|
if (FUZ_rand(&lseed) & 1) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_p_minMatch, cParams.minMatch, opaqueAPI) );
|
||||||
if (FUZ_rand(&lseed) & 1) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_p_targetLength, cParams.targetLength, opaqueAPI) );
|
if (FUZ_rand(&lseed) & 1) CHECK_Z( setCCtxParameter(zc, cctxParams, ZSTD_p_targetLength, cParams.targetLength, opaqueAPI) );
|
||||||
|
|
||||||
/* mess with long distance matching parameters */
|
/* mess with long distance matching parameters */
|
||||||
|
Loading…
Reference in New Issue
Block a user