| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package SevenZip.Compression.RangeCoder;
- public class BitTreeDecoder
- {
- short[] Models;
- int NumBitLevels;
-
- public BitTreeDecoder(int numBitLevels)
- {
- NumBitLevels = numBitLevels;
- Models = new short[1 << numBitLevels];
- }
-
- public void Init()
- {
- Decoder.InitBitModels(Models);
- }
-
- public int Decode(Decoder rangeDecoder) throws java.io.IOException
- {
- int m = 1;
- for (int bitIndex = NumBitLevels; bitIndex != 0; bitIndex--)
- m = (m << 1) + rangeDecoder.DecodeBit(Models, m);
- return m - (1 << NumBitLevels);
- }
-
- public int ReverseDecode(Decoder rangeDecoder) throws java.io.IOException
- {
- int m = 1;
- int symbol = 0;
- for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
- {
- int bit = rangeDecoder.DecodeBit(Models, m);
- m <<= 1;
- m += bit;
- symbol |= (bit << bitIndex);
- }
- return symbol;
- }
-
- public static int ReverseDecode(short[] Models, int startIndex,
- Decoder rangeDecoder, int NumBitLevels) throws java.io.IOException
- {
- int m = 1;
- int symbol = 0;
- for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
- {
- int bit = rangeDecoder.DecodeBit(Models, startIndex + m);
- m <<= 1;
- m += bit;
- symbol |= (bit << bitIndex);
- }
- return symbol;
- }
- }
|