equal
deleted
inserted
replaced
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 } |
|