priceFunc

This commit is contained in:
inikep
2016-02-23 16:25:04 +01:00
parent 15174b0cfb
commit e0010e9baf
4 changed files with 25 additions and 15 deletions
+14 -12
View File
@@ -46,18 +46,20 @@ FORCE_INLINE U32 ZSTD_GETPRICE(seqStore_t* seqStorePtr, U32 litLength, const BYT
if (matchLength >= MaxML) matchLength = MaxML;
price += ZSTD_highbit(seqStorePtr->matchLengthSum) - ZSTD_highbit(seqStorePtr->matchLengthFreq[matchLength]);
#if 0
if (!litLength)
return price + 1 + ((seqStorePtr->litSum>>4) / seqStorePtr->litLengthSum) + (matchLength==0);
return price + ZSTD_getLiteralPrice(seqStorePtr, litLength, literals) + ((seqStorePtr->litSum>>4) / seqStorePtr->litLengthSum) + (matchLength==0);
#else
if (!litLength)
return price + 1;
return price + ZSTD_getLiteralPrice(seqStorePtr, litLength, literals);
// return price + ZSTD_getLiteralPrice(seqStorePtr, litLength, literals);
#endif
#define ZSTD_PRICE_MULT 2
switch (seqStorePtr->priceFunc)
{
default:
case 0:
if (!litLength) return price + 1 + ((seqStorePtr->litSum<<ZSTD_PRICE_MULT) / (seqStorePtr->litSum + seqStorePtr->matchSum)) + (matchLength==0);
return price + ZSTD_getLiteralPrice(seqStorePtr, litLength, literals) + ((seqStorePtr->litSum<<ZSTD_PRICE_MULT) / (seqStorePtr->litSum + seqStorePtr->matchSum)) + (matchLength==0);
case 1:
if (!litLength) return price + 1 + ((seqStorePtr->litSum>>5) / seqStorePtr->litLengthSum) + (matchLength==0);
return price + ZSTD_getLiteralPrice(seqStorePtr, litLength, literals) + ((seqStorePtr->litSum>>5) / seqStorePtr->litLengthSum) + (matchLength==0);
case 2:
if (!litLength) return price + 1;
return price + ZSTD_getLiteralPrice(seqStorePtr, litLength, literals);
}
}