Source code
Revision control
Copy as Markdown
Other Tools
package SevenZip.Compression.RangeCoder;↩
import java.io.IOException;↩
↩
public class BitTreeEncoder↩
{↩
short[] Models;↩
int NumBitLevels;↩
↩
public BitTreeEncoder(int numBitLevels)↩
{↩
NumBitLevels = numBitLevels;↩
Models = new short[1 << numBitLevels];↩
}↩
↩
public void Init()↩
{↩
Decoder.InitBitModels(Models);↩
}↩
↩
public void Encode(Encoder rangeEncoder, int symbol) throws IOException↩
{↩
int m = 1;↩
for (int bitIndex = NumBitLevels; bitIndex != 0; )↩
{↩
bitIndex--;↩
int bit = (symbol >>> bitIndex) & 1;↩
rangeEncoder.Encode(Models, m, bit);↩
m = (m << 1) | bit;↩
}↩
}↩
↩
public void ReverseEncode(Encoder rangeEncoder, int symbol) throws IOException↩
{↩
int m = 1;↩
for (int i = 0; i < NumBitLevels; i++)↩
{↩
int bit = symbol & 1;↩
rangeEncoder.Encode(Models, m, bit);↩
m = (m << 1) | bit;↩
symbol >>= 1;↩
}↩
}↩
↩
public int GetPrice(int symbol)↩
{↩
int price = 0;↩
int m = 1;↩
for (int bitIndex = NumBitLevels; bitIndex != 0; )↩
{↩
bitIndex--;↩
int bit = (symbol >>> bitIndex) & 1;↩
price += Encoder.GetPrice(Models[m], bit);↩
m = (m << 1) + bit;↩
}↩
return price;↩
}↩
↩
public int ReverseGetPrice(int symbol)↩
{↩
int price = 0;↩
int m = 1;↩
for (int i = NumBitLevels; i != 0; i--)↩
{↩
int bit = symbol & 1;↩
symbol >>>= 1;↩
price += Encoder.GetPrice(Models[m], bit);↩
m = (m << 1) | bit;↩
}↩
return price;↩
}↩
↩
public static int ReverseGetPrice(short[] Models, int startIndex,↩
int NumBitLevels, int symbol)↩
{↩
int price = 0;↩
int m = 1;↩
for (int i = NumBitLevels; i != 0; i--)↩
{↩
int bit = symbol & 1;↩
symbol >>>= 1;↩
price += Encoder.GetPrice(Models[startIndex + m], bit);↩
m = (m << 1) | bit;↩
}↩
return price;↩
}↩
↩
public static void ReverseEncode(short[] Models, int startIndex,↩
Encoder rangeEncoder, int NumBitLevels, int symbol) throws IOException↩
{↩
int m = 1;↩
for (int i = 0; i < NumBitLevels; i++)↩
{↩
int bit = symbol & 1;↩
rangeEncoder.Encode(Models, startIndex + m, bit);↩
m = (m << 1) | bit;↩
symbol >>= 1;↩
}↩
}↩
}↩