hackedteam/vector-edk

View on GitHub
vector-uefi/insyde/7zip/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java

Summary

Maintainability
A
0 mins
Test Coverage
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;
    }
}