From 809f2f93229b3de57ea4dfab01feab2e699a7327 Mon Sep 17 00:00:00 2001 From: Yann Collet Date: Tue, 29 May 2018 15:29:55 -0700 Subject: [PATCH] minor update of literal cost function just assert() there is no negative cost evaluation for literals --- lib/compress/zstd_opt.c | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) 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; } -- 2.47.2