const U32 windowLow = windowSize >= current ? 0 : current - windowSize;
U32* smallerPtr = bt + 2*(current&btMask);
U32* largerPtr = bt + 2*(current&btMask) + 1;
- U32 bestLength = 0;
+ size_t bestLength = 0;
U32 dummy32; /* to be nullified at the end */
hashTable[h] = (U32)(ip-base); /* Update Hash Table */
if (matchLength > bestLength)
{
- bestLength = (U32)matchLength;
- *offsetPtr = current - matchIndex;
+ if ( (4*(int)(matchLength-bestLength)) > (int)(ZSTD_highbit(current-matchIndex+1) - ZSTD_highbit(offsetPtr[0]+1)) )
+ bestLength = matchLength, *offsetPtr = current - matchIndex;
if (ip+matchLength == iend) /* equal : no way to know if inf or sup */
break; /* drop, next to null, to guarantee consistency (is there a way to do better ?) */
}
{ 21, 21, 22, 6, 5, ZSTD_HC_lazydeep }, /* level 14 */
{ 22, 21, 22, 6, 5, ZSTD_HC_lazydeep }, /* level 15 */
{ 22, 21, 22, 5, 5, ZSTD_HC_btlazy2 }, /* level 16 */
- { 22, 22, 23, 5, 5, ZSTD_HC_btlazy2 }, /* level 17 */
+ { 22, 23, 22, 4, 5, ZSTD_HC_btlazy2 }, /* level 17 */
{ 22, 22, 23, 7, 5, ZSTD_HC_btlazy2 }, /* level 18 */
- { 24, 24, 22, 7, 5, ZSTD_HC_btlazy2 }, /* level 19 */
- { 25, 25, 23, 8, 5, ZSTD_HC_btlazy2 }, /* level 20 */
+ { 23, 23, 23, 7, 5, ZSTD_HC_btlazy2 }, /* level 19 */
+ { 24, 25, 23, 8, 5, ZSTD_HC_btlazy2 }, /* level 20 */
{ 25, 25, 23, 8, 5, ZSTD_HC_btlazy2 }, /* level 21 */
{ 25, 25, 23, 8, 5, ZSTD_HC_btlazy2 }, /* level 22 */
{ 25, 25, 23, 8, 5, ZSTD_HC_btlazy2 }, /* level 23 */
if (g_singleRun)
{
BMK_result_t testResult;
+ ZSTD_HC_validateParams(&g_params, g_blockSize ? g_blockSize : srcSize);
BMK_benchParam(&testResult, srcBuffer, srcSize, ctx, g_params);
DISPLAY("\n");
return;
argument++;
while ((*argument>= '0') && (*argument<='9'))
{
- if (*argument++) g_params.strategy = ZSTD_HC_lazy;
+ g_params.strategy = (ZSTD_HC_strategy)((U32)g_params.strategy *10);
+ g_params.strategy = (ZSTD_HC_strategy)((U32)g_params.strategy + *argument++ - '0');
}
continue;
case 'L':