3 inline unsigned int RangeCoder::GetChar()
5 return(UnpackRead->GetChar());
9 void RangeCoder::InitDecoder(Unpack *UnpackRead)
11 RangeCoder::UnpackRead=UnpackRead;
15 for (int i=0;i < 4;i++)
16 code=(code << 8) | GetChar();
20 #define ARI_DEC_NORMALIZE(code,low,range,read) \
22 while ((low^(low+range))<TOP || (range<BOT && ((range=-low&(BOT-1)),1))) \
24 code=(code << 8) | read->GetChar(); \
31 inline int RangeCoder::GetCurrentCount()
33 return (code-low)/(range /= SubRange.scale);
37 inline uint RangeCoder::GetCurrentShiftCount(uint SHIFT)
39 return (code-low)/(range >>= SHIFT);
43 inline void RangeCoder::Decode()
45 low += range*SubRange.LowCount;
46 range *= SubRange.HighCount-SubRange.LowCount;