1 package SevenZip
.Compression
.RangeCoder
;
3 public class BitTreeDecoder
8 public BitTreeDecoder(int numBitLevels
)
10 NumBitLevels
= numBitLevels
;
11 Models
= new short[1 << numBitLevels
];
16 Decoder
.InitBitModels(Models
);
19 public int Decode(Decoder rangeDecoder
) throws java
.io
.IOException
22 for (int bitIndex
= NumBitLevels
; bitIndex
!= 0; bitIndex
--)
23 m
= (m
<< 1) + rangeDecoder
.DecodeBit(Models
, m
);
24 return m
- (1 << NumBitLevels
);
27 public int ReverseDecode(Decoder rangeDecoder
) throws java
.io
.IOException
31 for (int bitIndex
= 0; bitIndex
< NumBitLevels
; bitIndex
++)
33 int bit
= rangeDecoder
.DecodeBit(Models
, m
);
36 symbol
|= (bit
<< bitIndex
);
41 public static int ReverseDecode(short[] Models
, int startIndex
,
42 Decoder rangeDecoder
, int NumBitLevels
) throws java
.io
.IOException
46 for (int bitIndex
= 0; bitIndex
< NumBitLevels
; bitIndex
++)
48 int bit
= rangeDecoder
.DecodeBit(Models
, startIndex
+ m
);
51 symbol
|= (bit
<< bitIndex
);