summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java')
-rw-r--r--3rdparty/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/3rdparty/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java b/3rdparty/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java
new file mode 100644
index 00000000000..76985814519
--- /dev/null
+++ b/3rdparty/lzma/Java/SevenZip/Compression/RangeCoder/BitTreeDecoder.java
@@ -0,0 +1,55 @@
+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;
+ }
+}