/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.15M | # define SWD_UINT_MAX 0xffffffffu |
51 | | #endif |
52 | 51.0M | #define swd_uintp swd_uint * |
53 | 406M | #define SWD_UINT(x) ((swd_uint)(x)) |
54 | | |
55 | | |
56 | | #ifndef SWD_HSIZE |
57 | 248M | # define SWD_HSIZE 16384 |
58 | | #endif |
59 | | #ifndef SWD_MAX_CHAIN |
60 | 7.40k | # define SWD_MAX_CHAIN 2048 |
61 | | #endif |
62 | | |
63 | | #if !defined(HEAD3) |
64 | | #if 1 |
65 | | # define HEAD3(b,p) \ |
66 | 248M | ((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 | 210M | # 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 | 61.8M | # 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 | 7.40k | #define lzo_swd_p lzo_swd_t * |
155 | | |
156 | | |
157 | 379M | #define s_b(s) s->b |
158 | 281M | #define s_head3(s) s->head3 |
159 | 202M | #define s_succ3(s) s->succ3 |
160 | 167M | #define s_best3(s) s->best3 |
161 | 400M | #define s_llen3(s) s->llen3 |
162 | | #ifdef HEAD2 |
163 | 224M | #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 | 151M | ((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 | 7.40k | { |
187 | 7.40k | s->dict = s->dict_end = NULL; |
188 | 7.40k | s->dict_len = 0; |
189 | | |
190 | 7.40k | if (!dict || dict_len == 0) |
191 | 7.40k | 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 | 659 | { | 187 | 659 | s->dict = s->dict_end = NULL; | 188 | 659 | s->dict_len = 0; | 189 | | | 190 | 659 | if (!dict || dict_len == 0) | 191 | 659 | 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 | 718 | { | 187 | 718 | s->dict = s->dict_end = NULL; | 188 | 718 | s->dict_len = 0; | 189 | | | 190 | 718 | if (!dict || dict_len == 0) | 191 | 718 | 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 | 832 | { | 187 | 832 | s->dict = s->dict_end = NULL; | 188 | 832 | s->dict_len = 0; | 189 | | | 190 | 832 | if (!dict || dict_len == 0) | 191 | 832 | 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.35k | { | 187 | 1.35k | s->dict = s->dict_end = NULL; | 188 | 1.35k | s->dict_len = 0; | 189 | | | 190 | 1.35k | if (!dict || dict_len == 0) | 191 | 1.35k | 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.40k | { | 187 | 1.40k | s->dict = s->dict_end = NULL; | 188 | 1.40k | s->dict_len = 0; | 189 | | | 190 | 1.40k | if (!dict || dict_len == 0) | 191 | 1.40k | 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.69k | { | 187 | 1.69k | s->dict = s->dict_end = NULL; | 188 | 1.69k | s->dict_len = 0; | 189 | | | 190 | 1.69k | if (!dict || dict_len == 0) | 191 | 1.69k | 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 | 735 | { | 187 | 735 | s->dict = s->dict_end = NULL; | 188 | 735 | s->dict_len = 0; | 189 | | | 190 | 735 | if (!dict || dict_len == 0) | 191 | 735 | 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 | 7.40k | { |
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 | 7.40k | s->m_len = 0; |
270 | 7.40k | s->m_off = 0; |
271 | | #if defined(SWD_BEST_OFF) |
272 | | { |
273 | | unsigned i; |
274 | 156k | for (i = 0; i < SWD_BEST_OFF; i++) |
275 | 151k | s->best_off[i] = s->best_pos[i] = 0; |
276 | | } |
277 | | #endif |
278 | | |
279 | 7.40k | s->swd_n = SWD_N; |
280 | 7.40k | s->swd_f = SWD_F; |
281 | 7.40k | s->swd_threshold = SWD_THRESHOLD; |
282 | | |
283 | | /* defaults */ |
284 | 7.40k | s->max_chain = SWD_MAX_CHAIN; |
285 | 7.40k | s->nice_length = s->swd_f; |
286 | 7.40k | s->use_best_off = 0; |
287 | 7.40k | s->lazy_insert = 0; |
288 | | |
289 | 7.40k | 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 | 7.40k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) |
295 | 7.40k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) |
296 | 7.40k | #endif |
297 | 7.40k | s->b_wrap = s_b(s) + s->b_size; |
298 | 7.40k | s->node_count = s->swd_n; |
299 | | |
300 | 7.40k | 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 | 5.19k | 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 | 7.40k | s->ip = 0; |
315 | 7.40k | swd_initdict(s,dict,dict_len); |
316 | 7.40k | s->bp = s->ip; |
317 | 7.40k | s->first_rp = s->ip; |
318 | | |
319 | 7.40k | assert(s->ip + s->swd_f <= s->b_size); |
320 | 7.40k | #if 1 |
321 | 7.40k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); |
322 | 7.40k | if (s->look > 0) |
323 | 7.39k | { |
324 | 7.39k | if (s->look > s->swd_f) |
325 | 2.75k | s->look = s->swd_f; |
326 | 7.39k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); |
327 | 7.39k | s->c->ip += s->look; |
328 | 7.39k | s->ip += s->look; |
329 | 7.39k | } |
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 | 7.40k | if (s->ip == s->b_size) |
343 | 0 | s->ip = 0; |
344 | | |
345 | 7.40k | if (s->look >= 2 && s->dict_len > 0) |
346 | 0 | swd_insertdict(s,0,s->dict_len); |
347 | | |
348 | 7.40k | s->rp = s->first_rp; |
349 | 7.40k | if (s->rp >= s->node_count) |
350 | 0 | s->rp -= s->node_count; |
351 | 7.40k | else |
352 | 7.40k | s->rp += s->b_size - s->node_count; |
353 | | |
354 | 7.40k | #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 | 7.40k | if (s->look < 3) { |
358 | 80 | lzo_bytep p = &s_b(s)[s->bp+s->look]; |
359 | 80 | p[0] = p[1] = p[2] = 0; |
360 | 80 | } |
361 | 7.40k | #endif |
362 | | |
363 | 7.40k | return LZO_E_OK; |
364 | 7.40k | } Line | Count | Source | 244 | 659 | { | 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 | 659 | s->m_len = 0; | 270 | 659 | 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 | 659 | s->swd_n = SWD_N; | 280 | 659 | s->swd_f = SWD_F; | 281 | 659 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 659 | s->max_chain = SWD_MAX_CHAIN; | 285 | 659 | s->nice_length = s->swd_f; | 286 | 659 | s->use_best_off = 0; | 287 | 659 | s->lazy_insert = 0; | 288 | | | 289 | 659 | 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 | 659 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 659 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 659 | #endif | 297 | 659 | s->b_wrap = s_b(s) + s->b_size; | 298 | 659 | s->node_count = s->swd_n; | 299 | | | 300 | 659 | 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 | 659 | s->ip = 0; | 315 | 659 | swd_initdict(s,dict,dict_len); | 316 | 659 | s->bp = s->ip; | 317 | 659 | s->first_rp = s->ip; | 318 | | | 319 | 659 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 659 | #if 1 | 321 | 659 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 659 | if (s->look > 0) | 323 | 658 | { | 324 | 658 | if (s->look > s->swd_f) | 325 | 236 | s->look = s->swd_f; | 326 | 658 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 658 | s->c->ip += s->look; | 328 | 658 | s->ip += s->look; | 329 | 658 | } | 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 | 659 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 659 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 659 | s->rp = s->first_rp; | 349 | 659 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 659 | else | 352 | 659 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 659 | #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 | 659 | 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 | 659 | #endif | 362 | | | 363 | 659 | return LZO_E_OK; | 364 | 659 | } |
Line | Count | Source | 244 | 718 | { | 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 | 718 | s->m_len = 0; | 270 | 718 | 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 | 718 | s->swd_n = SWD_N; | 280 | 718 | s->swd_f = SWD_F; | 281 | 718 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 718 | s->max_chain = SWD_MAX_CHAIN; | 285 | 718 | s->nice_length = s->swd_f; | 286 | 718 | s->use_best_off = 0; | 287 | 718 | s->lazy_insert = 0; | 288 | | | 289 | 718 | 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 | 718 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 718 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 718 | #endif | 297 | 718 | s->b_wrap = s_b(s) + s->b_size; | 298 | 718 | s->node_count = s->swd_n; | 299 | | | 300 | 718 | 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 | 718 | s->ip = 0; | 315 | 718 | swd_initdict(s,dict,dict_len); | 316 | 718 | s->bp = s->ip; | 317 | 718 | s->first_rp = s->ip; | 318 | | | 319 | 718 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 718 | #if 1 | 321 | 718 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 718 | if (s->look > 0) | 323 | 717 | { | 324 | 717 | if (s->look > s->swd_f) | 325 | 232 | s->look = s->swd_f; | 326 | 717 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 717 | s->c->ip += s->look; | 328 | 717 | s->ip += s->look; | 329 | 717 | } | 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 | 718 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 718 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 718 | s->rp = s->first_rp; | 349 | 718 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 718 | else | 352 | 718 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 718 | #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 | 718 | 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 | 718 | #endif | 362 | | | 363 | 718 | return LZO_E_OK; | 364 | 718 | } |
Line | Count | Source | 244 | 832 | { | 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 | 832 | s->m_len = 0; | 270 | 832 | 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 | 832 | s->swd_n = SWD_N; | 280 | 832 | s->swd_f = SWD_F; | 281 | 832 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 832 | s->max_chain = SWD_MAX_CHAIN; | 285 | 832 | s->nice_length = s->swd_f; | 286 | 832 | s->use_best_off = 0; | 287 | 832 | s->lazy_insert = 0; | 288 | | | 289 | 832 | 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 | 832 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 832 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 832 | #endif | 297 | 832 | s->b_wrap = s_b(s) + s->b_size; | 298 | 832 | s->node_count = s->swd_n; | 299 | | | 300 | 832 | 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 | 832 | s->ip = 0; | 315 | 832 | swd_initdict(s,dict,dict_len); | 316 | 832 | s->bp = s->ip; | 317 | 832 | s->first_rp = s->ip; | 318 | | | 319 | 832 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 832 | #if 1 | 321 | 832 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 832 | if (s->look > 0) | 323 | 831 | { | 324 | 831 | if (s->look > s->swd_f) | 325 | 245 | s->look = s->swd_f; | 326 | 831 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 831 | s->c->ip += s->look; | 328 | 831 | s->ip += s->look; | 329 | 831 | } | 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 | 832 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 832 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 832 | s->rp = s->first_rp; | 349 | 832 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 832 | else | 352 | 832 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 832 | #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 | 832 | 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 | 832 | #endif | 362 | | | 363 | 832 | return LZO_E_OK; | 364 | 832 | } |
Line | Count | Source | 244 | 1.35k | { | 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.35k | s->m_len = 0; | 270 | 1.35k | s->m_off = 0; | 271 | 1.35k | #if defined(SWD_BEST_OFF) | 272 | 1.35k | { | 273 | 1.35k | unsigned i; | 274 | 47.5k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 46.2k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.35k | } | 277 | 1.35k | #endif | 278 | | | 279 | 1.35k | s->swd_n = SWD_N; | 280 | 1.35k | s->swd_f = SWD_F; | 281 | 1.35k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.35k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.35k | s->nice_length = s->swd_f; | 286 | 1.35k | s->use_best_off = 0; | 287 | 1.35k | s->lazy_insert = 0; | 288 | | | 289 | 1.35k | 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.35k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.35k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.35k | #endif | 297 | 1.35k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.35k | s->node_count = s->swd_n; | 299 | | | 300 | 1.35k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.35k | #ifdef HEAD2 | 302 | 1.35k | IF_HEAD2(s) { | 303 | 1.35k | #if 1 | 304 | 1.35k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.35k | 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.35k | } | 312 | 1.35k | #endif | 313 | | | 314 | 1.35k | s->ip = 0; | 315 | 1.35k | swd_initdict(s,dict,dict_len); | 316 | 1.35k | s->bp = s->ip; | 317 | 1.35k | s->first_rp = s->ip; | 318 | | | 319 | 1.35k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.35k | #if 1 | 321 | 1.35k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.35k | if (s->look > 0) | 323 | 1.35k | { | 324 | 1.35k | if (s->look > s->swd_f) | 325 | 643 | s->look = s->swd_f; | 326 | 1.35k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.35k | s->c->ip += s->look; | 328 | 1.35k | s->ip += s->look; | 329 | 1.35k | } | 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.35k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.35k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.35k | s->rp = s->first_rp; | 349 | 1.35k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.35k | else | 352 | 1.35k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.35k | #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.35k | 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.35k | #endif | 362 | | | 363 | 1.35k | return LZO_E_OK; | 364 | 1.35k | } |
Line | Count | Source | 244 | 1.40k | { | 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.40k | s->m_len = 0; | 270 | 1.40k | s->m_off = 0; | 271 | 1.40k | #if defined(SWD_BEST_OFF) | 272 | 1.40k | { | 273 | 1.40k | unsigned i; | 274 | 49.2k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 47.8k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.40k | } | 277 | 1.40k | #endif | 278 | | | 279 | 1.40k | s->swd_n = SWD_N; | 280 | 1.40k | s->swd_f = SWD_F; | 281 | 1.40k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.40k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.40k | s->nice_length = s->swd_f; | 286 | 1.40k | s->use_best_off = 0; | 287 | 1.40k | s->lazy_insert = 0; | 288 | | | 289 | 1.40k | 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.40k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.40k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.40k | #endif | 297 | 1.40k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.40k | s->node_count = s->swd_n; | 299 | | | 300 | 1.40k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.40k | #ifdef HEAD2 | 302 | 1.40k | IF_HEAD2(s) { | 303 | 1.40k | #if 1 | 304 | 1.40k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.40k | 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.40k | } | 312 | 1.40k | #endif | 313 | | | 314 | 1.40k | s->ip = 0; | 315 | 1.40k | swd_initdict(s,dict,dict_len); | 316 | 1.40k | s->bp = s->ip; | 317 | 1.40k | s->first_rp = s->ip; | 318 | | | 319 | 1.40k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.40k | #if 1 | 321 | 1.40k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.40k | if (s->look > 0) | 323 | 1.40k | { | 324 | 1.40k | if (s->look > s->swd_f) | 325 | 565 | s->look = s->swd_f; | 326 | 1.40k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.40k | s->c->ip += s->look; | 328 | 1.40k | s->ip += s->look; | 329 | 1.40k | } | 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.40k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.40k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.40k | s->rp = s->first_rp; | 349 | 1.40k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.40k | else | 352 | 1.40k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.40k | #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.40k | 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.40k | #endif | 362 | | | 363 | 1.40k | return LZO_E_OK; | 364 | 1.40k | } |
Line | Count | Source | 244 | 1.69k | { | 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.69k | s->m_len = 0; | 270 | 1.69k | s->m_off = 0; | 271 | 1.69k | #if defined(SWD_BEST_OFF) | 272 | 1.69k | { | 273 | 1.69k | unsigned i; | 274 | 59.2k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 57.5k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.69k | } | 277 | 1.69k | #endif | 278 | | | 279 | 1.69k | s->swd_n = SWD_N; | 280 | 1.69k | s->swd_f = SWD_F; | 281 | 1.69k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.69k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.69k | s->nice_length = s->swd_f; | 286 | 1.69k | s->use_best_off = 0; | 287 | 1.69k | s->lazy_insert = 0; | 288 | | | 289 | 1.69k | 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.69k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.69k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.69k | #endif | 297 | 1.69k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.69k | s->node_count = s->swd_n; | 299 | | | 300 | 1.69k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.69k | #ifdef HEAD2 | 302 | 1.69k | IF_HEAD2(s) { | 303 | 1.69k | #if 1 | 304 | 1.69k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.69k | 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.69k | } | 312 | 1.69k | #endif | 313 | | | 314 | 1.69k | s->ip = 0; | 315 | 1.69k | swd_initdict(s,dict,dict_len); | 316 | 1.69k | s->bp = s->ip; | 317 | 1.69k | s->first_rp = s->ip; | 318 | | | 319 | 1.69k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.69k | #if 1 | 321 | 1.69k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.69k | if (s->look > 0) | 323 | 1.69k | { | 324 | 1.69k | if (s->look > s->swd_f) | 325 | 660 | s->look = s->swd_f; | 326 | 1.69k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.69k | s->c->ip += s->look; | 328 | 1.69k | s->ip += s->look; | 329 | 1.69k | } | 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.69k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.69k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.69k | s->rp = s->first_rp; | 349 | 1.69k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.69k | else | 352 | 1.69k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.69k | #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.69k | 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 | 1.69k | #endif | 362 | | | 363 | 1.69k | return LZO_E_OK; | 364 | 1.69k | } |
Line | Count | Source | 244 | 735 | { | 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 | 735 | s->m_len = 0; | 270 | 735 | 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 | 735 | s->swd_n = SWD_N; | 280 | 735 | s->swd_f = SWD_F; | 281 | 735 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 735 | s->max_chain = SWD_MAX_CHAIN; | 285 | 735 | s->nice_length = s->swd_f; | 286 | 735 | s->use_best_off = 0; | 287 | 735 | s->lazy_insert = 0; | 288 | | | 289 | 735 | 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 | 735 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 735 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 735 | #endif | 297 | 735 | s->b_wrap = s_b(s) + s->b_size; | 298 | 735 | s->node_count = s->swd_n; | 299 | | | 300 | 735 | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 735 | #ifdef HEAD2 | 302 | 735 | IF_HEAD2(s) { | 303 | 735 | #if 1 | 304 | 735 | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 735 | 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 | 735 | } | 312 | 735 | #endif | 313 | | | 314 | 735 | s->ip = 0; | 315 | 735 | swd_initdict(s,dict,dict_len); | 316 | 735 | s->bp = s->ip; | 317 | 735 | s->first_rp = s->ip; | 318 | | | 319 | 735 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 735 | #if 1 | 321 | 735 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 735 | if (s->look > 0) | 323 | 734 | { | 324 | 734 | if (s->look > s->swd_f) | 325 | 170 | s->look = s->swd_f; | 326 | 734 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 734 | s->c->ip += s->look; | 328 | 734 | s->ip += s->look; | 329 | 734 | } | 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 | 735 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 735 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 735 | s->rp = s->first_rp; | 349 | 735 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 735 | else | 352 | 735 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 735 | #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 | 735 | 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 | 735 | #endif | 362 | | | 363 | 735 | return LZO_E_OK; | 364 | 735 | } |
|
365 | | |
366 | | |
367 | | static |
368 | | void swd_exit(lzo_swd_p s) |
369 | 7.40k | { |
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 | 7.40k | LZO_UNUSED(s); |
382 | 7.40k | #endif |
383 | 7.40k | } Line | Count | Source | 369 | 659 | { | 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 | 659 | LZO_UNUSED(s); | 382 | 659 | #endif | 383 | 659 | } |
Line | Count | Source | 369 | 718 | { | 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 | 718 | LZO_UNUSED(s); | 382 | 718 | #endif | 383 | 718 | } |
Line | Count | Source | 369 | 832 | { | 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 | 832 | LZO_UNUSED(s); | 382 | 832 | #endif | 383 | 832 | } |
Line | Count | Source | 369 | 1.35k | { | 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.35k | LZO_UNUSED(s); | 382 | 1.35k | #endif | 383 | 1.35k | } |
Line | Count | Source | 369 | 1.40k | { | 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.40k | LZO_UNUSED(s); | 382 | 1.40k | #endif | 383 | 1.40k | } |
Line | Count | Source | 369 | 1.69k | { | 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.69k | LZO_UNUSED(s); | 382 | 1.69k | #endif | 383 | 1.69k | } |
Line | Count | Source | 369 | 735 | { | 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 | 735 | LZO_UNUSED(s); | 382 | 735 | #endif | 383 | 735 | } |
|
384 | | |
385 | | |
386 | | #define swd_pos2off(s,pos) \ |
387 | 58.0M | (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 | 151M | { |
397 | 151M | int c; |
398 | | |
399 | 151M | if ((c = getbyte(*(s->c))) < 0) |
400 | 7.20M | { |
401 | 7.20M | if (s->look > 0) |
402 | 7.19M | --s->look; |
403 | 7.20M | #if 1 || defined(__LZO_CHECKER) |
404 | | /* initialize memory - value doesn't matter */ |
405 | 7.20M | s_b(s)[s->ip] = 0; |
406 | 7.20M | if (s->ip < s->swd_f) |
407 | 1.56M | s->b_wrap[s->ip] = 0; |
408 | 7.20M | #endif |
409 | 7.20M | } |
410 | 144M | else |
411 | 144M | { |
412 | 144M | s_b(s)[s->ip] = LZO_BYTE(c); |
413 | 144M | if (s->ip < s->swd_f) |
414 | 8.09M | s->b_wrap[s->ip] = LZO_BYTE(c); |
415 | 144M | } |
416 | 151M | if (++s->ip == s->b_size) |
417 | 4.49k | s->ip = 0; |
418 | 151M | if (++s->bp == s->b_size) |
419 | 4.20k | s->bp = 0; |
420 | 151M | if (++s->rp == s->b_size) |
421 | 4.49k | s->rp = 0; |
422 | 151M | } Line | Count | Source | 396 | 13.4M | { | 397 | 13.4M | int c; | 398 | | | 399 | 13.4M | if ((c = getbyte(*(s->c))) < 0) | 400 | 608k | { | 401 | 608k | if (s->look > 0) | 402 | 607k | --s->look; | 403 | 608k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 608k | s_b(s)[s->ip] = 0; | 406 | 608k | if (s->ip < s->swd_f) | 407 | 149k | s->b_wrap[s->ip] = 0; | 408 | 608k | #endif | 409 | 608k | } | 410 | 12.8M | else | 411 | 12.8M | { | 412 | 12.8M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 12.8M | if (s->ip < s->swd_f) | 414 | 212k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 12.8M | } | 416 | 13.4M | if (++s->ip == s->b_size) | 417 | 162 | s->ip = 0; | 418 | 13.4M | if (++s->bp == s->b_size) | 419 | 134 | s->bp = 0; | 420 | 13.4M | if (++s->rp == s->b_size) | 421 | 162 | s->rp = 0; | 422 | 13.4M | } |
Line | Count | Source | 396 | 17.1M | { | 397 | 17.1M | int c; | 398 | | | 399 | 17.1M | if ((c = getbyte(*(s->c))) < 0) | 400 | 619k | { | 401 | 619k | if (s->look > 0) | 402 | 618k | --s->look; | 403 | 619k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 619k | s_b(s)[s->ip] = 0; | 406 | 619k | if (s->ip < s->swd_f) | 407 | 161k | s->b_wrap[s->ip] = 0; | 408 | 619k | #endif | 409 | 619k | } | 410 | 16.5M | else | 411 | 16.5M | { | 412 | 16.5M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 16.5M | if (s->ip < s->swd_f) | 414 | 1.64M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 16.5M | } | 416 | 17.1M | if (++s->ip == s->b_size) | 417 | 869 | s->ip = 0; | 418 | 17.1M | if (++s->bp == s->b_size) | 419 | 836 | s->bp = 0; | 420 | 17.1M | if (++s->rp == s->b_size) | 421 | 869 | s->rp = 0; | 422 | 17.1M | } |
Line | Count | Source | 396 | 17.9M | { | 397 | 17.9M | int c; | 398 | | | 399 | 17.9M | if ((c = getbyte(*(s->c))) < 0) | 400 | 694k | { | 401 | 694k | if (s->look > 0) | 402 | 693k | --s->look; | 403 | 694k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 694k | s_b(s)[s->ip] = 0; | 406 | 694k | if (s->ip < s->swd_f) | 407 | 189k | s->b_wrap[s->ip] = 0; | 408 | 694k | #endif | 409 | 694k | } | 410 | 17.2M | else | 411 | 17.2M | { | 412 | 17.2M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 17.2M | if (s->ip < s->swd_f) | 414 | 1.74M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 17.2M | } | 416 | 17.9M | if (++s->ip == s->b_size) | 417 | 924 | s->ip = 0; | 418 | 17.9M | if (++s->bp == s->b_size) | 419 | 890 | s->bp = 0; | 420 | 17.9M | if (++s->rp == s->b_size) | 421 | 924 | s->rp = 0; | 422 | 17.9M | } |
Line | Count | Source | 396 | 25.7M | { | 397 | 25.7M | int c; | 398 | | | 399 | 25.7M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.52M | { | 401 | 1.52M | if (s->look > 0) | 402 | 1.51M | --s->look; | 403 | 1.52M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.52M | s_b(s)[s->ip] = 0; | 406 | 1.52M | if (s->ip < s->swd_f) | 407 | 234k | s->b_wrap[s->ip] = 0; | 408 | 1.52M | #endif | 409 | 1.52M | } | 410 | 24.2M | else | 411 | 24.2M | { | 412 | 24.2M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 24.2M | if (s->ip < s->swd_f) | 414 | 548k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 24.2M | } | 416 | 25.7M | if (++s->ip == s->b_size) | 417 | 354 | s->ip = 0; | 418 | 25.7M | if (++s->bp == s->b_size) | 419 | 303 | s->bp = 0; | 420 | 25.7M | if (++s->rp == s->b_size) | 421 | 354 | s->rp = 0; | 422 | 25.7M | } |
Line | Count | Source | 396 | 33.3M | { | 397 | 33.3M | int c; | 398 | | | 399 | 33.3M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.47M | { | 401 | 1.47M | if (s->look > 0) | 402 | 1.47M | --s->look; | 403 | 1.47M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.47M | s_b(s)[s->ip] = 0; | 406 | 1.47M | if (s->ip < s->swd_f) | 407 | 322k | s->b_wrap[s->ip] = 0; | 408 | 1.47M | #endif | 409 | 1.47M | } | 410 | 31.8M | else | 411 | 31.8M | { | 412 | 31.8M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 31.8M | if (s->ip < s->swd_f) | 414 | 849k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 31.8M | } | 416 | 33.3M | if (++s->ip == s->b_size) | 417 | 503 | s->ip = 0; | 418 | 33.3M | if (++s->bp == s->b_size) | 419 | 455 | s->bp = 0; | 420 | 33.3M | if (++s->rp == s->b_size) | 421 | 503 | s->rp = 0; | 422 | 33.3M | } |
Line | Count | Source | 396 | 31.1M | { | 397 | 31.1M | int c; | 398 | | | 399 | 31.1M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.79M | { | 401 | 1.79M | if (s->look > 0) | 402 | 1.79M | --s->look; | 403 | 1.79M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.79M | s_b(s)[s->ip] = 0; | 406 | 1.79M | if (s->ip < s->swd_f) | 407 | 312k | s->b_wrap[s->ip] = 0; | 408 | 1.79M | #endif | 409 | 1.79M | } | 410 | 29.3M | else | 411 | 29.3M | { | 412 | 29.3M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 29.3M | if (s->ip < s->swd_f) | 414 | 736k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 29.3M | } | 416 | 31.1M | if (++s->ip == s->b_size) | 417 | 446 | s->ip = 0; | 418 | 31.1M | if (++s->bp == s->b_size) | 419 | 398 | s->bp = 0; | 420 | 31.1M | if (++s->rp == s->b_size) | 421 | 446 | s->rp = 0; | 422 | 31.1M | } |
Line | Count | Source | 396 | 13.0M | { | 397 | 13.0M | int c; | 398 | | | 399 | 13.0M | if ((c = getbyte(*(s->c))) < 0) | 400 | 497k | { | 401 | 497k | if (s->look > 0) | 402 | 497k | --s->look; | 403 | 497k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 497k | s_b(s)[s->ip] = 0; | 406 | 497k | if (s->ip < s->swd_f) | 407 | 191k | s->b_wrap[s->ip] = 0; | 408 | 497k | #endif | 409 | 497k | } | 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 | 2.35M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 12.5M | } | 416 | 13.0M | if (++s->ip == s->b_size) | 417 | 1.23k | s->ip = 0; | 418 | 13.0M | if (++s->bp == s->b_size) | 419 | 1.18k | s->bp = 0; | 420 | 13.0M | if (++s->rp == s->b_size) | 421 | 1.23k | s->rp = 0; | 422 | 13.0M | } |
|
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 | 151M | { |
432 | 151M | if (s->node_count == 0) |
433 | 96.5M | { |
434 | 96.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 | 96.5M | key = HEAD3(s_b(s),node); |
450 | 96.5M | assert(s_llen3(s)[key] > 0); |
451 | 96.5M | --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 | 14.4M | s_head2(s)[key] = NIL2; |
459 | | } |
460 | | #endif |
461 | 96.5M | } |
462 | 55.2M | else |
463 | 55.2M | --s->node_count; |
464 | 151M | } lzo1b_9x.c:swd_remove_node Line | Count | Source | 431 | 13.4M | { | 432 | 13.4M | if (s->node_count == 0) | 433 | 6.54M | { | 434 | 6.54M | 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 | 6.54M | key = HEAD3(s_b(s),node); | 450 | 6.54M | assert(s_llen3(s)[key] > 0); | 451 | 6.54M | --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 | 6.54M | } | 462 | 6.89M | else | 463 | 6.89M | --s->node_count; | 464 | 13.4M | } |
lzo1c_9x.c:swd_remove_node Line | Count | Source | 431 | 17.1M | { | 432 | 17.1M | if (s->node_count == 0) | 433 | 14.6M | { | 434 | 14.6M | 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 | 14.6M | key = HEAD3(s_b(s),node); | 450 | 14.6M | assert(s_llen3(s)[key] > 0); | 451 | 14.6M | --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 | 14.6M | } | 462 | 2.56M | else | 463 | 2.56M | --s->node_count; | 464 | 17.1M | } |
lzo1f_9x.c:swd_remove_node Line | Count | Source | 431 | 17.9M | { | 432 | 17.9M | if (s->node_count == 0) | 433 | 15.5M | { | 434 | 15.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 | 15.5M | key = HEAD3(s_b(s),node); | 450 | 15.5M | assert(s_llen3(s)[key] > 0); | 451 | 15.5M | --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 | 15.5M | } | 462 | 2.43M | else | 463 | 2.43M | --s->node_count; | 464 | 17.9M | } |
lzo1x_9x.c:swd_remove_node Line | Count | Source | 431 | 25.7M | { | 432 | 25.7M | if (s->node_count == 0) | 433 | 12.1M | { | 434 | 12.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 | 12.1M | key = HEAD3(s_b(s),node); | 450 | 12.1M | assert(s_llen3(s)[key] > 0); | 451 | 12.1M | --s_llen3(s)[key]; | 452 | | | 453 | 12.1M | #ifdef HEAD2 | 454 | 12.1M | IF_HEAD2(s) { | 455 | 12.1M | key = HEAD2(s_b(s),node); | 456 | 12.1M | assert(s_head2(s)[key] != NIL2); | 457 | 12.1M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 2.35M | s_head2(s)[key] = NIL2; | 459 | 12.1M | } | 460 | 12.1M | #endif | 461 | 12.1M | } | 462 | 13.6M | else | 463 | 13.6M | --s->node_count; | 464 | 25.7M | } |
lzo1y_9x.c:swd_remove_node Line | Count | Source | 431 | 33.3M | { | 432 | 33.3M | 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 | 5.36M | s_head2(s)[key] = NIL2; | 459 | 19.2M | } | 460 | 19.2M | #endif | 461 | 19.2M | } | 462 | 14.0M | else | 463 | 14.0M | --s->node_count; | 464 | 33.3M | } |
lzo1z_9x.c:swd_remove_node Line | Count | Source | 431 | 31.1M | { | 432 | 31.1M | if (s->node_count == 0) | 433 | 16.7M | { | 434 | 16.7M | 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 | 16.7M | key = HEAD3(s_b(s),node); | 450 | 16.7M | assert(s_llen3(s)[key] > 0); | 451 | 16.7M | --s_llen3(s)[key]; | 452 | | | 453 | 16.7M | #ifdef HEAD2 | 454 | 16.7M | IF_HEAD2(s) { | 455 | 16.7M | key = HEAD2(s_b(s),node); | 456 | 16.7M | assert(s_head2(s)[key] != NIL2); | 457 | 16.7M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 2.61M | s_head2(s)[key] = NIL2; | 459 | 16.7M | } | 460 | 16.7M | #endif | 461 | 16.7M | } | 462 | 14.4M | else | 463 | 14.4M | --s->node_count; | 464 | 31.1M | } |
lzo2a_9x.c:swd_remove_node Line | Count | Source | 431 | 13.0M | { | 432 | 13.0M | if (s->node_count == 0) | 433 | 11.7M | { | 434 | 11.7M | 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 | 11.7M | key = HEAD3(s_b(s),node); | 450 | 11.7M | assert(s_llen3(s)[key] > 0); | 451 | 11.7M | --s_llen3(s)[key]; | 452 | | | 453 | 11.7M | #ifdef HEAD2 | 454 | 11.7M | IF_HEAD2(s) { | 455 | 11.7M | key = HEAD2(s_b(s),node); | 456 | 11.7M | assert(s_head2(s)[key] != NIL2); | 457 | 11.7M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 4.09M | s_head2(s)[key] = NIL2; | 459 | 11.7M | } | 460 | 11.7M | #endif | 461 | 11.7M | } | 462 | 1.27M | else | 463 | 1.27M | --s->node_count; | 464 | 13.0M | } |
|
465 | | |
466 | | |
467 | | /*********************************************************************** |
468 | | // |
469 | | ************************************************************************/ |
470 | | |
471 | | static |
472 | | void swd_accept(lzo_swd_p s, lzo_uint n) |
473 | 3.92M | { |
474 | 3.92M | assert(n <= s->look); |
475 | | |
476 | 3.92M | if (n) do |
477 | 77.4M | { |
478 | 77.4M | lzo_uint key; |
479 | | |
480 | 77.4M | swd_remove_node(s,s->rp); |
481 | | |
482 | | /* add bp into HEAD3 */ |
483 | 77.4M | key = HEAD3(s_b(s),s->bp); |
484 | 77.4M | s_succ3(s)[s->bp] = s_get_head3(s,key); |
485 | 77.4M | s_head3(s)[key] = SWD_UINT(s->bp); |
486 | 77.4M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); |
487 | 77.4M | s_llen3(s)[key]++; |
488 | 77.4M | assert(s_llen3(s)[key] <= s->swd_n); |
489 | | |
490 | | #ifdef HEAD2 |
491 | | /* add bp into HEAD2 */ |
492 | | IF_HEAD2(s) { |
493 | 55.8M | key = HEAD2(s_b(s),s->bp); |
494 | 55.8M | s_head2(s)[key] = SWD_UINT(s->bp); |
495 | | } |
496 | | #endif |
497 | | |
498 | 77.4M | swd_getbyte(s); |
499 | 77.4M | } while (--n != 0); |
500 | 3.92M | } Line | Count | Source | 473 | 156k | { | 474 | 156k | assert(n <= s->look); | 475 | | | 476 | 156k | if (n) do | 477 | 9.04M | { | 478 | 9.04M | lzo_uint key; | 479 | | | 480 | 9.04M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 9.04M | key = HEAD3(s_b(s),s->bp); | 484 | 9.04M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 9.04M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 9.04M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 9.04M | s_llen3(s)[key]++; | 488 | 9.04M | 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 | 9.04M | swd_getbyte(s); | 499 | 9.04M | } while (--n != 0); | 500 | 156k | } |
Line | Count | Source | 473 | 93.2k | { | 474 | 93.2k | assert(n <= s->look); | 475 | | | 476 | 93.2k | if (n) do | 477 | 6.20M | { | 478 | 6.20M | lzo_uint key; | 479 | | | 480 | 6.20M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 6.20M | key = HEAD3(s_b(s),s->bp); | 484 | 6.20M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 6.20M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 6.20M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 6.20M | s_llen3(s)[key]++; | 488 | 6.20M | 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 | 6.20M | swd_getbyte(s); | 499 | 6.20M | } while (--n != 0); | 500 | 93.2k | } |
Line | Count | Source | 473 | 105k | { | 474 | 105k | assert(n <= s->look); | 475 | | | 476 | 105k | if (n) do | 477 | 6.34M | { | 478 | 6.34M | lzo_uint key; | 479 | | | 480 | 6.34M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 6.34M | key = HEAD3(s_b(s),s->bp); | 484 | 6.34M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 6.34M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 6.34M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 6.34M | s_llen3(s)[key]++; | 488 | 6.34M | 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 | 6.34M | swd_getbyte(s); | 499 | 6.34M | } while (--n != 0); | 500 | 105k | } |
Line | Count | Source | 473 | 860k | { | 474 | 860k | assert(n <= s->look); | 475 | | | 476 | 860k | if (n) do | 477 | 15.2M | { | 478 | 15.2M | lzo_uint key; | 479 | | | 480 | 15.2M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 15.2M | key = HEAD3(s_b(s),s->bp); | 484 | 15.2M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 15.2M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 15.2M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 15.2M | s_llen3(s)[key]++; | 488 | 15.2M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 15.2M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 15.2M | IF_HEAD2(s) { | 493 | 15.2M | key = HEAD2(s_b(s),s->bp); | 494 | 15.2M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 15.2M | } | 496 | 15.2M | #endif | 497 | | | 498 | 15.2M | swd_getbyte(s); | 499 | 15.2M | } while (--n != 0); | 500 | 860k | } |
Line | Count | Source | 473 | 811k | { | 474 | 811k | assert(n <= s->look); | 475 | | | 476 | 811k | if (n) do | 477 | 14.9M | { | 478 | 14.9M | lzo_uint key; | 479 | | | 480 | 14.9M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 14.9M | key = HEAD3(s_b(s),s->bp); | 484 | 14.9M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 14.9M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 14.9M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 14.9M | s_llen3(s)[key]++; | 488 | 14.9M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 14.9M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 14.9M | IF_HEAD2(s) { | 493 | 14.9M | key = HEAD2(s_b(s),s->bp); | 494 | 14.9M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 14.9M | } | 496 | 14.9M | #endif | 497 | | | 498 | 14.9M | swd_getbyte(s); | 499 | 14.9M | } while (--n != 0); | 500 | 811k | } |
Line | Count | Source | 473 | 1.03M | { | 474 | 1.03M | assert(n <= s->look); | 475 | | | 476 | 1.03M | if (n) do | 477 | 19.2M | { | 478 | 19.2M | lzo_uint key; | 479 | | | 480 | 19.2M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 19.2M | key = HEAD3(s_b(s),s->bp); | 484 | 19.2M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 19.2M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 19.2M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 19.2M | s_llen3(s)[key]++; | 488 | 19.2M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 19.2M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 19.2M | IF_HEAD2(s) { | 493 | 19.2M | key = HEAD2(s_b(s),s->bp); | 494 | 19.2M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 19.2M | } | 496 | 19.2M | #endif | 497 | | | 498 | 19.2M | swd_getbyte(s); | 499 | 19.2M | } while (--n != 0); | 500 | 1.03M | } |
Line | Count | Source | 473 | 863k | { | 474 | 863k | assert(n <= s->look); | 475 | | | 476 | 863k | if (n) do | 477 | 6.46M | { | 478 | 6.46M | lzo_uint key; | 479 | | | 480 | 6.46M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 6.46M | key = HEAD3(s_b(s),s->bp); | 484 | 6.46M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 6.46M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 6.46M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 6.46M | s_llen3(s)[key]++; | 488 | 6.46M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 6.46M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 6.46M | IF_HEAD2(s) { | 493 | 6.46M | key = HEAD2(s_b(s),s->bp); | 494 | 6.46M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 6.46M | } | 496 | 6.46M | #endif | 497 | | | 498 | 6.46M | swd_getbyte(s); | 499 | 6.46M | } while (--n != 0); | 500 | 863k | } |
|
501 | | |
502 | | |
503 | | /*********************************************************************** |
504 | | // |
505 | | ************************************************************************/ |
506 | | |
507 | | static |
508 | | void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt) |
509 | 51.0M | { |
510 | 51.0M | const lzo_bytep p1; |
511 | 51.0M | const lzo_bytep p2; |
512 | 51.0M | const lzo_bytep px; |
513 | 51.0M | lzo_uint m_len = s->m_len; |
514 | 51.0M | const lzo_bytep b = s_b(s); |
515 | 51.0M | const lzo_bytep bp = s_b(s) + s->bp; |
516 | 51.0M | const lzo_bytep bx = s_b(s) + s->bp + s->look; |
517 | 51.0M | swd_uintp succ3 = s_succ3(s); |
518 | 51.0M | unsigned char scan_end1; |
519 | | |
520 | 51.0M | assert(s->m_len > 0); |
521 | | |
522 | 51.0M | scan_end1 = bp[m_len - 1]; |
523 | 1.52G | for ( ; cnt-- > 0; node = succ3[node]) |
524 | 1.47G | { |
525 | 1.47G | p1 = bp; |
526 | 1.47G | p2 = b + node; |
527 | 1.47G | px = bx; |
528 | | |
529 | 1.47G | assert(m_len < s->look); |
530 | | |
531 | 1.47G | if ( |
532 | 1.47G | #if 1 |
533 | 1.47G | p2[m_len - 1] == scan_end1 && |
534 | 664M | p2[m_len] == p1[m_len] && |
535 | 99.0M | #endif |
536 | 99.0M | p2[0] == p1[0] && |
537 | 98.8M | p2[1] == p1[1]) |
538 | 98.7M | { |
539 | 98.7M | lzo_uint i; |
540 | 98.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 | 98.7M | p1 += 2; p2 += 2; |
550 | 2.64G | do {} while (++p1 < px && *p1 == *++p2); |
551 | 98.7M | #endif |
552 | 98.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 | 98.7M | assert(lzo_memcmp(bp,&b[node],i) == 0); |
561 | | |
562 | | #if defined(SWD_BEST_OFF) |
563 | 90.3M | if (i < SWD_BEST_OFF) |
564 | 86.3M | { |
565 | 86.3M | if (s->best_pos[i] == 0) |
566 | 11.6M | s->best_pos[i] = node + 1; |
567 | 86.3M | } |
568 | | #endif |
569 | 98.7M | if (i > m_len) |
570 | 15.8M | { |
571 | 15.8M | s->m_len = m_len = i; |
572 | 15.8M | s->m_pos = node; |
573 | 15.8M | if (m_len == s->look) |
574 | 33.3k | return; |
575 | 15.7M | if (m_len >= s->nice_length) |
576 | 0 | return; |
577 | 15.7M | if (m_len > (lzo_uint) s_best3(s)[node]) |
578 | 1.39M | return; |
579 | 14.3M | scan_end1 = bp[m_len - 1]; |
580 | 14.3M | } |
581 | 98.7M | } |
582 | 1.47G | } |
583 | 51.0M | } Line | Count | Source | 509 | 4.39M | { | 510 | 4.39M | const lzo_bytep p1; | 511 | 4.39M | const lzo_bytep p2; | 512 | 4.39M | const lzo_bytep px; | 513 | 4.39M | lzo_uint m_len = s->m_len; | 514 | 4.39M | const lzo_bytep b = s_b(s); | 515 | 4.39M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 4.39M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 4.39M | swd_uintp succ3 = s_succ3(s); | 518 | 4.39M | unsigned char scan_end1; | 519 | | | 520 | 4.39M | assert(s->m_len > 0); | 521 | | | 522 | 4.39M | scan_end1 = bp[m_len - 1]; | 523 | 49.2M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 44.9M | { | 525 | 44.9M | p1 = bp; | 526 | 44.9M | p2 = b + node; | 527 | 44.9M | px = bx; | 528 | | | 529 | 44.9M | assert(m_len < s->look); | 530 | | | 531 | 44.9M | if ( | 532 | 44.9M | #if 1 | 533 | 44.9M | p2[m_len - 1] == scan_end1 && | 534 | 20.3M | p2[m_len] == p1[m_len] && | 535 | 2.59M | #endif | 536 | 2.59M | p2[0] == p1[0] && | 537 | 2.58M | p2[1] == p1[1]) | 538 | 2.58M | { | 539 | 2.58M | lzo_uint i; | 540 | 2.58M | 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.58M | p1 += 2; p2 += 2; | 550 | 358M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 2.58M | #endif | 552 | 2.58M | 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.58M | 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.58M | if (i > m_len) | 570 | 943k | { | 571 | 943k | s->m_len = m_len = i; | 572 | 943k | s->m_pos = node; | 573 | 943k | if (m_len == s->look) | 574 | 2.89k | return; | 575 | 940k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 940k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 76.2k | return; | 579 | 864k | scan_end1 = bp[m_len - 1]; | 580 | 864k | } | 581 | 2.58M | } | 582 | 44.9M | } | 583 | 4.39M | } |
Line | Count | Source | 509 | 10.9M | { | 510 | 10.9M | const lzo_bytep p1; | 511 | 10.9M | const lzo_bytep p2; | 512 | 10.9M | const lzo_bytep px; | 513 | 10.9M | lzo_uint m_len = s->m_len; | 514 | 10.9M | const lzo_bytep b = s_b(s); | 515 | 10.9M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 10.9M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 10.9M | swd_uintp succ3 = s_succ3(s); | 518 | 10.9M | unsigned char scan_end1; | 519 | | | 520 | 10.9M | assert(s->m_len > 0); | 521 | | | 522 | 10.9M | scan_end1 = bp[m_len - 1]; | 523 | 64.7M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 53.7M | { | 525 | 53.7M | p1 = bp; | 526 | 53.7M | p2 = b + node; | 527 | 53.7M | px = bx; | 528 | | | 529 | 53.7M | assert(m_len < s->look); | 530 | | | 531 | 53.7M | if ( | 532 | 53.7M | #if 1 | 533 | 53.7M | p2[m_len - 1] == scan_end1 && | 534 | 16.9M | p2[m_len] == p1[m_len] && | 535 | 2.52M | #endif | 536 | 2.52M | p2[0] == p1[0] && | 537 | 2.49M | p2[1] == p1[1]) | 538 | 2.48M | { | 539 | 2.48M | lzo_uint i; | 540 | 2.48M | 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.48M | p1 += 2; p2 += 2; | 550 | 247M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 2.48M | #endif | 552 | 2.48M | 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.48M | 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.48M | if (i > m_len) | 570 | 656k | { | 571 | 656k | s->m_len = m_len = i; | 572 | 656k | s->m_pos = node; | 573 | 656k | if (m_len == s->look) | 574 | 8.36k | return; | 575 | 647k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 647k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 46.9k | return; | 579 | 600k | scan_end1 = bp[m_len - 1]; | 580 | 600k | } | 581 | 2.48M | } | 582 | 53.7M | } | 583 | 10.9M | } |
Line | Count | Source | 509 | 11.6M | { | 510 | 11.6M | const lzo_bytep p1; | 511 | 11.6M | const lzo_bytep p2; | 512 | 11.6M | const lzo_bytep px; | 513 | 11.6M | lzo_uint m_len = s->m_len; | 514 | 11.6M | const lzo_bytep b = s_b(s); | 515 | 11.6M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 11.6M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 11.6M | swd_uintp succ3 = s_succ3(s); | 518 | 11.6M | unsigned char scan_end1; | 519 | | | 520 | 11.6M | assert(s->m_len > 0); | 521 | | | 522 | 11.6M | scan_end1 = bp[m_len - 1]; | 523 | 52.1M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 40.6M | { | 525 | 40.6M | p1 = bp; | 526 | 40.6M | p2 = b + node; | 527 | 40.6M | px = bx; | 528 | | | 529 | 40.6M | assert(m_len < s->look); | 530 | | | 531 | 40.6M | if ( | 532 | 40.6M | #if 1 | 533 | 40.6M | p2[m_len - 1] == scan_end1 && | 534 | 11.4M | p2[m_len] == p1[m_len] && | 535 | 1.48M | #endif | 536 | 1.48M | p2[0] == p1[0] && | 537 | 1.46M | p2[1] == p1[1]) | 538 | 1.45M | { | 539 | 1.45M | lzo_uint i; | 540 | 1.45M | 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.45M | p1 += 2; p2 += 2; | 550 | 228M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 1.45M | #endif | 552 | 1.45M | 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.45M | 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.45M | if (i > m_len) | 570 | 634k | { | 571 | 634k | s->m_len = m_len = i; | 572 | 634k | s->m_pos = node; | 573 | 634k | if (m_len == s->look) | 574 | 4.86k | return; | 575 | 629k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 629k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 65.8k | return; | 579 | 563k | scan_end1 = bp[m_len - 1]; | 580 | 563k | } | 581 | 1.45M | } | 582 | 40.6M | } | 583 | 11.6M | } |
Line | Count | Source | 509 | 5.49M | { | 510 | 5.49M | const lzo_bytep p1; | 511 | 5.49M | const lzo_bytep p2; | 512 | 5.49M | const lzo_bytep px; | 513 | 5.49M | lzo_uint m_len = s->m_len; | 514 | 5.49M | const lzo_bytep b = s_b(s); | 515 | 5.49M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 5.49M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 5.49M | swd_uintp succ3 = s_succ3(s); | 518 | 5.49M | unsigned char scan_end1; | 519 | | | 520 | 5.49M | assert(s->m_len > 0); | 521 | | | 522 | 5.49M | scan_end1 = bp[m_len - 1]; | 523 | 473M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 468M | { | 525 | 468M | p1 = bp; | 526 | 468M | p2 = b + node; | 527 | 468M | px = bx; | 528 | | | 529 | 468M | assert(m_len < s->look); | 530 | | | 531 | 468M | if ( | 532 | 468M | #if 1 | 533 | 468M | p2[m_len - 1] == scan_end1 && | 534 | 221M | p2[m_len] == p1[m_len] && | 535 | 35.8M | #endif | 536 | 35.8M | p2[0] == p1[0] && | 537 | 35.7M | p2[1] == p1[1]) | 538 | 35.7M | { | 539 | 35.7M | lzo_uint i; | 540 | 35.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 | 35.7M | p1 += 2; p2 += 2; | 550 | 449M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 35.7M | #endif | 552 | 35.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 | 35.7M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 35.7M | #if defined(SWD_BEST_OFF) | 563 | 35.7M | if (i < SWD_BEST_OFF) | 564 | 34.4M | { | 565 | 34.4M | if (s->best_pos[i] == 0) | 566 | 4.27M | s->best_pos[i] = node + 1; | 567 | 34.4M | } | 568 | 35.7M | #endif | 569 | 35.7M | if (i > m_len) | 570 | 4.51M | { | 571 | 4.51M | s->m_len = m_len = i; | 572 | 4.51M | s->m_pos = node; | 573 | 4.51M | if (m_len == s->look) | 574 | 3.49k | return; | 575 | 4.51M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 4.51M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 370k | return; | 579 | 4.14M | scan_end1 = bp[m_len - 1]; | 580 | 4.14M | } | 581 | 35.7M | } | 582 | 468M | } | 583 | 5.49M | } |
Line | Count | Source | 509 | 9.77M | { | 510 | 9.77M | const lzo_bytep p1; | 511 | 9.77M | const lzo_bytep p2; | 512 | 9.77M | const lzo_bytep px; | 513 | 9.77M | lzo_uint m_len = s->m_len; | 514 | 9.77M | const lzo_bytep b = s_b(s); | 515 | 9.77M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 9.77M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 9.77M | swd_uintp succ3 = s_succ3(s); | 518 | 9.77M | unsigned char scan_end1; | 519 | | | 520 | 9.77M | assert(s->m_len > 0); | 521 | | | 522 | 9.77M | scan_end1 = bp[m_len - 1]; | 523 | 410M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 401M | { | 525 | 401M | p1 = bp; | 526 | 401M | p2 = b + node; | 527 | 401M | px = bx; | 528 | | | 529 | 401M | assert(m_len < s->look); | 530 | | | 531 | 401M | if ( | 532 | 401M | #if 1 | 533 | 401M | p2[m_len - 1] == scan_end1 && | 534 | 181M | p2[m_len] == p1[m_len] && | 535 | 27.2M | #endif | 536 | 27.2M | p2[0] == p1[0] && | 537 | 27.1M | p2[1] == p1[1]) | 538 | 27.1M | { | 539 | 27.1M | lzo_uint i; | 540 | 27.1M | 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 | 27.1M | p1 += 2; p2 += 2; | 550 | 514M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 27.1M | #endif | 552 | 27.1M | 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 | 27.1M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 27.1M | #if defined(SWD_BEST_OFF) | 563 | 27.1M | if (i < SWD_BEST_OFF) | 564 | 25.7M | { | 565 | 25.7M | if (s->best_pos[i] == 0) | 566 | 3.35M | s->best_pos[i] = node + 1; | 567 | 25.7M | } | 568 | 27.1M | #endif | 569 | 27.1M | if (i > m_len) | 570 | 3.81M | { | 571 | 3.81M | s->m_len = m_len = i; | 572 | 3.81M | s->m_pos = node; | 573 | 3.81M | if (m_len == s->look) | 574 | 3.64k | return; | 575 | 3.80M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 3.80M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 350k | return; | 579 | 3.45M | scan_end1 = bp[m_len - 1]; | 580 | 3.45M | } | 581 | 27.1M | } | 582 | 401M | } | 583 | 9.77M | } |
Line | Count | Source | 509 | 6.57M | { | 510 | 6.57M | const lzo_bytep p1; | 511 | 6.57M | const lzo_bytep p2; | 512 | 6.57M | const lzo_bytep px; | 513 | 6.57M | lzo_uint m_len = s->m_len; | 514 | 6.57M | const lzo_bytep b = s_b(s); | 515 | 6.57M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 6.57M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 6.57M | swd_uintp succ3 = s_succ3(s); | 518 | 6.57M | unsigned char scan_end1; | 519 | | | 520 | 6.57M | assert(s->m_len > 0); | 521 | | | 522 | 6.57M | scan_end1 = bp[m_len - 1]; | 523 | 446M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 440M | { | 525 | 440M | p1 = bp; | 526 | 440M | p2 = b + node; | 527 | 440M | px = bx; | 528 | | | 529 | 440M | assert(m_len < s->look); | 530 | | | 531 | 440M | if ( | 532 | 440M | #if 1 | 533 | 440M | p2[m_len - 1] == scan_end1 && | 534 | 199M | p2[m_len] == p1[m_len] && | 535 | 27.5M | #endif | 536 | 27.5M | p2[0] == p1[0] && | 537 | 27.5M | p2[1] == p1[1]) | 538 | 27.4M | { | 539 | 27.4M | lzo_uint i; | 540 | 27.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 | 27.4M | p1 += 2; p2 += 2; | 550 | 514M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 27.4M | #endif | 552 | 27.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 | 27.4M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 27.4M | #if defined(SWD_BEST_OFF) | 563 | 27.4M | if (i < SWD_BEST_OFF) | 564 | 26.0M | { | 565 | 26.0M | if (s->best_pos[i] == 0) | 566 | 3.97M | s->best_pos[i] = node + 1; | 567 | 26.0M | } | 568 | 27.4M | #endif | 569 | 27.4M | if (i > m_len) | 570 | 4.44M | { | 571 | 4.44M | s->m_len = m_len = i; | 572 | 4.44M | s->m_pos = node; | 573 | 4.44M | if (m_len == s->look) | 574 | 5.20k | return; | 575 | 4.44M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 4.44M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 427k | return; | 579 | 4.01M | scan_end1 = bp[m_len - 1]; | 580 | 4.01M | } | 581 | 27.4M | } | 582 | 440M | } | 583 | 6.57M | } |
Line | Count | Source | 509 | 2.16M | { | 510 | 2.16M | const lzo_bytep p1; | 511 | 2.16M | const lzo_bytep p2; | 512 | 2.16M | const lzo_bytep px; | 513 | 2.16M | lzo_uint m_len = s->m_len; | 514 | 2.16M | const lzo_bytep b = s_b(s); | 515 | 2.16M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 2.16M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 2.16M | swd_uintp succ3 = s_succ3(s); | 518 | 2.16M | unsigned char scan_end1; | 519 | | | 520 | 2.16M | assert(s->m_len > 0); | 521 | | | 522 | 2.16M | scan_end1 = bp[m_len - 1]; | 523 | 23.6M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 21.5M | { | 525 | 21.5M | p1 = bp; | 526 | 21.5M | p2 = b + node; | 527 | 21.5M | px = bx; | 528 | | | 529 | 21.5M | assert(m_len < s->look); | 530 | | | 531 | 21.5M | if ( | 532 | 21.5M | #if 1 | 533 | 21.5M | p2[m_len - 1] == scan_end1 && | 534 | 12.9M | p2[m_len] == p1[m_len] && | 535 | 1.88M | #endif | 536 | 1.88M | p2[0] == p1[0] && | 537 | 1.88M | p2[1] == p1[1]) | 538 | 1.87M | { | 539 | 1.87M | lzo_uint i; | 540 | 1.87M | 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.87M | p1 += 2; p2 += 2; | 550 | 331M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 1.87M | #endif | 552 | 1.87M | 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.87M | 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.87M | if (i > m_len) | 570 | 791k | { | 571 | 791k | s->m_len = m_len = i; | 572 | 791k | s->m_pos = node; | 573 | 791k | if (m_len == s->look) | 574 | 4.89k | return; | 575 | 786k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 786k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 54.2k | return; | 579 | 732k | scan_end1 = bp[m_len - 1]; | 580 | 732k | } | 581 | 1.87M | } | 582 | 21.5M | } | 583 | 2.16M | } |
|
584 | | |
585 | | |
586 | | /*********************************************************************** |
587 | | // |
588 | | ************************************************************************/ |
589 | | |
590 | | #ifdef HEAD2 |
591 | | |
592 | | static |
593 | | lzo_bool swd_search2(lzo_swd_p s) |
594 | 47.3M | { |
595 | 47.3M | lzo_uint key; |
596 | | |
597 | 47.3M | assert(s->look >= 2); |
598 | 47.3M | assert(s->m_len > 0); |
599 | | |
600 | 47.3M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; |
601 | 47.3M | if (key == NIL2) |
602 | 23.3M | 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.3M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); |
609 | | #if defined(SWD_BEST_OFF) |
610 | 21.8M | if (s->best_pos[2] == 0) |
611 | 21.8M | s->best_pos[2] = key + 1; |
612 | | #endif |
613 | | |
614 | 24.0M | if (s->m_len < 2) |
615 | 24.0M | { |
616 | 24.0M | s->m_len = 2; |
617 | 24.0M | s->m_pos = key; |
618 | 24.0M | } |
619 | 24.0M | return 1; |
620 | 47.3M | } Line | Count | Source | 594 | 10.5M | { | 595 | 10.5M | lzo_uint key; | 596 | | | 597 | 10.5M | assert(s->look >= 2); | 598 | 10.5M | assert(s->m_len > 0); | 599 | | | 600 | 10.5M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 10.5M | if (key == NIL2) | 602 | 5.03M | 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 | 10.5M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 5.49M | #if defined(SWD_BEST_OFF) | 610 | 5.49M | if (s->best_pos[2] == 0) | 611 | 5.49M | s->best_pos[2] = key + 1; | 612 | 5.49M | #endif | 613 | | | 614 | 5.49M | if (s->m_len < 2) | 615 | 5.49M | { | 616 | 5.49M | s->m_len = 2; | 617 | 5.49M | s->m_pos = key; | 618 | 5.49M | } | 619 | 5.49M | return 1; | 620 | 10.5M | } |
Line | Count | Source | 594 | 18.3M | { | 595 | 18.3M | lzo_uint key; | 596 | | | 597 | 18.3M | assert(s->look >= 2); | 598 | 18.3M | assert(s->m_len > 0); | 599 | | | 600 | 18.3M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 18.3M | if (key == NIL2) | 602 | 8.59M | 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 | 18.3M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 9.77M | #if defined(SWD_BEST_OFF) | 610 | 9.77M | if (s->best_pos[2] == 0) | 611 | 9.77M | s->best_pos[2] = key + 1; | 612 | 9.77M | #endif | 613 | | | 614 | 9.77M | if (s->m_len < 2) | 615 | 9.77M | { | 616 | 9.77M | s->m_len = 2; | 617 | 9.77M | s->m_pos = key; | 618 | 9.77M | } | 619 | 9.77M | return 1; | 620 | 18.3M | } |
Line | Count | Source | 594 | 11.9M | { | 595 | 11.9M | lzo_uint key; | 596 | | | 597 | 11.9M | assert(s->look >= 2); | 598 | 11.9M | assert(s->m_len > 0); | 599 | | | 600 | 11.9M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 11.9M | if (key == NIL2) | 602 | 5.34M | 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 | 11.9M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 6.57M | #if defined(SWD_BEST_OFF) | 610 | 6.57M | if (s->best_pos[2] == 0) | 611 | 6.57M | s->best_pos[2] = key + 1; | 612 | 6.57M | #endif | 613 | | | 614 | 6.57M | if (s->m_len < 2) | 615 | 6.57M | { | 616 | 6.57M | s->m_len = 2; | 617 | 6.57M | s->m_pos = key; | 618 | 6.57M | } | 619 | 6.57M | return 1; | 620 | 11.9M | } |
Line | Count | Source | 594 | 6.54M | { | 595 | 6.54M | lzo_uint key; | 596 | | | 597 | 6.54M | assert(s->look >= 2); | 598 | 6.54M | assert(s->m_len > 0); | 599 | | | 600 | 6.54M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 6.54M | if (key == NIL2) | 602 | 4.38M | 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 | 6.54M | 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.16M | if (s->m_len < 2) | 615 | 2.16M | { | 616 | 2.16M | s->m_len = 2; | 617 | 2.16M | s->m_pos = key; | 618 | 2.16M | } | 619 | 2.16M | return 1; | 620 | 6.54M | } |
|
621 | | |
622 | | #endif |
623 | | |
624 | | |
625 | | /*********************************************************************** |
626 | | // |
627 | | ************************************************************************/ |
628 | | |
629 | | static |
630 | | void swd_findbest(lzo_swd_p s) |
631 | 74.3M | { |
632 | 74.3M | lzo_uint key; |
633 | 74.3M | lzo_uint cnt, node; |
634 | 74.3M | lzo_uint len; |
635 | | |
636 | 74.3M | assert(s->m_len > 0); |
637 | | |
638 | | /* get current head, add bp into HEAD3 */ |
639 | 74.3M | key = HEAD3(s_b(s),s->bp); |
640 | 74.3M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); |
641 | 74.3M | cnt = s_llen3(s)[key]++; |
642 | 74.3M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); |
643 | 74.3M | if (cnt > s->max_chain && s->max_chain > 0) |
644 | 358k | cnt = s->max_chain; |
645 | 74.3M | s_head3(s)[key] = SWD_UINT(s->bp); |
646 | | |
647 | 74.3M | s->b_char = s_b(s)[s->bp]; |
648 | 74.3M | len = s->m_len; |
649 | 74.3M | if (s->m_len >= s->look) |
650 | 12.8k | { |
651 | 12.8k | if (s->look == 0) |
652 | 7.40k | s->b_char = -1; |
653 | 12.8k | s->m_off = 0; |
654 | 12.8k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); |
655 | 12.8k | } |
656 | 74.3M | else |
657 | 74.3M | { |
658 | | #if defined(HEAD2) |
659 | 47.3M | if (swd_search2(s) && s->look >= 3) |
660 | 24.0M | swd_search(s,node,cnt); |
661 | | #else |
662 | 26.9M | if (s->look >= 3) |
663 | 26.9M | swd_search(s,node,cnt); |
664 | | #endif |
665 | 74.3M | if (s->m_len > len) |
666 | 24.6M | s->m_off = swd_pos2off(s,s->m_pos); |
667 | 74.3M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); |
668 | | |
669 | | #if defined(SWD_BEST_OFF) |
670 | 40.8M | if (s->use_best_off) |
671 | 40.8M | { |
672 | 40.8M | unsigned i; |
673 | 1.34G | for (i = 2; i < SWD_BEST_OFF; i++) |
674 | 1.30G | if (s->best_pos[i] > 0) |
675 | 33.4M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); |
676 | 1.27G | else |
677 | 1.27G | s->best_off[i] = 0; |
678 | 40.8M | } |
679 | | #endif |
680 | 74.3M | } |
681 | | |
682 | 74.3M | swd_remove_node(s,s->rp); |
683 | | |
684 | | #ifdef HEAD2 |
685 | | /* add bp into HEAD2 */ |
686 | | IF_HEAD2(s) { |
687 | 47.3M | key = HEAD2(s_b(s),s->bp); |
688 | 47.3M | s_head2(s)[key] = SWD_UINT(s->bp); |
689 | | } |
690 | | #endif |
691 | 74.3M | } Line | Count | Source | 631 | 4.39M | { | 632 | 4.39M | lzo_uint key; | 633 | 4.39M | lzo_uint cnt, node; | 634 | 4.39M | lzo_uint len; | 635 | | | 636 | 4.39M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 4.39M | key = HEAD3(s_b(s),s->bp); | 640 | 4.39M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 4.39M | cnt = s_llen3(s)[key]++; | 642 | 4.39M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 4.39M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 8.82k | cnt = s->max_chain; | 645 | 4.39M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 4.39M | s->b_char = s_b(s)[s->bp]; | 648 | 4.39M | len = s->m_len; | 649 | 4.39M | if (s->m_len >= s->look) | 650 | 1.37k | { | 651 | 1.37k | if (s->look == 0) | 652 | 659 | s->b_char = -1; | 653 | 1.37k | s->m_off = 0; | 654 | 1.37k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.37k | } | 656 | 4.39M | else | 657 | 4.39M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 4.39M | if (s->look >= 3) | 663 | 4.39M | swd_search(s,node,cnt); | 664 | 4.39M | #endif | 665 | 4.39M | if (s->m_len > len) | 666 | 245k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 4.39M | 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.39M | } | 681 | | | 682 | 4.39M | 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.39M | } |
Line | Count | Source | 631 | 10.9M | { | 632 | 10.9M | lzo_uint key; | 633 | 10.9M | lzo_uint cnt, node; | 634 | 10.9M | lzo_uint len; | 635 | | | 636 | 10.9M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 10.9M | key = HEAD3(s_b(s),s->bp); | 640 | 10.9M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 10.9M | cnt = s_llen3(s)[key]++; | 642 | 10.9M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 10.9M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 12.0k | cnt = s->max_chain; | 645 | 10.9M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 10.9M | s->b_char = s_b(s)[s->bp]; | 648 | 10.9M | len = s->m_len; | 649 | 10.9M | if (s->m_len >= s->look) | 650 | 1.35k | { | 651 | 1.35k | if (s->look == 0) | 652 | 718 | s->b_char = -1; | 653 | 1.35k | s->m_off = 0; | 654 | 1.35k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.35k | } | 656 | 10.9M | else | 657 | 10.9M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 10.9M | if (s->look >= 3) | 663 | 10.9M | swd_search(s,node,cnt); | 664 | 10.9M | #endif | 665 | 10.9M | if (s->m_len > len) | 666 | 169k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 10.9M | 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 | 10.9M | } | 681 | | | 682 | 10.9M | 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 | 10.9M | } |
Line | Count | Source | 631 | 11.6M | { | 632 | 11.6M | lzo_uint key; | 633 | 11.6M | lzo_uint cnt, node; | 634 | 11.6M | lzo_uint len; | 635 | | | 636 | 11.6M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 11.6M | key = HEAD3(s_b(s),s->bp); | 640 | 11.6M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 11.6M | cnt = s_llen3(s)[key]++; | 642 | 11.6M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 11.6M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 5.08k | cnt = s->max_chain; | 645 | 11.6M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 11.6M | s->b_char = s_b(s)[s->bp]; | 648 | 11.6M | len = s->m_len; | 649 | 11.6M | if (s->m_len >= s->look) | 650 | 1.66k | { | 651 | 1.66k | if (s->look == 0) | 652 | 832 | s->b_char = -1; | 653 | 1.66k | s->m_off = 0; | 654 | 1.66k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.66k | } | 656 | 11.6M | else | 657 | 11.6M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 11.6M | if (s->look >= 3) | 663 | 11.6M | swd_search(s,node,cnt); | 664 | 11.6M | #endif | 665 | 11.6M | if (s->m_len > len) | 666 | 191k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 11.6M | 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 | 11.6M | } | 681 | | | 682 | 11.6M | 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 | 11.6M | } |
Line | Count | Source | 631 | 10.5M | { | 632 | 10.5M | lzo_uint key; | 633 | 10.5M | lzo_uint cnt, node; | 634 | 10.5M | lzo_uint len; | 635 | | | 636 | 10.5M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 10.5M | key = HEAD3(s_b(s),s->bp); | 640 | 10.5M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 10.5M | cnt = s_llen3(s)[key]++; | 642 | 10.5M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 10.5M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 107k | cnt = s->max_chain; | 645 | 10.5M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 10.5M | s->b_char = s_b(s)[s->bp]; | 648 | 10.5M | len = s->m_len; | 649 | 10.5M | if (s->m_len >= s->look) | 650 | 2.16k | { | 651 | 2.16k | if (s->look == 0) | 652 | 1.35k | s->b_char = -1; | 653 | 2.16k | s->m_off = 0; | 654 | 2.16k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 2.16k | } | 656 | 10.5M | else | 657 | 10.5M | { | 658 | 10.5M | #if defined(HEAD2) | 659 | 10.5M | if (swd_search2(s) && s->look >= 3) | 660 | 5.49M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 10.5M | if (s->m_len > len) | 666 | 5.49M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 10.5M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 10.5M | #if defined(SWD_BEST_OFF) | 670 | 10.5M | if (s->use_best_off) | 671 | 10.5M | { | 672 | 10.5M | unsigned i; | 673 | 347M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 336M | if (s->best_pos[i] > 0) | 675 | 9.77M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 327M | else | 677 | 327M | s->best_off[i] = 0; | 678 | 10.5M | } | 679 | 10.5M | #endif | 680 | 10.5M | } | 681 | | | 682 | 10.5M | swd_remove_node(s,s->rp); | 683 | | | 684 | 10.5M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 10.5M | IF_HEAD2(s) { | 687 | 10.5M | key = HEAD2(s_b(s),s->bp); | 688 | 10.5M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 10.5M | } | 690 | 10.5M | #endif | 691 | 10.5M | } |
Line | Count | Source | 631 | 18.3M | { | 632 | 18.3M | lzo_uint key; | 633 | 18.3M | lzo_uint cnt, node; | 634 | 18.3M | lzo_uint len; | 635 | | | 636 | 18.3M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 18.3M | key = HEAD3(s_b(s),s->bp); | 640 | 18.3M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 18.3M | cnt = s_llen3(s)[key]++; | 642 | 18.3M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 18.3M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 101k | cnt = s->max_chain; | 645 | 18.3M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 18.3M | s->b_char = s_b(s)[s->bp]; | 648 | 18.3M | len = s->m_len; | 649 | 18.3M | if (s->m_len >= s->look) | 650 | 2.29k | { | 651 | 2.29k | if (s->look == 0) | 652 | 1.40k | s->b_char = -1; | 653 | 2.29k | s->m_off = 0; | 654 | 2.29k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 2.29k | } | 656 | 18.3M | else | 657 | 18.3M | { | 658 | 18.3M | #if defined(HEAD2) | 659 | 18.3M | if (swd_search2(s) && s->look >= 3) | 660 | 9.77M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 18.3M | if (s->m_len > len) | 666 | 9.77M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 18.3M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 18.3M | #if defined(SWD_BEST_OFF) | 670 | 18.3M | if (s->use_best_off) | 671 | 18.3M | { | 672 | 18.3M | unsigned i; | 673 | 606M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 588M | if (s->best_pos[i] > 0) | 675 | 13.1M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 574M | else | 677 | 574M | s->best_off[i] = 0; | 678 | 18.3M | } | 679 | 18.3M | #endif | 680 | 18.3M | } | 681 | | | 682 | 18.3M | swd_remove_node(s,s->rp); | 683 | | | 684 | 18.3M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 18.3M | IF_HEAD2(s) { | 687 | 18.3M | key = HEAD2(s_b(s),s->bp); | 688 | 18.3M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 18.3M | } | 690 | 18.3M | #endif | 691 | 18.3M | } |
Line | Count | Source | 631 | 11.9M | { | 632 | 11.9M | lzo_uint key; | 633 | 11.9M | lzo_uint cnt, node; | 634 | 11.9M | lzo_uint len; | 635 | | | 636 | 11.9M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 11.9M | key = HEAD3(s_b(s),s->bp); | 640 | 11.9M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 11.9M | cnt = s_llen3(s)[key]++; | 642 | 11.9M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 11.9M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 113k | cnt = s->max_chain; | 645 | 11.9M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 11.9M | s->b_char = s_b(s)[s->bp]; | 648 | 11.9M | len = s->m_len; | 649 | 11.9M | if (s->m_len >= s->look) | 650 | 2.78k | { | 651 | 2.78k | if (s->look == 0) | 652 | 1.69k | s->b_char = -1; | 653 | 2.78k | s->m_off = 0; | 654 | 2.78k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 2.78k | } | 656 | 11.9M | else | 657 | 11.9M | { | 658 | 11.9M | #if defined(HEAD2) | 659 | 11.9M | if (swd_search2(s) && s->look >= 3) | 660 | 6.57M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 11.9M | if (s->m_len > len) | 666 | 6.57M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 11.9M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 11.9M | #if defined(SWD_BEST_OFF) | 670 | 11.9M | if (s->use_best_off) | 671 | 11.9M | { | 672 | 11.9M | unsigned i; | 673 | 393M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 381M | if (s->best_pos[i] > 0) | 675 | 10.5M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 371M | else | 677 | 371M | s->best_off[i] = 0; | 678 | 11.9M | } | 679 | 11.9M | #endif | 680 | 11.9M | } | 681 | | | 682 | 11.9M | swd_remove_node(s,s->rp); | 683 | | | 684 | 11.9M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 11.9M | IF_HEAD2(s) { | 687 | 11.9M | key = HEAD2(s_b(s),s->bp); | 688 | 11.9M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 11.9M | } | 690 | 11.9M | #endif | 691 | 11.9M | } |
Line | Count | Source | 631 | 6.54M | { | 632 | 6.54M | lzo_uint key; | 633 | 6.54M | lzo_uint cnt, node; | 634 | 6.54M | lzo_uint len; | 635 | | | 636 | 6.54M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 6.54M | key = HEAD3(s_b(s),s->bp); | 640 | 6.54M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 6.54M | cnt = s_llen3(s)[key]++; | 642 | 6.54M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 6.54M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 8.88k | cnt = s->max_chain; | 645 | 6.54M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 6.54M | s->b_char = s_b(s)[s->bp]; | 648 | 6.54M | len = s->m_len; | 649 | 6.54M | if (s->m_len >= s->look) | 650 | 1.16k | { | 651 | 1.16k | if (s->look == 0) | 652 | 735 | 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 | 6.54M | else | 657 | 6.54M | { | 658 | 6.54M | #if defined(HEAD2) | 659 | 6.54M | if (swd_search2(s) && s->look >= 3) | 660 | 2.16M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 6.54M | if (s->m_len > len) | 666 | 2.16M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 6.54M | 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 | 6.54M | } | 681 | | | 682 | 6.54M | swd_remove_node(s,s->rp); | 683 | | | 684 | 6.54M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 6.54M | IF_HEAD2(s) { | 687 | 6.54M | key = HEAD2(s_b(s),s->bp); | 688 | 6.54M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 6.54M | } | 690 | 6.54M | #endif | 691 | 6.54M | } |
|
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: */ |