tor-browser

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

BitTreeEncoder.java (2133B)


      1 package SevenZip.Compression.RangeCoder;
      2 import java.io.IOException;
      3 
      4 public class BitTreeEncoder
      5 {
      6 short[] Models;
      7 int NumBitLevels;
      8 
      9 public BitTreeEncoder(int numBitLevels)
     10 {
     11 	NumBitLevels = numBitLevels;
     12 	Models = new short[1 << numBitLevels];
     13 }
     14 
     15 public void Init()
     16 {
     17 	Decoder.InitBitModels(Models);
     18 }
     19 
     20 public void Encode(Encoder rangeEncoder, int symbol) throws IOException
     21 {
     22 	int m = 1;
     23 	for (int bitIndex = NumBitLevels; bitIndex != 0; )
     24 	{
     25 		bitIndex--;
     26 		int bit = (symbol >>> bitIndex) & 1;
     27 		rangeEncoder.Encode(Models, m, bit);
     28 		m = (m << 1) | bit;
     29 	}
     30 }
     31 
     32 public void ReverseEncode(Encoder rangeEncoder, int symbol) throws IOException
     33 {
     34 	int m = 1;
     35 	for (int  i = 0; i < NumBitLevels; i++)
     36 	{
     37 		int bit = symbol & 1;
     38 		rangeEncoder.Encode(Models, m, bit);
     39 		m = (m << 1) | bit;
     40 		symbol >>= 1;
     41 	}
     42 }
     43 
     44 public int GetPrice(int symbol)
     45 {
     46 	int price = 0;
     47 	int m = 1;
     48 	for (int bitIndex = NumBitLevels; bitIndex != 0; )
     49 	{
     50 		bitIndex--;
     51 		int bit = (symbol >>> bitIndex) & 1;
     52 		price += Encoder.GetPrice(Models[m], bit);
     53 		m = (m << 1) + bit;
     54 	}
     55 	return price;
     56 }
     57 
     58 public int ReverseGetPrice(int symbol)
     59 {
     60 	int price = 0;
     61 	int m = 1;
     62 	for (int i = NumBitLevels; i != 0; i--)
     63 	{
     64 		int bit = symbol & 1;
     65 		symbol >>>= 1;
     66 		price += Encoder.GetPrice(Models[m], bit);
     67 		m = (m << 1) | bit;
     68 	}
     69 	return price;
     70 }
     71 
     72 public static int ReverseGetPrice(short[] Models, int startIndex,
     73 		int NumBitLevels, int symbol)
     74 {
     75 	int price = 0;
     76 	int m = 1;
     77 	for (int i = NumBitLevels; i != 0; i--)
     78 	{
     79 		int bit = symbol & 1;
     80 		symbol >>>= 1;
     81 		price += Encoder.GetPrice(Models[startIndex + m], bit);
     82 		m = (m << 1) | bit;
     83 	}
     84 	return price;
     85 }
     86 
     87 public static void ReverseEncode(short[] Models, int startIndex,
     88 		Encoder rangeEncoder, int NumBitLevels, int symbol) throws IOException
     89 {
     90 	int m = 1;
     91 	for (int i = 0; i < NumBitLevels; i++)
     92 	{
     93 		int bit = symbol & 1;
     94 		rangeEncoder.Encode(Models, startIndex + m, bit);
     95 		m = (m << 1) | bit;
     96 		symbol >>= 1;
     97 	}
     98 }
     99 }