Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(23)

Side by Side Diff: third_party/lzma/v4_65/files/CS/7zip/Compress/RangeCoder/RangeCoderBitTree.cs

Issue 624713003: Keep only base/extractor.[cc|h]. (Closed) Base URL: https://chromium.googlesource.com/external/omaha.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 using System;
2
3 namespace SevenZip.Compression.RangeCoder
4 {
5 struct BitTreeEncoder
6 {
7 BitEncoder[] Models;
8 int NumBitLevels;
9
10 public BitTreeEncoder(int numBitLevels)
11 {
12 NumBitLevels = numBitLevels;
13 Models = new BitEncoder[1 << numBitLevels];
14 }
15
16 public void Init()
17 {
18 for (uint i = 1; i < (1 << NumBitLevels); i++)
19 Models[i].Init();
20 }
21
22 public void Encode(Encoder rangeEncoder, UInt32 symbol)
23 {
24 UInt32 m = 1;
25 for (int bitIndex = NumBitLevels; bitIndex > 0; )
26 {
27 bitIndex--;
28 UInt32 bit = (symbol >> bitIndex) & 1;
29 Models[m].Encode(rangeEncoder, bit);
30 m = (m << 1) | bit;
31 }
32 }
33
34 public void ReverseEncode(Encoder rangeEncoder, UInt32 symbol)
35 {
36 UInt32 m = 1;
37 for (UInt32 i = 0; i < NumBitLevels; i++)
38 {
39 UInt32 bit = symbol & 1;
40 Models[m].Encode(rangeEncoder, bit);
41 m = (m << 1) | bit;
42 symbol >>= 1;
43 }
44 }
45
46 public UInt32 GetPrice(UInt32 symbol)
47 {
48 UInt32 price = 0;
49 UInt32 m = 1;
50 for (int bitIndex = NumBitLevels; bitIndex > 0; )
51 {
52 bitIndex--;
53 UInt32 bit = (symbol >> bitIndex) & 1;
54 price += Models[m].GetPrice(bit);
55 m = (m << 1) + bit;
56 }
57 return price;
58 }
59
60 public UInt32 ReverseGetPrice(UInt32 symbol)
61 {
62 UInt32 price = 0;
63 UInt32 m = 1;
64 for (int i = NumBitLevels; i > 0; i--)
65 {
66 UInt32 bit = symbol & 1;
67 symbol >>= 1;
68 price += Models[m].GetPrice(bit);
69 m = (m << 1) | bit;
70 }
71 return price;
72 }
73
74 public static UInt32 ReverseGetPrice(BitEncoder[] Models, UInt32 startIndex,
75 int NumBitLevels, UInt32 symbol)
76 {
77 UInt32 price = 0;
78 UInt32 m = 1;
79 for (int i = NumBitLevels; i > 0; i--)
80 {
81 UInt32 bit = symbol & 1;
82 symbol >>= 1;
83 price += Models[startIndex + m].GetPrice(bit);
84 m = (m << 1) | bit;
85 }
86 return price;
87 }
88
89 public static void ReverseEncode(BitEncoder[] Models, UInt32 sta rtIndex,
90 Encoder rangeEncoder, int NumBitLevels, UInt32 symbol)
91 {
92 UInt32 m = 1;
93 for (int i = 0; i < NumBitLevels; i++)
94 {
95 UInt32 bit = symbol & 1;
96 Models[startIndex + m].Encode(rangeEncoder, bit) ;
97 m = (m << 1) | bit;
98 symbol >>= 1;
99 }
100 }
101 }
102
103 struct BitTreeDecoder
104 {
105 BitDecoder[] Models;
106 int NumBitLevels;
107
108 public BitTreeDecoder(int numBitLevels)
109 {
110 NumBitLevels = numBitLevels;
111 Models = new BitDecoder[1 << numBitLevels];
112 }
113
114 public void Init()
115 {
116 for (uint i = 1; i < (1 << NumBitLevels); i++)
117 Models[i].Init();
118 }
119
120 public uint Decode(RangeCoder.Decoder rangeDecoder)
121 {
122 uint m = 1;
123 for (int bitIndex = NumBitLevels; bitIndex > 0; bitIndex --)
124 m = (m << 1) + Models[m].Decode(rangeDecoder);
125 return m - ((uint)1 << NumBitLevels);
126 }
127
128 public uint ReverseDecode(RangeCoder.Decoder rangeDecoder)
129 {
130 uint m = 1;
131 uint symbol = 0;
132 for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex ++)
133 {
134 uint bit = Models[m].Decode(rangeDecoder);
135 m <<= 1;
136 m += bit;
137 symbol |= (bit << bitIndex);
138 }
139 return symbol;
140 }
141
142 public static uint ReverseDecode(BitDecoder[] Models, UInt32 sta rtIndex,
143 RangeCoder.Decoder rangeDecoder, int NumBitLevels)
144 {
145 uint m = 1;
146 uint symbol = 0;
147 for (int bitIndex = 0; bitIndex < NumBitLevels; bitIndex ++)
148 {
149 uint bit = Models[startIndex + m].Decode(rangeDe coder);
150 m <<= 1;
151 m += bit;
152 symbol |= (bit << bitIndex);
153 }
154 return symbol;
155 }
156 }
157 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698