tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

BitTreeDecoder.java (1271B)


      1 package SevenZip.Compression.RangeCoder;
      2 
      3 public class BitTreeDecoder
      4 {
      5 short[] Models;
      6 int NumBitLevels;
      7 
      8 public BitTreeDecoder(int numBitLevels)
      9 {
     10 	NumBitLevels = numBitLevels;
     11 	Models = new short[1 << numBitLevels];
     12 }
     13 
     14 public void Init()
     15 {
     16 	Decoder.InitBitModels(Models);
     17 }
     18 
     19 public int Decode(Decoder rangeDecoder) throws java.io.IOException
     20 {
     21 	int m = 1;
     22 	for (int bitIndex = NumBitLevels; bitIndex != 0; bitIndex--)
     23 		m = (m << 1) + rangeDecoder.DecodeBit(Models, m);
     24 	return m - (1 << NumBitLevels);
     25 }
     26 
     27 public int ReverseDecode(Decoder rangeDecoder) throws java.io.IOException
     28 {
     29 	int m = 1;
     30 	int symbol = 0;
     31 	for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
     32 	{
     33 		int bit = rangeDecoder.DecodeBit(Models, m);
     34 		m <<= 1;
     35 		m += bit;
     36 		symbol |= (bit << bitIndex);
     37 	}
     38 	return symbol;
     39 }
     40 
     41 public static int ReverseDecode(short[] Models, int startIndex,
     42 		Decoder rangeDecoder, int NumBitLevels) throws java.io.IOException
     43 {
     44 	int m = 1;
     45 	int symbol = 0;
     46 	for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex++)
     47 	{
     48 		int bit = rangeDecoder.DecodeBit(Models, startIndex + m);
     49 		m <<= 1;
     50 		m += bit;
     51 		symbol |= (bit << bitIndex);
     52 	}
     53 	return symbol;
     54 }
     55 }