1// Compress/RangeCoder/RangeCoderOpt.h 2 3#ifndef __COMPRESS_RANGECODER_OPT_H 4#define __COMPRESS_RANGECODER_OPT_H 5 6#define RC_INIT_VAR \ 7 UInt32 range = rangeDecoder->Range; \ 8 UInt32 code = rangeDecoder->Code; 9 10#define RC_FLUSH_VAR \ 11 rangeDecoder->Range = range; \ 12 rangeDecoder->Code = code; 13 14#define RC_NORMALIZE \ 15 if (range < NCompress::NRangeCoder::kTopValue) \ 16 { code = (code << 8) | rangeDecoder->Stream.ReadByte(); range <<= 8; } 17 18#define RC_GETBIT2(numMoveBits, prob, mi, A0, A1) \ 19 { UInt32 bound = (range >> NCompress::NRangeCoder::kNumBitModelTotalBits) * prob; \ 20 if (code < bound) \ 21 { A0; range = bound; \ 22 prob += (NCompress::NRangeCoder::kBitModelTotal - prob) >> numMoveBits; \ 23 mi <<= 1; } \ 24 else \ 25 { A1; range -= bound; code -= bound; prob -= (prob) >> numMoveBits; \ 26 mi = (mi + mi) + 1; }} \ 27 RC_NORMALIZE 28 29#define RC_GETBIT(numMoveBits, prob, mi) RC_GETBIT2(numMoveBits, prob, mi, ; , ;) 30 31#endif 32