source: other-projects/trunk/7z-ant/src/SevenZip/Compression/RangeCoder/BitTreeEncoder.java@ 17387

Last change on this file since 17387 was 17387, checked in by oranfry, 16 years ago

Modified ant task which works with the updated 7zip API

File size: 2.1 KB
Line 
1package SevenZip.Compression.RangeCoder;
2import java.io.IOException;
3
4public 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}
Note: See TracBrowser for help on using the repository browser.