|
1 // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of "Eclipse Public License v1.0" |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // Header FAXUHUFF.H |
|
15 // |
|
16 // |
|
17 |
|
18 /** |
|
19 @file |
|
20 @internalComponent |
|
21 */ |
|
22 |
|
23 #if !defined(__FAXUHUFF_H__) |
|
24 #define __FAXUHUFF_H__ |
|
25 |
|
26 /** |
|
27 @internalComponent |
|
28 */ |
|
29 typedef TUint8 TNode[2]; |
|
30 typedef TUint TCode; |
|
31 |
|
32 // 1728 = 11011000000 |
|
33 // 1728>>6 = 11011 = 27 |
|
34 /** |
|
35 @internalComponent |
|
36 */ |
|
37 const TInt KEndCode=0x80; // 0x080 = 128 |
|
38 const TInt KMaxRun=(1728>>6)+64; // 0x05b = 91 = 27+64 |
|
39 |
|
40 /** |
|
41 @internalComponent |
|
42 */ |
|
43 enum |
|
44 { |
|
45 KOurEol=KEndCode+KMaxRun+1, // 0x0db = 219 = 128+90+1 |
|
46 KBadRun, |
|
47 KStd1D, |
|
48 KTag1D=KStd1D, |
|
49 KTag2D, |
|
50 KHorzMode, |
|
51 KPassMode, |
|
52 KVtMode3n, |
|
53 KVtMode2n, |
|
54 KVtMode1n, |
|
55 KVtMode0, |
|
56 KVtMode1p, |
|
57 KVtMode2p, |
|
58 KVtMode3p |
|
59 }; |
|
60 |
|
61 /** |
|
62 @internalComponent |
|
63 */ |
|
64 #define NODE(left,right) {(left),(right)} |
|
65 #define LEAF(val) (KEndCode|(val<64?val:0x40|(val>>6))) |
|
66 #define CODE(tree,node,bit) (tree[node][bit?1:0]) |
|
67 #define ISBRANCH(code) (!(code&KEndCode)) |
|
68 #define ISERROR(code) (code>(KEndCode|KMaxRun)) |
|
69 #define CODEVALUE(code) (code&0x40 ? (code&0x3f)<<6 : code&0x3f) |
|
70 |
|
71 /** |
|
72 @internalComponent |
|
73 */ |
|
74 const TNode KWhiteTree [] = |
|
75 { |
|
76 NODE(1, 80), // 0 |
|
77 NODE(40, 2), // 1 |
|
78 NODE(21, 3), // 2 |
|
79 NODE(4, LEAF(2)), // 3 |
|
80 NODE(16, 5), // 4 |
|
81 NODE(10, 6), // 5 |
|
82 NODE(7, LEAF(256)), // 6 |
|
83 NODE(9, 8), // 7 |
|
84 NODE(LEAF(1344), LEAF(1408)), // 8 |
|
85 NODE(LEAF(1216), LEAF(1280)), // 9 |
|
86 NODE(11, 13), // 10 |
|
87 NODE(LEAF(576), 12), // 11 |
|
88 NODE(LEAF(832), LEAF(896)), // 12 |
|
89 NODE(14, 15), // 13 |
|
90 NODE(LEAF(960), LEAF(1024)), // 14 |
|
91 NODE(LEAF(1088), LEAF(1152)), // 15 |
|
92 NODE(LEAF(1664), 17),// 16 |
|
93 NODE(18, 19), // 17 |
|
94 NODE(LEAF(448), LEAF(512)), // 18 |
|
95 NODE(20, LEAF(640)), // 19 |
|
96 NODE(LEAF(704), LEAF(768)), // 20 |
|
97 NODE(32, 22), // 21 |
|
98 NODE(23, 28), // 22 |
|
99 NODE(24, 26), // 23 |
|
100 NODE(LEAF(24), 25), // 24 |
|
101 NODE(LEAF(49), LEAF(50)), // 25 |
|
102 NODE(27, LEAF(25)), // 26 |
|
103 NODE(LEAF(51), LEAF(52)), // 27 |
|
104 NODE(29, LEAF(192)), // 28 |
|
105 NODE(30, 31), // 29 |
|
106 NODE(LEAF(55), LEAF(56)), // 30 |
|
107 NODE(LEAF(57), LEAF(58)), // 31 |
|
108 NODE(LEAF(11), 33), // 32 |
|
109 NODE(34, 36), // 33 |
|
110 NODE(LEAF(27), 35), // 34 |
|
111 NODE(LEAF(59), LEAF(60)), // 35 |
|
112 NODE(37, LEAF(18)), // 36 |
|
113 NODE(38, 39), // 37 |
|
114 NODE(LEAF(1472), LEAF(1536)), // 38 |
|
115 NODE(LEAF(1600), LEAF(1728)), // 39 |
|
116 NODE(59, 41), // 40 |
|
117 NODE(49, 42), // 41 |
|
118 NODE(43, LEAF(10)), // 42 |
|
119 NODE(47, 44), // 43 |
|
120 NODE(46, 45), // 44 |
|
121 NODE(LEAF(320), LEAF(384)), // 45 |
|
122 NODE(LEAF(63), LEAF(0)), // 46 |
|
123 NODE(LEAF(28), 48), // 47 |
|
124 NODE(LEAF(61), LEAF(62)), // 48 |
|
125 NODE(56, 50), // 49 |
|
126 NODE(53, 51), // 50 |
|
127 NODE(52, LEAF(21)), // 51 |
|
128 NODE(LEAF(43), LEAF(44)), // 52 |
|
129 NODE(55, 54), // 53 |
|
130 NODE(LEAF(41), LEAF(42)), // 54 |
|
131 NODE(LEAF(39), LEAF(40)), // 55 |
|
132 NODE(LEAF(12), 57), // 56 |
|
133 NODE(58, LEAF(26)), // 57 |
|
134 NODE(LEAF(53), LEAF(54)), // 58 |
|
135 NODE(70, 60), // 59 |
|
136 NODE(64, 61), // 60 |
|
137 NODE(62, LEAF(1)), // 61 |
|
138 NODE(LEAF(19), 63), // 62 |
|
139 NODE(LEAF(31), LEAF(32)), // 63 |
|
140 NODE(68, 65), // 64 |
|
141 NODE(67, 66), // 65 |
|
142 NODE(LEAF(37), LEAF(38)), // 66 |
|
143 NODE(LEAF(35), LEAF(36)), // 67 |
|
144 NODE(LEAF(20), 69), // 68 |
|
145 NODE(LEAF(33), LEAF(34)), // 69 |
|
146 NODE(74, 71), // 70 |
|
147 NODE(72, LEAF(13)), // 71 |
|
148 NODE(LEAF(23), 73), // 72 |
|
149 NODE(LEAF(47), LEAF(48)), // 73 |
|
150 NODE(77, 75), // 74 |
|
151 NODE(76, LEAF(22)), // 75 |
|
152 NODE(LEAF(45), LEAF(46)), // 76 |
|
153 NODE(79, 78), // 77 |
|
154 NODE(LEAF(29), LEAF(30)), // 78 |
|
155 NODE(KOurEol, KBadRun), // 79 |
|
156 NODE(86, 81), // 80 |
|
157 NODE(83, 82), // 81 |
|
158 NODE(LEAF(6), LEAF(7)), // 82 |
|
159 NODE(LEAF(5), 84), // 83 |
|
160 NODE(85, LEAF(64)), // 84 |
|
161 NODE(LEAF(14), LEAF(15)), // 85 |
|
162 NODE(90, 87), // 86 |
|
163 NODE(88, LEAF(4)), // 87 |
|
164 NODE(LEAF(9), 89), // 88 |
|
165 NODE(LEAF(16), LEAF(17)), // 89 |
|
166 NODE(LEAF(3), 91), // 90 |
|
167 NODE(LEAF(128), LEAF(8)) // 91 |
|
168 } ; |
|
169 |
|
170 /** |
|
171 @internalComponent |
|
172 */ |
|
173 const TNode KBlackTree [] = |
|
174 { |
|
175 NODE(2, 1), // 0 |
|
176 NODE(LEAF(3), LEAF(2)), // 1 |
|
177 NODE(4, 3), // 2 |
|
178 NODE(LEAF(1), LEAF(4)), // 3 |
|
179 NODE(6, 5), // 4 |
|
180 NODE(LEAF(6), LEAF(5)), // 5 |
|
181 NODE(9, 7), // 6 |
|
182 NODE(8, LEAF(7)), // 7 |
|
183 NODE(LEAF(9), LEAF(8)), // 8 |
|
184 NODE(31, 10), // 9 |
|
185 NODE(30, 11), // 10 |
|
186 NODE(12, LEAF(12)), // 11 |
|
187 NODE(23, 13), // 12 |
|
188 NODE(17, 14), // 13 |
|
189 NODE(15, LEAF(0)), // 14 |
|
190 NODE(LEAF(21), 16), // 15 |
|
191 NODE(LEAF(42), LEAF(43)), // 16 |
|
192 NODE(21, 18), // 17 |
|
193 NODE(20, 19), // 18 |
|
194 NODE(LEAF(38), LEAF(39)), // 19 |
|
195 NODE(LEAF(36), LEAF(37)), // 20 |
|
196 NODE(LEAF(20), 22), // 21 |
|
197 NODE(LEAF(34), LEAF(35)), // 22 |
|
198 NODE(LEAF(15), 24), // 23 |
|
199 NODE(27, 25), // 24 |
|
200 NODE(26, LEAF(19)), // 25 |
|
201 NODE(LEAF(28), LEAF(29)), // 26 |
|
202 NODE(29, 28), // 27 |
|
203 NODE(LEAF(26), LEAF(27)), // 28 |
|
204 NODE(LEAF(128), LEAF(192)), // 29 |
|
205 NODE(LEAF(10), LEAF(11)), // 30 |
|
206 NODE(57, 32), // 31 |
|
207 NODE(45, 33), // 32 |
|
208 NODE(34, LEAF(14)), // 33 |
|
209 NODE(41, 35), // 34 |
|
210 NODE(38, 36), // 35 |
|
211 NODE(37, LEAF(22)), // 36 |
|
212 NODE(LEAF(40), LEAF(41)), // 37 |
|
213 NODE(40, 39), // 38 |
|
214 NODE(LEAF(32), LEAF(33)), // 39 |
|
215 NODE(LEAF(30), LEAF(31)), // 40 |
|
216 NODE(LEAF(17), 42), // 41 |
|
217 NODE(44, 43), // 42 |
|
218 NODE(LEAF(62), LEAF(63)), // 43 |
|
219 NODE(LEAF(48), LEAF(49)), // 44 |
|
220 NODE(LEAF(13), 46), // 45 |
|
221 NODE(51, 47), // 46 |
|
222 NODE(48, LEAF(16)), // 47 |
|
223 NODE(50, 49), // 48 |
|
224 NODE(LEAF(61), LEAF(256)),// 49 |
|
225 NODE(LEAF(57), LEAF(58)), // 50 |
|
226 NODE(55, 52), // 51 |
|
227 NODE(54, 53), // 52 |
|
228 NODE(LEAF(46), LEAF(47)), // 53 |
|
229 NODE(LEAF(44), LEAF(45)), // 54 |
|
230 NODE(LEAF(23), 56), // 55 |
|
231 NODE(LEAF(50), LEAF(51)), // 56 |
|
232 NODE(KOurEol, 58), // 57 |
|
233 NODE(75, 59), // 58 |
|
234 NODE(67, 60), // 59 |
|
235 NODE(61, LEAF(64)), // 60 |
|
236 NODE(65, 62), // 61 |
|
237 NODE(64, 63), // 62 |
|
238 NODE(LEAF(1152), LEAF(1216)), // 63 |
|
239 NODE(LEAF(1024), LEAF(1088)), // 64 |
|
240 NODE(LEAF(54), 66), // 65 |
|
241 NODE(LEAF(896), LEAF(960)), // 66 |
|
242 NODE(72, 68), // 67 |
|
243 NODE(71, 69), // 68 |
|
244 NODE(70, LEAF(53)), // 69 |
|
245 NODE(LEAF(512), LEAF(576)), // 70 |
|
246 NODE(LEAF(384), LEAF(448)), // 71 |
|
247 NODE(LEAF(25), 73), // 72 |
|
248 NODE(74, LEAF(320)), // 73 |
|
249 NODE(LEAF(1664), LEAF(1728)), // 74 |
|
250 NODE(85, 76), // 75 |
|
251 NODE(80, 77), // 76 |
|
252 NODE(78, LEAF(24)), // 77 |
|
253 NODE(LEAF(60), 79), // 78 |
|
254 NODE(LEAF(1536), LEAF(1600)), // 79 |
|
255 NODE(83, 81), // 80 |
|
256 NODE(82, LEAF(59)), // 81 |
|
257 NODE(LEAF(1408), LEAF(1472)), // 82 |
|
258 NODE(LEAF(56), 84), // 83 |
|
259 NODE(LEAF(1280), LEAF(1344)), // 84 |
|
260 NODE(LEAF(18), 86), // 85 |
|
261 NODE(89, 87), // 86 |
|
262 NODE(88, LEAF(55)), // 87 |
|
263 NODE(LEAF(768), LEAF(832)), // 88 |
|
264 NODE(LEAF(52), 90), // 89 |
|
265 NODE(LEAF(640), LEAF(704))// 90 |
|
266 }; |
|
267 |
|
268 /** |
|
269 @internalComponent |
|
270 */ |
|
271 const TNode KTwoTree [] = |
|
272 { |
|
273 NODE(1, KVtMode0), // 0 |
|
274 NODE(2, 3), // 1 |
|
275 NODE(4, KHorzMode), // 2 |
|
276 NODE(KVtMode1n, KVtMode1p),// 3 |
|
277 NODE(5, KPassMode), // 4 |
|
278 NODE(6, 7), // 5 |
|
279 NODE(8, 9), // 6 |
|
280 NODE(KVtMode2n, KVtMode2p),// 7 |
|
281 NODE(KOurEol, KBadRun), // 8 |
|
282 NODE(KVtMode3n, KVtMode3p) // 9 |
|
283 }; |
|
284 |
|
285 /** |
|
286 @internalComponent |
|
287 */ |
|
288 const TNode KSynchTree[]= |
|
289 { |
|
290 NODE(0,KStd1D) // any number of 0's followed by a 1 |
|
291 }; |
|
292 |
|
293 /** |
|
294 @internalComponent |
|
295 */ |
|
296 const TNode KTagTree[]= |
|
297 { |
|
298 NODE(0,1), |
|
299 NODE(KTag2D,KTag1D) |
|
300 }; |
|
301 |
|
302 #endif // __FAXUHUFF_H__ |