mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
56 lines
1.2 KiB
Java
56 lines
1.2 KiB
Java
|
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;
|
||
|
}
|
||
|
}
|