/src/lzo-2.10/src/lzo_swd.ch
Line | Count | Source (jump to first uncovered line) |
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 | 179M | # define SWD_UINT_MAX 0xffffu |
48 | | #else |
49 | | typedef lzo_uint32_t swd_uint; |
50 | 1.33M | # define SWD_UINT_MAX 0xffffffffu |
51 | | #endif |
52 | 52.8M | #define swd_uintp swd_uint * |
53 | 448M | #define SWD_UINT(x) ((swd_uint)(x)) |
54 | | |
55 | | |
56 | | #ifndef SWD_HSIZE |
57 | 266M | # define SWD_HSIZE 16384 |
58 | | #endif |
59 | | #ifndef SWD_MAX_CHAIN |
60 | 8.36k | # define SWD_MAX_CHAIN 2048 |
61 | | #endif |
62 | | |
63 | | #if !defined(HEAD3) |
64 | | #if 1 |
65 | | # define HEAD3(b,p) \ |
66 | 266M | ((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 | 261M | # 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 | 83.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 | 8.36k | #define lzo_swd_p lzo_swd_t * |
155 | | |
156 | | |
157 | 405M | #define s_b(s) s->b |
158 | 303M | #define s_head3(s) s->head3 |
159 | 216M | #define s_succ3(s) s->succ3 |
160 | 176M | #define s_best3(s) s->best3 |
161 | 429M | #define s_llen3(s) s->llen3 |
162 | | #ifdef HEAD2 |
163 | 280M | #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 | 163M | ((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 | 8.36k | { |
187 | 8.36k | s->dict = s->dict_end = NULL; |
188 | 8.36k | s->dict_len = 0; |
189 | | |
190 | 8.36k | if (!dict || dict_len == 0) |
191 | 8.36k | 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 | 746 | { | 187 | 746 | s->dict = s->dict_end = NULL; | 188 | 746 | s->dict_len = 0; | 189 | | | 190 | 746 | if (!dict || dict_len == 0) | 191 | 746 | 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 | 805 | { | 187 | 805 | s->dict = s->dict_end = NULL; | 188 | 805 | s->dict_len = 0; | 189 | | | 190 | 805 | if (!dict || dict_len == 0) | 191 | 805 | 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 | 880 | { | 187 | 880 | s->dict = s->dict_end = NULL; | 188 | 880 | s->dict_len = 0; | 189 | | | 190 | 880 | if (!dict || dict_len == 0) | 191 | 880 | 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.60k | { | 187 | 1.60k | s->dict = s->dict_end = NULL; | 188 | 1.60k | s->dict_len = 0; | 189 | | | 190 | 1.60k | if (!dict || dict_len == 0) | 191 | 1.60k | 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.60k | { | 187 | 1.60k | s->dict = s->dict_end = NULL; | 188 | 1.60k | s->dict_len = 0; | 189 | | | 190 | 1.60k | if (!dict || dict_len == 0) | 191 | 1.60k | 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.91k | { | 187 | 1.91k | s->dict = s->dict_end = NULL; | 188 | 1.91k | s->dict_len = 0; | 189 | | | 190 | 1.91k | if (!dict || dict_len == 0) | 191 | 1.91k | 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 | 814 | { | 187 | 814 | s->dict = s->dict_end = NULL; | 188 | 814 | s->dict_len = 0; | 189 | | | 190 | 814 | if (!dict || dict_len == 0) | 191 | 814 | 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 | 8.36k | { |
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 | 8.36k | s->m_len = 0; |
270 | 8.36k | s->m_off = 0; |
271 | | #if defined(SWD_BEST_OFF) |
272 | | { |
273 | | unsigned i; |
274 | 179k | for (i = 0; i < SWD_BEST_OFF; i++) |
275 | 174k | s->best_off[i] = s->best_pos[i] = 0; |
276 | | } |
277 | | #endif |
278 | | |
279 | 8.36k | s->swd_n = SWD_N; |
280 | 8.36k | s->swd_f = SWD_F; |
281 | 8.36k | s->swd_threshold = SWD_THRESHOLD; |
282 | | |
283 | | /* defaults */ |
284 | 8.36k | s->max_chain = SWD_MAX_CHAIN; |
285 | 8.36k | s->nice_length = s->swd_f; |
286 | 8.36k | s->use_best_off = 0; |
287 | 8.36k | s->lazy_insert = 0; |
288 | | |
289 | 8.36k | 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 | 8.36k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) |
295 | 8.36k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) |
296 | 8.36k | #endif |
297 | 8.36k | s->b_wrap = s_b(s) + s->b_size; |
298 | 8.36k | s->node_count = s->swd_n; |
299 | | |
300 | 8.36k | 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.93k | 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 | 8.36k | s->ip = 0; |
315 | 8.36k | swd_initdict(s,dict,dict_len); |
316 | 8.36k | s->bp = s->ip; |
317 | 8.36k | s->first_rp = s->ip; |
318 | | |
319 | 8.36k | assert(s->ip + s->swd_f <= s->b_size); |
320 | 8.36k | #if 1 |
321 | 8.36k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); |
322 | 8.36k | if (s->look > 0) |
323 | 8.35k | { |
324 | 8.35k | if (s->look > s->swd_f) |
325 | 2.97k | s->look = s->swd_f; |
326 | 8.35k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); |
327 | 8.35k | s->c->ip += s->look; |
328 | 8.35k | s->ip += s->look; |
329 | 8.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 | 8.36k | if (s->ip == s->b_size) |
343 | 0 | s->ip = 0; |
344 | | |
345 | 8.36k | if (s->look >= 2 && s->dict_len > 0) |
346 | 0 | swd_insertdict(s,0,s->dict_len); |
347 | | |
348 | 8.36k | s->rp = s->first_rp; |
349 | 8.36k | if (s->rp >= s->node_count) |
350 | 0 | s->rp -= s->node_count; |
351 | 8.36k | else |
352 | 8.36k | s->rp += s->b_size - s->node_count; |
353 | | |
354 | 8.36k | #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 | 8.36k | if (s->look < 3) { |
358 | 85 | lzo_bytep p = &s_b(s)[s->bp+s->look]; |
359 | 85 | p[0] = p[1] = p[2] = 0; |
360 | 85 | } |
361 | 8.36k | #endif |
362 | | |
363 | 8.36k | return LZO_E_OK; |
364 | 8.36k | } Line | Count | Source | 244 | 746 | { | 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 | 746 | s->m_len = 0; | 270 | 746 | 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 | 746 | s->swd_n = SWD_N; | 280 | 746 | s->swd_f = SWD_F; | 281 | 746 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 746 | s->max_chain = SWD_MAX_CHAIN; | 285 | 746 | s->nice_length = s->swd_f; | 286 | 746 | s->use_best_off = 0; | 287 | 746 | s->lazy_insert = 0; | 288 | | | 289 | 746 | 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 | 746 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 746 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 746 | #endif | 297 | 746 | s->b_wrap = s_b(s) + s->b_size; | 298 | 746 | s->node_count = s->swd_n; | 299 | | | 300 | 746 | 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 | 746 | s->ip = 0; | 315 | 746 | swd_initdict(s,dict,dict_len); | 316 | 746 | s->bp = s->ip; | 317 | 746 | s->first_rp = s->ip; | 318 | | | 319 | 746 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 746 | #if 1 | 321 | 746 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 746 | if (s->look > 0) | 323 | 745 | { | 324 | 745 | if (s->look > s->swd_f) | 325 | 254 | s->look = s->swd_f; | 326 | 745 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 745 | s->c->ip += s->look; | 328 | 745 | s->ip += s->look; | 329 | 745 | } | 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 | 746 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 746 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 746 | s->rp = s->first_rp; | 349 | 746 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 746 | else | 352 | 746 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 746 | #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 | 746 | if (s->look < 3) { | 358 | 13 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 13 | p[0] = p[1] = p[2] = 0; | 360 | 13 | } | 361 | 746 | #endif | 362 | | | 363 | 746 | return LZO_E_OK; | 364 | 746 | } |
Line | Count | Source | 244 | 805 | { | 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 | 805 | s->m_len = 0; | 270 | 805 | 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 | 805 | s->swd_n = SWD_N; | 280 | 805 | s->swd_f = SWD_F; | 281 | 805 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 805 | s->max_chain = SWD_MAX_CHAIN; | 285 | 805 | s->nice_length = s->swd_f; | 286 | 805 | s->use_best_off = 0; | 287 | 805 | s->lazy_insert = 0; | 288 | | | 289 | 805 | 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 | 805 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 805 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 805 | #endif | 297 | 805 | s->b_wrap = s_b(s) + s->b_size; | 298 | 805 | s->node_count = s->swd_n; | 299 | | | 300 | 805 | 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 | 805 | s->ip = 0; | 315 | 805 | swd_initdict(s,dict,dict_len); | 316 | 805 | s->bp = s->ip; | 317 | 805 | s->first_rp = s->ip; | 318 | | | 319 | 805 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 805 | #if 1 | 321 | 805 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 805 | if (s->look > 0) | 323 | 804 | { | 324 | 804 | if (s->look > s->swd_f) | 325 | 236 | s->look = s->swd_f; | 326 | 804 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 804 | s->c->ip += s->look; | 328 | 804 | s->ip += s->look; | 329 | 804 | } | 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 | 805 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 805 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 805 | s->rp = s->first_rp; | 349 | 805 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 805 | else | 352 | 805 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 805 | #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 | 805 | 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 | 805 | #endif | 362 | | | 363 | 805 | return LZO_E_OK; | 364 | 805 | } |
Line | Count | Source | 244 | 880 | { | 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 | 880 | s->m_len = 0; | 270 | 880 | 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 | 880 | s->swd_n = SWD_N; | 280 | 880 | s->swd_f = SWD_F; | 281 | 880 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 880 | s->max_chain = SWD_MAX_CHAIN; | 285 | 880 | s->nice_length = s->swd_f; | 286 | 880 | s->use_best_off = 0; | 287 | 880 | s->lazy_insert = 0; | 288 | | | 289 | 880 | 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 | 880 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 880 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 880 | #endif | 297 | 880 | s->b_wrap = s_b(s) + s->b_size; | 298 | 880 | s->node_count = s->swd_n; | 299 | | | 300 | 880 | 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 | 880 | s->ip = 0; | 315 | 880 | swd_initdict(s,dict,dict_len); | 316 | 880 | s->bp = s->ip; | 317 | 880 | s->first_rp = s->ip; | 318 | | | 319 | 880 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 880 | #if 1 | 321 | 880 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 880 | if (s->look > 0) | 323 | 879 | { | 324 | 879 | if (s->look > s->swd_f) | 325 | 244 | s->look = s->swd_f; | 326 | 879 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 879 | s->c->ip += s->look; | 328 | 879 | s->ip += s->look; | 329 | 879 | } | 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 | 880 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 880 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 880 | s->rp = s->first_rp; | 349 | 880 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 880 | else | 352 | 880 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 880 | #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 | 880 | 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 | 880 | #endif | 362 | | | 363 | 880 | return LZO_E_OK; | 364 | 880 | } |
Line | Count | Source | 244 | 1.60k | { | 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.60k | s->m_len = 0; | 270 | 1.60k | s->m_off = 0; | 271 | 1.60k | #if defined(SWD_BEST_OFF) | 272 | 1.60k | { | 273 | 1.60k | unsigned i; | 274 | 56.0k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 54.4k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.60k | } | 277 | 1.60k | #endif | 278 | | | 279 | 1.60k | s->swd_n = SWD_N; | 280 | 1.60k | s->swd_f = SWD_F; | 281 | 1.60k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.60k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.60k | s->nice_length = s->swd_f; | 286 | 1.60k | s->use_best_off = 0; | 287 | 1.60k | s->lazy_insert = 0; | 288 | | | 289 | 1.60k | 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.60k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.60k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.60k | #endif | 297 | 1.60k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.60k | s->node_count = s->swd_n; | 299 | | | 300 | 1.60k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.60k | #ifdef HEAD2 | 302 | 1.60k | IF_HEAD2(s) { | 303 | 1.60k | #if 1 | 304 | 1.60k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.60k | 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.60k | } | 312 | 1.60k | #endif | 313 | | | 314 | 1.60k | s->ip = 0; | 315 | 1.60k | swd_initdict(s,dict,dict_len); | 316 | 1.60k | s->bp = s->ip; | 317 | 1.60k | s->first_rp = s->ip; | 318 | | | 319 | 1.60k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.60k | #if 1 | 321 | 1.60k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.60k | if (s->look > 0) | 323 | 1.60k | { | 324 | 1.60k | if (s->look > s->swd_f) | 325 | 704 | s->look = s->swd_f; | 326 | 1.60k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.60k | s->c->ip += s->look; | 328 | 1.60k | s->ip += s->look; | 329 | 1.60k | } | 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.60k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.60k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.60k | s->rp = s->first_rp; | 349 | 1.60k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.60k | else | 352 | 1.60k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.60k | #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.60k | 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.60k | #endif | 362 | | | 363 | 1.60k | return LZO_E_OK; | 364 | 1.60k | } |
Line | Count | Source | 244 | 1.60k | { | 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.60k | s->m_len = 0; | 270 | 1.60k | s->m_off = 0; | 271 | 1.60k | #if defined(SWD_BEST_OFF) | 272 | 1.60k | { | 273 | 1.60k | unsigned i; | 274 | 56.1k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 54.5k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.60k | } | 277 | 1.60k | #endif | 278 | | | 279 | 1.60k | s->swd_n = SWD_N; | 280 | 1.60k | s->swd_f = SWD_F; | 281 | 1.60k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.60k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.60k | s->nice_length = s->swd_f; | 286 | 1.60k | s->use_best_off = 0; | 287 | 1.60k | s->lazy_insert = 0; | 288 | | | 289 | 1.60k | 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.60k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.60k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.60k | #endif | 297 | 1.60k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.60k | s->node_count = s->swd_n; | 299 | | | 300 | 1.60k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.60k | #ifdef HEAD2 | 302 | 1.60k | IF_HEAD2(s) { | 303 | 1.60k | #if 1 | 304 | 1.60k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.60k | 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.60k | } | 312 | 1.60k | #endif | 313 | | | 314 | 1.60k | s->ip = 0; | 315 | 1.60k | swd_initdict(s,dict,dict_len); | 316 | 1.60k | s->bp = s->ip; | 317 | 1.60k | s->first_rp = s->ip; | 318 | | | 319 | 1.60k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.60k | #if 1 | 321 | 1.60k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.60k | if (s->look > 0) | 323 | 1.60k | { | 324 | 1.60k | if (s->look > s->swd_f) | 325 | 635 | s->look = s->swd_f; | 326 | 1.60k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.60k | s->c->ip += s->look; | 328 | 1.60k | s->ip += s->look; | 329 | 1.60k | } | 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.60k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.60k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.60k | s->rp = s->first_rp; | 349 | 1.60k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.60k | else | 352 | 1.60k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.60k | #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.60k | if (s->look < 3) { | 358 | 13 | lzo_bytep p = &s_b(s)[s->bp+s->look]; | 359 | 13 | p[0] = p[1] = p[2] = 0; | 360 | 13 | } | 361 | 1.60k | #endif | 362 | | | 363 | 1.60k | return LZO_E_OK; | 364 | 1.60k | } |
Line | Count | Source | 244 | 1.91k | { | 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.91k | s->m_len = 0; | 270 | 1.91k | s->m_off = 0; | 271 | 1.91k | #if defined(SWD_BEST_OFF) | 272 | 1.91k | { | 273 | 1.91k | unsigned i; | 274 | 66.9k | for (i = 0; i < SWD_BEST_OFF; i++) | 275 | 65.0k | s->best_off[i] = s->best_pos[i] = 0; | 276 | 1.91k | } | 277 | 1.91k | #endif | 278 | | | 279 | 1.91k | s->swd_n = SWD_N; | 280 | 1.91k | s->swd_f = SWD_F; | 281 | 1.91k | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 1.91k | s->max_chain = SWD_MAX_CHAIN; | 285 | 1.91k | s->nice_length = s->swd_f; | 286 | 1.91k | s->use_best_off = 0; | 287 | 1.91k | s->lazy_insert = 0; | 288 | | | 289 | 1.91k | 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.91k | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 1.91k | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 1.91k | #endif | 297 | 1.91k | s->b_wrap = s_b(s) + s->b_size; | 298 | 1.91k | s->node_count = s->swd_n; | 299 | | | 300 | 1.91k | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 1.91k | #ifdef HEAD2 | 302 | 1.91k | IF_HEAD2(s) { | 303 | 1.91k | #if 1 | 304 | 1.91k | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 1.91k | 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.91k | } | 312 | 1.91k | #endif | 313 | | | 314 | 1.91k | s->ip = 0; | 315 | 1.91k | swd_initdict(s,dict,dict_len); | 316 | 1.91k | s->bp = s->ip; | 317 | 1.91k | s->first_rp = s->ip; | 318 | | | 319 | 1.91k | assert(s->ip + s->swd_f <= s->b_size); | 320 | 1.91k | #if 1 | 321 | 1.91k | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 1.91k | if (s->look > 0) | 323 | 1.91k | { | 324 | 1.91k | if (s->look > s->swd_f) | 325 | 717 | s->look = s->swd_f; | 326 | 1.91k | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 1.91k | s->c->ip += s->look; | 328 | 1.91k | s->ip += s->look; | 329 | 1.91k | } | 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.91k | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 1.91k | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 1.91k | s->rp = s->first_rp; | 349 | 1.91k | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 1.91k | else | 352 | 1.91k | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 1.91k | #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.91k | 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.91k | #endif | 362 | | | 363 | 1.91k | return LZO_E_OK; | 364 | 1.91k | } |
Line | Count | Source | 244 | 814 | { | 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 | 814 | s->m_len = 0; | 270 | 814 | 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 | 814 | s->swd_n = SWD_N; | 280 | 814 | s->swd_f = SWD_F; | 281 | 814 | s->swd_threshold = SWD_THRESHOLD; | 282 | | | 283 | | /* defaults */ | 284 | 814 | s->max_chain = SWD_MAX_CHAIN; | 285 | 814 | s->nice_length = s->swd_f; | 286 | 814 | s->use_best_off = 0; | 287 | 814 | s->lazy_insert = 0; | 288 | | | 289 | 814 | 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 | 814 | LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N)) | 295 | 814 | LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX)) | 296 | 814 | #endif | 297 | 814 | s->b_wrap = s_b(s) + s->b_size; | 298 | 814 | s->node_count = s->swd_n; | 299 | | | 300 | 814 | lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE); | 301 | 814 | #ifdef HEAD2 | 302 | 814 | IF_HEAD2(s) { | 303 | 814 | #if 1 | 304 | 814 | lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L); | 305 | 814 | 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 | 814 | } | 312 | 814 | #endif | 313 | | | 314 | 814 | s->ip = 0; | 315 | 814 | swd_initdict(s,dict,dict_len); | 316 | 814 | s->bp = s->ip; | 317 | 814 | s->first_rp = s->ip; | 318 | | | 319 | 814 | assert(s->ip + s->swd_f <= s->b_size); | 320 | 814 | #if 1 | 321 | 814 | s->look = (lzo_uint) (s->c->in_end - s->c->ip); | 322 | 814 | if (s->look > 0) | 323 | 812 | { | 324 | 812 | if (s->look > s->swd_f) | 325 | 184 | s->look = s->swd_f; | 326 | 812 | lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look); | 327 | 812 | s->c->ip += s->look; | 328 | 812 | s->ip += s->look; | 329 | 812 | } | 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 | 814 | if (s->ip == s->b_size) | 343 | 0 | s->ip = 0; | 344 | | | 345 | 814 | if (s->look >= 2 && s->dict_len > 0) | 346 | 0 | swd_insertdict(s,0,s->dict_len); | 347 | | | 348 | 814 | s->rp = s->first_rp; | 349 | 814 | if (s->rp >= s->node_count) | 350 | 0 | s->rp -= s->node_count; | 351 | 814 | else | 352 | 814 | s->rp += s->b_size - s->node_count; | 353 | | | 354 | 814 | #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 | 814 | 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 | 814 | #endif | 362 | | | 363 | 814 | return LZO_E_OK; | 364 | 814 | } |
|
365 | | |
366 | | |
367 | | static |
368 | | void swd_exit(lzo_swd_p s) |
369 | 8.36k | { |
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 | 8.36k | LZO_UNUSED(s); |
382 | 8.36k | #endif |
383 | 8.36k | } Line | Count | Source | 369 | 746 | { | 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 | 746 | LZO_UNUSED(s); | 382 | 746 | #endif | 383 | 746 | } |
Line | Count | Source | 369 | 805 | { | 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 | 805 | LZO_UNUSED(s); | 382 | 805 | #endif | 383 | 805 | } |
Line | Count | Source | 369 | 880 | { | 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 | 880 | LZO_UNUSED(s); | 382 | 880 | #endif | 383 | 880 | } |
Line | Count | Source | 369 | 1.60k | { | 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.60k | LZO_UNUSED(s); | 382 | 1.60k | #endif | 383 | 1.60k | } |
Line | Count | Source | 369 | 1.60k | { | 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.60k | LZO_UNUSED(s); | 382 | 1.60k | #endif | 383 | 1.60k | } |
Line | Count | Source | 369 | 1.91k | { | 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.91k | LZO_UNUSED(s); | 382 | 1.91k | #endif | 383 | 1.91k | } |
Line | Count | Source | 369 | 814 | { | 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 | 814 | LZO_UNUSED(s); | 382 | 814 | #endif | 383 | 814 | } |
|
384 | | |
385 | | |
386 | | #define swd_pos2off(s,pos) \ |
387 | 74.7M | (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 | 163M | { |
397 | 163M | int c; |
398 | | |
399 | 163M | if ((c = getbyte(*(s->c))) < 0) |
400 | 7.83M | { |
401 | 7.83M | if (s->look > 0) |
402 | 7.82M | --s->look; |
403 | 7.83M | #if 1 || defined(__LZO_CHECKER) |
404 | | /* initialize memory - value doesn't matter */ |
405 | 7.83M | s_b(s)[s->ip] = 0; |
406 | 7.83M | if (s->ip < s->swd_f) |
407 | 1.67M | s->b_wrap[s->ip] = 0; |
408 | 7.83M | #endif |
409 | 7.83M | } |
410 | 155M | else |
411 | 155M | { |
412 | 155M | s_b(s)[s->ip] = LZO_BYTE(c); |
413 | 155M | if (s->ip < s->swd_f) |
414 | 7.95M | s->b_wrap[s->ip] = LZO_BYTE(c); |
415 | 155M | } |
416 | 163M | if (++s->ip == s->b_size) |
417 | 4.44k | s->ip = 0; |
418 | 163M | if (++s->bp == s->b_size) |
419 | 4.13k | s->bp = 0; |
420 | 163M | if (++s->rp == s->b_size) |
421 | 4.44k | s->rp = 0; |
422 | 163M | } Line | Count | Source | 396 | 13.0M | { | 397 | 13.0M | int c; | 398 | | | 399 | 13.0M | if ((c = getbyte(*(s->c))) < 0) | 400 | 649k | { | 401 | 649k | if (s->look > 0) | 402 | 648k | --s->look; | 403 | 649k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 649k | s_b(s)[s->ip] = 0; | 406 | 649k | if (s->ip < s->swd_f) | 407 | 149k | s->b_wrap[s->ip] = 0; | 408 | 649k | #endif | 409 | 649k | } | 410 | 12.3M | else | 411 | 12.3M | { | 412 | 12.3M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 12.3M | if (s->ip < s->swd_f) | 414 | 195k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 12.3M | } | 416 | 13.0M | if (++s->ip == s->b_size) | 417 | 154 | s->ip = 0; | 418 | 13.0M | if (++s->bp == s->b_size) | 419 | 127 | s->bp = 0; | 420 | 13.0M | if (++s->rp == s->b_size) | 421 | 154 | s->rp = 0; | 422 | 13.0M | } |
Line | Count | Source | 396 | 14.9M | { | 397 | 14.9M | int c; | 398 | | | 399 | 14.9M | if ((c = getbyte(*(s->c))) < 0) | 400 | 634k | { | 401 | 634k | if (s->look > 0) | 402 | 633k | --s->look; | 403 | 634k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 634k | s_b(s)[s->ip] = 0; | 406 | 634k | if (s->ip < s->swd_f) | 407 | 185k | s->b_wrap[s->ip] = 0; | 408 | 634k | #endif | 409 | 634k | } | 410 | 14.2M | else | 411 | 14.2M | { | 412 | 14.2M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 14.2M | if (s->ip < s->swd_f) | 414 | 1.38M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 14.2M | } | 416 | 14.9M | if (++s->ip == s->b_size) | 417 | 751 | s->ip = 0; | 418 | 14.9M | if (++s->bp == s->b_size) | 419 | 711 | s->bp = 0; | 420 | 14.9M | if (++s->rp == s->b_size) | 421 | 751 | s->rp = 0; | 422 | 14.9M | } |
Line | Count | Source | 396 | 12.6M | { | 397 | 12.6M | int c; | 398 | | | 399 | 12.6M | if ((c = getbyte(*(s->c))) < 0) | 400 | 717k | { | 401 | 717k | if (s->look > 0) | 402 | 716k | --s->look; | 403 | 717k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 717k | s_b(s)[s->ip] = 0; | 406 | 717k | if (s->ip < s->swd_f) | 407 | 193k | s->b_wrap[s->ip] = 0; | 408 | 717k | #endif | 409 | 717k | } | 410 | 11.9M | else | 411 | 11.9M | { | 412 | 11.9M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 11.9M | if (s->ip < s->swd_f) | 414 | 1.14M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 11.9M | } | 416 | 12.6M | if (++s->ip == s->b_size) | 417 | 636 | s->ip = 0; | 418 | 12.6M | if (++s->bp == s->b_size) | 419 | 599 | s->bp = 0; | 420 | 12.6M | if (++s->rp == s->b_size) | 421 | 636 | s->rp = 0; | 422 | 12.6M | } |
Line | Count | Source | 396 | 35.3M | { | 397 | 35.3M | int c; | 398 | | | 399 | 35.3M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.70M | { | 401 | 1.70M | if (s->look > 0) | 402 | 1.70M | --s->look; | 403 | 1.70M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.70M | s_b(s)[s->ip] = 0; | 406 | 1.70M | if (s->ip < s->swd_f) | 407 | 259k | s->b_wrap[s->ip] = 0; | 408 | 1.70M | #endif | 409 | 1.70M | } | 410 | 33.6M | else | 411 | 33.6M | { | 412 | 33.6M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 33.6M | if (s->ip < s->swd_f) | 414 | 922k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 33.6M | } | 416 | 35.3M | if (++s->ip == s->b_size) | 417 | 537 | s->ip = 0; | 418 | 35.3M | if (++s->bp == s->b_size) | 419 | 488 | s->bp = 0; | 420 | 35.3M | if (++s->rp == s->b_size) | 421 | 537 | s->rp = 0; | 422 | 35.3M | } |
Line | Count | Source | 396 | 33.9M | { | 397 | 33.9M | int c; | 398 | | | 399 | 33.9M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.66M | { | 401 | 1.66M | if (s->look > 0) | 402 | 1.66M | --s->look; | 403 | 1.66M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.66M | s_b(s)[s->ip] = 0; | 406 | 1.66M | if (s->ip < s->swd_f) | 407 | 380k | s->b_wrap[s->ip] = 0; | 408 | 1.66M | #endif | 409 | 1.66M | } | 410 | 32.2M | else | 411 | 32.2M | { | 412 | 32.2M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 32.2M | if (s->ip < s->swd_f) | 414 | 848k | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 32.2M | } | 416 | 33.9M | if (++s->ip == s->b_size) | 417 | 505 | s->ip = 0; | 418 | 33.9M | if (++s->bp == s->b_size) | 419 | 452 | s->bp = 0; | 420 | 33.9M | if (++s->rp == s->b_size) | 421 | 505 | s->rp = 0; | 422 | 33.9M | } |
Line | Count | Source | 396 | 39.9M | { | 397 | 39.9M | int c; | 398 | | | 399 | 39.9M | if ((c = getbyte(*(s->c))) < 0) | 400 | 1.93M | { | 401 | 1.93M | if (s->look > 0) | 402 | 1.93M | --s->look; | 403 | 1.93M | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 1.93M | s_b(s)[s->ip] = 0; | 406 | 1.93M | if (s->ip < s->swd_f) | 407 | 318k | s->b_wrap[s->ip] = 0; | 408 | 1.93M | #endif | 409 | 1.93M | } | 410 | 37.9M | else | 411 | 37.9M | { | 412 | 37.9M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 37.9M | if (s->ip < s->swd_f) | 414 | 1.05M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 37.9M | } | 416 | 39.9M | if (++s->ip == s->b_size) | 417 | 599 | s->ip = 0; | 418 | 39.9M | if (++s->bp == s->b_size) | 419 | 552 | s->bp = 0; | 420 | 39.9M | if (++s->rp == s->b_size) | 421 | 599 | s->rp = 0; | 422 | 39.9M | } |
Line | Count | Source | 396 | 13.2M | { | 397 | 13.2M | int c; | 398 | | | 399 | 13.2M | if ((c = getbyte(*(s->c))) < 0) | 400 | 522k | { | 401 | 522k | if (s->look > 0) | 402 | 521k | --s->look; | 403 | 522k | #if 1 || defined(__LZO_CHECKER) | 404 | | /* initialize memory - value doesn't matter */ | 405 | 522k | s_b(s)[s->ip] = 0; | 406 | 522k | if (s->ip < s->swd_f) | 407 | 192k | s->b_wrap[s->ip] = 0; | 408 | 522k | #endif | 409 | 522k | } | 410 | 12.7M | else | 411 | 12.7M | { | 412 | 12.7M | s_b(s)[s->ip] = LZO_BYTE(c); | 413 | 12.7M | if (s->ip < s->swd_f) | 414 | 2.40M | s->b_wrap[s->ip] = LZO_BYTE(c); | 415 | 12.7M | } | 416 | 13.2M | if (++s->ip == s->b_size) | 417 | 1.26k | s->ip = 0; | 418 | 13.2M | if (++s->bp == s->b_size) | 419 | 1.21k | s->bp = 0; | 420 | 13.2M | if (++s->rp == s->b_size) | 421 | 1.26k | s->rp = 0; | 422 | 13.2M | } |
|
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 | 163M | { |
432 | 163M | if (s->node_count == 0) |
433 | 103M | { |
434 | 103M | 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 | 103M | key = HEAD3(s_b(s),node); |
450 | 103M | assert(s_llen3(s)[key] > 0); |
451 | 103M | --s_llen3(s)[key]; |
452 | | |
453 | | #ifdef HEAD2 |
454 | | IF_HEAD2(s) { |
455 | 74.4M | key = HEAD2(s_b(s),node); |
456 | | assert(s_head2(s)[key] != NIL2); |
457 | 74.4M | if ((lzo_uint) s_head2(s)[key] == node) |
458 | 19.6M | s_head2(s)[key] = NIL2; |
459 | | } |
460 | | #endif |
461 | 103M | } |
462 | 59.9M | else |
463 | 59.9M | --s->node_count; |
464 | 163M | } lzo1b_9x.c:swd_remove_node Line | Count | Source | 431 | 13.0M | { | 432 | 13.0M | if (s->node_count == 0) | 433 | 6.25M | { | 434 | 6.25M | 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.25M | key = HEAD3(s_b(s),node); | 450 | 6.25M | assert(s_llen3(s)[key] > 0); | 451 | 6.25M | --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.25M | } | 462 | 6.77M | else | 463 | 6.77M | --s->node_count; | 464 | 13.0M | } |
lzo1c_9x.c:swd_remove_node Line | Count | Source | 431 | 14.9M | { | 432 | 14.9M | if (s->node_count == 0) | 433 | 12.2M | { | 434 | 12.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 | 12.2M | key = HEAD3(s_b(s),node); | 450 | 12.2M | assert(s_llen3(s)[key] > 0); | 451 | 12.2M | --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 | 12.2M | } | 462 | 2.65M | else | 463 | 2.65M | --s->node_count; | 464 | 14.9M | } |
lzo1f_9x.c:swd_remove_node Line | Count | Source | 431 | 12.6M | { | 432 | 12.6M | if (s->node_count == 0) | 433 | 10.2M | { | 434 | 10.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 | 10.2M | key = HEAD3(s_b(s),node); | 450 | 10.2M | assert(s_llen3(s)[key] > 0); | 451 | 10.2M | --s_llen3(s)[key]; | 452 | | | 453 | | #ifdef HEAD2 | 454 | | IF_HEAD2(s) { | 455 | | key = HEAD2(s_b(s),node); | 456 | | assert(s_head2(s)[key] != NIL2); | 457 | | if ((lzo_uint) s_head2(s)[key] == node) | 458 | | s_head2(s)[key] = NIL2; | 459 | | } | 460 | | #endif | 461 | 10.2M | } | 462 | 2.41M | else | 463 | 2.41M | --s->node_count; | 464 | 12.6M | } |
lzo1x_9x.c:swd_remove_node Line | Count | Source | 431 | 35.3M | { | 432 | 35.3M | if (s->node_count == 0) | 433 | 20.1M | { | 434 | 20.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 | 20.1M | key = HEAD3(s_b(s),node); | 450 | 20.1M | assert(s_llen3(s)[key] > 0); | 451 | 20.1M | --s_llen3(s)[key]; | 452 | | | 453 | 20.1M | #ifdef HEAD2 | 454 | 20.1M | IF_HEAD2(s) { | 455 | 20.1M | key = HEAD2(s_b(s),node); | 456 | 20.1M | assert(s_head2(s)[key] != NIL2); | 457 | 20.1M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 5.72M | s_head2(s)[key] = NIL2; | 459 | 20.1M | } | 460 | 20.1M | #endif | 461 | 20.1M | } | 462 | 15.2M | else | 463 | 15.2M | --s->node_count; | 464 | 35.3M | } |
lzo1y_9x.c:swd_remove_node Line | Count | Source | 431 | 33.9M | { | 432 | 33.9M | if (s->node_count == 0) | 433 | 18.7M | { | 434 | 18.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 | 18.7M | key = HEAD3(s_b(s),node); | 450 | 18.7M | assert(s_llen3(s)[key] > 0); | 451 | 18.7M | --s_llen3(s)[key]; | 452 | | | 453 | 18.7M | #ifdef HEAD2 | 454 | 18.7M | IF_HEAD2(s) { | 455 | 18.7M | key = HEAD2(s_b(s),node); | 456 | 18.7M | assert(s_head2(s)[key] != NIL2); | 457 | 18.7M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 5.07M | s_head2(s)[key] = NIL2; | 459 | 18.7M | } | 460 | 18.7M | #endif | 461 | 18.7M | } | 462 | 15.2M | else | 463 | 15.2M | --s->node_count; | 464 | 33.9M | } |
lzo1z_9x.c:swd_remove_node Line | Count | Source | 431 | 39.9M | { | 432 | 39.9M | if (s->node_count == 0) | 433 | 23.5M | { | 434 | 23.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 | 23.5M | key = HEAD3(s_b(s),node); | 450 | 23.5M | assert(s_llen3(s)[key] > 0); | 451 | 23.5M | --s_llen3(s)[key]; | 452 | | | 453 | 23.5M | #ifdef HEAD2 | 454 | 23.5M | IF_HEAD2(s) { | 455 | 23.5M | key = HEAD2(s_b(s),node); | 456 | 23.5M | assert(s_head2(s)[key] != NIL2); | 457 | 23.5M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 5.38M | s_head2(s)[key] = NIL2; | 459 | 23.5M | } | 460 | 23.5M | #endif | 461 | 23.5M | } | 462 | 16.3M | else | 463 | 16.3M | --s->node_count; | 464 | 39.9M | } |
lzo2a_9x.c:swd_remove_node Line | Count | Source | 431 | 13.2M | { | 432 | 13.2M | if (s->node_count == 0) | 433 | 11.9M | { | 434 | 11.9M | lzo_uint key; | 435 | | | 436 | | #ifdef LZO_DEBUG | 437 | | if (s->first_rp != LZO_UINT_MAX) | 438 | | { | 439 | | if (node != s->first_rp) | 440 | | printf("Remove %5ld: %5ld %5ld %5ld %5ld %6ld %6ld\n", | 441 | | (long)node, (long)s->rp, (long)s->ip, (long)s->bp, | 442 | | (long)s->first_rp, (long)(s->ip - node), | 443 | | (long)(s->ip - s->bp)); | 444 | | assert(node == s->first_rp); | 445 | | s->first_rp = LZO_UINT_MAX; | 446 | | } | 447 | | #endif | 448 | | | 449 | 11.9M | key = HEAD3(s_b(s),node); | 450 | 11.9M | assert(s_llen3(s)[key] > 0); | 451 | 11.9M | --s_llen3(s)[key]; | 452 | | | 453 | 11.9M | #ifdef HEAD2 | 454 | 11.9M | IF_HEAD2(s) { | 455 | 11.9M | key = HEAD2(s_b(s),node); | 456 | 11.9M | assert(s_head2(s)[key] != NIL2); | 457 | 11.9M | if ((lzo_uint) s_head2(s)[key] == node) | 458 | 3.45M | s_head2(s)[key] = NIL2; | 459 | 11.9M | } | 460 | 11.9M | #endif | 461 | 11.9M | } | 462 | 1.29M | else | 463 | 1.29M | --s->node_count; | 464 | 13.2M | } |
|
465 | | |
466 | | |
467 | | /*********************************************************************** |
468 | | // |
469 | | ************************************************************************/ |
470 | | |
471 | | static |
472 | | void swd_accept(lzo_swd_p s, lzo_uint n) |
473 | 3.25M | { |
474 | 3.25M | assert(n <= s->look); |
475 | | |
476 | 3.25M | if (n) do |
477 | 79.6M | { |
478 | 79.6M | lzo_uint key; |
479 | | |
480 | 79.6M | swd_remove_node(s,s->rp); |
481 | | |
482 | | /* add bp into HEAD3 */ |
483 | 79.6M | key = HEAD3(s_b(s),s->bp); |
484 | 79.6M | s_succ3(s)[s->bp] = s_get_head3(s,key); |
485 | 79.6M | s_head3(s)[key] = SWD_UINT(s->bp); |
486 | 79.6M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); |
487 | 79.6M | s_llen3(s)[key]++; |
488 | 79.6M | assert(s_llen3(s)[key] <= s->swd_n); |
489 | | |
490 | | #ifdef HEAD2 |
491 | | /* add bp into HEAD2 */ |
492 | | IF_HEAD2(s) { |
493 | 58.2M | key = HEAD2(s_b(s),s->bp); |
494 | 58.2M | s_head2(s)[key] = SWD_UINT(s->bp); |
495 | | } |
496 | | #endif |
497 | | |
498 | 79.6M | swd_getbyte(s); |
499 | 79.6M | } while (--n != 0); |
500 | 3.25M | } Line | Count | Source | 473 | 176k | { | 474 | 176k | assert(n <= s->look); | 475 | | | 476 | 176k | 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 | 176k | } |
Line | Count | Source | 473 | 73.1k | { | 474 | 73.1k | assert(n <= s->look); | 475 | | | 476 | 73.1k | if (n) do | 477 | 5.94M | { | 478 | 5.94M | lzo_uint key; | 479 | | | 480 | 5.94M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 5.94M | key = HEAD3(s_b(s),s->bp); | 484 | 5.94M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 5.94M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 5.94M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 5.94M | s_llen3(s)[key]++; | 488 | 5.94M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | | IF_HEAD2(s) { | 493 | | key = HEAD2(s_b(s),s->bp); | 494 | | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | | } | 496 | | #endif | 497 | | | 498 | 5.94M | swd_getbyte(s); | 499 | 5.94M | } while (--n != 0); | 500 | 73.1k | } |
Line | Count | Source | 473 | 138k | { | 474 | 138k | assert(n <= s->look); | 475 | | | 476 | 138k | if (n) do | 477 | 6.39M | { | 478 | 6.39M | lzo_uint key; | 479 | | | 480 | 6.39M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 6.39M | key = HEAD3(s_b(s),s->bp); | 484 | 6.39M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 6.39M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 6.39M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 6.39M | s_llen3(s)[key]++; | 488 | 6.39M | 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.39M | swd_getbyte(s); | 499 | 6.39M | } while (--n != 0); | 500 | 138k | } |
Line | Count | Source | 473 | 777k | { | 474 | 777k | assert(n <= s->look); | 475 | | | 476 | 777k | if (n) do | 477 | 15.3M | { | 478 | 15.3M | lzo_uint key; | 479 | | | 480 | 15.3M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 15.3M | key = HEAD3(s_b(s),s->bp); | 484 | 15.3M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 15.3M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 15.3M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 15.3M | s_llen3(s)[key]++; | 488 | 15.3M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 15.3M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 15.3M | IF_HEAD2(s) { | 493 | 15.3M | key = HEAD2(s_b(s),s->bp); | 494 | 15.3M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 15.3M | } | 496 | 15.3M | #endif | 497 | | | 498 | 15.3M | swd_getbyte(s); | 499 | 15.3M | } while (--n != 0); | 500 | 777k | } |
Line | Count | Source | 473 | 677k | { | 474 | 677k | assert(n <= s->look); | 475 | | | 476 | 677k | 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 | 677k | } |
Line | Count | Source | 473 | 967k | { | 474 | 967k | assert(n <= s->look); | 475 | | | 476 | 967k | if (n) do | 477 | 20.0M | { | 478 | 20.0M | lzo_uint key; | 479 | | | 480 | 20.0M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 20.0M | key = HEAD3(s_b(s),s->bp); | 484 | 20.0M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 20.0M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 20.0M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 20.0M | s_llen3(s)[key]++; | 488 | 20.0M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 20.0M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 20.0M | IF_HEAD2(s) { | 493 | 20.0M | key = HEAD2(s_b(s),s->bp); | 494 | 20.0M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 20.0M | } | 496 | 20.0M | #endif | 497 | | | 498 | 20.0M | swd_getbyte(s); | 499 | 20.0M | } while (--n != 0); | 500 | 967k | } |
Line | Count | Source | 473 | 446k | { | 474 | 446k | assert(n <= s->look); | 475 | | | 476 | 446k | if (n) do | 477 | 7.63M | { | 478 | 7.63M | lzo_uint key; | 479 | | | 480 | 7.63M | swd_remove_node(s,s->rp); | 481 | | | 482 | | /* add bp into HEAD3 */ | 483 | 7.63M | key = HEAD3(s_b(s),s->bp); | 484 | 7.63M | s_succ3(s)[s->bp] = s_get_head3(s,key); | 485 | 7.63M | s_head3(s)[key] = SWD_UINT(s->bp); | 486 | 7.63M | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 487 | 7.63M | s_llen3(s)[key]++; | 488 | 7.63M | assert(s_llen3(s)[key] <= s->swd_n); | 489 | | | 490 | 7.63M | #ifdef HEAD2 | 491 | | /* add bp into HEAD2 */ | 492 | 7.63M | IF_HEAD2(s) { | 493 | 7.63M | key = HEAD2(s_b(s),s->bp); | 494 | 7.63M | s_head2(s)[key] = SWD_UINT(s->bp); | 495 | 7.63M | } | 496 | 7.63M | #endif | 497 | | | 498 | 7.63M | swd_getbyte(s); | 499 | 7.63M | } while (--n != 0); | 500 | 446k | } |
|
501 | | |
502 | | |
503 | | /*********************************************************************** |
504 | | // |
505 | | ************************************************************************/ |
506 | | |
507 | | static |
508 | | void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt) |
509 | 52.8M | { |
510 | 52.8M | const lzo_bytep p1; |
511 | 52.8M | const lzo_bytep p2; |
512 | 52.8M | const lzo_bytep px; |
513 | 52.8M | lzo_uint m_len = s->m_len; |
514 | 52.8M | const lzo_bytep b = s_b(s); |
515 | 52.8M | const lzo_bytep bp = s_b(s) + s->bp; |
516 | 52.8M | const lzo_bytep bx = s_b(s) + s->bp + s->look; |
517 | 52.8M | swd_uintp succ3 = s_succ3(s); |
518 | 52.8M | unsigned char scan_end1; |
519 | | |
520 | 52.8M | assert(s->m_len > 0); |
521 | | |
522 | 52.8M | scan_end1 = bp[m_len - 1]; |
523 | 786M | for ( ; cnt-- > 0; node = succ3[node]) |
524 | 735M | { |
525 | 735M | p1 = bp; |
526 | 735M | p2 = b + node; |
527 | 735M | px = bx; |
528 | | |
529 | 735M | assert(m_len < s->look); |
530 | | |
531 | 735M | if ( |
532 | 735M | #if 1 |
533 | 735M | p2[m_len - 1] == scan_end1 && |
534 | 735M | p2[m_len] == p1[m_len] && |
535 | 735M | #endif |
536 | 735M | p2[0] == p1[0] && |
537 | 735M | p2[1] == p1[1]) |
538 | 39.4M | { |
539 | 39.4M | lzo_uint i; |
540 | 39.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 | 39.4M | p1 += 2; p2 += 2; |
550 | 2.52G | do {} while (++p1 < px && *p1 == *++p2); |
551 | 39.4M | #endif |
552 | 39.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 | 39.4M | assert(lzo_memcmp(bp,&b[node],i) == 0); |
561 | | |
562 | | #if defined(SWD_BEST_OFF) |
563 | 32.3M | if (i < SWD_BEST_OFF) |
564 | 28.4M | { |
565 | 28.4M | if (s->best_pos[i] == 0) |
566 | 8.55M | s->best_pos[i] = node + 1; |
567 | 28.4M | } |
568 | | #endif |
569 | 39.4M | if (i > m_len) |
570 | 13.8M | { |
571 | 13.8M | s->m_len = m_len = i; |
572 | 13.8M | s->m_pos = node; |
573 | 13.8M | if (m_len == s->look) |
574 | 33.8k | return; |
575 | 13.7M | if (m_len >= s->nice_length) |
576 | 0 | return; |
577 | 13.7M | if (m_len > (lzo_uint) s_best3(s)[node]) |
578 | 1.61M | return; |
579 | 12.1M | scan_end1 = bp[m_len - 1]; |
580 | 12.1M | } |
581 | 39.4M | } |
582 | 735M | } |
583 | 52.8M | } Line | Count | Source | 509 | 3.97M | { | 510 | 3.97M | const lzo_bytep p1; | 511 | 3.97M | const lzo_bytep p2; | 512 | 3.97M | const lzo_bytep px; | 513 | 3.97M | lzo_uint m_len = s->m_len; | 514 | 3.97M | const lzo_bytep b = s_b(s); | 515 | 3.97M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 3.97M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 3.97M | swd_uintp succ3 = s_succ3(s); | 518 | 3.97M | unsigned char scan_end1; | 519 | | | 520 | 3.97M | assert(s->m_len > 0); | 521 | | | 522 | 3.97M | scan_end1 = bp[m_len - 1]; | 523 | 43.8M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 39.9M | { | 525 | 39.9M | p1 = bp; | 526 | 39.9M | p2 = b + node; | 527 | 39.9M | px = bx; | 528 | | | 529 | 39.9M | assert(m_len < s->look); | 530 | | | 531 | 39.9M | if ( | 532 | 39.9M | #if 1 | 533 | 39.9M | p2[m_len - 1] == scan_end1 && | 534 | 39.9M | p2[m_len] == p1[m_len] && | 535 | 39.9M | #endif | 536 | 39.9M | p2[0] == p1[0] && | 537 | 39.9M | p2[1] == p1[1]) | 538 | 2.08M | { | 539 | 2.08M | lzo_uint i; | 540 | 2.08M | 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.08M | p1 += 2; p2 += 2; | 550 | 436M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 2.08M | #endif | 552 | 2.08M | 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.08M | 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.08M | if (i > m_len) | 570 | 1.07M | { | 571 | 1.07M | s->m_len = m_len = i; | 572 | 1.07M | s->m_pos = node; | 573 | 1.07M | if (m_len == s->look) | 574 | 3.19k | return; | 575 | 1.07M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 1.07M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 91.7k | return; | 579 | 984k | scan_end1 = bp[m_len - 1]; | 580 | 984k | } | 581 | 2.08M | } | 582 | 39.9M | } | 583 | 3.97M | } |
Line | Count | Source | 509 | 8.97M | { | 510 | 8.97M | const lzo_bytep p1; | 511 | 8.97M | const lzo_bytep p2; | 512 | 8.97M | const lzo_bytep px; | 513 | 8.97M | lzo_uint m_len = s->m_len; | 514 | 8.97M | const lzo_bytep b = s_b(s); | 515 | 8.97M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 8.97M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 8.97M | swd_uintp succ3 = s_succ3(s); | 518 | 8.97M | unsigned char scan_end1; | 519 | | | 520 | 8.97M | assert(s->m_len > 0); | 521 | | | 522 | 8.97M | scan_end1 = bp[m_len - 1]; | 523 | 47.4M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 38.4M | { | 525 | 38.4M | p1 = bp; | 526 | 38.4M | p2 = b + node; | 527 | 38.4M | px = bx; | 528 | | | 529 | 38.4M | assert(m_len < s->look); | 530 | | | 531 | 38.4M | if ( | 532 | 38.4M | #if 1 | 533 | 38.4M | p2[m_len - 1] == scan_end1 && | 534 | 38.4M | p2[m_len] == p1[m_len] && | 535 | 38.4M | #endif | 536 | 38.4M | p2[0] == p1[0] && | 537 | 38.4M | p2[1] == p1[1]) | 538 | 1.68M | { | 539 | 1.68M | lzo_uint i; | 540 | 1.68M | 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.68M | p1 += 2; p2 += 2; | 550 | 324M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 1.68M | #endif | 552 | 1.68M | 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.68M | 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.68M | if (i > m_len) | 570 | 705k | { | 571 | 705k | s->m_len = m_len = i; | 572 | 705k | s->m_pos = node; | 573 | 705k | if (m_len == s->look) | 574 | 7.96k | return; | 575 | 698k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 698k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 39.8k | return; | 579 | 658k | scan_end1 = bp[m_len - 1]; | 580 | 658k | } | 581 | 1.68M | } | 582 | 38.4M | } | 583 | 8.97M | } |
Line | Count | Source | 509 | 6.23M | { | 510 | 6.23M | const lzo_bytep p1; | 511 | 6.23M | const lzo_bytep p2; | 512 | 6.23M | const lzo_bytep px; | 513 | 6.23M | lzo_uint m_len = s->m_len; | 514 | 6.23M | const lzo_bytep b = s_b(s); | 515 | 6.23M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 6.23M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 6.23M | swd_uintp succ3 = s_succ3(s); | 518 | 6.23M | unsigned char scan_end1; | 519 | | | 520 | 6.23M | assert(s->m_len > 0); | 521 | | | 522 | 6.23M | scan_end1 = bp[m_len - 1]; | 523 | 33.1M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 27.0M | { | 525 | 27.0M | p1 = bp; | 526 | 27.0M | p2 = b + node; | 527 | 27.0M | px = bx; | 528 | | | 529 | 27.0M | assert(m_len < s->look); | 530 | | | 531 | 27.0M | if ( | 532 | 27.0M | #if 1 | 533 | 27.0M | p2[m_len - 1] == scan_end1 && | 534 | 27.0M | p2[m_len] == p1[m_len] && | 535 | 27.0M | #endif | 536 | 27.0M | p2[0] == p1[0] && | 537 | 27.0M | p2[1] == p1[1]) | 538 | 1.82M | { | 539 | 1.82M | lzo_uint i; | 540 | 1.82M | 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.82M | p1 += 2; p2 += 2; | 550 | 282M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 1.82M | #endif | 552 | 1.82M | 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.82M | 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.82M | if (i > m_len) | 570 | 854k | { | 571 | 854k | s->m_len = m_len = i; | 572 | 854k | s->m_pos = node; | 573 | 854k | if (m_len == s->look) | 574 | 4.66k | return; | 575 | 849k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 849k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 77.2k | return; | 579 | 772k | scan_end1 = bp[m_len - 1]; | 580 | 772k | } | 581 | 1.82M | } | 582 | 27.0M | } | 583 | 6.23M | } |
Line | Count | Source | 509 | 10.8M | { | 510 | 10.8M | const lzo_bytep p1; | 511 | 10.8M | const lzo_bytep p2; | 512 | 10.8M | const lzo_bytep px; | 513 | 10.8M | lzo_uint m_len = s->m_len; | 514 | 10.8M | const lzo_bytep b = s_b(s); | 515 | 10.8M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 10.8M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 10.8M | swd_uintp succ3 = s_succ3(s); | 518 | 10.8M | unsigned char scan_end1; | 519 | | | 520 | 10.8M | assert(s->m_len > 0); | 521 | | | 522 | 10.8M | scan_end1 = bp[m_len - 1]; | 523 | 240M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 230M | { | 525 | 230M | p1 = bp; | 526 | 230M | p2 = b + node; | 527 | 230M | px = bx; | 528 | | | 529 | 230M | assert(m_len < s->look); | 530 | | | 531 | 230M | if ( | 532 | 230M | #if 1 | 533 | 230M | p2[m_len - 1] == scan_end1 && | 534 | 230M | p2[m_len] == p1[m_len] && | 535 | 230M | #endif | 536 | 230M | p2[0] == p1[0] && | 537 | 230M | p2[1] == p1[1]) | 538 | 11.9M | { | 539 | 11.9M | lzo_uint i; | 540 | 11.9M | 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 | 11.9M | p1 += 2; p2 += 2; | 550 | 408M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 11.9M | #endif | 552 | 11.9M | 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 | 11.9M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 11.9M | #if defined(SWD_BEST_OFF) | 563 | 11.9M | if (i < SWD_BEST_OFF) | 564 | 10.6M | { | 565 | 10.6M | if (s->best_pos[i] == 0) | 566 | 2.79M | s->best_pos[i] = node + 1; | 567 | 10.6M | } | 568 | 11.9M | #endif | 569 | 11.9M | if (i > m_len) | 570 | 3.40M | { | 571 | 3.40M | s->m_len = m_len = i; | 572 | 3.40M | s->m_pos = node; | 573 | 3.40M | if (m_len == s->look) | 574 | 3.69k | return; | 575 | 3.40M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 3.40M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 400k | return; | 579 | 2.99M | scan_end1 = bp[m_len - 1]; | 580 | 2.99M | } | 581 | 11.9M | } | 582 | 230M | } | 583 | 10.8M | } |
Line | Count | Source | 509 | 10.1M | { | 510 | 10.1M | const lzo_bytep p1; | 511 | 10.1M | const lzo_bytep p2; | 512 | 10.1M | const lzo_bytep px; | 513 | 10.1M | lzo_uint m_len = s->m_len; | 514 | 10.1M | const lzo_bytep b = s_b(s); | 515 | 10.1M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 10.1M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 10.1M | swd_uintp succ3 = s_succ3(s); | 518 | 10.1M | unsigned char scan_end1; | 519 | | | 520 | 10.1M | assert(s->m_len > 0); | 521 | | | 522 | 10.1M | scan_end1 = bp[m_len - 1]; | 523 | 174M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 164M | { | 525 | 164M | p1 = bp; | 526 | 164M | p2 = b + node; | 527 | 164M | px = bx; | 528 | | | 529 | 164M | assert(m_len < s->look); | 530 | | | 531 | 164M | if ( | 532 | 164M | #if 1 | 533 | 164M | p2[m_len - 1] == scan_end1 && | 534 | 164M | p2[m_len] == p1[m_len] && | 535 | 164M | #endif | 536 | 164M | p2[0] == p1[0] && | 537 | 164M | p2[1] == p1[1]) | 538 | 8.59M | { | 539 | 8.59M | lzo_uint i; | 540 | 8.59M | 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 | 8.59M | p1 += 2; p2 += 2; | 550 | 400M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 8.59M | #endif | 552 | 8.59M | 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 | 8.59M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 8.59M | #if defined(SWD_BEST_OFF) | 563 | 8.59M | if (i < SWD_BEST_OFF) | 564 | 7.28M | { | 565 | 7.28M | if (s->best_pos[i] == 0) | 566 | 2.43M | s->best_pos[i] = node + 1; | 567 | 7.28M | } | 568 | 8.59M | #endif | 569 | 8.59M | if (i > m_len) | 570 | 3.11M | { | 571 | 3.11M | s->m_len = m_len = i; | 572 | 3.11M | s->m_pos = node; | 573 | 3.11M | if (m_len == s->look) | 574 | 3.56k | return; | 575 | 3.11M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 3.11M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 406k | return; | 579 | 2.70M | scan_end1 = bp[m_len - 1]; | 580 | 2.70M | } | 581 | 8.59M | } | 582 | 164M | } | 583 | 10.1M | } |
Line | Count | Source | 509 | 10.8M | { | 510 | 10.8M | const lzo_bytep p1; | 511 | 10.8M | const lzo_bytep p2; | 512 | 10.8M | const lzo_bytep px; | 513 | 10.8M | lzo_uint m_len = s->m_len; | 514 | 10.8M | const lzo_bytep b = s_b(s); | 515 | 10.8M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 10.8M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 10.8M | swd_uintp succ3 = s_succ3(s); | 518 | 10.8M | unsigned char scan_end1; | 519 | | | 520 | 10.8M | assert(s->m_len > 0); | 521 | | | 522 | 10.8M | scan_end1 = bp[m_len - 1]; | 523 | 228M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 218M | { | 525 | 218M | p1 = bp; | 526 | 218M | p2 = b + node; | 527 | 218M | px = bx; | 528 | | | 529 | 218M | assert(m_len < s->look); | 530 | | | 531 | 218M | if ( | 532 | 218M | #if 1 | 533 | 218M | p2[m_len - 1] == scan_end1 && | 534 | 218M | p2[m_len] == p1[m_len] && | 535 | 218M | #endif | 536 | 218M | p2[0] == p1[0] && | 537 | 218M | p2[1] == p1[1]) | 538 | 11.7M | { | 539 | 11.7M | lzo_uint i; | 540 | 11.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 | 11.7M | p1 += 2; p2 += 2; | 550 | 353M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 11.7M | #endif | 552 | 11.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 | 11.7M | assert(lzo_memcmp(bp,&b[node],i) == 0); | 561 | | | 562 | 11.7M | #if defined(SWD_BEST_OFF) | 563 | 11.7M | if (i < SWD_BEST_OFF) | 564 | 10.5M | { | 565 | 10.5M | if (s->best_pos[i] == 0) | 566 | 3.31M | s->best_pos[i] = node + 1; | 567 | 10.5M | } | 568 | 11.7M | #endif | 569 | 11.7M | if (i > m_len) | 570 | 3.89M | { | 571 | 3.89M | s->m_len = m_len = i; | 572 | 3.89M | s->m_pos = node; | 573 | 3.89M | if (m_len == s->look) | 574 | 4.52k | return; | 575 | 3.89M | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 3.89M | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 518k | return; | 579 | 3.37M | scan_end1 = bp[m_len - 1]; | 580 | 3.37M | } | 581 | 11.7M | } | 582 | 218M | } | 583 | 10.8M | } |
Line | Count | Source | 509 | 1.88M | { | 510 | 1.88M | const lzo_bytep p1; | 511 | 1.88M | const lzo_bytep p2; | 512 | 1.88M | const lzo_bytep px; | 513 | 1.88M | lzo_uint m_len = s->m_len; | 514 | 1.88M | const lzo_bytep b = s_b(s); | 515 | 1.88M | const lzo_bytep bp = s_b(s) + s->bp; | 516 | 1.88M | const lzo_bytep bx = s_b(s) + s->bp + s->look; | 517 | 1.88M | swd_uintp succ3 = s_succ3(s); | 518 | 1.88M | unsigned char scan_end1; | 519 | | | 520 | 1.88M | assert(s->m_len > 0); | 521 | | | 522 | 1.88M | scan_end1 = bp[m_len - 1]; | 523 | 18.0M | for ( ; cnt-- > 0; node = succ3[node]) | 524 | 16.2M | { | 525 | 16.2M | p1 = bp; | 526 | 16.2M | p2 = b + node; | 527 | 16.2M | px = bx; | 528 | | | 529 | 16.2M | assert(m_len < s->look); | 530 | | | 531 | 16.2M | if ( | 532 | 16.2M | #if 1 | 533 | 16.2M | p2[m_len - 1] == scan_end1 && | 534 | 16.2M | p2[m_len] == p1[m_len] && | 535 | 16.2M | #endif | 536 | 16.2M | p2[0] == p1[0] && | 537 | 16.2M | p2[1] == p1[1]) | 538 | 1.55M | { | 539 | 1.55M | lzo_uint i; | 540 | 1.55M | 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.55M | p1 += 2; p2 += 2; | 550 | 318M | do {} while (++p1 < px && *p1 == *++p2); | 551 | 1.55M | #endif | 552 | 1.55M | 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.55M | 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.55M | if (i > m_len) | 570 | 768k | { | 571 | 768k | s->m_len = m_len = i; | 572 | 768k | s->m_pos = node; | 573 | 768k | if (m_len == s->look) | 574 | 6.23k | return; | 575 | 762k | if (m_len >= s->nice_length) | 576 | 0 | return; | 577 | 762k | if (m_len > (lzo_uint) s_best3(s)[node]) | 578 | 76.5k | return; | 579 | 685k | scan_end1 = bp[m_len - 1]; | 580 | 685k | } | 581 | 1.55M | } | 582 | 16.2M | } | 583 | 1.88M | } |
|
584 | | |
585 | | |
586 | | /*********************************************************************** |
587 | | // |
588 | | ************************************************************************/ |
589 | | |
590 | | #ifdef HEAD2 |
591 | | |
592 | | static |
593 | | lzo_bool swd_search2(lzo_swd_p s) |
594 | 64.2M | { |
595 | 64.2M | lzo_uint key; |
596 | | |
597 | 64.2M | assert(s->look >= 2); |
598 | 64.2M | assert(s->m_len > 0); |
599 | | |
600 | 64.2M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; |
601 | 64.2M | if (key == NIL2) |
602 | 30.5M | 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 | 33.7M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); |
609 | | #if defined(SWD_BEST_OFF) |
610 | 31.8M | if (s->best_pos[2] == 0) |
611 | 31.8M | s->best_pos[2] = key + 1; |
612 | | #endif |
613 | | |
614 | 33.7M | if (s->m_len < 2) |
615 | 33.7M | { |
616 | 33.7M | s->m_len = 2; |
617 | 33.7M | s->m_pos = key; |
618 | 33.7M | } |
619 | 33.7M | return 1; |
620 | 64.2M | } Line | Count | Source | 594 | 20.0M | { | 595 | 20.0M | lzo_uint key; | 596 | | | 597 | 20.0M | assert(s->look >= 2); | 598 | 20.0M | assert(s->m_len > 0); | 599 | | | 600 | 20.0M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 20.0M | if (key == NIL2) | 602 | 9.21M | 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.8M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 10.8M | #if defined(SWD_BEST_OFF) | 610 | 10.8M | if (s->best_pos[2] == 0) | 611 | 10.8M | s->best_pos[2] = key + 1; | 612 | 10.8M | #endif | 613 | | | 614 | 10.8M | if (s->m_len < 2) | 615 | 10.8M | { | 616 | 10.8M | s->m_len = 2; | 617 | 10.8M | s->m_pos = key; | 618 | 10.8M | } | 619 | 10.8M | return 1; | 620 | 20.0M | } |
Line | Count | Source | 594 | 18.7M | { | 595 | 18.7M | lzo_uint key; | 596 | | | 597 | 18.7M | assert(s->look >= 2); | 598 | 18.7M | assert(s->m_len > 0); | 599 | | | 600 | 18.7M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 18.7M | if (key == NIL2) | 602 | 8.61M | 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.1M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 10.1M | #if defined(SWD_BEST_OFF) | 610 | 10.1M | if (s->best_pos[2] == 0) | 611 | 10.1M | s->best_pos[2] = key + 1; | 612 | 10.1M | #endif | 613 | | | 614 | 10.1M | if (s->m_len < 2) | 615 | 10.1M | { | 616 | 10.1M | s->m_len = 2; | 617 | 10.1M | s->m_pos = key; | 618 | 10.1M | } | 619 | 10.1M | return 1; | 620 | 18.7M | } |
Line | Count | Source | 594 | 19.8M | { | 595 | 19.8M | lzo_uint key; | 596 | | | 597 | 19.8M | assert(s->look >= 2); | 598 | 19.8M | assert(s->m_len > 0); | 599 | | | 600 | 19.8M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 19.8M | if (key == NIL2) | 602 | 8.95M | 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.8M | assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0); | 609 | 10.8M | #if defined(SWD_BEST_OFF) | 610 | 10.8M | if (s->best_pos[2] == 0) | 611 | 10.8M | s->best_pos[2] = key + 1; | 612 | 10.8M | #endif | 613 | | | 614 | 10.8M | if (s->m_len < 2) | 615 | 10.8M | { | 616 | 10.8M | s->m_len = 2; | 617 | 10.8M | s->m_pos = key; | 618 | 10.8M | } | 619 | 10.8M | return 1; | 620 | 19.8M | } |
Line | Count | Source | 594 | 5.64M | { | 595 | 5.64M | lzo_uint key; | 596 | | | 597 | 5.64M | assert(s->look >= 2); | 598 | 5.64M | assert(s->m_len > 0); | 599 | | | 600 | 5.64M | key = s_head2(s)[ HEAD2(s_b(s),s->bp) ]; | 601 | 5.64M | if (key == NIL2) | 602 | 3.76M | 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 | 1.88M | 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 | 1.88M | if (s->m_len < 2) | 615 | 1.88M | { | 616 | 1.88M | s->m_len = 2; | 617 | 1.88M | s->m_pos = key; | 618 | 1.88M | } | 619 | 1.88M | return 1; | 620 | 5.64M | } |
|
621 | | |
622 | | #endif |
623 | | |
624 | | |
625 | | /*********************************************************************** |
626 | | // |
627 | | ************************************************************************/ |
628 | | |
629 | | static |
630 | | void swd_findbest(lzo_swd_p s) |
631 | 83.4M | { |
632 | 83.4M | lzo_uint key; |
633 | 83.4M | lzo_uint cnt, node; |
634 | 83.4M | lzo_uint len; |
635 | | |
636 | 83.4M | assert(s->m_len > 0); |
637 | | |
638 | | /* get current head, add bp into HEAD3 */ |
639 | 83.4M | key = HEAD3(s_b(s),s->bp); |
640 | 83.4M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); |
641 | 83.4M | cnt = s_llen3(s)[key]++; |
642 | 83.4M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); |
643 | 83.4M | if (cnt > s->max_chain && s->max_chain > 0) |
644 | 159k | cnt = s->max_chain; |
645 | 83.4M | s_head3(s)[key] = SWD_UINT(s->bp); |
646 | | |
647 | 83.4M | s->b_char = s_b(s)[s->bp]; |
648 | 83.4M | len = s->m_len; |
649 | 83.4M | if (s->m_len >= s->look) |
650 | 13.8k | { |
651 | 13.8k | if (s->look == 0) |
652 | 8.36k | s->b_char = -1; |
653 | 13.8k | s->m_off = 0; |
654 | 13.8k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); |
655 | 13.8k | } |
656 | 83.4M | else |
657 | 83.4M | { |
658 | | #if defined(HEAD2) |
659 | 64.2M | if (swd_search2(s) && s->look >= 3) |
660 | 33.7M | swd_search(s,node,cnt); |
661 | | #else |
662 | 19.1M | if (s->look >= 3) |
663 | 19.1M | swd_search(s,node,cnt); |
664 | | #endif |
665 | 83.4M | if (s->m_len > len) |
666 | 34.3M | s->m_off = swd_pos2off(s,s->m_pos); |
667 | 83.4M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); |
668 | | |
669 | | #if defined(SWD_BEST_OFF) |
670 | 58.6M | if (s->use_best_off) |
671 | 58.6M | { |
672 | 58.6M | unsigned i; |
673 | 1.93G | for (i = 2; i < SWD_BEST_OFF; i++) |
674 | 1.87G | if (s->best_pos[i] > 0) |
675 | 40.3M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); |
676 | 1.83G | else |
677 | 1.83G | s->best_off[i] = 0; |
678 | 58.6M | } |
679 | | #endif |
680 | 83.4M | } |
681 | | |
682 | 83.4M | swd_remove_node(s,s->rp); |
683 | | |
684 | | #ifdef HEAD2 |
685 | | /* add bp into HEAD2 */ |
686 | | IF_HEAD2(s) { |
687 | 64.2M | key = HEAD2(s_b(s),s->bp); |
688 | 64.2M | s_head2(s)[key] = SWD_UINT(s->bp); |
689 | | } |
690 | | #endif |
691 | 83.4M | } Line | Count | Source | 631 | 3.98M | { | 632 | 3.98M | lzo_uint key; | 633 | 3.98M | lzo_uint cnt, node; | 634 | 3.98M | lzo_uint len; | 635 | | | 636 | 3.98M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 3.98M | key = HEAD3(s_b(s),s->bp); | 640 | 3.98M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 3.98M | cnt = s_llen3(s)[key]++; | 642 | 3.98M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 3.98M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 9.74k | cnt = s->max_chain; | 645 | 3.98M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 3.98M | s->b_char = s_b(s)[s->bp]; | 648 | 3.98M | len = s->m_len; | 649 | 3.98M | if (s->m_len >= s->look) | 650 | 1.40k | { | 651 | 1.40k | if (s->look == 0) | 652 | 746 | s->b_char = -1; | 653 | 1.40k | s->m_off = 0; | 654 | 1.40k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.40k | } | 656 | 3.97M | else | 657 | 3.97M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 3.97M | if (s->look >= 3) | 663 | 3.97M | swd_search(s,node,cnt); | 664 | 3.97M | #endif | 665 | 3.97M | if (s->m_len > len) | 666 | 275k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 3.97M | 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 | 3.97M | } | 681 | | | 682 | 3.98M | 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 | 3.98M | } |
Line | Count | Source | 631 | 8.97M | { | 632 | 8.97M | lzo_uint key; | 633 | 8.97M | lzo_uint cnt, node; | 634 | 8.97M | lzo_uint len; | 635 | | | 636 | 8.97M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 8.97M | key = HEAD3(s_b(s),s->bp); | 640 | 8.97M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 8.97M | cnt = s_llen3(s)[key]++; | 642 | 8.97M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 8.97M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 12.3k | cnt = s->max_chain; | 645 | 8.97M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 8.97M | s->b_char = s_b(s)[s->bp]; | 648 | 8.97M | len = s->m_len; | 649 | 8.97M | if (s->m_len >= s->look) | 650 | 1.50k | { | 651 | 1.50k | if (s->look == 0) | 652 | 805 | s->b_char = -1; | 653 | 1.50k | s->m_off = 0; | 654 | 1.50k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.50k | } | 656 | 8.97M | else | 657 | 8.97M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 8.97M | if (s->look >= 3) | 663 | 8.97M | swd_search(s,node,cnt); | 664 | 8.97M | #endif | 665 | 8.97M | if (s->m_len > len) | 666 | 125k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 8.97M | 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 | 8.97M | } | 681 | | | 682 | 8.97M | 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 | 8.97M | } |
Line | Count | Source | 631 | 6.24M | { | 632 | 6.24M | lzo_uint key; | 633 | 6.24M | lzo_uint cnt, node; | 634 | 6.24M | lzo_uint len; | 635 | | | 636 | 6.24M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 6.24M | key = HEAD3(s_b(s),s->bp); | 640 | 6.24M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 6.24M | cnt = s_llen3(s)[key]++; | 642 | 6.24M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 6.24M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 7.26k | cnt = s->max_chain; | 645 | 6.24M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 6.24M | s->b_char = s_b(s)[s->bp]; | 648 | 6.24M | len = s->m_len; | 649 | 6.24M | if (s->m_len >= s->look) | 650 | 1.64k | { | 651 | 1.64k | if (s->look == 0) | 652 | 880 | s->b_char = -1; | 653 | 1.64k | s->m_off = 0; | 654 | 1.64k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.64k | } | 656 | 6.23M | else | 657 | 6.23M | { | 658 | | #if defined(HEAD2) | 659 | | if (swd_search2(s) && s->look >= 3) | 660 | | swd_search(s,node,cnt); | 661 | | #else | 662 | 6.23M | if (s->look >= 3) | 663 | 6.23M | swd_search(s,node,cnt); | 664 | 6.23M | #endif | 665 | 6.23M | if (s->m_len > len) | 666 | 241k | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 6.23M | 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.23M | } | 681 | | | 682 | 6.24M | 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 | 6.24M | } |
Line | Count | Source | 631 | 20.0M | { | 632 | 20.0M | lzo_uint key; | 633 | 20.0M | lzo_uint cnt, node; | 634 | 20.0M | lzo_uint len; | 635 | | | 636 | 20.0M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 20.0M | key = HEAD3(s_b(s),s->bp); | 640 | 20.0M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 20.0M | cnt = s_llen3(s)[key]++; | 642 | 20.0M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 20.0M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 46.1k | cnt = s->max_chain; | 645 | 20.0M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 20.0M | s->b_char = s_b(s)[s->bp]; | 648 | 20.0M | len = s->m_len; | 649 | 20.0M | if (s->m_len >= s->look) | 650 | 2.49k | { | 651 | 2.49k | if (s->look == 0) | 652 | 1.60k | s->b_char = -1; | 653 | 2.49k | s->m_off = 0; | 654 | 2.49k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 2.49k | } | 656 | 20.0M | else | 657 | 20.0M | { | 658 | 20.0M | #if defined(HEAD2) | 659 | 20.0M | if (swd_search2(s) && s->look >= 3) | 660 | 10.8M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 20.0M | if (s->m_len > len) | 666 | 10.8M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 20.0M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 20.0M | #if defined(SWD_BEST_OFF) | 670 | 20.0M | if (s->use_best_off) | 671 | 20.0M | { | 672 | 20.0M | unsigned i; | 673 | 660M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 640M | if (s->best_pos[i] > 0) | 675 | 13.6M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 626M | else | 677 | 626M | s->best_off[i] = 0; | 678 | 20.0M | } | 679 | 20.0M | #endif | 680 | 20.0M | } | 681 | | | 682 | 20.0M | swd_remove_node(s,s->rp); | 683 | | | 684 | 20.0M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 20.0M | IF_HEAD2(s) { | 687 | 20.0M | key = HEAD2(s_b(s),s->bp); | 688 | 20.0M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 20.0M | } | 690 | 20.0M | #endif | 691 | 20.0M | } |
Line | Count | Source | 631 | 18.7M | { | 632 | 18.7M | lzo_uint key; | 633 | 18.7M | lzo_uint cnt, node; | 634 | 18.7M | lzo_uint len; | 635 | | | 636 | 18.7M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 18.7M | key = HEAD3(s_b(s),s->bp); | 640 | 18.7M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 18.7M | cnt = s_llen3(s)[key]++; | 642 | 18.7M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 18.7M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 35.0k | cnt = s->max_chain; | 645 | 18.7M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 18.7M | s->b_char = s_b(s)[s->bp]; | 648 | 18.7M | len = s->m_len; | 649 | 18.7M | if (s->m_len >= s->look) | 650 | 2.49k | { | 651 | 2.49k | if (s->look == 0) | 652 | 1.60k | s->b_char = -1; | 653 | 2.49k | s->m_off = 0; | 654 | 2.49k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 2.49k | } | 656 | 18.7M | else | 657 | 18.7M | { | 658 | 18.7M | #if defined(HEAD2) | 659 | 18.7M | if (swd_search2(s) && s->look >= 3) | 660 | 10.1M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 18.7M | if (s->m_len > len) | 666 | 10.1M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 18.7M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 18.7M | #if defined(SWD_BEST_OFF) | 670 | 18.7M | if (s->use_best_off) | 671 | 18.7M | { | 672 | 18.7M | unsigned i; | 673 | 618M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 599M | if (s->best_pos[i] > 0) | 675 | 12.5M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 587M | else | 677 | 587M | s->best_off[i] = 0; | 678 | 18.7M | } | 679 | 18.7M | #endif | 680 | 18.7M | } | 681 | | | 682 | 18.7M | swd_remove_node(s,s->rp); | 683 | | | 684 | 18.7M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 18.7M | IF_HEAD2(s) { | 687 | 18.7M | key = HEAD2(s_b(s),s->bp); | 688 | 18.7M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 18.7M | } | 690 | 18.7M | #endif | 691 | 18.7M | } |
Line | Count | Source | 631 | 19.8M | { | 632 | 19.8M | lzo_uint key; | 633 | 19.8M | lzo_uint cnt, node; | 634 | 19.8M | lzo_uint len; | 635 | | | 636 | 19.8M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 19.8M | key = HEAD3(s_b(s),s->bp); | 640 | 19.8M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 19.8M | cnt = s_llen3(s)[key]++; | 642 | 19.8M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 19.8M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 40.4k | cnt = s->max_chain; | 645 | 19.8M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 19.8M | s->b_char = s_b(s)[s->bp]; | 648 | 19.8M | len = s->m_len; | 649 | 19.8M | if (s->m_len >= s->look) | 650 | 3.07k | { | 651 | 3.07k | if (s->look == 0) | 652 | 1.91k | s->b_char = -1; | 653 | 3.07k | s->m_off = 0; | 654 | 3.07k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 3.07k | } | 656 | 19.8M | else | 657 | 19.8M | { | 658 | 19.8M | #if defined(HEAD2) | 659 | 19.8M | if (swd_search2(s) && s->look >= 3) | 660 | 10.8M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 19.8M | if (s->m_len > len) | 666 | 10.8M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 19.8M | s_best3(s)[s->bp] = SWD_UINT(s->m_len); | 668 | | | 669 | 19.8M | #if defined(SWD_BEST_OFF) | 670 | 19.8M | if (s->use_best_off) | 671 | 19.8M | { | 672 | 19.8M | unsigned i; | 673 | 655M | for (i = 2; i < SWD_BEST_OFF; i++) | 674 | 635M | if (s->best_pos[i] > 0) | 675 | 14.2M | s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1); | 676 | 621M | else | 677 | 621M | s->best_off[i] = 0; | 678 | 19.8M | } | 679 | 19.8M | #endif | 680 | 19.8M | } | 681 | | | 682 | 19.8M | swd_remove_node(s,s->rp); | 683 | | | 684 | 19.8M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 19.8M | IF_HEAD2(s) { | 687 | 19.8M | key = HEAD2(s_b(s),s->bp); | 688 | 19.8M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 19.8M | } | 690 | 19.8M | #endif | 691 | 19.8M | } |
Line | Count | Source | 631 | 5.64M | { | 632 | 5.64M | lzo_uint key; | 633 | 5.64M | lzo_uint cnt, node; | 634 | 5.64M | lzo_uint len; | 635 | | | 636 | 5.64M | assert(s->m_len > 0); | 637 | | | 638 | | /* get current head, add bp into HEAD3 */ | 639 | 5.64M | key = HEAD3(s_b(s),s->bp); | 640 | 5.64M | node = s_succ3(s)[s->bp] = s_get_head3(s,key); | 641 | 5.64M | cnt = s_llen3(s)[key]++; | 642 | 5.64M | assert(s_llen3(s)[key] <= s->swd_n + s->swd_f); | 643 | 5.64M | if (cnt > s->max_chain && s->max_chain > 0) | 644 | 8.75k | cnt = s->max_chain; | 645 | 5.64M | s_head3(s)[key] = SWD_UINT(s->bp); | 646 | | | 647 | 5.64M | s->b_char = s_b(s)[s->bp]; | 648 | 5.64M | len = s->m_len; | 649 | 5.64M | if (s->m_len >= s->look) | 650 | 1.22k | { | 651 | 1.22k | if (s->look == 0) | 652 | 814 | s->b_char = -1; | 653 | 1.22k | s->m_off = 0; | 654 | 1.22k | s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1); | 655 | 1.22k | } | 656 | 5.64M | else | 657 | 5.64M | { | 658 | 5.64M | #if defined(HEAD2) | 659 | 5.64M | if (swd_search2(s) && s->look >= 3) | 660 | 1.88M | swd_search(s,node,cnt); | 661 | | #else | 662 | | if (s->look >= 3) | 663 | | swd_search(s,node,cnt); | 664 | | #endif | 665 | 5.64M | if (s->m_len > len) | 666 | 1.88M | s->m_off = swd_pos2off(s,s->m_pos); | 667 | 5.64M | 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 | 5.64M | } | 681 | | | 682 | 5.64M | swd_remove_node(s,s->rp); | 683 | | | 684 | 5.64M | #ifdef HEAD2 | 685 | | /* add bp into HEAD2 */ | 686 | 5.64M | IF_HEAD2(s) { | 687 | 5.64M | key = HEAD2(s_b(s),s->bp); | 688 | 5.64M | s_head2(s)[key] = SWD_UINT(s->bp); | 689 | 5.64M | } | 690 | 5.64M | #endif | 691 | 5.64M | } |
|
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: */ |