/src/lzo-2.10/src/lzo_swd.ch
Line | Count | Source |
1 | | /* lzo_swd.ch -- sliding window dictionary |
2 | | |
3 | | This file is part of the LZO real-time data compression library. |
4 | | |
5 | | Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer |
6 | | All Rights Reserved. |
7 | | |
8 | | The LZO library is free software; you can redistribute it and/or |
9 | | modify it under the terms of the GNU General Public License as |
10 | | published by the Free Software Foundation; either version 2 of |
11 | | the License, or (at your option) any later version. |
12 | | |
13 | | The LZO library is distributed in the hope that it will be useful, |
14 | | but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | | GNU General Public License for more details. |
17 | | |
18 | | You should have received a copy of the GNU General Public License |
19 | | along with the LZO library; see the file COPYING. |
20 | | If not, write to the Free Software Foundation, Inc., |
21 | | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
22 | | |
23 | | Markus F.X.J. Oberhumer |
24 | | <markus@oberhumer.com> |
25 | | http://www.oberhumer.com/opensource/lzo/ |
26 | | */ |
27 | | |
28 | | |
29 | | #if (LZO_UINT_MAX < LZO_0xffffffffL) |
30 | | # error "LZO_UINT_MAX" |
31 | | #endif |
32 | | #if defined(LZO_DEBUG) |
33 | | # include <stdio.h> |
34 | | #endif |
35 | | #if defined(__LZO_CHECKER) |
36 | | # include <stdlib.h> |
37 | | #endif |
38 | | |
39 | | |
40 | | /*********************************************************************** |
41 | | // |
42 | | ************************************************************************/ |
43 | | |
44 | | /* unsigned type for dictionary access - don't waste memory here */ |
45 | | #if (0UL + SWD_N + SWD_F + SWD_F < 65535UL) |
46 | | typedef lzo_uint16_t swd_uint; |
47 | 143M | # define SWD_UINT_MAX 0xffffu |
48 | | #else |
49 | | typedef lzo_uint32_t swd_uint; |
50 | 1.05M | # define SWD_UINT_MAX 0xffffffffu |
51 | | #endif |
52 | 49.2M | #define swd_uintp swd_uint * |
53 | 383M | #define SWD_UINT(x) ((swd_uint)(x)) |
54 | | |
55 | | |
56 | | #ifndef SWD_HSIZE |
57 | 237M | # define SWD_HSIZE 16384 |
58 | | #endif |
59 | | #ifndef SWD_MAX_CHAIN |
60 | 6.42k | # define SWD_MAX_CHAIN 2048 |
61 | | #endif |
62 | | |
63 | | #if !defined(HEAD3) |
64 | | #if 1 |
65 | | # define HEAD3(b,p) \ |
66 | 237M | ((DMUL(0x9f5f,(((((lzo_xint)b[p]<<5)^b[p+1])<<5)^b[p+2]))>>5) & (SWD_HSIZE-1)) |
67 | | #else |
68 | | # define HEAD3(b,p) \ |
69 | | ((DMUL(0x9f5f,(((((lzo_xint)b[p+2]<<5)^b[p+1])<<5)^b[p]))>>5) & (SWD_HSIZE-1)) |
70 | | #endif |
71 | | #endif |
72 | | |
73 | | #if !(SWD_NO_HEAD2) && (SWD_THRESHOLD == 1) && !defined(HEAD2) |
74 | | # if 1 && (LZO_OPT_UNALIGNED16) |
75 | 205M | # define HEAD2(b,p) UA_GET_NE16((b)+(p)) |
76 | | # else |
77 | | # define HEAD2(b,p) (b[p] ^ ((unsigned)b[(p)+1]<<8)) |
78 | | # endif |
79 | 62.6M | # define NIL2 SWD_UINT_MAX |
80 | | #endif |
81 | | #ifndef IF_HEAD2 |
82 | | #define IF_HEAD2(s) /*empty*/ |
83 | | #endif |
84 | | |
85 | | |
86 | | typedef struct |
87 | | { |
88 | | /* public - "built-in" */ |
89 | | lzo_uint swd_n; |
90 | | lzo_uint swd_f; |
91 | | lzo_uint swd_threshold; |
92 | | |
93 | | /* public - configuration */ |
94 | | lzo_uint max_chain; |
95 | | lzo_uint nice_length; |
96 | | lzo_bool use_best_off; |
97 | | lzo_uint lazy_insert; |
98 | | |
99 | | /* public - output */ |
100 | | lzo_uint m_len; |
101 | | lzo_uint m_off; |
102 | | lzo_uint look; |
103 | | int b_char; |
104 | | #if defined(SWD_BEST_OFF) |
105 | | lzo_uint best_off[ SWD_BEST_OFF ]; |
106 | | #endif |
107 | | |
108 | | /* semi public */ |
109 | | LZO_COMPRESS_T *c; |
110 | | lzo_uint m_pos; |
111 | | #if defined(SWD_BEST_OFF) |
112 | | lzo_uint best_pos[ SWD_BEST_OFF ]; |
113 | | #endif |
114 | | |
115 | | /* private */ |
116 | | const lzo_bytep dict; |
117 | | const lzo_bytep dict_end; |
118 | | lzo_uint dict_len; |
119 | | |
120 | | /* private */ |
121 | | lzo_uint ip; /* input pointer (lookahead) */ |
122 | | lzo_uint bp; /* buffer pointer */ |
123 | | lzo_uint rp; /* remove pointer */ |
124 | | lzo_uint b_size; |
125 | | |
126 | | lzo_bytep b_wrap; |
127 | | |
128 | | lzo_uint node_count; |
129 | | lzo_uint first_rp; |
130 | | |
131 | | #if defined(__LZO_CHECKER) |
132 | | /* malloc arrays of the exact size to detect any overrun */ |
133 | | unsigned char *b; |
134 | | swd_uint *head3; |
135 | | swd_uint *succ3; |
136 | | swd_uint *best3; |
137 | | swd_uint *llen3; |
138 | | # ifdef HEAD2 |
139 | | swd_uint *head2; |
140 | | # endif |
141 | | |
142 | | #else |
143 | | unsigned char b [ SWD_N + SWD_F + SWD_F ]; |
144 | | swd_uint head3 [ SWD_HSIZE ]; |
145 | | swd_uint succ3 [ SWD_N + SWD_F ]; |
146 | | swd_uint best3 [ SWD_N + SWD_F ]; |
147 | | swd_uint llen3 [ SWD_HSIZE ]; |
148 | | # ifdef HEAD2 |
149 | | swd_uint head2 [ 65536L ]; |
150 | | # endif |
151 | | #endif |
152 | | } |
153 | | lzo_swd_t; |
154 | 6.42k | #define lzo_swd_p lzo_swd_t * |
155 | | |
156 | | |
157 | 363M | #define s_b(s) s->b |
158 | 264M | #define s_head3(s) s->head3 |
159 | 192M | #define s_succ3(s) s->succ3 |
160 | 157M | #define s_best3(s) s->best3 |
161 | 379M | #define s_llen3(s) s->llen3 |
162 | | #ifdef HEAD2 |
163 | 220M | #define s_head2(s) s->head2 |
164 | | #endif |
165 | | #define SIZEOF_LZO_SWD_T (sizeof(lzo_swd_t)) |
166 | | |
167 | | |
168 | | /* Access macro for head3. |
169 | | * head3[key] may be uninitialized if the list is emtpy, |
170 | | * but then its value will never be used. |
171 | | */ |
172 | | #if 1 || defined(__LZO_CHECKER) |
173 | | # define s_get_head3(s,key) \ |
174 | 142M | ((swd_uint)((s_llen3(s)[key] == 0) ? SWD_UINT_MAX : s_head3(s)[key])) |
175 | | #else |
176 | | # define s_get_head3(s,key) (s_head3(s)[key]) |
177 | | #endif |
178 | | |
179 | | |
180 | | /*********************************************************************** |
181 | | // |
182 | | ************************************************************************/ |
183 | | |
184 | | static |
185 | | void swd_initdict(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len) |
186 | 6.42k | { |
187 | 6.42k | s->dict = s->dict_end = NULL; |
188 | 6.42k | s->dict_len = 0; |
189 | | |
190 | 6.42k | if (!dict || dict_len == 0) |
191 | 6.42k | return; |
192 | 0 | if (dict_len > s->swd_n) |
193 | 0 | { |
194 | 0 | dict += dict_len - s->swd_n; |
195 | 0 | dict_len = s->swd_n; |
196 | 0 | } |
197 | |
|
198 | 0 | s->dict = dict; |
199 | 0 | s->dict_len = dict_len; |
200 | 0 | s->dict_end = dict + dict_len; |
201 | 0 | lzo_memcpy(s_b(s),dict,dict_len); |
202 | 0 | s->ip = dict_len; |
203 | 0 | } Line | Count | Source | 186 | 569 | { | 187 | 569 | s->dict = s->dict_end = NULL; | 188 | 569 | s->dict_len = 0; | 189 | | | 190 | 569 | if (!dict || dict_len == 0) | 191 | 569 | return; | 192 | 0 | if (dict_len > s->swd_n) | 193 | 0 | { | 194 | 0 | dict += dict_len - s->swd_n; | 195 | 0 | dict_len = s->swd_n; | 196 | 0 | } | 197 | |
| 198 | 0 | s->dict = dict; | 199 | 0 | s->dict_len = dict_len; | 200 | 0 | s->dict_end = dict + dict_len; | 201 | 0 | lzo_memcpy(s_b(s),dict,dict_len); | 202 | 0 | s->ip = dict_len; | 203 | 0 | } |
Line | Count | Source | 186 | 637 | { | 187 | 637 | s->dict = s->dict_end = NULL; | 188 | 637 | s->dict_len = 0; | 189 | | | 190 | 637 | if (!dict || dict_len == 0) | 191 | 637 | return; | 192 | 0 | if (dict_len > s->swd_n) | 193 | 0 | { | 194 | 0 | dict += dict_len - s->swd_n; | 195 | 0 | dict_len = s->swd_n; | 196 | 0 | } | 197 | |
| 198 | 0 | s->dict = dict; | 199 | 0 | s->dict_len = dict_len; | 200 | 0 | s->dict_end = dict + dict_len; | 201 | 0 | lzo_memcpy(s_b(s),dict,dict_len); | 202 | 0 | s->ip = dict_len; | 203 | 0 | } |
Line | Count | Source | 186 | 677 | { | 187 | 677 | s->dict = s->dict_end = NULL; | 188 | 677 | s->dict_len = 0; | 189 | | | 190 | 677 | if (!dict || dict_len == 0) | 191 | 677 | return; | 192 | 0 | if (dict_len > s->swd_n) | 193 | 0 | { | 194 | 0 | dict += dict_len - s->swd_n; | 195 | 0 | dict_len = s->swd_n; | 196 | 0 | } | 197 | |
| 198 | 0 | s->dict = dict; | 199 | 0 | s->dict_len = dict_len; | 200 | 0 | s->dict_end = dict + dict_len; | 201 | 0 | lzo_memcpy(s_b(s),dict,dict_len); | 202 | 0 | s->ip = dict_len; | 203 | 0 | } |
Line | Count | Source | 186 | 1.19k | { | 187 | 1.19k | s->dict = s->dict_end = NULL; | 188 | 1.19k | s->dict_len = 0; | 189 | | | 190 | 1.19k | if (!dict || dict_len == 0) | 191 | 1.19k | return; | 192 | 0 | if (dict_len > s->swd_n) | 193 | 0 | { | 194 | 0 | dict += dict_len - s->swd_n; | 195 | 0 | dict_len = s->swd_n; | 196 | 0 | } | 197 | |
| 198 | 0 | s->dict = dict; | 199 | 0 | s->dict_len = dict_len; | 200 | 0 | s->dict_end = dict + dict_len; | 201 | 0 | lzo_memcpy(s_b(s),dict,dict_len); | 202 | 0 | s->ip = dict_len; | 203 | 0 | } |
Line | Count | Source | 186 | 1.22k | { | 187 | 1.22k | s->dict = s->dict_end = NULL; | 188 | 1.22k | s->dict_len = 0; | 189 | | | 190 | 1.22k | if (!dict || dict_len == 0) | 191 | 1.22k | return; | 192 | 0 | if (dict_len > s->swd_n) | 193 | 0 | { | 194 | 0 | dict += dict_len - s->swd_n; | 195 | 0 | dict_len = s->swd_n; | 196 | 0 | } | 197 | |
| 198 | 0 | s->dict = dict; | 199 | 0 | s->dict_len = dict_len; | 200 | 0 | s->dict_end = dict + dict_len; | 201 | 0 | lzo_memcpy(s_b(s),dict,dict_len); | 202 | 0 | s->ip = dict_len; | 203 | 0 | } |
Line | Count | Source | 186 | 1.47k | { | 187 | 1.47k | s->dict = s->dict_end = NULL; | 188 | 1.47k | s->dict_len = 0; | 189 | | | 190 | 1.47k | if (!dict || dict_len == 0) | 191 | 1.47k | return; | 192 | 0 | if (dict_len > s->swd_n) | 193 | 0 | { | 194 | 0 | dict += dict_len - s->swd_n; | 195 | 0 | dict_len = s->swd_n; | 196 | 0 | } | 197 | |
| 198 | 0 | s->dict = dict; | 199 | 0 | s->dict_len = dict_len; | 200 | 0 | s->dict_end = dict + dict_len; | 201 | 0 | lzo_memcpy(s_b(s),dict,dict_len); | 202 | 0 | s->ip = dict_len; | 203 | 0 | } |
Line | Count | Source | 186 | 647 | { | 187 | 647 | s->dict = s->dict_end = NULL; | 188 | 647 | s->dict_len = 0; | 189 | | | 190 | 647 | if (!dict || dict_len == 0) | 191 | 647 | return; | 192 | 0 | if (dict_len > s->swd_n) | 193 | 0 | { | 194 | 0 | dict += dict_len - s->swd_n; | 195 | 0 | dict_len = s->swd_n; | 196 | 0 | } | 197 | |
| 198 | 0 | s->dict = dict; | 199 | 0 | s->dict_len = dict_len; | 200 | 0 | s->dict_end = dict + dict_len; | 201 | 0 | lzo_memcpy(s_b(s),dict,dict_len); | 202 | 0 | s->ip = dict_len; | 203 | 0 | } |
|
204 | | |
205 | | |
206 | | static |
207 | | void swd_insertdict(lzo_swd_p s, lzo_uint node, lzo_uint len) |
208 | 0 | { |
209 | 0 | lzo_uint key; |
210 | |
|
211 | 0 | s->node_count = s->swd_n - len; |
212 | 0 | s->first_rp = node; |
213 | |
|
214 | 0 | if (len) do |
215 | 0 | { |
216 | 0 | key = HEAD3(s_b(s),node); |
217 | 0 | s_succ3(s)[node] = s_get_head3(s,key); |
218 | 0 | s_head3(s)[key] = SWD_UINT(node); |
219 | 0 | s_best3(s)[node] = SWD_UINT(s->swd_f + 1); |
220 | 0 | s_llen3(s)[key]++; |
221 | 0 | assert(s_llen3(s)[key] <= s->swd_n); |
222 | |
|
223 | | #ifdef HEAD2 |
224 | | IF_HEAD2(s) { |
225 | 0 | key = HEAD2(s_b(s),node); |
226 | 0 | s_head2(s)[key] = SWD_UINT(node); |
227 | | } |
228 | | #endif |
229 | |
|
230 | 0 | node++; |
231 | 0 | } |
232 | 0 | while (--len != 0); |
233 | 0 | } Unexecuted instantiation: lzo1b_9x.c:swd_insertdict Unexecuted instantiation: lzo1c_9x.c:swd_insertdict Unexecuted instantiation: lzo1f_9x.c:swd_insertdict Unexecuted instantiation: lzo1x_9x.c:swd_insertdict Unexecuted instantiation: lzo1y_9x.c:swd_insertdict Unexecuted instantiation: lzo1z_9x.c:swd_insertdict Unexecuted instantiation: lzo2a_9x.c:swd_insertdict |
234 | | |
235 | | |
236 | | /*********************************************************************** |
237 | | // |
238 | | ************************************************************************/ |
239 | | |
240 | | static void swd_exit(lzo_swd_p s); |
241 | | |
242 | | static |
243 | | int swd_init(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len) |
244 | 6.42k | { |
245 | | #if defined(__LZO_CHECKER) |
246 | | unsigned r = 1; |
247 | | s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); |
248 | | s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); |
249 | | s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); |
250 | | s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); |
251 | | s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); |
252 | | r &= s->b != NULL; |
253 | | r &= s->head3 != NULL; |
254 | | r &= s->succ3 != NULL; |
255 | | r &= s->best3 != NULL; |
256 | | r &= s->llen3 != NULL; |
257 | | #ifdef HEAD2 |
258 | | IF_HEAD2(s) { |
259 | | s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); |
260 | | r &= s->head2 != NULL; |
261 | | } |
262 | | #endif |
263 | | if (r != 1) { |
264 | | swd_exit(s); |
265 | | return LZO_E_OUT_OF_MEMORY; |
266 | | } |
267 | | #endif |
268 | | |
269 | 6.42k | s->m_len = 0; |
270 | 6.42k | s->m_off = 0; |
271 | | #if defined(SWD_BEST_OFF) |
272 | | { |
273 | | unsigned i; |
274 | 136k | for (i = 0; i < SWD_BEST_OFF; i++) |
275 | 132k | s->best_off[i] = s->best_pos[i] = 0; |
276 | | } |
277 | | #endif |
278 | | |
279 | 6.42k | s->swd_n = SWD_N; |
280 | 6.42k | s->swd_f = SWD_F; |
281 | 6.42k | s->swd_threshold = SWD_THRESHOLD; |
282 | | |
283 | | /* defaults */ |
284 | 6.42k | s->max_chain = SWD_MAX_CHAIN; |
285 | 6.42k | s->nice_length = s->swd_f; |
286 | 6.42k | s->use_best_off = 0; |
287 | 6.42k | s->lazy_insert = 0; |
288 | | |
289 | 6.42k | s->b_size = s->swd_n + s->swd_f; |
290 | | #if 0 |
291 | | if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) |
292 | | return LZO_E_ERROR; |
293 | | #else |
294 | 6.42k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) |
295 | 6.42k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) |
296 | 6.42k | #endif |
297 | 6.42k | s->b_wrap = s_b(s) + s->b_size; |
298 | 6.42k | s->node_count = s->swd_n; |
299 | | |
300 | 6.42k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); |
301 | | #ifdef HEAD2 |
302 | | IF_HEAD2(s) { |
303 | | #if 1 |
304 | 4.54k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); |
305 | | assert(s_head2(s)[0] == NIL2); |
306 | | #else |
307 | | lzo_xint i; |
308 | | for (i = 0; i < 65536L; i++) |
309 | | s_head2(s)[i] = NIL2; |
310 | | #endif |
311 | | } |
312 | | #endif |
313 | | |
314 | 6.42k | s->ip = 0; |
315 | 6.42k | swd_initdict(s,dict,dict_len); |
316 | 6.42k | s->bp = s->ip; |
317 | 6.42k | s->first_rp = s->ip; |
318 | | |
319 | 6.42k | assert(s->ip + s->swd_f <= s->b_size); |
320 | 6.42k | #if 1 |
321 | 6.42k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); |
322 | 6.42k | if (s->look > 0) |
323 | 6.42k | { |
324 | 6.42k | if (s->look > s->swd_f) |
325 | 2.42k | s->look = s->swd_f; |
326 | 6.42k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); |
327 | 6.42k | s->c->ip += s->look; |
328 | 6.42k | s->ip += s->look; |
329 | 6.42k | } |
330 | | #else |
331 | | s->look = 0; |
332 | | while (s->look < s->swd_f) |
333 | | { |
334 | | int c; |
335 | | if ((c = getbyte(*(s->c))) < 0) |
336 | | break; |
337 | | s_b(s)[s->ip] = LZO_BYTE(c); |
338 | | s->ip++; |
339 | | s->look++; |
340 | | } |
341 | | #endif |
342 | 6.42k | if (s->ip == s->b_size) |
343 | 0 | s->ip = 0; |
344 | | |
345 | 6.42k | if (s->look >= 2 && s->dict_len > 0) |
346 | 0 | swd_insertdict(s,0,s->dict_len); |
347 | | |
348 | 6.42k | s->rp = s->first_rp; |
349 | 6.42k | if (s->rp >= s->node_count) |
350 | 0 | s->rp -= s->node_count; |
351 | 6.42k | else |
352 | 6.42k | s->rp += s->b_size - s->node_count; |
353 | | |
354 | 6.42k | #if 1 || defined(__LZO_CHECKER) |
355 | | /* initialize memory for the first few HEAD3 (if s->ip is not far |
356 | | * enough ahead to do this job for us). The value doesn't matter. */ |
357 | 6.42k | if (s->look < 3) { |
358 | 75 | lzo_bytep p = &s_b(s)[s->bp+s->look]; |
359 | 75 | p[0] = p[1] = p[2] = 0; |
360 | 75 | } |
361 | 6.42k | #endif |
362 | | |
363 | 6.42k | return LZO_E_OK; |
364 | 6.42k | } Line | Count | Source | 244 | 569 | { | 245 | | #if defined(__LZO_CHECKER) | 246 | | unsigned r = 1; | 247 | | s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); | 248 | | s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 249 | | s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 250 | | s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 251 | | s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 252 | | r &= s->b != NULL; | 253 | | r &= s->head3 != NULL; | 254 | | r &= s->succ3 != NULL; | 255 | | r &= s->best3 != NULL; | 256 | | r &= s->llen3 != NULL; | 257 | | #ifdef HEAD2 | 258 | | IF_HEAD2(s) { | 259 | | s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); | 260 | | r &= s->head2 != NULL; | 261 | | } | 262 | | #endif | 263 | | if (r != 1) { | 264 | | swd_exit(s); | 265 | | return LZO_E_OUT_OF_MEMORY; | 266 | | } | 267 | | #endif | 268 | | | 269 | 569 | s->m_len = 0; | 270 | 569 | s->m_off = 0; | 271 | | #if defined(SWD_BEST_OFF) | 272 | | { | 273 | | unsigned i; | 274 | | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | | s->best_off[i] = s->best_pos[i] = 0; | 276 | | } | 277 | | #endif | 278 | | | 279 | 569 | s->swd_n = SWD_N; | 280 | 569 | s->swd_f = SWD_F; | 281 | 569 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 569 | s->max_chain = SWD_MAX_CHAIN; | 285 | 569 | s->nice_length = s->swd_f; | 286 | 569 | s->use_best_off = 0; | 287 | 569 | s->lazy_insert = 0; | 288 | | | 289 | 569 | s->b_size = s->swd_n + s->swd_f; | 290 | | #if 0 | 291 | | if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) | 292 | | return LZO_E_ERROR; | 293 | | #else | 294 | 569 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 569 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 569 | #endif | 297 | 569 | s->b_wrap = s_b(s) + s->b_size; | 298 | 569 | s->node_count = s->swd_n; | 299 | | | 300 | 569 | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | | #ifdef HEAD2 | 302 | | IF_HEAD2(s) { | 303 | | #if 1 | 304 | | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | | assert(s_head2(s)[0] == NIL2); | 306 | | #else | 307 | | lzo_xint i; | 308 | | for (i = 0; i < 65536L; i++) | 309 | | s_head2(s)[i] = NIL2; | 310 | | #endif | 311 | | } | 312 | | #endif | 313 | | | 314 | 569 | s->ip = 0; | 315 | 569 | swd_initdict(s,dict,dict_len); | 316 | 569 | s->bp = s->ip; | 317 | 569 | s->first_rp = s->ip; | 318 | | | 319 | 569 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 569 | #if 1 | 321 | 569 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 569 | if (s->look > 0) | 323 | 568 | { | 324 | 568 | if (s->look > s->swd_f) | 325 | 202 | s->look = s->swd_f; | 326 | 568 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 568 | s->c->ip += s->look; | 328 | 568 | s->ip += s->look; | 329 | 568 | } | 330 | | #else | 331 | | s->look = 0; | 332 | | while (s->look < s->swd_f) | 333 | | { | 334 | | int c; | 335 | | if ((c = getbyte(*(s->c))) < 0) | 336 | | break; | 337 | | s_b(s)[s->ip] = LZO_BYTE(c); | 338 | | s->ip++; | 339 | | s->look++; | 340 | | } | 341 | | #endif | 342 | 569 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 569 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 569 | s->rp = s->first_rp; | 349 | 569 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 569 | else | 352 | 569 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 569 | #if 1 || defined(__LZO_CHECKER) | 355 | | /* initialize memory for the first few HEAD3 (if s->ip is not far | 356 | | * enough ahead to do this job for us). The value doesn't matter. */ | 357 | 569 | if (s->look < 3) { | 358 | 10 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 10 | p[0] = p[1] = p[2] = 0; | 360 | 10 | } | 361 | 569 | #endif | 362 | | | 363 | 569 | return LZO_E_OK; | 364 | 569 | } |
Line | Count | Source | 244 | 637 | { | 245 | | #if defined(__LZO_CHECKER) | 246 | | unsigned r = 1; | 247 | | s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); | 248 | | s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 249 | | s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 250 | | s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 251 | | s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 252 | | r &= s->b != NULL; | 253 | | r &= s->head3 != NULL; | 254 | | r &= s->succ3 != NULL; | 255 | | r &= s->best3 != NULL; | 256 | | r &= s->llen3 != NULL; | 257 | | #ifdef HEAD2 | 258 | | IF_HEAD2(s) { | 259 | | s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); | 260 | | r &= s->head2 != NULL; | 261 | | } | 262 | | #endif | 263 | | if (r != 1) { | 264 | | swd_exit(s); | 265 | | return LZO_E_OUT_OF_MEMORY; | 266 | | } | 267 | | #endif | 268 | | | 269 | 637 | s->m_len = 0; | 270 | 637 | s->m_off = 0; | 271 | | #if defined(SWD_BEST_OFF) | 272 | | { | 273 | | unsigned i; | 274 | | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | | s->best_off[i] = s->best_pos[i] = 0; | 276 | | } | 277 | | #endif | 278 | | | 279 | 637 | s->swd_n = SWD_N; | 280 | 637 | s->swd_f = SWD_F; | 281 | 637 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 637 | s->max_chain = SWD_MAX_CHAIN; | 285 | 637 | s->nice_length = s->swd_f; | 286 | 637 | s->use_best_off = 0; | 287 | 637 | s->lazy_insert = 0; | 288 | | | 289 | 637 | s->b_size = s->swd_n + s->swd_f; | 290 | | #if 0 | 291 | | if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) | 292 | | return LZO_E_ERROR; | 293 | | #else | 294 | 637 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 637 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 637 | #endif | 297 | 637 | s->b_wrap = s_b(s) + s->b_size; | 298 | 637 | s->node_count = s->swd_n; | 299 | | | 300 | 637 | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | | #ifdef HEAD2 | 302 | | IF_HEAD2(s) { | 303 | | #if 1 | 304 | | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | | assert(s_head2(s)[0] == NIL2); | 306 | | #else | 307 | | lzo_xint i; | 308 | | for (i = 0; i < 65536L; i++) | 309 | | s_head2(s)[i] = NIL2; | 310 | | #endif | 311 | | } | 312 | | #endif | 313 | | | 314 | 637 | s->ip = 0; | 315 | 637 | swd_initdict(s,dict,dict_len); | 316 | 637 | s->bp = s->ip; | 317 | 637 | s->first_rp = s->ip; | 318 | | | 319 | 637 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 637 | #if 1 | 321 | 637 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 637 | if (s->look > 0) | 323 | 636 | { | 324 | 636 | if (s->look > s->swd_f) | 325 | 205 | s->look = s->swd_f; | 326 | 636 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 636 | s->c->ip += s->look; | 328 | 636 | s->ip += s->look; | 329 | 636 | } | 330 | | #else | 331 | | s->look = 0; | 332 | | while (s->look < s->swd_f) | 333 | | { | 334 | | int c; | 335 | | if ((c = getbyte(*(s->c))) < 0) | 336 | | break; | 337 | | s_b(s)[s->ip] = LZO_BYTE(c); | 338 | | s->ip++; | 339 | | s->look++; | 340 | | } | 341 | | #endif | 342 | 637 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 637 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 637 | s->rp = s->first_rp; | 349 | 637 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 637 | else | 352 | 637 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 637 | #if 1 || defined(__LZO_CHECKER) | 355 | | /* initialize memory for the first few HEAD3 (if s->ip is not far | 356 | | * enough ahead to do this job for us). The value doesn't matter. */ | 357 | 637 | if (s->look < 3) { | 358 | 11 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 11 | p[0] = p[1] = p[2] = 0; | 360 | 11 | } | 361 | 637 | #endif | 362 | | | 363 | 637 | return LZO_E_OK; | 364 | 637 | } |
Line | Count | Source | 244 | 677 | { | 245 | | #if defined(__LZO_CHECKER) | 246 | | unsigned r = 1; | 247 | | s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); | 248 | | s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 249 | | s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 250 | | s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 251 | | s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 252 | | r &= s->b != NULL; | 253 | | r &= s->head3 != NULL; | 254 | | r &= s->succ3 != NULL; | 255 | | r &= s->best3 != NULL; | 256 | | r &= s->llen3 != NULL; | 257 | | #ifdef HEAD2 | 258 | | IF_HEAD2(s) { | 259 | | s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); | 260 | | r &= s->head2 != NULL; | 261 | | } | 262 | | #endif | 263 | | if (r != 1) { | 264 | | swd_exit(s); | 265 | | return LZO_E_OUT_OF_MEMORY; | 266 | | } | 267 | | #endif | 268 | | | 269 | 677 | s->m_len = 0; | 270 | 677 | s->m_off = 0; | 271 | | #if defined(SWD_BEST_OFF) | 272 | | { | 273 | | unsigned i; | 274 | | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | | s->best_off[i] = s->best_pos[i] = 0; | 276 | | } | 277 | | #endif | 278 | | | 279 | 677 | s->swd_n = SWD_N; | 280 | 677 | s->swd_f = SWD_F; | 281 | 677 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 677 | s->max_chain = SWD_MAX_CHAIN; | 285 | 677 | s->nice_length = s->swd_f; | 286 | 677 | s->use_best_off = 0; | 287 | 677 | s->lazy_insert = 0; | 288 | | | 289 | 677 | s->b_size = s->swd_n + s->swd_f; | 290 | | #if 0 | 291 | | if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) | 292 | | return LZO_E_ERROR; | 293 | | #else | 294 | 677 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 677 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 677 | #endif | 297 | 677 | s->b_wrap = s_b(s) + s->b_size; | 298 | 677 | s->node_count = s->swd_n; | 299 | | | 300 | 677 | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | | #ifdef HEAD2 | 302 | | IF_HEAD2(s) { | 303 | | #if 1 | 304 | | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | | assert(s_head2(s)[0] == NIL2); | 306 | | #else | 307 | | lzo_xint i; | 308 | | for (i = 0; i < 65536L; i++) | 309 | | s_head2(s)[i] = NIL2; | 310 | | #endif | 311 | | } | 312 | | #endif | 313 | | | 314 | 677 | s->ip = 0; | 315 | 677 | swd_initdict(s,dict,dict_len); | 316 | 677 | s->bp = s->ip; | 317 | 677 | s->first_rp = s->ip; | 318 | | | 319 | 677 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 677 | #if 1 | 321 | 677 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 677 | if (s->look > 0) | 323 | 676 | { | 324 | 676 | if (s->look > s->swd_f) | 325 | 218 | s->look = s->swd_f; | 326 | 676 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 676 | s->c->ip += s->look; | 328 | 676 | s->ip += s->look; | 329 | 676 | } | 330 | | #else | 331 | | s->look = 0; | 332 | | while (s->look < s->swd_f) | 333 | | { | 334 | | int c; | 335 | | if ((c = getbyte(*(s->c))) < 0) | 336 | | break; | 337 | | s_b(s)[s->ip] = LZO_BYTE(c); | 338 | | s->ip++; | 339 | | s->look++; | 340 | | } | 341 | | #endif | 342 | 677 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 677 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 677 | s->rp = s->first_rp; | 349 | 677 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 677 | else | 352 | 677 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 677 | #if 1 || defined(__LZO_CHECKER) | 355 | | /* initialize memory for the first few HEAD3 (if s->ip is not far | 356 | | * enough ahead to do this job for us). The value doesn't matter. */ | 357 | 677 | if (s->look < 3) { | 358 | 11 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 11 | p[0] = p[1] = p[2] = 0; | 360 | 11 | } | 361 | 677 | #endif | 362 | | | 363 | 677 | return LZO_E_OK; | 364 | 677 | } |
Line | Count | Source | 244 | 1.19k | { | 245 | | #if defined(__LZO_CHECKER) | 246 | | unsigned r = 1; | 247 | | s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); | 248 | | s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 249 | | s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 250 | | s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 251 | | s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 252 | | r &= s->b != NULL; | 253 | | r &= s->head3 != NULL; | 254 | | r &= s->succ3 != NULL; | 255 | | r &= s->best3 != NULL; | 256 | | r &= s->llen3 != NULL; | 257 | | #ifdef HEAD2 | 258 | | IF_HEAD2(s) { | 259 | | s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); | 260 | | r &= s->head2 != NULL; | 261 | | } | 262 | | #endif | 263 | | if (r != 1) { | 264 | | swd_exit(s); | 265 | | return LZO_E_OUT_OF_MEMORY; | 266 | | } | 267 | | #endif | 268 | | | 269 | 1.19k | s->m_len = 0; | 270 | 1.19k | s->m_off = 0; | 271 | 1.19k | #if defined(SWD_BEST_OFF) | 272 | 1.19k | { | 273 | 1.19k | unsigned i; | 274 | 41.8k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 40.6k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.19k | } | 277 | 1.19k | #endif | 278 | | | 279 | 1.19k | s->swd_n = SWD_N; | 280 | 1.19k | s->swd_f = SWD_F; | 281 | 1.19k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.19k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.19k | s->nice_length = s->swd_f; | 286 | 1.19k | s->use_best_off = 0; | 287 | 1.19k | s->lazy_insert = 0; | 288 | | | 289 | 1.19k | s->b_size = s->swd_n + s->swd_f; | 290 | | #if 0 | 291 | | if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) | 292 | | return LZO_E_ERROR; | 293 | | #else | 294 | 1.19k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.19k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.19k | #endif | 297 | 1.19k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.19k | s->node_count = s->swd_n; | 299 | | | 300 | 1.19k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.19k | #ifdef HEAD2 | 302 | 1.19k | IF_HEAD2(s) { | 303 | 1.19k | #if 1 | 304 | 1.19k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.19k | assert(s_head2(s)[0] == NIL2); | 306 | | #else | 307 | | lzo_xint i; | 308 | | for (i = 0; i < 65536L; i++) | 309 | | s_head2(s)[i] = NIL2; | 310 | | #endif | 311 | 1.19k | } | 312 | 1.19k | #endif | 313 | | | 314 | 1.19k | s->ip = 0; | 315 | 1.19k | swd_initdict(s,dict,dict_len); | 316 | 1.19k | s->bp = s->ip; | 317 | 1.19k | s->first_rp = s->ip; | 318 | | | 319 | 1.19k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.19k | #if 1 | 321 | 1.19k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.19k | if (s->look > 0) | 323 | 1.19k | { | 324 | 1.19k | if (s->look > s->swd_f) | 325 | 559 | s->look = s->swd_f; | 326 | 1.19k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.19k | s->c->ip += s->look; | 328 | 1.19k | s->ip += s->look; | 329 | 1.19k | } | 330 | | #else | 331 | | s->look = 0; | 332 | | while (s->look < s->swd_f) | 333 | | { | 334 | | int c; | 335 | | if ((c = getbyte(*(s->c))) < 0) | 336 | | break; | 337 | | s_b(s)[s->ip] = LZO_BYTE(c); | 338 | | s->ip++; | 339 | | s->look++; | 340 | | } | 341 | | #endif | 342 | 1.19k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.19k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.19k | s->rp = s->first_rp; | 349 | 1.19k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.19k | else | 352 | 1.19k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.19k | #if 1 || defined(__LZO_CHECKER) | 355 | | /* initialize memory for the first few HEAD3 (if s->ip is not far | 356 | | * enough ahead to do this job for us). The value doesn't matter. */ | 357 | 1.19k | if (s->look < 3) { | 358 | 12 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 12 | p[0] = p[1] = p[2] = 0; | 360 | 12 | } | 361 | 1.19k | #endif | 362 | | | 363 | 1.19k | return LZO_E_OK; | 364 | 1.19k | } |
Line | Count | Source | 244 | 1.22k | { | 245 | | #if defined(__LZO_CHECKER) | 246 | | unsigned r = 1; | 247 | | s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); | 248 | | s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 249 | | s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 250 | | s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 251 | | s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 252 | | r &= s->b != NULL; | 253 | | r &= s->head3 != NULL; | 254 | | r &= s->succ3 != NULL; | 255 | | r &= s->best3 != NULL; | 256 | | r &= s->llen3 != NULL; | 257 | | #ifdef HEAD2 | 258 | | IF_HEAD2(s) { | 259 | | s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); | 260 | | r &= s->head2 != NULL; | 261 | | } | 262 | | #endif | 263 | | if (r != 1) { | 264 | | swd_exit(s); | 265 | | return LZO_E_OUT_OF_MEMORY; | 266 | | } | 267 | | #endif | 268 | | | 269 | 1.22k | s->m_len = 0; | 270 | 1.22k | s->m_off = 0; | 271 | 1.22k | #if defined(SWD_BEST_OFF) | 272 | 1.22k | { | 273 | 1.22k | unsigned i; | 274 | 42.8k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 41.6k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.22k | } | 277 | 1.22k | #endif | 278 | | | 279 | 1.22k | s->swd_n = SWD_N; | 280 | 1.22k | s->swd_f = SWD_F; | 281 | 1.22k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.22k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.22k | s->nice_length = s->swd_f; | 286 | 1.22k | s->use_best_off = 0; | 287 | 1.22k | s->lazy_insert = 0; | 288 | | | 289 | 1.22k | s->b_size = s->swd_n + s->swd_f; | 290 | | #if 0 | 291 | | if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) | 292 | | return LZO_E_ERROR; | 293 | | #else | 294 | 1.22k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.22k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.22k | #endif | 297 | 1.22k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.22k | s->node_count = s->swd_n; | 299 | | | 300 | 1.22k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.22k | #ifdef HEAD2 | 302 | 1.22k | IF_HEAD2(s) { | 303 | 1.22k | #if 1 | 304 | 1.22k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.22k | assert(s_head2(s)[0] == NIL2); | 306 | | #else | 307 | | lzo_xint i; | 308 | | for (i = 0; i < 65536L; i++) | 309 | | s_head2(s)[i] = NIL2; | 310 | | #endif | 311 | 1.22k | } | 312 | 1.22k | #endif | 313 | | | 314 | 1.22k | s->ip = 0; | 315 | 1.22k | swd_initdict(s,dict,dict_len); | 316 | 1.22k | s->bp = s->ip; | 317 | 1.22k | s->first_rp = s->ip; | 318 | | | 319 | 1.22k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.22k | #if 1 | 321 | 1.22k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.22k | if (s->look > 0) | 323 | 1.22k | { | 324 | 1.22k | if (s->look > s->swd_f) | 325 | 501 | s->look = s->swd_f; | 326 | 1.22k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.22k | s->c->ip += s->look; | 328 | 1.22k | s->ip += s->look; | 329 | 1.22k | } | 330 | | #else | 331 | | s->look = 0; | 332 | | while (s->look < s->swd_f) | 333 | | { | 334 | | int c; | 335 | | if ((c = getbyte(*(s->c))) < 0) | 336 | | break; | 337 | | s_b(s)[s->ip] = LZO_BYTE(c); | 338 | | s->ip++; | 339 | | s->look++; | 340 | | } | 341 | | #endif | 342 | 1.22k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.22k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.22k | s->rp = s->first_rp; | 349 | 1.22k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.22k | else | 352 | 1.22k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.22k | #if 1 || defined(__LZO_CHECKER) | 355 | | /* initialize memory for the first few HEAD3 (if s->ip is not far | 356 | | * enough ahead to do this job for us). The value doesn't matter. */ | 357 | 1.22k | if (s->look < 3) { | 358 | 10 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 10 | p[0] = p[1] = p[2] = 0; | 360 | 10 | } | 361 | 1.22k | #endif | 362 | | | 363 | 1.22k | return LZO_E_OK; | 364 | 1.22k | } |
Line | Count | Source | 244 | 1.47k | { | 245 | | #if defined(__LZO_CHECKER) | 246 | | unsigned r = 1; | 247 | | s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); | 248 | | s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 249 | | s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 250 | | s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 251 | | s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 252 | | r &= s->b != NULL; | 253 | | r &= s->head3 != NULL; | 254 | | r &= s->succ3 != NULL; | 255 | | r &= s->best3 != NULL; | 256 | | r &= s->llen3 != NULL; | 257 | | #ifdef HEAD2 | 258 | | IF_HEAD2(s) { | 259 | | s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); | 260 | | r &= s->head2 != NULL; | 261 | | } | 262 | | #endif | 263 | | if (r != 1) { | 264 | | swd_exit(s); | 265 | | return LZO_E_OUT_OF_MEMORY; | 266 | | } | 267 | | #endif | 268 | | | 269 | 1.47k | s->m_len = 0; | 270 | 1.47k | s->m_off = 0; | 271 | 1.47k | #if defined(SWD_BEST_OFF) | 272 | 1.47k | { | 273 | 1.47k | unsigned i; | 274 | 51.6k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 50.2k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.47k | } | 277 | 1.47k | #endif | 278 | | | 279 | 1.47k | s->swd_n = SWD_N; | 280 | 1.47k | s->swd_f = SWD_F; | 281 | 1.47k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.47k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.47k | s->nice_length = s->swd_f; | 286 | 1.47k | s->use_best_off = 0; | 287 | 1.47k | s->lazy_insert = 0; | 288 | | | 289 | 1.47k | s->b_size = s->swd_n + s->swd_f; | 290 | | #if 0 | 291 | | if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) | 292 | | return LZO_E_ERROR; | 293 | | #else | 294 | 1.47k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.47k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.47k | #endif | 297 | 1.47k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.47k | s->node_count = s->swd_n; | 299 | | | 300 | 1.47k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.47k | #ifdef HEAD2 | 302 | 1.47k | IF_HEAD2(s) { | 303 | 1.47k | #if 1 | 304 | 1.47k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.47k | assert(s_head2(s)[0] == NIL2); | 306 | | #else | 307 | | lzo_xint i; | 308 | | for (i = 0; i < 65536L; i++) | 309 | | s_head2(s)[i] = NIL2; | 310 | | #endif | 311 | 1.47k | } | 312 | 1.47k | #endif | 313 | | | 314 | 1.47k | s->ip = 0; | 315 | 1.47k | swd_initdict(s,dict,dict_len); | 316 | 1.47k | s->bp = s->ip; | 317 | 1.47k | s->first_rp = s->ip; | 318 | | | 319 | 1.47k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.47k | #if 1 | 321 | 1.47k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.47k | if (s->look > 0) | 323 | 1.47k | { | 324 | 1.47k | if (s->look > s->swd_f) | 325 | 594 | s->look = s->swd_f; | 326 | 1.47k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.47k | s->c->ip += s->look; | 328 | 1.47k | s->ip += s->look; | 329 | 1.47k | } | 330 | | #else | 331 | | s->look = 0; | 332 | | while (s->look < s->swd_f) | 333 | | { | 334 | | int c; | 335 | | if ((c = getbyte(*(s->c))) < 0) | 336 | | break; | 337 | | s_b(s)[s->ip] = LZO_BYTE(c); | 338 | | s->ip++; | 339 | | s->look++; | 340 | | } | 341 | | #endif | 342 | 1.47k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.47k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.47k | s->rp = s->first_rp; | 349 | 1.47k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.47k | else | 352 | 1.47k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.47k | #if 1 || defined(__LZO_CHECKER) | 355 | | /* initialize memory for the first few HEAD3 (if s->ip is not far | 356 | | * enough ahead to do this job for us). The value doesn't matter. */ | 357 | 1.47k | if (s->look < 3) { | 358 | 10 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 10 | p[0] = p[1] = p[2] = 0; | 360 | 10 | } | 361 | 1.47k | #endif | 362 | | | 363 | 1.47k | return LZO_E_OK; | 364 | 1.47k | } |
Line | Count | Source | 244 | 647 | { | 245 | | #if defined(__LZO_CHECKER) | 246 | | unsigned r = 1; | 247 | | s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F); | 248 | | s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 249 | | s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 250 | | s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F)); | 251 | | s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE); | 252 | | r &= s->b != NULL; | 253 | | r &= s->head3 != NULL; | 254 | | r &= s->succ3 != NULL; | 255 | | r &= s->best3 != NULL; | 256 | | r &= s->llen3 != NULL; | 257 | | #ifdef HEAD2 | 258 | | IF_HEAD2(s) { | 259 | | s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L); | 260 | | r &= s->head2 != NULL; | 261 | | } | 262 | | #endif | 263 | | if (r != 1) { | 264 | | swd_exit(s); | 265 | | return LZO_E_OUT_OF_MEMORY; | 266 | | } | 267 | | #endif | 268 | | | 269 | 647 | s->m_len = 0; | 270 | 647 | s->m_off = 0; | 271 | | #if defined(SWD_BEST_OFF) | 272 | | { | 273 | | unsigned i; | 274 | | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | | s->best_off[i] = s->best_pos[i] = 0; | 276 | | } | 277 | | #endif | 278 | | | 279 | 647 | s->swd_n = SWD_N; | 280 | 647 | s->swd_f = SWD_F; | 281 | 647 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 647 | s->max_chain = SWD_MAX_CHAIN; | 285 | 647 | s->nice_length = s->swd_f; | 286 | 647 | s->use_best_off = 0; | 287 | 647 | s->lazy_insert = 0; | 288 | | | 289 | 647 | s->b_size = s->swd_n + s->swd_f; | 290 | | #if 0 | 291 | | if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX) | 292 | | return LZO_E_ERROR; | 293 | | #else | 294 | 647 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 647 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 647 | #endif | 297 | 647 | s->b_wrap = s_b(s) + s->b_size; | 298 | 647 | s->node_count = s->swd_n; | 299 | | | 300 | 647 | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 647 | #ifdef HEAD2 | 302 | 647 | IF_HEAD2(s) { | 303 | 647 | #if 1 | 304 | 647 | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 647 | assert(s_head2(s)[0] == NIL2); | 306 | | #else | 307 | | lzo_xint i; | 308 | | for (i = 0; i < 65536L; i++) | 309 | | s_head2(s)[i] = NIL2; | 310 | | #endif | 311 | 647 | } | 312 | 647 | #endif | 313 | | | 314 | 647 | s->ip = 0; | 315 | 647 | swd_initdict(s,dict,dict_len); | 316 | 647 | s->bp = s->ip; | 317 | 647 | s->first_rp = s->ip; | 318 | | | 319 | 647 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 647 | #if 1 | 321 | 647 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 647 | if (s->look > 0) | 323 | 646 | { | 324 | 646 | if (s->look > s->swd_f) | 325 | 150 | s->look = s->swd_f; | 326 | 646 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 646 | s->c->ip += s->look; | 328 | 646 | s->ip += s->look; | 329 | 646 | } | 330 | | #else | 331 | | s->look = 0; | 332 | | while (s->look < s->swd_f) | 333 | | { | 334 | | int c; | 335 | | if ((c = getbyte(*(s->c))) < 0) | 336 | | break; | 337 | | s_b(s)[s->ip] = LZO_BYTE(c); | 338 | | s->ip++; | 339 | | s->look++; | 340 | | } | 341 | | #endif | 342 | 647 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 647 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 647 | s->rp = s->first_rp; | 349 | 647 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 647 | else | 352 | 647 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 647 | #if 1 || defined(__LZO_CHECKER) | 355 | | /* initialize memory for the first few HEAD3 (if s->ip is not far | 356 | | * enough ahead to do this job for us). The value doesn't matter. */ | 357 | 647 | if (s->look < 3) { | 358 | 11 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 11 | p[0] = p[1] = p[2] = 0; | 360 | 11 | } | 361 | 647 | #endif | 362 | | | 363 | 647 | return LZO_E_OK; | 364 | 647 | } |
|
365 | | |
366 | | |
367 | | static |
368 | | void swd_exit(lzo_swd_p s) |
369 | 6.42k | { |
370 | | #if defined(__LZO_CHECKER) |
371 | | /* free in reverse order of allocations */ |
372 | | #ifdef HEAD2 |
373 | | free(s->head2); s->head2 = NULL; |
374 | | #endif |
375 | | free(s->llen3); s->llen3 = NULL; |
376 | | free(s->best3); s->best3 = NULL; |
377 | | free(s->succ3); s->succ3 = NULL; |
378 | | free(s->head3); s->head3 = NULL; |
379 | | free(s->b); s->b = NULL; |
380 | | #else |
381 | 6.42k | LZO_UNUSED(s); |
382 | 6.42k | #endif |
383 | 6.42k | } Line | Count | Source | 369 | 569 | { | 370 | | #if defined(__LZO_CHECKER) | 371 | | /* free in reverse order of allocations */ | 372 | | #ifdef HEAD2 | 373 | | free(s->head2); s->head2 = NULL; | 374 | | #endif | 375 | | free(s->llen3); s->llen3 = NULL; | 376 | | free(s->best3); s->best3 = NULL; | 377 | | free(s->succ3); s->succ3 = NULL; | 378 | | free(s->head3); s->head3 = NULL; | 379 | | free(s->b); s->b = NULL; | 380 | | #else | 381 | 569 | LZO_UNUSED(s); | 382 | 569 | #endif | 383 | 569 | } |
Line | Count | Source | 369 | 637 | { | 370 | | #if defined(__LZO_CHECKER) | 371 | | /* free in reverse order of allocations */ | 372 | | #ifdef HEAD2 | 373 | | free(s->head2); s->head2 = NULL; | 374 | | #endif | 375 | | free(s->llen3); s->llen3 = NULL; | 376 | | free(s->best3); s->best3 = NULL; | 377 | | free(s->succ3); s->succ3 = NULL; | 378 | | free(s->head3); s->head3 = NULL; | 379 | | free(s->b); s->b = NULL; | 380 | | #else | 381 | 637 | LZO_UNUSED(s); | 382 | 637 | #endif | 383 | 637 | } |
Line | Count | Source | 369 | 677 | { | 370 | | #if defined(__LZO_CHECKER) | 371 | | /* free in reverse order of allocations */ | 372 | | #ifdef HEAD2 | 373 | | free(s->head2); s->head2 = NULL; | 374 | | #endif | 375 | | free(s->llen3); s->llen3 = NULL; | 376 | | free(s->best3); s->best3 = NULL; | 377 | | free(s->succ3); s->succ3 = NULL; | 378 | | free(s->head3); s->head3 = NULL; | 379 | | free(s->b); s->b = NULL; | 380 | | #else | 381 | 677 | LZO_UNUSED(s); | 382 | 677 | #endif | 383 | 677 | } |
Line | Count | Source | 369 | 1.19k | { | 370 | | #if defined(__LZO_CHECKER) | 371 | | /* free in reverse order of allocations */ | 372 | | #ifdef HEAD2 | 373 | | free(s->head2); s->head2 = NULL; | 374 | | #endif | 375 | | free(s->llen3); s->llen3 = NULL; | 376 | | free(s->best3); s->best3 = NULL; | 377 | | free(s->succ3); s->succ3 = NULL; | 378 | | free(s->head3); s->head3 = NULL; | 379 | | free(s->b); s->b = NULL; | 380 | | #else | 381 | 1.19k | LZO_UNUSED(s); | 382 | 1.19k | #endif | 383 | 1.19k | } |
Line | Count | Source | 369 | 1.22k | { | 370 | | #if defined(__LZO_CHECKER) | 371 | | /* free in reverse order of allocations */ | 372 | | #ifdef HEAD2 | 373 | | free(s->head2); s->head2 = NULL; | 374 | | #endif | 375 | | free(s->llen3); s->llen3 = NULL; | 376 | | free(s->best3); s->best3 = NULL; | 377 | | free(s->succ3); s->succ3 = NULL; | 378 | | free(s->head3); s->head3 = NULL; | 379 | | free(s->b); s->b = NULL; | 380 | | #else | 381 | 1.22k | LZO_UNUSED(s); | 382 | 1.22k | #endif | 383 | 1.22k | } |
Line | Count | Source | 369 | 1.47k | { | 370 | | #if defined(__LZO_CHECKER) | 371 | | /* free in reverse order of allocations */ | 372 | | #ifdef HEAD2 | 373 | | free(s->head2); s->head2 = NULL; | 374 | | #endif | 375 | | free(s->llen3); s->llen3 = NULL; | 376 | | free(s->best3); s->best3 = NULL; | 377 | | free(s->succ3); s->succ3 = NULL; | 378 | | free(s->head3); s->head3 = NULL; | 379 | | free(s->b); s->b = NULL; | 380 | | #else | 381 | 1.47k | LZO_UNUSED(s); | 382 | 1.47k | #endif | 383 | 1.47k | } |
Line | Count | Source | 369 | 647 | { | 370 | | #if defined(__LZO_CHECKER) | 371 | | /* free in reverse order of allocations */ | 372 | | #ifdef HEAD2 | 373 | | free(s->head2); s->head2 = NULL; | 374 | | #endif | 375 | | free(s->llen3); s->llen3 = NULL; | 376 | | free(s->best3); s->best3 = NULL; | 377 | | free(s->succ3); s->succ3 = NULL; | 378 | | free(s->head3); s->head3 = NULL; | 379 | | free(s->b); s->b = NULL; | 380 | | #else | 381 | 647 | LZO_UNUSED(s); | 382 | 647 | #endif | 383 | 647 | } |
|
384 | | |
385 | | |
386 | | #define swd_pos2off(s,pos) \ |
387 | 55.4M | (s->bp > (pos) ? s->bp - (pos) : s->b_size - ((pos) - s->bp)) |
388 | | |
389 | | |
390 | | /*********************************************************************** |
391 | | // |
392 | | ************************************************************************/ |
393 | | |
394 | | static __lzo_inline |
395 | | void swd_getbyte(lzo_swd_p s) |
396 | 142M | { |
397 | 142M | int c; |
398 | | |
399 | 142M | if ((c = getbyte(*(s->c))) < 0) |
400 | 6.34M | { |
401 | 6.34M | if (s->look > 0) |
402 | 6.34M | --s->look; |
403 | 6.34M | #if 1 || defined(__LZO_CHECKER) |
404 | | /* initialize memory - value doesn't matter */ |
405 | 6.34M | s_b(s)[s->ip] = 0; |
406 | 6.34M | if (s->ip < s->swd_f) |
407 | 1.37M | s->b_wrap[s->ip] = 0; |
408 | 6.34M | #endif |
409 | 6.34M | } |
410 | 136M | else |
411 | 136M | { |
412 | 136M | s_b(s)[s->ip] = LZO_BYTE(c); |
413 | 136M | if (s->ip < s->swd_f) |
414 | 7.71M | s->b_wrap[s->ip] = LZO_BYTE(c); |
415 | 136M | } |
416 | 142M | if (++s->ip == s->b_size) |
417 | 4.24k | s->ip = 0; |
418 | 142M | if (++s->bp == s->b_size) |
419 | 3.98k | s->bp = 0; |
420 | 142M | if (++s->rp == s->b_size) |
421 | 4.24k | s->rp = 0; |
422 | 142M | } Line | Count | Source | 396 | 11.5M | { | 397 | 11.5M | int c; | 398 | | | 399 | 11.5M | if ((c = getbyte(*(s->c))) < 0) | 400 | 527k | { | 401 | 527k | if (s->look > 0) | 402 | 526k | --s->look; | 403 | 527k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 527k | s_b(s)[s->ip] = 0; | 406 | 527k | if (s->ip < s->swd_f) | 407 | 133k | s->b_wrap[s->ip] = 0; | 408 | 527k | #endif | 409 | 527k | } | 410 | 11.0M | else | 411 | 11.0M | { | 412 | 11.0M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 11.0M | if (s->ip < s->swd_f) | 414 | 184k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 11.0M | } | 416 | 11.5M | if (++s->ip == s->b_size) | 417 | 143 | s->ip = 0; | 418 | 11.5M | if (++s->bp == s->b_size) | 419 | 117 | s->bp = 0; | 420 | 11.5M | if (++s->rp == s->b_size) | 421 | 143 | s->rp = 0; | 422 | 11.5M | } |
Line | Count | Source | 396 | 13.0M | { | 397 | 13.0M | int c; | 398 | | | 399 | 13.0M | if ((c = getbyte(*(s->c))) < 0) | 400 | 546k | { | 401 | 546k | if (s->look > 0) | 402 | 545k | --s->look; | 403 | 546k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 546k | s_b(s)[s->ip] = 0; | 406 | 546k | if (s->ip < s->swd_f) | 407 | 166k | s->b_wrap[s->ip] = 0; | 408 | 546k | #endif | 409 | 546k | } | 410 | 12.5M | else | 411 | 12.5M | { | 412 | 12.5M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 12.5M | if (s->ip < s->swd_f) | 414 | 1.22M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 12.5M | } | 416 | 13.0M | if (++s->ip == s->b_size) | 417 | 662 | s->ip = 0; | 418 | 13.0M | if (++s->bp == s->b_size) | 419 | 634 | s->bp = 0; | 420 | 13.0M | if (++s->rp == s->b_size) | 421 | 662 | s->rp = 0; | 422 | 13.0M | } |
Line | Count | Source | 396 | 20.0M | { | 397 | 20.0M | int c; | 398 | | | 399 | 20.0M | if ((c = getbyte(*(s->c))) < 0) | 400 | 592k | { | 401 | 592k | if (s->look > 0) | 402 | 592k | --s->look; | 403 | 592k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 592k | s_b(s)[s->ip] = 0; | 406 | 592k | if (s->ip < s->swd_f) | 407 | 138k | s->b_wrap[s->ip] = 0; | 408 | 592k | #endif | 409 | 592k | } | 410 | 19.4M | else | 411 | 19.4M | { | 412 | 19.4M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 19.4M | if (s->ip < s->swd_f) | 414 | 2.00M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 19.4M | } | 416 | 20.0M | if (++s->ip == s->b_size) | 417 | 1.03k | s->ip = 0; | 418 | 20.0M | if (++s->bp == s->b_size) | 419 | 1.00k | s->bp = 0; | 420 | 20.0M | if (++s->rp == s->b_size) | 421 | 1.03k | s->rp = 0; | 422 | 20.0M | } |
Line | Count | Source | 396 | 24.6M | { | 397 | 24.6M | int c; | 398 | | | 399 | 24.6M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.32M | { | 401 | 1.32M | if (s->look > 0) | 402 | 1.32M | --s->look; | 403 | 1.32M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.32M | s_b(s)[s->ip] = 0; | 406 | 1.32M | if (s->ip < s->swd_f) | 407 | 206k | s->b_wrap[s->ip] = 0; | 408 | 1.32M | #endif | 409 | 1.32M | } | 410 | 23.3M | else | 411 | 23.3M | { | 412 | 23.3M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 23.3M | if (s->ip < s->swd_f) | 414 | 583k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 23.3M | } | 416 | 24.6M | if (++s->ip == s->b_size) | 417 | 358 | s->ip = 0; | 418 | 24.6M | if (++s->bp == s->b_size) | 419 | 315 | s->bp = 0; | 420 | 24.6M | if (++s->rp == s->b_size) | 421 | 358 | s->rp = 0; | 422 | 24.6M | } |
Line | Count | Source | 396 | 29.6M | { | 397 | 29.6M | int c; | 398 | | | 399 | 29.6M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.31M | { | 401 | 1.31M | if (s->look > 0) | 402 | 1.31M | --s->look; | 403 | 1.31M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.31M | s_b(s)[s->ip] = 0; | 406 | 1.31M | if (s->ip < s->swd_f) | 407 | 293k | s->b_wrap[s->ip] = 0; | 408 | 1.31M | #endif | 409 | 1.31M | } | 410 | 28.2M | else | 411 | 28.2M | { | 412 | 28.2M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 28.2M | if (s->ip < s->swd_f) | 414 | 755k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 28.2M | } | 416 | 29.6M | if (++s->ip == s->b_size) | 417 | 446 | s->ip = 0; | 418 | 29.6M | if (++s->bp == s->b_size) | 419 | 398 | s->bp = 0; | 420 | 29.6M | if (++s->rp == s->b_size) | 421 | 446 | s->rp = 0; | 422 | 29.6M | } |
Line | Count | Source | 396 | 32.1M | { | 397 | 32.1M | int c; | 398 | | | 399 | 32.1M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.59M | { | 401 | 1.59M | if (s->look > 0) | 402 | 1.59M | --s->look; | 403 | 1.59M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.59M | s_b(s)[s->ip] = 0; | 406 | 1.59M | if (s->ip < s->swd_f) | 407 | 271k | s->b_wrap[s->ip] = 0; | 408 | 1.59M | #endif | 409 | 1.59M | } | 410 | 30.5M | else | 411 | 30.5M | { | 412 | 30.5M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 30.5M | if (s->ip < s->swd_f) | 414 | 834k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 30.5M | } | 416 | 32.1M | if (++s->ip == s->b_size) | 417 | 481 | s->ip = 0; | 418 | 32.1M | if (++s->bp == s->b_size) | 419 | 441 | s->bp = 0; | 420 | 32.1M | if (++s->rp == s->b_size) | 421 | 481 | s->rp = 0; | 422 | 32.1M | } |
Line | Count | Source | 396 | 11.7M | { | 397 | 11.7M | int c; | 398 | | | 399 | 11.7M | if ((c = getbyte(*(s->c))) < 0) | 400 | 443k | { | 401 | 443k | if (s->look > 0) | 402 | 443k | --s->look; | 403 | 443k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 443k | s_b(s)[s->ip] = 0; | 406 | 443k | if (s->ip < s->swd_f) | 407 | 168k | s->b_wrap[s->ip] = 0; | 408 | 443k | #endif | 409 | 443k | } | 410 | 11.2M | else | 411 | 11.2M | { | 412 | 11.2M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 11.2M | if (s->ip < s->swd_f) | 414 | 2.12M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 11.2M | } | 416 | 11.7M | if (++s->ip == s->b_size) | 417 | 1.11k | s->ip = 0; | 418 | 11.7M | if (++s->bp == s->b_size) | 419 | 1.07k | s->bp = 0; | 420 | 11.7M | if (++s->rp == s->b_size) | 421 | 1.11k | s->rp = 0; | 422 | 11.7M | } |
|
423 | | |
424 | | |
425 | | /*********************************************************************** |
426 | | // remove node from lists |
427 | | ************************************************************************/ |
428 | | |
429 | | static __lzo_inline |
430 | | void swd_remove_node(lzo_swd_p s, lzo_uint node) |
431 | 142M | { |
432 | 142M | if (s->node_count == 0) |
433 | 94.2M | { |
434 | 94.2M | lzo_uint key; |
435 | | |
436 | | #ifdef LZO_DEBUG |
437 | | if (s->first_rp != LZO_UINT_MAX) |
438 | | { |
439 | | if (node != s->first_rp) |
440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", |
441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, |
442 | | (long)s->first_rp, (long)(s->ip - node), |
443 | | (long)(s->ip - s->bp)); |
444 | | assert(node == s->first_rp); |
445 | | s->first_rp = LZO_UINT_MAX; |
446 | | } |
447 | | #endif |
448 | | |
449 | 94.2M | key = HEAD3(s_b(s),node); |
450 | 94.2M | assert(s_llen3(s)[key] > 0); |
451 | 94.2M | --s_llen3(s)[key]; |
452 | | |
453 | | #ifdef HEAD2 |
454 | | IF_HEAD2(s) { |
455 | 59.9M | key = HEAD2(s_b(s),node); |
456 | | assert(s_head2(s)[key] != NIL2); |
457 | 59.9M | if ((lzo_uint) s_head2(s)[key] == node) |
458 | 15.6M | s_head2(s)[key] = NIL2; |
459 | | } |
460 | | #endif |
461 | 94.2M | } |
462 | 48.6M | else |
463 | 48.6M | --s->node_count; |
464 | 142M | } lzo1b_9x.c:swd_remove_node Line | Count | Source | 431 | 11.5M | { | 432 | 11.5M | if (s->node_count == 0) | 433 | 5.60M | { | 434 | 5.60M | lzo_uint key; | 435 | | | 436 | | #ifdef LZO_DEBUG | 437 | | if (s->first_rp != LZO_UINT_MAX) | 438 | | { | 439 | | if (node != s->first_rp) | 440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", | 441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, | 442 | | (long)s->first_rp, (long)(s->ip - node), | 443 | | (long)(s->ip - s->bp)); | 444 | | assert(node == s->first_rp); | 445 | | s->first_rp = LZO_UINT_MAX; | 446 | | } | 447 | | #endif | 448 | | | 449 | 5.60M | key = HEAD3(s_b(s),node); | 450 | 5.60M | assert(s_llen3(s)[key] > 0); | 451 | 5.60M | --s_llen3(s)[key]; | 452 | | | 453 | | #ifdef HEAD2 | 454 | | IF_HEAD2(s) { | 455 | | key = HEAD2(s_b(s),node); | 456 | | assert(s_head2(s)[key] != NIL2); | 457 | | if ((lzo_uint) s_head2(s)[key] == node) | 458 | | s_head2(s)[key] = NIL2; | 459 | | } | 460 | | #endif | 461 | 5.60M | } | 462 | 5.98M | else | 463 | 5.98M | --s->node_count; | 464 | 11.5M | } |
lzo1c_9x.c:swd_remove_node Line | Count | Source | 431 | 13.0M | { | 432 | 13.0M | if (s->node_count == 0) | 433 | 10.8M | { | 434 | 10.8M | lzo_uint key; | 435 | | | 436 | | #ifdef LZO_DEBUG | 437 | | if (s->first_rp != LZO_UINT_MAX) | 438 | | { | 439 | | if (node != s->first_rp) | 440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", | 441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, | 442 | | (long)s->first_rp, (long)(s->ip - node), | 443 | | (long)(s->ip - s->bp)); | 444 | | assert(node == s->first_rp); | 445 | | s->first_rp = LZO_UINT_MAX; | 446 | | } | 447 | | #endif | 448 | | | 449 | 10.8M | key = HEAD3(s_b(s),node); | 450 | 10.8M | assert(s_llen3(s)[key] > 0); | 451 | 10.8M | --s_llen3(s)[key]; | 452 | | | 453 | | #ifdef HEAD2 | 454 | | IF_HEAD2(s) { | 455 | | key = HEAD2(s_b(s),node); | 456 | | assert(s_head2(s)[key] != NIL2); | 457 | | if ((lzo_uint) s_head2(s)[key] == node) | 458 | | s_head2(s)[key] = NIL2; | 459 | | } | 460 | | #endif | 461 | 10.8M | } | 462 | 2.23M | else | 463 | 2.23M | --s->node_count; | 464 | 13.0M | } |
lzo1f_9x.c:swd_remove_node Line | Count | Source | 431 | 20.0M | { | 432 | 20.0M | if (s->node_count == 0) | 433 | 17.8M | { | 434 | 17.8M | lzo_uint key; | 435 | | | 436 | | #ifdef LZO_DEBUG | 437 | | if (s->first_rp != LZO_UINT_MAX) | 438 | | { | 439 | | if (node != s->first_rp) | 440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", | 441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, | 442 | | (long)s->first_rp, (long)(s->ip - node), | 443 | | (long)(s->ip - s->bp)); | 444 | | assert(node == s->first_rp); | 445 | | s->first_rp = LZO_UINT_MAX; | 446 | | } | 447 | | #endif | 448 | | | 449 | 17.8M | key = HEAD3(s_b(s),node); | 450 | 17.8M | assert(s_llen3(s)[key] > 0); | 451 | 17.8M | --s_llen3(s)[key]; | 452 | | | 453 | | #ifdef HEAD2 | 454 | | IF_HEAD2(s) { | 455 | | key = HEAD2(s_b(s),node); | 456 | | assert(s_head2(s)[key] != NIL2); | 457 | | if ((lzo_uint) s_head2(s)[key] == node) | 458 | | s_head2(s)[key] = NIL2; | 459 | | } | 460 | | #endif | 461 | 17.8M | } | 462 | 2.17M | else | 463 | 2.17M | --s->node_count; | 464 | 20.0M | } |
lzo1x_9x.c:swd_remove_node Line | Count | Source | 431 | 24.6M | { | 432 | 24.6M | if (s->node_count == 0) | 433 | 12.9M | { | 434 | 12.9M | lzo_uint key; | 435 | | | 436 | | #ifdef LZO_DEBUG | 437 | | if (s->first_rp != LZO_UINT_MAX) | 438 | | { | 439 | | if (node != s->first_rp) | 440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", | 441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, | 442 | | (long)s->first_rp, (long)(s->ip - node), | 443 | | (long)(s->ip - s->bp)); | 444 | | assert(node == s->first_rp); | 445 | | s->first_rp = LZO_UINT_MAX; | 446 | | } | 447 | | #endif | 448 | | | 449 | 12.9M | key = HEAD3(s_b(s),node); | 450 | 12.9M | assert(s_llen3(s)[key] > 0); | 451 | 12.9M | --s_llen3(s)[key]; | 452 | | | 453 | 12.9M | #ifdef HEAD2 | 454 | 12.9M | IF_HEAD2(s) { | 455 | 12.9M | key = HEAD2(s_b(s),node); | 456 | 12.9M | assert(s_head2(s)[key] != NIL2); | 457 | 12.9M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 2.43M | s_head2(s)[key] = NIL2; | 459 | 12.9M | } | 460 | 12.9M | #endif | 461 | 12.9M | } | 462 | 11.7M | else | 463 | 11.7M | --s->node_count; | 464 | 24.6M | } |
lzo1y_9x.c:swd_remove_node Line | Count | Source | 431 | 29.6M | { | 432 | 29.6M | if (s->node_count == 0) | 433 | 17.1M | { | 434 | 17.1M | lzo_uint key; | 435 | | | 436 | | #ifdef LZO_DEBUG | 437 | | if (s->first_rp != LZO_UINT_MAX) | 438 | | { | 439 | | if (node != s->first_rp) | 440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", | 441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, | 442 | | (long)s->first_rp, (long)(s->ip - node), | 443 | | (long)(s->ip - s->bp)); | 444 | | assert(node == s->first_rp); | 445 | | s->first_rp = LZO_UINT_MAX; | 446 | | } | 447 | | #endif | 448 | | | 449 | 17.1M | key = HEAD3(s_b(s),node); | 450 | 17.1M | assert(s_llen3(s)[key] > 0); | 451 | 17.1M | --s_llen3(s)[key]; | 452 | | | 453 | 17.1M | #ifdef HEAD2 | 454 | 17.1M | IF_HEAD2(s) { | 455 | 17.1M | key = HEAD2(s_b(s),node); | 456 | 17.1M | assert(s_head2(s)[key] != NIL2); | 457 | 17.1M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 4.66M | s_head2(s)[key] = NIL2; | 459 | 17.1M | } | 460 | 17.1M | #endif | 461 | 17.1M | } | 462 | 12.4M | else | 463 | 12.4M | --s->node_count; | 464 | 29.6M | } |
lzo1z_9x.c:swd_remove_node Line | Count | Source | 431 | 32.1M | { | 432 | 32.1M | if (s->node_count == 0) | 433 | 19.2M | { | 434 | 19.2M | lzo_uint key; | 435 | | | 436 | | #ifdef LZO_DEBUG | 437 | | if (s->first_rp != LZO_UINT_MAX) | 438 | | { | 439 | | if (node != s->first_rp) | 440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", | 441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, | 442 | | (long)s->first_rp, (long)(s->ip - node), | 443 | | (long)(s->ip - s->bp)); | 444 | | assert(node == s->first_rp); | 445 | | s->first_rp = LZO_UINT_MAX; | 446 | | } | 447 | | #endif | 448 | | | 449 | 19.2M | key = HEAD3(s_b(s),node); | 450 | 19.2M | assert(s_llen3(s)[key] > 0); | 451 | 19.2M | --s_llen3(s)[key]; | 452 | | | 453 | 19.2M | #ifdef HEAD2 | 454 | 19.2M | IF_HEAD2(s) { | 455 | 19.2M | key = HEAD2(s_b(s),node); | 456 | 19.2M | assert(s_head2(s)[key] != NIL2); | 457 | 19.2M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 3.97M | s_head2(s)[key] = NIL2; | 459 | 19.2M | } | 460 | 19.2M | #endif | 461 | 19.2M | } | 462 | 12.9M | else | 463 | 12.9M | --s->node_count; | 464 | 32.1M | } |
lzo2a_9x.c:swd_remove_node Line | Count | Source | 431 | 11.7M | { | 432 | 11.7M | if (s->node_count == 0) | 433 | 10.5M | { | 434 | 10.5M | lzo_uint key; | 435 | | | 436 | | #ifdef LZO_DEBUG | 437 | | if (s->first_rp != LZO_UINT_MAX) | 438 | | { | 439 | | if (node != s->first_rp) | 440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", | 441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, | 442 | | (long)s->first_rp, (long)(s->ip - node), | 443 | | (long)(s->ip - s->bp)); | 444 | | assert(node == s->first_rp); | 445 | | s->first_rp = LZO_UINT_MAX; | 446 | | } | 447 | | #endif | 448 | | | 449 | 10.5M | key = HEAD3(s_b(s),node); | 450 | 10.5M | assert(s_llen3(s)[key] > 0); | 451 | 10.5M | --s_llen3(s)[key]; | 452 | | | 453 | 10.5M | #ifdef HEAD2 | 454 | 10.5M | IF_HEAD2(s) { | 455 | 10.5M | key = HEAD2(s_b(s),node); | 456 | 10.5M | assert(s_head2(s)[key] != NIL2); | 457 | 10.5M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 4.58M | s_head2(s)[key] = NIL2; | 459 | 10.5M | } | 460 | 10.5M | #endif | 461 | 10.5M | } | 462 | 1.13M | else | 463 | 1.13M | --s->node_count; | 464 | 11.7M | } |
|
465 | | |
466 | | |
467 | | /*********************************************************************** |
468 | | // |
469 | | ************************************************************************/ |
470 | | |
471 | | static |
472 | | void swd_accept(lzo_swd_p s, lzo_uint n) |
473 | 3.62M | { |
474 | 3.62M | assert(n <= s->look); |
475 | | |
476 | 3.62M | if (n) do |
477 | 69.8M | { |
478 | 69.8M | lzo_uint key; |
479 | | |
480 | 69.8M | swd_remove_node(s,s->rp); |
481 | | |
482 | | /* add bp into HEAD3 */ |
483 | 69.8M | key = HEAD3(s_b(s),s->bp); |
484 | 69.8M | s_succ3(s)[s->bp] = s_get_head3(s,key); |
485 | 69.8M | s_head3(s)[key] = SWD_UINT(s->bp); |
486 | 69.8M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); |
487 | 69.8M | s_llen3(s)[key]++; |
488 | 69.8M | assert(s_llen3(s)[key] <= s->swd_n); |
489 | | |
490 | | #ifdef HEAD2 |
491 | | /* add bp into HEAD2 */ |
492 | | IF_HEAD2(s) { |
493 | 51.1M | key = HEAD2(s_b(s),s->bp); |
494 | 51.1M | s_head2(s)[key] = SWD_UINT(s->bp); |
495 | | } |
496 | | #endif |
497 | | |
498 | 69.8M | swd_getbyte(s); |
499 | 69.8M | } while (--n != 0); |
500 | 3.62M | } Line | Count | Source | 473 | 160k | { | 474 | 160k | assert(n <= s->look); | 475 | | | 476 | 160k | if (n) do | 477 | 7.08M | { | 478 | 7.08M | lzo_uint key; | 479 | | | 480 | 7.08M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 7.08M | key = HEAD3(s_b(s),s->bp); | 484 | 7.08M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 7.08M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 7.08M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 7.08M | s_llen3(s)[key]++; | 488 | 7.08M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | | IF_HEAD2(s) { | 493 | | key = HEAD2(s_b(s),s->bp); | 494 | | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | | } | 496 | | #endif | 497 | | | 498 | 7.08M | swd_getbyte(s); | 499 | 7.08M | } while (--n != 0); | 500 | 160k | } |
Line | Count | Source | 473 | 100k | { | 474 | 100k | assert(n <= s->look); | 475 | | | 476 | 100k | if (n) do | 477 | 5.80M | { | 478 | 5.80M | lzo_uint key; | 479 | | | 480 | 5.80M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 5.80M | key = HEAD3(s_b(s),s->bp); | 484 | 5.80M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 5.80M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 5.80M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 5.80M | s_llen3(s)[key]++; | 488 | 5.80M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | | IF_HEAD2(s) { | 493 | | key = HEAD2(s_b(s),s->bp); | 494 | | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | | } | 496 | | #endif | 497 | | | 498 | 5.80M | swd_getbyte(s); | 499 | 5.80M | } while (--n != 0); | 500 | 100k | } |
Line | Count | Source | 473 | 124k | { | 474 | 124k | assert(n <= s->look); | 475 | | | 476 | 124k | if (n) do | 477 | 5.83M | { | 478 | 5.83M | lzo_uint key; | 479 | | | 480 | 5.83M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 5.83M | key = HEAD3(s_b(s),s->bp); | 484 | 5.83M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 5.83M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 5.83M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 5.83M | s_llen3(s)[key]++; | 488 | 5.83M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | | IF_HEAD2(s) { | 493 | | key = HEAD2(s_b(s),s->bp); | 494 | | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | | } | 496 | | #endif | 497 | | | 498 | 5.83M | swd_getbyte(s); | 499 | 5.83M | } while (--n != 0); | 500 | 124k | } |
Line | Count | Source | 473 | 668k | { | 474 | 668k | assert(n <= s->look); | 475 | | | 476 | 668k | if (n) do | 477 | 14.8M | { | 478 | 14.8M | lzo_uint key; | 479 | | | 480 | 14.8M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 14.8M | key = HEAD3(s_b(s),s->bp); | 484 | 14.8M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 14.8M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 14.8M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 14.8M | s_llen3(s)[key]++; | 488 | 14.8M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 14.8M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 14.8M | IF_HEAD2(s) { | 493 | 14.8M | key = HEAD2(s_b(s),s->bp); | 494 | 14.8M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 14.8M | } | 496 | 14.8M | #endif | 497 | | | 498 | 14.8M | swd_getbyte(s); | 499 | 14.8M | } while (--n != 0); | 500 | 668k | } |
Line | Count | Source | 473 | 720k | { | 474 | 720k | assert(n <= s->look); | 475 | | | 476 | 720k | if (n) do | 477 | 13.6M | { | 478 | 13.6M | lzo_uint key; | 479 | | | 480 | 13.6M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 13.6M | key = HEAD3(s_b(s),s->bp); | 484 | 13.6M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 13.6M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 13.6M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 13.6M | s_llen3(s)[key]++; | 488 | 13.6M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 13.6M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 13.6M | IF_HEAD2(s) { | 493 | 13.6M | key = HEAD2(s_b(s),s->bp); | 494 | 13.6M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 13.6M | } | 496 | 13.6M | #endif | 497 | | | 498 | 13.6M | swd_getbyte(s); | 499 | 13.6M | } while (--n != 0); | 500 | 720k | } |
Line | Count | Source | 473 | 866k | { | 474 | 866k | assert(n <= s->look); | 475 | | | 476 | 866k | if (n) do | 477 | 18.2M | { | 478 | 18.2M | lzo_uint key; | 479 | | | 480 | 18.2M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 18.2M | key = HEAD3(s_b(s),s->bp); | 484 | 18.2M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 18.2M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 18.2M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 18.2M | s_llen3(s)[key]++; | 488 | 18.2M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 18.2M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 18.2M | IF_HEAD2(s) { | 493 | 18.2M | key = HEAD2(s_b(s),s->bp); | 494 | 18.2M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 18.2M | } | 496 | 18.2M | #endif | 497 | | | 498 | 18.2M | swd_getbyte(s); | 499 | 18.2M | } while (--n != 0); | 500 | 866k | } |
Line | Count | Source | 473 | 987k | { | 474 | 987k | assert(n <= s->look); | 475 | | | 476 | 987k | if (n) do | 477 | 4.43M | { | 478 | 4.43M | lzo_uint key; | 479 | | | 480 | 4.43M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 4.43M | key = HEAD3(s_b(s),s->bp); | 484 | 4.43M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 4.43M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 4.43M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 4.43M | s_llen3(s)[key]++; | 488 | 4.43M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 4.43M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 4.43M | IF_HEAD2(s) { | 493 | 4.43M | key = HEAD2(s_b(s),s->bp); | 494 | 4.43M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 4.43M | } | 496 | 4.43M | #endif | 497 | | | 498 | 4.43M | swd_getbyte(s); | 499 | 4.43M | } while (--n != 0); | 500 | 987k | } |
|
501 | | |
502 | | |
503 | | /*********************************************************************** |
504 | | // |
505 | | ************************************************************************/ |
506 | | |
507 | | static |
508 | | void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt) |
509 | 49.2M | { |
510 | 49.2M | const lzo_bytep p1; |
511 | 49.2M | const lzo_bytep p2; |
512 | 49.2M | const lzo_bytep px; |
513 | 49.2M | lzo_uint m_len = s->m_len; |
514 | 49.2M | const lzo_bytep b = s_b(s); |
515 | 49.2M | const lzo_bytep bp = s_b(s) + s->bp; |
516 | 49.2M | const lzo_bytep bx = s_b(s) + s->bp + s->look; |
517 | 49.2M | swd_uintp succ3 = s_succ3(s); |
518 | 49.2M | unsigned char scan_end1; |
519 | | |
520 | 49.2M | assert(s->m_len > 0); |
521 | | |
522 | 49.2M | scan_end1 = bp[m_len - 1]; |
523 | 1.54G | for ( ; cnt-- > 0; node = succ3[node]) |
524 | 1.49G | { |
525 | 1.49G | p1 = bp; |
526 | 1.49G | p2 = b + node; |
527 | 1.49G | px = bx; |
528 | | |
529 | 1.49G | assert(m_len < s->look); |
530 | | |
531 | 1.49G | if ( |
532 | 1.49G | #if 1 |
533 | 1.49G | p2[m_len - 1] == scan_end1 && |
534 | 699M | p2[m_len] == p1[m_len] && |
535 | 111M | #endif |
536 | 111M | p2[0] == p1[0] && |
537 | 111M | p2[1] == p1[1]) |
538 | 111M | { |
539 | 111M | lzo_uint i; |
540 | 111M | assert(lzo_memcmp(bp,&b[node],3) == 0); |
541 | | |
542 | | #if 0 && (LZO_OPT_UNALIGNED32) |
543 | | p1 += 3; p2 += 3; |
544 | | while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) |
545 | | p1 += 4, p2 += 4; |
546 | | while (p1 < px && *p1 == *p2) |
547 | | p1 += 1, p2 += 1; |
548 | | #else |
549 | 111M | p1 += 2; p2 += 2; |
550 | 2.43G | do {} while (++p1 < px && *p1 == *++p2); |
551 | 111M | #endif |
552 | 111M | i = pd(p1, bp); |
553 | | |
554 | | #ifdef LZO_DEBUG |
555 | | if (lzo_memcmp(bp,&b[node],i) != 0) |
556 | | printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", |
557 | | (long)s->bp, (long) node, (long) i, |
558 | | bp[0], bp[1], b[node], b[node+1]); |
559 | | #endif |
560 | 111M | assert(lzo_memcmp(bp,&b[node],i) == 0); |
561 | | |
562 | | #if defined(SWD_BEST_OFF) |
563 | 103M | if (i < SWD_BEST_OFF) |
564 | 99.8M | { |
565 | 99.8M | if (s->best_pos[i] == 0) |
566 | 10.7M | s->best_pos[i] = node + 1; |
567 | 99.8M | } |
568 | | #endif |
569 | 111M | if (i > m_len) |
570 | 14.4M | { |
571 | 14.4M | s->m_len = m_len = i; |
572 | 14.4M | s->m_pos = node; |
573 | 14.4M | if (m_len == s->look) |
574 | 28.5k | return; |
575 | 14.4M | if (m_len >= s->nice_length) |
576 | 0 | return; |
577 | 14.4M | if (m_len > (lzo_uint) s_best3(s)[node]) |
578 | 1.22M | return; |
579 | 13.1M | scan_end1 = bp[m_len - 1]; |
580 | 13.1M | } |
581 | 111M | } |
582 | 1.49G | } |
583 | 49.2M | } Line | Count | Source | 509 | 4.50M | { | 510 | 4.50M | const lzo_bytep p1; | 511 | 4.50M | const lzo_bytep p2; | 512 | 4.50M | const lzo_bytep px; | 513 | 4.50M | lzo_uint m_len = s->m_len; | 514 | 4.50M | const lzo_bytep b = s_b(s); | 515 | 4.50M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 4.50M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 4.50M | swd_uintp succ3 = s_succ3(s); | 518 | 4.50M | unsigned char scan_end1; | 519 | | | 520 | 4.50M | assert(s->m_len > 0); | 521 | | | 522 | 4.50M | scan_end1 = bp[m_len - 1]; | 523 | 43.1M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 38.7M | { | 525 | 38.7M | p1 = bp; | 526 | 38.7M | p2 = b + node; | 527 | 38.7M | px = bx; | 528 | | | 529 | 38.7M | assert(m_len < s->look); | 530 | | | 531 | 38.7M | if ( | 532 | 38.7M | #if 1 | 533 | 38.7M | p2[m_len - 1] == scan_end1 && | 534 | 16.3M | p2[m_len] == p1[m_len] && | 535 | 1.92M | #endif | 536 | 1.92M | p2[0] == p1[0] && | 537 | 1.90M | p2[1] == p1[1]) | 538 | 1.89M | { | 539 | 1.89M | lzo_uint i; | 540 | 1.89M | assert(lzo_memcmp(bp,&b[node],3) == 0); | 541 | | | 542 | | #if 0 && (LZO_OPT_UNALIGNED32) | 543 | | p1 += 3; p2 += 3; | 544 | | while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) | 545 | | p1 += 4, p2 += 4; | 546 | | while (p1 < px && *p1 == *p2) | 547 | | p1 += 1, p2 += 1; | 548 | | #else | 549 | 1.89M | p1 += 2; p2 += 2; | 550 | 348M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 1.89M | #endif | 552 | 1.89M | i = pd(p1, bp); | 553 | | | 554 | | #ifdef LZO_DEBUG | 555 | | if (lzo_memcmp(bp,&b[node],i) != 0) | 556 | | printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", | 557 | | (long)s->bp, (long) node, (long) i, | 558 | | bp[0], bp[1], b[node], b[node+1]); | 559 | | #endif | 560 | 1.89M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | | #if defined(SWD_BEST_OFF) | 563 | | if (i < SWD_BEST_OFF) | 564 | | { | 565 | | if (s->best_pos[i] == 0) | 566 | | s->best_pos[i] = node + 1; | 567 | | } | 568 | | #endif | 569 | 1.89M | if (i > m_len) | 570 | 883k | { | 571 | 883k | s->m_len = m_len = i; | 572 | 883k | s->m_pos = node; | 573 | 883k | if (m_len == s->look) | 574 | 2.41k | return; | 575 | 881k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 881k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 81.5k | return; | 579 | 799k | scan_end1 = bp[m_len - 1]; | 580 | 799k | } | 581 | 1.89M | } | 582 | 38.7M | } | 583 | 4.50M | } |
Line | Count | Source | 509 | 7.29M | { | 510 | 7.29M | const lzo_bytep p1; | 511 | 7.29M | const lzo_bytep p2; | 512 | 7.29M | const lzo_bytep px; | 513 | 7.29M | lzo_uint m_len = s->m_len; | 514 | 7.29M | const lzo_bytep b = s_b(s); | 515 | 7.29M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 7.29M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 7.29M | swd_uintp succ3 = s_succ3(s); | 518 | 7.29M | unsigned char scan_end1; | 519 | | | 520 | 7.29M | assert(s->m_len > 0); | 521 | | | 522 | 7.29M | scan_end1 = bp[m_len - 1]; | 523 | 43.7M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 36.4M | { | 525 | 36.4M | p1 = bp; | 526 | 36.4M | p2 = b + node; | 527 | 36.4M | px = bx; | 528 | | | 529 | 36.4M | assert(m_len < s->look); | 530 | | | 531 | 36.4M | if ( | 532 | 36.4M | #if 1 | 533 | 36.4M | p2[m_len - 1] == scan_end1 && | 534 | 12.8M | p2[m_len] == p1[m_len] && | 535 | 1.60M | #endif | 536 | 1.60M | p2[0] == p1[0] && | 537 | 1.58M | p2[1] == p1[1]) | 538 | 1.57M | { | 539 | 1.57M | lzo_uint i; | 540 | 1.57M | assert(lzo_memcmp(bp,&b[node],3) == 0); | 541 | | | 542 | | #if 0 && (LZO_OPT_UNALIGNED32) | 543 | | p1 += 3; p2 += 3; | 544 | | while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) | 545 | | p1 += 4, p2 += 4; | 546 | | while (p1 < px && *p1 == *p2) | 547 | | p1 += 1, p2 += 1; | 548 | | #else | 549 | 1.57M | p1 += 2; p2 += 2; | 550 | 225M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 1.57M | #endif | 552 | 1.57M | i = pd(p1, bp); | 553 | | | 554 | | #ifdef LZO_DEBUG | 555 | | if (lzo_memcmp(bp,&b[node],i) != 0) | 556 | | printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", | 557 | | (long)s->bp, (long) node, (long) i, | 558 | | bp[0], bp[1], b[node], b[node+1]); | 559 | | #endif | 560 | 1.57M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | | #if defined(SWD_BEST_OFF) | 563 | | if (i < SWD_BEST_OFF) | 564 | | { | 565 | | if (s->best_pos[i] == 0) | 566 | | s->best_pos[i] = node + 1; | 567 | | } | 568 | | #endif | 569 | 1.57M | if (i > m_len) | 570 | 639k | { | 571 | 639k | s->m_len = m_len = i; | 572 | 639k | s->m_pos = node; | 573 | 639k | if (m_len == s->look) | 574 | 7.10k | return; | 575 | 632k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 632k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 52.8k | return; | 579 | 579k | scan_end1 = bp[m_len - 1]; | 580 | 579k | } | 581 | 1.57M | } | 582 | 36.4M | } | 583 | 7.29M | } |
Line | Count | Source | 509 | 14.1M | { | 510 | 14.1M | const lzo_bytep p1; | 511 | 14.1M | const lzo_bytep p2; | 512 | 14.1M | const lzo_bytep px; | 513 | 14.1M | lzo_uint m_len = s->m_len; | 514 | 14.1M | const lzo_bytep b = s_b(s); | 515 | 14.1M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 14.1M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 14.1M | swd_uintp succ3 = s_succ3(s); | 518 | 14.1M | unsigned char scan_end1; | 519 | | | 520 | 14.1M | assert(s->m_len > 0); | 521 | | | 522 | 14.1M | scan_end1 = bp[m_len - 1]; | 523 | 77.8M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 63.7M | { | 525 | 63.7M | p1 = bp; | 526 | 63.7M | p2 = b + node; | 527 | 63.7M | px = bx; | 528 | | | 529 | 63.7M | assert(m_len < s->look); | 530 | | | 531 | 63.7M | if ( | 532 | 63.7M | #if 1 | 533 | 63.7M | p2[m_len - 1] == scan_end1 && | 534 | 19.4M | p2[m_len] == p1[m_len] && | 535 | 2.70M | #endif | 536 | 2.70M | p2[0] == p1[0] && | 537 | 2.67M | p2[1] == p1[1]) | 538 | 2.66M | { | 539 | 2.66M | lzo_uint i; | 540 | 2.66M | assert(lzo_memcmp(bp,&b[node],3) == 0); | 541 | | | 542 | | #if 0 && (LZO_OPT_UNALIGNED32) | 543 | | p1 += 3; p2 += 3; | 544 | | while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) | 545 | | p1 += 4, p2 += 4; | 546 | | while (p1 < px && *p1 == *p2) | 547 | | p1 += 1, p2 += 1; | 548 | | #else | 549 | 2.66M | p1 += 2; p2 += 2; | 550 | 205M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 2.66M | #endif | 552 | 2.66M | i = pd(p1, bp); | 553 | | | 554 | | #ifdef LZO_DEBUG | 555 | | if (lzo_memcmp(bp,&b[node],i) != 0) | 556 | | printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", | 557 | | (long)s->bp, (long) node, (long) i, | 558 | | bp[0], bp[1], b[node], b[node+1]); | 559 | | #endif | 560 | 2.66M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | | #if defined(SWD_BEST_OFF) | 563 | | if (i < SWD_BEST_OFF) | 564 | | { | 565 | | if (s->best_pos[i] == 0) | 566 | | s->best_pos[i] = node + 1; | 567 | | } | 568 | | #endif | 569 | 2.66M | if (i > m_len) | 570 | 759k | { | 571 | 759k | s->m_len = m_len = i; | 572 | 759k | s->m_pos = node; | 573 | 759k | if (m_len == s->look) | 574 | 4.39k | return; | 575 | 755k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 755k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 72.5k | return; | 579 | 682k | scan_end1 = bp[m_len - 1]; | 580 | 682k | } | 581 | 2.66M | } | 582 | 63.7M | } | 583 | 14.1M | } |
Line | Count | Source | 509 | 5.10M | { | 510 | 5.10M | const lzo_bytep p1; | 511 | 5.10M | const lzo_bytep p2; | 512 | 5.10M | const lzo_bytep px; | 513 | 5.10M | lzo_uint m_len = s->m_len; | 514 | 5.10M | const lzo_bytep b = s_b(s); | 515 | 5.10M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 5.10M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 5.10M | swd_uintp succ3 = s_succ3(s); | 518 | 5.10M | unsigned char scan_end1; | 519 | | | 520 | 5.10M | assert(s->m_len > 0); | 521 | | | 522 | 5.10M | scan_end1 = bp[m_len - 1]; | 523 | 422M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 417M | { | 525 | 417M | p1 = bp; | 526 | 417M | p2 = b + node; | 527 | 417M | px = bx; | 528 | | | 529 | 417M | assert(m_len < s->look); | 530 | | | 531 | 417M | if ( | 532 | 417M | #if 1 | 533 | 417M | p2[m_len - 1] == scan_end1 && | 534 | 192M | p2[m_len] == p1[m_len] && | 535 | 31.2M | #endif | 536 | 31.2M | p2[0] == p1[0] && | 537 | 31.2M | p2[1] == p1[1]) | 538 | 31.2M | { | 539 | 31.2M | lzo_uint i; | 540 | 31.2M | assert(lzo_memcmp(bp,&b[node],3) == 0); | 541 | | | 542 | | #if 0 && (LZO_OPT_UNALIGNED32) | 543 | | p1 += 3; p2 += 3; | 544 | | while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) | 545 | | p1 += 4, p2 += 4; | 546 | | while (p1 < px && *p1 == *p2) | 547 | | p1 += 1, p2 += 1; | 548 | | #else | 549 | 31.2M | p1 += 2; p2 += 2; | 550 | 542M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 31.2M | #endif | 552 | 31.2M | i = pd(p1, bp); | 553 | | | 554 | | #ifdef LZO_DEBUG | 555 | | if (lzo_memcmp(bp,&b[node],i) != 0) | 556 | | printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", | 557 | | (long)s->bp, (long) node, (long) i, | 558 | | bp[0], bp[1], b[node], b[node+1]); | 559 | | #endif | 560 | 31.2M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 31.2M | #if defined(SWD_BEST_OFF) | 563 | 31.2M | if (i < SWD_BEST_OFF) | 564 | 30.0M | { | 565 | 30.0M | if (s->best_pos[i] == 0) | 566 | 3.68M | s->best_pos[i] = node + 1; | 567 | 30.0M | } | 568 | 31.2M | #endif | 569 | 31.2M | if (i > m_len) | 570 | 4.01M | { | 571 | 4.01M | s->m_len = m_len = i; | 572 | 4.01M | s->m_pos = node; | 573 | 4.01M | if (m_len == s->look) | 574 | 4.01k | return; | 575 | 4.01M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 4.01M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 317k | return; | 579 | 3.69M | scan_end1 = bp[m_len - 1]; | 580 | 3.69M | } | 581 | 31.2M | } | 582 | 417M | } | 583 | 5.10M | } |
Line | Count | Source | 509 | 8.34M | { | 510 | 8.34M | const lzo_bytep p1; | 511 | 8.34M | const lzo_bytep p2; | 512 | 8.34M | const lzo_bytep px; | 513 | 8.34M | lzo_uint m_len = s->m_len; | 514 | 8.34M | const lzo_bytep b = s_b(s); | 515 | 8.34M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 8.34M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 8.34M | swd_uintp succ3 = s_succ3(s); | 518 | 8.34M | unsigned char scan_end1; | 519 | | | 520 | 8.34M | assert(s->m_len > 0); | 521 | | | 522 | 8.34M | scan_end1 = bp[m_len - 1]; | 523 | 557M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 549M | { | 525 | 549M | p1 = bp; | 526 | 549M | p2 = b + node; | 527 | 549M | px = bx; | 528 | | | 529 | 549M | assert(m_len < s->look); | 530 | | | 531 | 549M | if ( | 532 | 549M | #if 1 | 533 | 549M | p2[m_len - 1] == scan_end1 && | 534 | 283M | p2[m_len] == p1[m_len] && | 535 | 46.5M | #endif | 536 | 46.5M | p2[0] == p1[0] && | 537 | 46.4M | p2[1] == p1[1]) | 538 | 46.4M | { | 539 | 46.4M | lzo_uint i; | 540 | 46.4M | assert(lzo_memcmp(bp,&b[node],3) == 0); | 541 | | | 542 | | #if 0 && (LZO_OPT_UNALIGNED32) | 543 | | p1 += 3; p2 += 3; | 544 | | while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) | 545 | | p1 += 4, p2 += 4; | 546 | | while (p1 < px && *p1 == *p2) | 547 | | p1 += 1, p2 += 1; | 548 | | #else | 549 | 46.4M | p1 += 2; p2 += 2; | 550 | 340M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 46.4M | #endif | 552 | 46.4M | i = pd(p1, bp); | 553 | | | 554 | | #ifdef LZO_DEBUG | 555 | | if (lzo_memcmp(bp,&b[node],i) != 0) | 556 | | printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", | 557 | | (long)s->bp, (long) node, (long) i, | 558 | | bp[0], bp[1], b[node], b[node+1]); | 559 | | #endif | 560 | 46.4M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 46.4M | #if defined(SWD_BEST_OFF) | 563 | 46.4M | if (i < SWD_BEST_OFF) | 564 | 45.4M | { | 565 | 45.4M | if (s->best_pos[i] == 0) | 566 | 3.86M | s->best_pos[i] = node + 1; | 567 | 45.4M | } | 568 | 46.4M | #endif | 569 | 46.4M | if (i > m_len) | 570 | 3.74M | { | 571 | 3.74M | s->m_len = m_len = i; | 572 | 3.74M | s->m_pos = node; | 573 | 3.74M | if (m_len == s->look) | 574 | 2.86k | return; | 575 | 3.73M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 3.73M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 315k | return; | 579 | 3.42M | scan_end1 = bp[m_len - 1]; | 580 | 3.42M | } | 581 | 46.4M | } | 582 | 549M | } | 583 | 8.34M | } |
Line | Count | Source | 509 | 7.31M | { | 510 | 7.31M | const lzo_bytep p1; | 511 | 7.31M | const lzo_bytep p2; | 512 | 7.31M | const lzo_bytep px; | 513 | 7.31M | lzo_uint m_len = s->m_len; | 514 | 7.31M | const lzo_bytep b = s_b(s); | 515 | 7.31M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 7.31M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 7.31M | swd_uintp succ3 = s_succ3(s); | 518 | 7.31M | unsigned char scan_end1; | 519 | | | 520 | 7.31M | assert(s->m_len > 0); | 521 | | | 522 | 7.31M | scan_end1 = bp[m_len - 1]; | 523 | 376M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 369M | { | 525 | 369M | p1 = bp; | 526 | 369M | p2 = b + node; | 527 | 369M | px = bx; | 528 | | | 529 | 369M | assert(m_len < s->look); | 530 | | | 531 | 369M | if ( | 532 | 369M | #if 1 | 533 | 369M | p2[m_len - 1] == scan_end1 && | 534 | 162M | p2[m_len] == p1[m_len] && | 535 | 25.7M | #endif | 536 | 25.7M | p2[0] == p1[0] && | 537 | 25.7M | p2[1] == p1[1]) | 538 | 25.7M | { | 539 | 25.7M | lzo_uint i; | 540 | 25.7M | assert(lzo_memcmp(bp,&b[node],3) == 0); | 541 | | | 542 | | #if 0 && (LZO_OPT_UNALIGNED32) | 543 | | p1 += 3; p2 += 3; | 544 | | while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) | 545 | | p1 += 4, p2 += 4; | 546 | | while (p1 < px && *p1 == *p2) | 547 | | p1 += 1, p2 += 1; | 548 | | #else | 549 | 25.7M | p1 += 2; p2 += 2; | 550 | 534M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 25.7M | #endif | 552 | 25.7M | i = pd(p1, bp); | 553 | | | 554 | | #ifdef LZO_DEBUG | 555 | | if (lzo_memcmp(bp,&b[node],i) != 0) | 556 | | printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", | 557 | | (long)s->bp, (long) node, (long) i, | 558 | | bp[0], bp[1], b[node], b[node+1]); | 559 | | #endif | 560 | 25.7M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 25.7M | #if defined(SWD_BEST_OFF) | 563 | 25.7M | if (i < SWD_BEST_OFF) | 564 | 24.3M | { | 565 | 24.3M | if (s->best_pos[i] == 0) | 566 | 3.20M | s->best_pos[i] = node + 1; | 567 | 24.3M | } | 568 | 25.7M | #endif | 569 | 25.7M | if (i > m_len) | 570 | 3.67M | { | 571 | 3.67M | s->m_len = m_len = i; | 572 | 3.67M | s->m_pos = node; | 573 | 3.67M | if (m_len == s->look) | 574 | 5.07k | return; | 575 | 3.67M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 3.67M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 317k | return; | 579 | 3.35M | scan_end1 = bp[m_len - 1]; | 580 | 3.35M | } | 581 | 25.7M | } | 582 | 369M | } | 583 | 7.31M | } |
Line | Count | Source | 509 | 2.45M | { | 510 | 2.45M | const lzo_bytep p1; | 511 | 2.45M | const lzo_bytep p2; | 512 | 2.45M | const lzo_bytep px; | 513 | 2.45M | lzo_uint m_len = s->m_len; | 514 | 2.45M | const lzo_bytep b = s_b(s); | 515 | 2.45M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 2.45M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 2.45M | swd_uintp succ3 = s_succ3(s); | 518 | 2.45M | unsigned char scan_end1; | 519 | | | 520 | 2.45M | assert(s->m_len > 0); | 521 | | | 522 | 2.45M | scan_end1 = bp[m_len - 1]; | 523 | 24.8M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 22.4M | { | 525 | 22.4M | p1 = bp; | 526 | 22.4M | p2 = b + node; | 527 | 22.4M | px = bx; | 528 | | | 529 | 22.4M | assert(m_len < s->look); | 530 | | | 531 | 22.4M | if ( | 532 | 22.4M | #if 1 | 533 | 22.4M | p2[m_len - 1] == scan_end1 && | 534 | 13.0M | p2[m_len] == p1[m_len] && | 535 | 1.73M | #endif | 536 | 1.73M | p2[0] == p1[0] && | 537 | 1.72M | p2[1] == p1[1]) | 538 | 1.72M | { | 539 | 1.72M | lzo_uint i; | 540 | 1.72M | assert(lzo_memcmp(bp,&b[node],3) == 0); | 541 | | | 542 | | #if 0 && (LZO_OPT_UNALIGNED32) | 543 | | p1 += 3; p2 += 3; | 544 | | while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2)) | 545 | | p1 += 4, p2 += 4; | 546 | | while (p1 < px && *p1 == *p2) | 547 | | p1 += 1, p2 += 1; | 548 | | #else | 549 | 1.72M | p1 += 2; p2 += 2; | 550 | 237M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 1.72M | #endif | 552 | 1.72M | i = pd(p1, bp); | 553 | | | 554 | | #ifdef LZO_DEBUG | 555 | | if (lzo_memcmp(bp,&b[node],i) != 0) | 556 | | printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n", | 557 | | (long)s->bp, (long) node, (long) i, | 558 | | bp[0], bp[1], b[node], b[node+1]); | 559 | | #endif | 560 | 1.72M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | | #if defined(SWD_BEST_OFF) | 563 | | if (i < SWD_BEST_OFF) | 564 | | { | 565 | | if (s->best_pos[i] == 0) | 566 | | s->best_pos[i] = node + 1; | 567 | | } | 568 | | #endif | 569 | 1.72M | if (i > m_len) | 570 | 718k | { | 571 | 718k | s->m_len = m_len = i; | 572 | 718k | s->m_pos = node; | 573 | 718k | if (m_len == s->look) | 574 | 2.66k | return; | 575 | 715k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 715k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 65.2k | return; | 579 | 650k | scan_end1 = bp[m_len - 1]; | 580 | 650k | } | 581 | 1.72M | } | 582 | 22.4M | } | 583 | 2.45M | } |
|
584 | | |
585 | | |
586 | | /*********************************************************************** |
587 | | // |
588 | | ************************************************************************/ |
589 | | |
590 | | #ifdef HEAD2 |
591 | | |
592 | | static |
593 | | lzo_bool swd_search2(lzo_swd_p s) |
594 | 47.0M | { |
595 | 47.0M | lzo_uint key; |
596 | | |
597 | 47.0M | assert(s->look >= 2); |
598 | 47.0M | assert(s->m_len > 0); |
599 | | |
600 | 47.0M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; |
601 | 47.0M | if (key == NIL2) |
602 | 23.7M | return 0; |
603 | | #ifdef LZO_DEBUG |
604 | | if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0) |
605 | | printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key, |
606 | | s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]); |
607 | | #endif |
608 | 47.0M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); |
609 | | #if defined(SWD_BEST_OFF) |
610 | 20.7M | if (s->best_pos[2] == 0) |
611 | 20.7M | s->best_pos[2] = key + 1; |
612 | | #endif |
613 | | |
614 | 23.2M | if (s->m_len < 2) |
615 | 23.2M | { |
616 | 23.2M | s->m_len = 2; |
617 | 23.2M | s->m_pos = key; |
618 | 23.2M | } |
619 | 23.2M | return 1; |
620 | 47.0M | } Line | Count | Source | 594 | 9.85M | { | 595 | 9.85M | lzo_uint key; | 596 | | | 597 | 9.85M | assert(s->look >= 2); | 598 | 9.85M | assert(s->m_len > 0); | 599 | | | 600 | 9.85M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 9.85M | if (key == NIL2) | 602 | 4.74M | return 0; | 603 | | #ifdef LZO_DEBUG | 604 | | if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0) | 605 | | printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key, | 606 | | s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]); | 607 | | #endif | 608 | 9.85M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 5.10M | #if defined(SWD_BEST_OFF) | 610 | 5.10M | if (s->best_pos[2] == 0) | 611 | 5.10M | s->best_pos[2] = key + 1; | 612 | 5.10M | #endif | 613 | | | 614 | 5.10M | if (s->m_len < 2) | 615 | 5.10M | { | 616 | 5.10M | s->m_len = 2; | 617 | 5.10M | s->m_pos = key; | 618 | 5.10M | } | 619 | 5.10M | return 1; | 620 | 9.85M | } |
Line | Count | Source | 594 | 15.9M | { | 595 | 15.9M | lzo_uint key; | 596 | | | 597 | 15.9M | assert(s->look >= 2); | 598 | 15.9M | assert(s->m_len > 0); | 599 | | | 600 | 15.9M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 15.9M | if (key == NIL2) | 602 | 7.58M | return 0; | 603 | | #ifdef LZO_DEBUG | 604 | | if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0) | 605 | | printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key, | 606 | | s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]); | 607 | | #endif | 608 | 15.9M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 8.34M | #if defined(SWD_BEST_OFF) | 610 | 8.34M | if (s->best_pos[2] == 0) | 611 | 8.34M | s->best_pos[2] = key + 1; | 612 | 8.34M | #endif | 613 | | | 614 | 8.34M | if (s->m_len < 2) | 615 | 8.34M | { | 616 | 8.34M | s->m_len = 2; | 617 | 8.34M | s->m_pos = key; | 618 | 8.34M | } | 619 | 8.34M | return 1; | 620 | 15.9M | } |
Line | Count | Source | 594 | 13.9M | { | 595 | 13.9M | lzo_uint key; | 596 | | | 597 | 13.9M | assert(s->look >= 2); | 598 | 13.9M | assert(s->m_len > 0); | 599 | | | 600 | 13.9M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 13.9M | if (key == NIL2) | 602 | 6.63M | return 0; | 603 | | #ifdef LZO_DEBUG | 604 | | if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0) | 605 | | printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key, | 606 | | s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]); | 607 | | #endif | 608 | 13.9M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 7.31M | #if defined(SWD_BEST_OFF) | 610 | 7.31M | if (s->best_pos[2] == 0) | 611 | 7.31M | s->best_pos[2] = key + 1; | 612 | 7.31M | #endif | 613 | | | 614 | 7.31M | if (s->m_len < 2) | 615 | 7.31M | { | 616 | 7.31M | s->m_len = 2; | 617 | 7.31M | s->m_pos = key; | 618 | 7.31M | } | 619 | 7.31M | return 1; | 620 | 13.9M | } |
Line | Count | Source | 594 | 7.28M | { | 595 | 7.28M | lzo_uint key; | 596 | | | 597 | 7.28M | assert(s->look >= 2); | 598 | 7.28M | assert(s->m_len > 0); | 599 | | | 600 | 7.28M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 7.28M | if (key == NIL2) | 602 | 4.82M | return 0; | 603 | | #ifdef LZO_DEBUG | 604 | | if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0) | 605 | | printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key, | 606 | | s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]); | 607 | | #endif | 608 | 7.28M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | | #if defined(SWD_BEST_OFF) | 610 | | if (s->best_pos[2] == 0) | 611 | | s->best_pos[2] = key + 1; | 612 | | #endif | 613 | | | 614 | 2.45M | if (s->m_len < 2) | 615 | 2.45M | { | 616 | 2.45M | s->m_len = 2; | 617 | 2.45M | s->m_pos = key; | 618 | 2.45M | } | 619 | 2.45M | return 1; | 620 | 7.28M | } |
|
621 | | |
622 | | #endif |
623 | | |
624 | | |
625 | | /*********************************************************************** |
626 | | // |
627 | | ************************************************************************/ |
628 | | |
629 | | static |
630 | | void swd_findbest(lzo_swd_p s) |
631 | 73.0M | { |
632 | 73.0M | lzo_uint key; |
633 | 73.0M | lzo_uint cnt, node; |
634 | 73.0M | lzo_uint len; |
635 | | |
636 | 73.0M | assert(s->m_len > 0); |
637 | | |
638 | | /* get current head, add bp into HEAD3 */ |
639 | 73.0M | key = HEAD3(s_b(s),s->bp); |
640 | 73.0M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); |
641 | 73.0M | cnt = s_llen3(s)[key]++; |
642 | 73.0M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); |
643 | 73.0M | if (cnt > s->max_chain && s->max_chain > 0) |
644 | 385k | cnt = s->max_chain; |
645 | 73.0M | s_head3(s)[key] = SWD_UINT(s->bp); |
646 | | |
647 | 73.0M | s->b_char = s_b(s)[s->bp]; |
648 | 73.0M | len = s->m_len; |
649 | 73.0M | if (s->m_len >= s->look) |
650 | 11.1k | { |
651 | 11.1k | if (s->look == 0) |
652 | 6.42k | s->b_char = -1; |
653 | 11.1k | s->m_off = 0; |
654 | 11.1k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); |
655 | 11.1k | } |
656 | 72.9M | else |
657 | 72.9M | { |
658 | | #if defined(HEAD2) |
659 | 47.0M | if (swd_search2(s) && s->look >= 3) |
660 | 23.2M | swd_search(s,node,cnt); |
661 | | #else |
662 | 25.9M | if (s->look >= 3) |
663 | 25.9M | swd_search(s,node,cnt); |
664 | | #endif |
665 | 72.9M | if (s->m_len > len) |
666 | 23.9M | s->m_off = swd_pos2off(s,s->m_pos); |
667 | 72.9M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); |
668 | | |
669 | | #if defined(SWD_BEST_OFF) |
670 | 39.7M | if (s->use_best_off) |
671 | 39.7M | { |
672 | 39.7M | unsigned i; |
673 | 1.31G | for (i = 2; i < SWD_BEST_OFF; i++) |
674 | 1.27G | if (s->best_pos[i] > 0) |
675 | 31.5M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); |
676 | 1.24G | else |
677 | 1.24G | s->best_off[i] = 0; |
678 | 39.7M | } |
679 | | #endif |
680 | 72.9M | } |
681 | | |
682 | 73.0M | swd_remove_node(s,s->rp); |
683 | | |
684 | | #ifdef HEAD2 |
685 | | /* add bp into HEAD2 */ |
686 | | IF_HEAD2(s) { |
687 | 47.0M | key = HEAD2(s_b(s),s->bp); |
688 | 47.0M | s_head2(s)[key] = SWD_UINT(s->bp); |
689 | | } |
690 | | #endif |
691 | 73.0M | } Line | Count | Source | 631 | 4.50M | { | 632 | 4.50M | lzo_uint key; | 633 | 4.50M | lzo_uint cnt, node; | 634 | 4.50M | lzo_uint len; | 635 | | | 636 | 4.50M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 4.50M | key = HEAD3(s_b(s),s->bp); | 640 | 4.50M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 4.50M | cnt = s_llen3(s)[key]++; | 642 | 4.50M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 4.50M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 7.32k | cnt = s->max_chain; | 645 | 4.50M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 4.50M | s->b_char = s_b(s)[s->bp]; | 648 | 4.50M | len = s->m_len; | 649 | 4.50M | if (s->m_len >= s->look) | 650 | 1.16k | { | 651 | 1.16k | if (s->look == 0) | 652 | 569 | s->b_char = -1; | 653 | 1.16k | s->m_off = 0; | 654 | 1.16k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.16k | } | 656 | 4.50M | else | 657 | 4.50M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 4.50M | if (s->look >= 3) | 663 | 4.50M | swd_search(s,node,cnt); | 664 | 4.50M | #endif | 665 | 4.50M | if (s->m_len > len) | 666 | 256k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 4.50M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | | #if defined(SWD_BEST_OFF) | 670 | | if (s->use_best_off) | 671 | | { | 672 | | unsigned i; | 673 | | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | | if (s->best_pos[i] > 0) | 675 | | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | | else | 677 | | s->best_off[i] = 0; | 678 | | } | 679 | | #endif | 680 | 4.50M | } | 681 | | | 682 | 4.50M | swd_remove_node(s,s->rp); | 683 | | | 684 | | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | | IF_HEAD2(s) { | 687 | | key = HEAD2(s_b(s),s->bp); | 688 | | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | | } | 690 | | #endif | 691 | 4.50M | } |
Line | Count | Source | 631 | 7.29M | { | 632 | 7.29M | lzo_uint key; | 633 | 7.29M | lzo_uint cnt, node; | 634 | 7.29M | lzo_uint len; | 635 | | | 636 | 7.29M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 7.29M | key = HEAD3(s_b(s),s->bp); | 640 | 7.29M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 7.29M | cnt = s_llen3(s)[key]++; | 642 | 7.29M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 7.29M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 8.87k | cnt = s->max_chain; | 645 | 7.29M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 7.29M | s->b_char = s_b(s)[s->bp]; | 648 | 7.29M | len = s->m_len; | 649 | 7.29M | if (s->m_len >= s->look) | 650 | 1.21k | { | 651 | 1.21k | if (s->look == 0) | 652 | 637 | s->b_char = -1; | 653 | 1.21k | s->m_off = 0; | 654 | 1.21k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.21k | } | 656 | 7.29M | else | 657 | 7.29M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 7.29M | if (s->look >= 3) | 663 | 7.29M | swd_search(s,node,cnt); | 664 | 7.29M | #endif | 665 | 7.29M | if (s->m_len > len) | 666 | 179k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 7.29M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | | #if defined(SWD_BEST_OFF) | 670 | | if (s->use_best_off) | 671 | | { | 672 | | unsigned i; | 673 | | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | | if (s->best_pos[i] > 0) | 675 | | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | | else | 677 | | s->best_off[i] = 0; | 678 | | } | 679 | | #endif | 680 | 7.29M | } | 681 | | | 682 | 7.29M | swd_remove_node(s,s->rp); | 683 | | | 684 | | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | | IF_HEAD2(s) { | 687 | | key = HEAD2(s_b(s),s->bp); | 688 | | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | | } | 690 | | #endif | 691 | 7.29M | } |
Line | Count | Source | 631 | 14.1M | { | 632 | 14.1M | lzo_uint key; | 633 | 14.1M | lzo_uint cnt, node; | 634 | 14.1M | lzo_uint len; | 635 | | | 636 | 14.1M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 14.1M | key = HEAD3(s_b(s),s->bp); | 640 | 14.1M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 14.1M | cnt = s_llen3(s)[key]++; | 642 | 14.1M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 14.1M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 5.10k | cnt = s->max_chain; | 645 | 14.1M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 14.1M | s->b_char = s_b(s)[s->bp]; | 648 | 14.1M | len = s->m_len; | 649 | 14.1M | if (s->m_len >= s->look) | 650 | 1.38k | { | 651 | 1.38k | if (s->look == 0) | 652 | 677 | s->b_char = -1; | 653 | 1.38k | s->m_off = 0; | 654 | 1.38k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.38k | } | 656 | 14.1M | else | 657 | 14.1M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 14.1M | if (s->look >= 3) | 663 | 14.1M | swd_search(s,node,cnt); | 664 | 14.1M | #endif | 665 | 14.1M | if (s->m_len > len) | 666 | 234k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 14.1M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | | #if defined(SWD_BEST_OFF) | 670 | | if (s->use_best_off) | 671 | | { | 672 | | unsigned i; | 673 | | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | | if (s->best_pos[i] > 0) | 675 | | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | | else | 677 | | s->best_off[i] = 0; | 678 | | } | 679 | | #endif | 680 | 14.1M | } | 681 | | | 682 | 14.1M | swd_remove_node(s,s->rp); | 683 | | | 684 | | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | | IF_HEAD2(s) { | 687 | | key = HEAD2(s_b(s),s->bp); | 688 | | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | | } | 690 | | #endif | 691 | 14.1M | } |
Line | Count | Source | 631 | 9.85M | { | 632 | 9.85M | lzo_uint key; | 633 | 9.85M | lzo_uint cnt, node; | 634 | 9.85M | lzo_uint len; | 635 | | | 636 | 9.85M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 9.85M | key = HEAD3(s_b(s),s->bp); | 640 | 9.85M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 9.85M | cnt = s_llen3(s)[key]++; | 642 | 9.85M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 9.85M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 107k | cnt = s->max_chain; | 645 | 9.85M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 9.85M | s->b_char = s_b(s)[s->bp]; | 648 | 9.85M | len = s->m_len; | 649 | 9.85M | if (s->m_len >= s->look) | 650 | 1.93k | { | 651 | 1.93k | if (s->look == 0) | 652 | 1.19k | s->b_char = -1; | 653 | 1.93k | s->m_off = 0; | 654 | 1.93k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.93k | } | 656 | 9.85M | else | 657 | 9.85M | { | 658 | 9.85M | #if defined(HEAD2) | 659 | 9.85M | if (swd_search2(s) && s->look >= 3) | 660 | 5.10M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 9.85M | if (s->m_len > len) | 666 | 5.10M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 9.85M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 9.85M | #if defined(SWD_BEST_OFF) | 670 | 9.85M | if (s->use_best_off) | 671 | 9.85M | { | 672 | 9.85M | unsigned i; | 673 | 325M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 315M | if (s->best_pos[i] > 0) | 675 | 8.79M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 306M | else | 677 | 306M | s->best_off[i] = 0; | 678 | 9.85M | } | 679 | 9.85M | #endif | 680 | 9.85M | } | 681 | | | 682 | 9.85M | swd_remove_node(s,s->rp); | 683 | | | 684 | 9.85M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 9.85M | IF_HEAD2(s) { | 687 | 9.85M | key = HEAD2(s_b(s),s->bp); | 688 | 9.85M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 9.85M | } | 690 | 9.85M | #endif | 691 | 9.85M | } |
Line | Count | Source | 631 | 15.9M | { | 632 | 15.9M | lzo_uint key; | 633 | 15.9M | lzo_uint cnt, node; | 634 | 15.9M | lzo_uint len; | 635 | | | 636 | 15.9M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 15.9M | key = HEAD3(s_b(s),s->bp); | 640 | 15.9M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 15.9M | cnt = s_llen3(s)[key]++; | 642 | 15.9M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 15.9M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 168k | cnt = s->max_chain; | 645 | 15.9M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 15.9M | s->b_char = s_b(s)[s->bp]; | 648 | 15.9M | len = s->m_len; | 649 | 15.9M | if (s->m_len >= s->look) | 650 | 1.99k | { | 651 | 1.99k | if (s->look == 0) | 652 | 1.22k | s->b_char = -1; | 653 | 1.99k | s->m_off = 0; | 654 | 1.99k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.99k | } | 656 | 15.9M | else | 657 | 15.9M | { | 658 | 15.9M | #if defined(HEAD2) | 659 | 15.9M | if (swd_search2(s) && s->look >= 3) | 660 | 8.34M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 15.9M | if (s->m_len > len) | 666 | 8.34M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 15.9M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 15.9M | #if defined(SWD_BEST_OFF) | 670 | 15.9M | if (s->use_best_off) | 671 | 15.9M | { | 672 | 15.9M | unsigned i; | 673 | 525M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 509M | if (s->best_pos[i] > 0) | 675 | 12.2M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 497M | else | 677 | 497M | s->best_off[i] = 0; | 678 | 15.9M | } | 679 | 15.9M | #endif | 680 | 15.9M | } | 681 | | | 682 | 15.9M | swd_remove_node(s,s->rp); | 683 | | | 684 | 15.9M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 15.9M | IF_HEAD2(s) { | 687 | 15.9M | key = HEAD2(s_b(s),s->bp); | 688 | 15.9M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 15.9M | } | 690 | 15.9M | #endif | 691 | 15.9M | } |
Line | Count | Source | 631 | 13.9M | { | 632 | 13.9M | lzo_uint key; | 633 | 13.9M | lzo_uint cnt, node; | 634 | 13.9M | lzo_uint len; | 635 | | | 636 | 13.9M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 13.9M | key = HEAD3(s_b(s),s->bp); | 640 | 13.9M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 13.9M | cnt = s_llen3(s)[key]++; | 642 | 13.9M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 13.9M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 82.5k | cnt = s->max_chain; | 645 | 13.9M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 13.9M | s->b_char = s_b(s)[s->bp]; | 648 | 13.9M | len = s->m_len; | 649 | 13.9M | if (s->m_len >= s->look) | 650 | 2.44k | { | 651 | 2.44k | if (s->look == 0) | 652 | 1.47k | s->b_char = -1; | 653 | 2.44k | s->m_off = 0; | 654 | 2.44k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 2.44k | } | 656 | 13.9M | else | 657 | 13.9M | { | 658 | 13.9M | #if defined(HEAD2) | 659 | 13.9M | if (swd_search2(s) && s->look >= 3) | 660 | 7.31M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 13.9M | if (s->m_len > len) | 666 | 7.31M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 13.9M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 13.9M | #if defined(SWD_BEST_OFF) | 670 | 13.9M | if (s->use_best_off) | 671 | 13.9M | { | 672 | 13.9M | unsigned i; | 673 | 460M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 446M | if (s->best_pos[i] > 0) | 675 | 10.5M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 435M | else | 677 | 435M | s->best_off[i] = 0; | 678 | 13.9M | } | 679 | 13.9M | #endif | 680 | 13.9M | } | 681 | | | 682 | 13.9M | swd_remove_node(s,s->rp); | 683 | | | 684 | 13.9M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 13.9M | IF_HEAD2(s) { | 687 | 13.9M | key = HEAD2(s_b(s),s->bp); | 688 | 13.9M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 13.9M | } | 690 | 13.9M | #endif | 691 | 13.9M | } |
Line | Count | Source | 631 | 7.28M | { | 632 | 7.28M | lzo_uint key; | 633 | 7.28M | lzo_uint cnt, node; | 634 | 7.28M | lzo_uint len; | 635 | | | 636 | 7.28M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 7.28M | key = HEAD3(s_b(s),s->bp); | 640 | 7.28M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 7.28M | cnt = s_llen3(s)[key]++; | 642 | 7.28M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 7.28M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 5.57k | cnt = s->max_chain; | 645 | 7.28M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 7.28M | s->b_char = s_b(s)[s->bp]; | 648 | 7.28M | len = s->m_len; | 649 | 7.28M | if (s->m_len >= s->look) | 650 | 1.04k | { | 651 | 1.04k | if (s->look == 0) | 652 | 647 | s->b_char = -1; | 653 | 1.04k | s->m_off = 0; | 654 | 1.04k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.04k | } | 656 | 7.28M | else | 657 | 7.28M | { | 658 | 7.28M | #if defined(HEAD2) | 659 | 7.28M | if (swd_search2(s) && s->look >= 3) | 660 | 2.45M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 7.28M | if (s->m_len > len) | 666 | 2.45M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 7.28M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | | #if defined(SWD_BEST_OFF) | 670 | | if (s->use_best_off) | 671 | | { | 672 | | unsigned i; | 673 | | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | | if (s->best_pos[i] > 0) | 675 | | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | | else | 677 | | s->best_off[i] = 0; | 678 | | } | 679 | | #endif | 680 | 7.28M | } | 681 | | | 682 | 7.28M | swd_remove_node(s,s->rp); | 683 | | | 684 | 7.28M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 7.28M | IF_HEAD2(s) { | 687 | 7.28M | key = HEAD2(s_b(s),s->bp); | 688 | 7.28M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 7.28M | } | 690 | 7.28M | #endif | 691 | 7.28M | } |
|
692 | | |
693 | | |
694 | | #undef HEAD3 |
695 | | #undef HEAD2 |
696 | | #undef IF_HEAD2 |
697 | | #undef s_get_head3 |
698 | | |
699 | | |
700 | | /* vim:set ts=4 sw=4 et: */ |