All Downloads are FREE. Search and download functionalities are using the official Maven repository.

SevenZip.Compression.RangeCoder.BitTreeDecoder Maven / Gradle / Ivy

The newest version!
/**
 * Copyright (c) 2016-2022 Deephaven Data Labs and Patent Pending
 */
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;
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy