From: Yann Collet Date: Tue, 29 May 2018 22:29:55 +0000 (-0700) Subject: minor update of literal cost function X-Git-Tag: v1.3.5~3^2~38^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=809f2f93229b3de57ea4dfab01feab2e699a7327;p=thirdparty%2Fzstd.git minor update of literal cost function just assert() there is no negative cost evaluation for literals --- diff --git a/lib/compress/zstd_opt.c b/lib/compress/zstd_opt.c index de745b6e6..46a5395ac 100644 --- a/lib/compress/zstd_opt.c +++ b/lib/compress/zstd_opt.c @@ -189,12 +189,11 @@ static U32 ZSTD_rawLiteralsCost(const BYTE* const literals, U32 const litLength, return (litLength*6) * BITCOST_MULTIPLIER; /* 6 bit per literal - no statistic used */ /* dynamic statistics */ - { U32 price, u; - for (u=0, price=0; u < litLength; u++) { - U32 const litWeight = WEIGHT(optPtr->litFreq[literals[u]], optLevel); - U32 litCost = optPtr->litSumBasePrice - litWeight; - //if (litCost < BITCOST_MULTIPLIER) litCost = BITCOST_MULTIPLIER; /* minimum 1 bit per symbol (huffman) */ - price += litCost; + { U32 price = litLength * optPtr->litSumBasePrice; + U32 u; + for (u=0; u < litLength; u++) { + assert(WEIGHT(optPtr->litFreq[literals[u]], optLevel) <= optPtr->litSumBasePrice); /* literal cost should never be negative */ + price -= WEIGHT(optPtr->litFreq[literals[u]], optLevel); } return price; }