Coverage Report

Created: 2025-10-13 06:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/lzo-2.10/src/lzo_swd.ch
Line
Count
Source
1
/* lzo_swd.ch -- sliding window dictionary
2
3
   This file is part of the LZO real-time data compression library.
4
5
   Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
6
   All Rights Reserved.
7
8
   The LZO library is free software; you can redistribute it and/or
9
   modify it under the terms of the GNU General Public License as
10
   published by the Free Software Foundation; either version 2 of
11
   the License, or (at your option) any later version.
12
13
   The LZO library is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
18
   You should have received a copy of the GNU General Public License
19
   along with the LZO library; see the file COPYING.
20
   If not, write to the Free Software Foundation, Inc.,
21
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
23
   Markus F.X.J. Oberhumer
24
   <markus@oberhumer.com>
25
   http://www.oberhumer.com/opensource/lzo/
26
 */
27
28
29
#if (LZO_UINT_MAX < LZO_0xffffffffL)
30
#  error "LZO_UINT_MAX"
31
#endif
32
#if defined(LZO_DEBUG)
33
#  include <stdio.h>
34
#endif
35
#if defined(__LZO_CHECKER)
36
#  include <stdlib.h>
37
#endif
38
39
40
/***********************************************************************
41
//
42
************************************************************************/
43
44
/* unsigned type for dictionary access - don't waste memory here */
45
#if (0UL + SWD_N + SWD_F + SWD_F < 65535UL)
46
   typedef lzo_uint16_t     swd_uint;
47
126M
#  define SWD_UINT_MAX      0xffffu
48
#else
49
   typedef lzo_uint32_t     swd_uint;
50
853k
#  define SWD_UINT_MAX      0xffffffffu
51
#endif
52
31.7M
#define swd_uintp           swd_uint *
53
370M
#define SWD_UINT(x)         ((swd_uint)(x))
54
55
56
#ifndef SWD_HSIZE
57
229M
#  define SWD_HSIZE         16384
58
#endif
59
#ifndef SWD_MAX_CHAIN
60
5.83k
#  define SWD_MAX_CHAIN     2048
61
#endif
62
63
#if !defined(HEAD3)
64
#if 1
65
#  define HEAD3(b,p) \
66
229M
    ((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
199M
#    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
46.1M
#  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
5.83k
#define lzo_swd_p   lzo_swd_t *
155
156
157
280M
#define s_b(s)      s->b
158
256M
#define s_head3(s)  s->head3
159
167M
#define s_succ3(s)  s->succ3
160
155M
#define s_best3(s)  s->best3
161
365M
#define s_llen3(s)  s->llen3
162
#ifdef HEAD2
163
211M
#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
135M
        ((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
5.83k
{
187
5.83k
    s->dict = s->dict_end = NULL;
188
5.83k
    s->dict_len = 0;
189
190
5.83k
    if (!dict || dict_len == 0)
191
5.83k
        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
}
lzo1b_9x.c:swd_initdict
Line
Count
Source
186
521
{
187
521
    s->dict = s->dict_end = NULL;
188
521
    s->dict_len = 0;
189
190
521
    if (!dict || dict_len == 0)
191
521
        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
}
lzo1c_9x.c:swd_initdict
Line
Count
Source
186
588
{
187
588
    s->dict = s->dict_end = NULL;
188
588
    s->dict_len = 0;
189
190
588
    if (!dict || dict_len == 0)
191
588
        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
}
lzo1f_9x.c:swd_initdict
Line
Count
Source
186
648
{
187
648
    s->dict = s->dict_end = NULL;
188
648
    s->dict_len = 0;
189
190
648
    if (!dict || dict_len == 0)
191
648
        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
}
lzo1x_9x.c:swd_initdict
Line
Count
Source
186
1.06k
{
187
1.06k
    s->dict = s->dict_end = NULL;
188
1.06k
    s->dict_len = 0;
189
190
1.06k
    if (!dict || dict_len == 0)
191
1.06k
        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
}
lzo1y_9x.c:swd_initdict
Line
Count
Source
186
1.05k
{
187
1.05k
    s->dict = s->dict_end = NULL;
188
1.05k
    s->dict_len = 0;
189
190
1.05k
    if (!dict || dict_len == 0)
191
1.05k
        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
}
lzo1z_9x.c:swd_initdict
Line
Count
Source
186
1.32k
{
187
1.32k
    s->dict = s->dict_end = NULL;
188
1.32k
    s->dict_len = 0;
189
190
1.32k
    if (!dict || dict_len == 0)
191
1.32k
        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
}
lzo2a_9x.c:swd_initdict
Line
Count
Source
186
646
{
187
646
    s->dict = s->dict_end = NULL;
188
646
    s->dict_len = 0;
189
190
646
    if (!dict || dict_len == 0)
191
646
        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
5.83k
{
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
5.83k
    s->m_len = 0;
270
5.83k
    s->m_off = 0;
271
#if defined(SWD_BEST_OFF)
272
    {
273
        unsigned i;
274
120k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
116k
            s->best_off[i] = s->best_pos[i] = 0;
276
    }
277
#endif
278
279
5.83k
    s->swd_n = SWD_N;
280
5.83k
    s->swd_f = SWD_F;
281
5.83k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
5.83k
    s->max_chain = SWD_MAX_CHAIN;
285
5.83k
    s->nice_length = s->swd_f;
286
5.83k
    s->use_best_off = 0;
287
5.83k
    s->lazy_insert = 0;
288
289
5.83k
    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
5.83k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
5.83k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
5.83k
#endif
297
5.83k
    s->b_wrap = s_b(s) + s->b_size;
298
5.83k
    s->node_count = s->swd_n;
299
300
5.83k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
#ifdef HEAD2
302
    IF_HEAD2(s) {
303
#if 1
304
4.08k
        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
5.83k
    s->ip = 0;
315
5.83k
    swd_initdict(s,dict,dict_len);
316
5.83k
    s->bp = s->ip;
317
5.83k
    s->first_rp = s->ip;
318
319
5.83k
    assert(s->ip + s->swd_f <= s->b_size);
320
5.83k
#if 1
321
5.83k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
5.83k
    if (s->look > 0)
323
5.83k
    {
324
5.83k
        if (s->look > s->swd_f)
325
2.01k
            s->look = s->swd_f;
326
5.83k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
5.83k
        s->c->ip += s->look;
328
5.83k
        s->ip += s->look;
329
5.83k
    }
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
5.83k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
5.83k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
5.83k
    s->rp = s->first_rp;
349
5.83k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
5.83k
    else
352
5.83k
        s->rp += s->b_size - s->node_count;
353
354
5.83k
#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
5.83k
    if (s->look < 3) {
358
76
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
76
        p[0] = p[1] = p[2] = 0;
360
76
    }
361
5.83k
#endif
362
363
5.83k
    return LZO_E_OK;
364
5.83k
}
lzo1b_9x.c:swd_init
Line
Count
Source
244
521
{
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
521
    s->m_len = 0;
270
521
    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
521
    s->swd_n = SWD_N;
280
521
    s->swd_f = SWD_F;
281
521
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
521
    s->max_chain = SWD_MAX_CHAIN;
285
521
    s->nice_length = s->swd_f;
286
521
    s->use_best_off = 0;
287
521
    s->lazy_insert = 0;
288
289
521
    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
521
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
521
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
521
#endif
297
521
    s->b_wrap = s_b(s) + s->b_size;
298
521
    s->node_count = s->swd_n;
299
300
521
    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
521
    s->ip = 0;
315
521
    swd_initdict(s,dict,dict_len);
316
521
    s->bp = s->ip;
317
521
    s->first_rp = s->ip;
318
319
521
    assert(s->ip + s->swd_f <= s->b_size);
320
521
#if 1
321
521
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
521
    if (s->look > 0)
323
520
    {
324
520
        if (s->look > s->swd_f)
325
171
            s->look = s->swd_f;
326
520
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
520
        s->c->ip += s->look;
328
520
        s->ip += s->look;
329
520
    }
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
521
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
521
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
521
    s->rp = s->first_rp;
349
521
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
521
    else
352
521
        s->rp += s->b_size - s->node_count;
353
354
521
#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
521
    if (s->look < 3) {
358
10
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
10
        p[0] = p[1] = p[2] = 0;
360
10
    }
361
521
#endif
362
363
521
    return LZO_E_OK;
364
521
}
lzo1c_9x.c:swd_init
Line
Count
Source
244
588
{
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
588
    s->m_len = 0;
270
588
    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
588
    s->swd_n = SWD_N;
280
588
    s->swd_f = SWD_F;
281
588
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
588
    s->max_chain = SWD_MAX_CHAIN;
285
588
    s->nice_length = s->swd_f;
286
588
    s->use_best_off = 0;
287
588
    s->lazy_insert = 0;
288
289
588
    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
588
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
588
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
588
#endif
297
588
    s->b_wrap = s_b(s) + s->b_size;
298
588
    s->node_count = s->swd_n;
299
300
588
    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
588
    s->ip = 0;
315
588
    swd_initdict(s,dict,dict_len);
316
588
    s->bp = s->ip;
317
588
    s->first_rp = s->ip;
318
319
588
    assert(s->ip + s->swd_f <= s->b_size);
320
588
#if 1
321
588
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
588
    if (s->look > 0)
323
587
    {
324
587
        if (s->look > s->swd_f)
325
181
            s->look = s->swd_f;
326
587
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
587
        s->c->ip += s->look;
328
587
        s->ip += s->look;
329
587
    }
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
588
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
588
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
588
    s->rp = s->first_rp;
349
588
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
588
    else
352
588
        s->rp += s->b_size - s->node_count;
353
354
588
#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
588
    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
588
#endif
362
363
588
    return LZO_E_OK;
364
588
}
lzo1f_9x.c:swd_init
Line
Count
Source
244
648
{
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
648
    s->m_len = 0;
270
648
    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
648
    s->swd_n = SWD_N;
280
648
    s->swd_f = SWD_F;
281
648
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
648
    s->max_chain = SWD_MAX_CHAIN;
285
648
    s->nice_length = s->swd_f;
286
648
    s->use_best_off = 0;
287
648
    s->lazy_insert = 0;
288
289
648
    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
648
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
648
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
648
#endif
297
648
    s->b_wrap = s_b(s) + s->b_size;
298
648
    s->node_count = s->swd_n;
299
300
648
    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
648
    s->ip = 0;
315
648
    swd_initdict(s,dict,dict_len);
316
648
    s->bp = s->ip;
317
648
    s->first_rp = s->ip;
318
319
648
    assert(s->ip + s->swd_f <= s->b_size);
320
648
#if 1
321
648
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
648
    if (s->look > 0)
323
647
    {
324
647
        if (s->look > s->swd_f)
325
214
            s->look = s->swd_f;
326
647
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
647
        s->c->ip += s->look;
328
647
        s->ip += s->look;
329
647
    }
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
648
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
648
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
648
    s->rp = s->first_rp;
349
648
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
648
    else
352
648
        s->rp += s->b_size - s->node_count;
353
354
648
#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
648
    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
648
#endif
362
363
648
    return LZO_E_OK;
364
648
}
lzo1x_9x.c:swd_init
Line
Count
Source
244
1.06k
{
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.06k
    s->m_len = 0;
270
1.06k
    s->m_off = 0;
271
1.06k
#if defined(SWD_BEST_OFF)
272
1.06k
    {
273
1.06k
        unsigned i;
274
37.1k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
36.1k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.06k
    }
277
1.06k
#endif
278
279
1.06k
    s->swd_n = SWD_N;
280
1.06k
    s->swd_f = SWD_F;
281
1.06k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.06k
    s->max_chain = SWD_MAX_CHAIN;
285
1.06k
    s->nice_length = s->swd_f;
286
1.06k
    s->use_best_off = 0;
287
1.06k
    s->lazy_insert = 0;
288
289
1.06k
    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.06k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.06k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.06k
#endif
297
1.06k
    s->b_wrap = s_b(s) + s->b_size;
298
1.06k
    s->node_count = s->swd_n;
299
300
1.06k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.06k
#ifdef HEAD2
302
1.06k
    IF_HEAD2(s) {
303
1.06k
#if 1
304
1.06k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.06k
        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.06k
    }
312
1.06k
#endif
313
314
1.06k
    s->ip = 0;
315
1.06k
    swd_initdict(s,dict,dict_len);
316
1.06k
    s->bp = s->ip;
317
1.06k
    s->first_rp = s->ip;
318
319
1.06k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.06k
#if 1
321
1.06k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.06k
    if (s->look > 0)
323
1.06k
    {
324
1.06k
        if (s->look > s->swd_f)
325
433
            s->look = s->swd_f;
326
1.06k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.06k
        s->c->ip += s->look;
328
1.06k
        s->ip += s->look;
329
1.06k
    }
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.06k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.06k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.06k
    s->rp = s->first_rp;
349
1.06k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.06k
    else
352
1.06k
        s->rp += s->b_size - s->node_count;
353
354
1.06k
#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.06k
    if (s->look < 3) {
358
11
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
11
        p[0] = p[1] = p[2] = 0;
360
11
    }
361
1.06k
#endif
362
363
1.06k
    return LZO_E_OK;
364
1.06k
}
lzo1y_9x.c:swd_init
Line
Count
Source
244
1.05k
{
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.05k
    s->m_len = 0;
270
1.05k
    s->m_off = 0;
271
1.05k
#if defined(SWD_BEST_OFF)
272
1.05k
    {
273
1.05k
        unsigned i;
274
36.8k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
35.8k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.05k
    }
277
1.05k
#endif
278
279
1.05k
    s->swd_n = SWD_N;
280
1.05k
    s->swd_f = SWD_F;
281
1.05k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.05k
    s->max_chain = SWD_MAX_CHAIN;
285
1.05k
    s->nice_length = s->swd_f;
286
1.05k
    s->use_best_off = 0;
287
1.05k
    s->lazy_insert = 0;
288
289
1.05k
    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.05k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.05k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.05k
#endif
297
1.05k
    s->b_wrap = s_b(s) + s->b_size;
298
1.05k
    s->node_count = s->swd_n;
299
300
1.05k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.05k
#ifdef HEAD2
302
1.05k
    IF_HEAD2(s) {
303
1.05k
#if 1
304
1.05k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.05k
        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.05k
    }
312
1.05k
#endif
313
314
1.05k
    s->ip = 0;
315
1.05k
    swd_initdict(s,dict,dict_len);
316
1.05k
    s->bp = s->ip;
317
1.05k
    s->first_rp = s->ip;
318
319
1.05k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.05k
#if 1
321
1.05k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.05k
    if (s->look > 0)
323
1.05k
    {
324
1.05k
        if (s->look > s->swd_f)
325
389
            s->look = s->swd_f;
326
1.05k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.05k
        s->c->ip += s->look;
328
1.05k
        s->ip += s->look;
329
1.05k
    }
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.05k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.05k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.05k
    s->rp = s->first_rp;
349
1.05k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.05k
    else
352
1.05k
        s->rp += s->b_size - s->node_count;
353
354
1.05k
#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.05k
    if (s->look < 3) {
358
9
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
9
        p[0] = p[1] = p[2] = 0;
360
9
    }
361
1.05k
#endif
362
363
1.05k
    return LZO_E_OK;
364
1.05k
}
lzo1z_9x.c:swd_init
Line
Count
Source
244
1.32k
{
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.32k
    s->m_len = 0;
270
1.32k
    s->m_off = 0;
271
1.32k
#if defined(SWD_BEST_OFF)
272
1.32k
    {
273
1.32k
        unsigned i;
274
46.2k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
44.8k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.32k
    }
277
1.32k
#endif
278
279
1.32k
    s->swd_n = SWD_N;
280
1.32k
    s->swd_f = SWD_F;
281
1.32k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.32k
    s->max_chain = SWD_MAX_CHAIN;
285
1.32k
    s->nice_length = s->swd_f;
286
1.32k
    s->use_best_off = 0;
287
1.32k
    s->lazy_insert = 0;
288
289
1.32k
    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.32k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.32k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.32k
#endif
297
1.32k
    s->b_wrap = s_b(s) + s->b_size;
298
1.32k
    s->node_count = s->swd_n;
299
300
1.32k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.32k
#ifdef HEAD2
302
1.32k
    IF_HEAD2(s) {
303
1.32k
#if 1
304
1.32k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.32k
        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.32k
    }
312
1.32k
#endif
313
314
1.32k
    s->ip = 0;
315
1.32k
    swd_initdict(s,dict,dict_len);
316
1.32k
    s->bp = s->ip;
317
1.32k
    s->first_rp = s->ip;
318
319
1.32k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.32k
#if 1
321
1.32k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.32k
    if (s->look > 0)
323
1.31k
    {
324
1.31k
        if (s->look > s->swd_f)
325
480
            s->look = s->swd_f;
326
1.31k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.31k
        s->c->ip += s->look;
328
1.31k
        s->ip += s->look;
329
1.31k
    }
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.32k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.32k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.32k
    s->rp = s->first_rp;
349
1.32k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.32k
    else
352
1.32k
        s->rp += s->b_size - s->node_count;
353
354
1.32k
#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.32k
    if (s->look < 3) {
358
11
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
11
        p[0] = p[1] = p[2] = 0;
360
11
    }
361
1.32k
#endif
362
363
1.32k
    return LZO_E_OK;
364
1.32k
}
lzo2a_9x.c:swd_init
Line
Count
Source
244
646
{
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
646
    s->m_len = 0;
270
646
    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
646
    s->swd_n = SWD_N;
280
646
    s->swd_f = SWD_F;
281
646
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
646
    s->max_chain = SWD_MAX_CHAIN;
285
646
    s->nice_length = s->swd_f;
286
646
    s->use_best_off = 0;
287
646
    s->lazy_insert = 0;
288
289
646
    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
646
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
646
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
646
#endif
297
646
    s->b_wrap = s_b(s) + s->b_size;
298
646
    s->node_count = s->swd_n;
299
300
646
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
646
#ifdef HEAD2
302
646
    IF_HEAD2(s) {
303
646
#if 1
304
646
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
646
        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
646
    }
312
646
#endif
313
314
646
    s->ip = 0;
315
646
    swd_initdict(s,dict,dict_len);
316
646
    s->bp = s->ip;
317
646
    s->first_rp = s->ip;
318
319
646
    assert(s->ip + s->swd_f <= s->b_size);
320
646
#if 1
321
646
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
646
    if (s->look > 0)
323
645
    {
324
645
        if (s->look > s->swd_f)
325
148
            s->look = s->swd_f;
326
645
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
645
        s->c->ip += s->look;
328
645
        s->ip += s->look;
329
645
    }
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
646
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
646
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
646
    s->rp = s->first_rp;
349
646
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
646
    else
352
646
        s->rp += s->b_size - s->node_count;
353
354
646
#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
646
    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
646
#endif
362
363
646
    return LZO_E_OK;
364
646
}
365
366
367
static
368
void swd_exit(lzo_swd_p s)
369
5.83k
{
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
5.83k
    LZO_UNUSED(s);
382
5.83k
#endif
383
5.83k
}
lzo1b_9x.c:swd_exit
Line
Count
Source
369
521
{
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
521
    LZO_UNUSED(s);
382
521
#endif
383
521
}
lzo1c_9x.c:swd_exit
Line
Count
Source
369
588
{
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
588
    LZO_UNUSED(s);
382
588
#endif
383
588
}
lzo1f_9x.c:swd_exit
Line
Count
Source
369
648
{
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
648
    LZO_UNUSED(s);
382
648
#endif
383
648
}
lzo1x_9x.c:swd_exit
Line
Count
Source
369
1.06k
{
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.06k
    LZO_UNUSED(s);
382
1.06k
#endif
383
1.06k
}
lzo1y_9x.c:swd_exit
Line
Count
Source
369
1.05k
{
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.05k
    LZO_UNUSED(s);
382
1.05k
#endif
383
1.05k
}
lzo1z_9x.c:swd_exit
Line
Count
Source
369
1.32k
{
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.32k
    LZO_UNUSED(s);
382
1.32k
#endif
383
1.32k
}
lzo2a_9x.c:swd_exit
Line
Count
Source
369
646
{
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
646
    LZO_UNUSED(s);
382
646
#endif
383
646
}
384
385
386
#define swd_pos2off(s,pos) \
387
47.3M
    (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
135M
{
397
135M
    int c;
398
399
135M
    if ((c = getbyte(*(s->c))) < 0)
400
5.35M
    {
401
5.35M
        if (s->look > 0)
402
5.34M
            --s->look;
403
5.35M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
5.35M
        s_b(s)[s->ip] = 0;
406
5.35M
        if (s->ip < s->swd_f)
407
1.23M
            s->b_wrap[s->ip] = 0;
408
5.35M
#endif
409
5.35M
    }
410
130M
    else
411
130M
    {
412
130M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
130M
        if (s->ip < s->swd_f)
414
6.70M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
130M
    }
416
135M
    if (++s->ip == s->b_size)
417
3.64k
        s->ip = 0;
418
135M
    if (++s->bp == s->b_size)
419
3.43k
        s->bp = 0;
420
135M
    if (++s->rp == s->b_size)
421
3.64k
        s->rp = 0;
422
135M
}
lzo1b_9x.c:swd_getbyte
Line
Count
Source
396
11.3M
{
397
11.3M
    int c;
398
399
11.3M
    if ((c = getbyte(*(s->c))) < 0)
400
451k
    {
401
451k
        if (s->look > 0)
402
451k
            --s->look;
403
451k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
451k
        s_b(s)[s->ip] = 0;
406
451k
        if (s->ip < s->swd_f)
407
107k
            s->b_wrap[s->ip] = 0;
408
451k
#endif
409
451k
    }
410
10.8M
    else
411
10.8M
    {
412
10.8M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
10.8M
        if (s->ip < s->swd_f)
414
200k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
10.8M
    }
416
11.3M
    if (++s->ip == s->b_size)
417
137
        s->ip = 0;
418
11.3M
    if (++s->bp == s->b_size)
419
116
        s->bp = 0;
420
11.3M
    if (++s->rp == s->b_size)
421
137
        s->rp = 0;
422
11.3M
}
lzo1c_9x.c:swd_getbyte
Line
Count
Source
396
10.6M
{
397
10.6M
    int c;
398
399
10.6M
    if ((c = getbyte(*(s->c))) < 0)
400
491k
    {
401
491k
        if (s->look > 0)
402
490k
            --s->look;
403
491k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
491k
        s_b(s)[s->ip] = 0;
406
491k
        if (s->ip < s->swd_f)
407
147k
            s->b_wrap[s->ip] = 0;
408
491k
#endif
409
491k
    }
410
10.1M
    else
411
10.1M
    {
412
10.1M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
10.1M
        if (s->ip < s->swd_f)
414
979k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
10.1M
    }
416
10.6M
    if (++s->ip == s->b_size)
417
528
        s->ip = 0;
418
10.6M
    if (++s->bp == s->b_size)
419
506
        s->bp = 0;
420
10.6M
    if (++s->rp == s->b_size)
421
528
        s->rp = 0;
422
10.6M
}
lzo1f_9x.c:swd_getbyte
Line
Count
Source
396
14.6M
{
397
14.6M
    int c;
398
399
14.6M
    if ((c = getbyte(*(s->c))) < 0)
400
565k
    {
401
565k
        if (s->look > 0)
402
564k
            --s->look;
403
565k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
565k
        s_b(s)[s->ip] = 0;
406
565k
        if (s->ip < s->swd_f)
407
137k
            s->b_wrap[s->ip] = 0;
408
565k
#endif
409
565k
    }
410
14.1M
    else
411
14.1M
    {
412
14.1M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
14.1M
        if (s->ip < s->swd_f)
414
1.42M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
14.1M
    }
416
14.6M
    if (++s->ip == s->b_size)
417
751
        s->ip = 0;
418
14.6M
    if (++s->bp == s->b_size)
419
720
        s->bp = 0;
420
14.6M
    if (++s->rp == s->b_size)
421
751
        s->rp = 0;
422
14.6M
}
lzo1x_9x.c:swd_getbyte
Line
Count
Source
396
24.8M
{
397
24.8M
    int c;
398
399
24.8M
    if ((c = getbyte(*(s->c))) < 0)
400
1.06M
    {
401
1.06M
        if (s->look > 0)
402
1.06M
            --s->look;
403
1.06M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.06M
        s_b(s)[s->ip] = 0;
406
1.06M
        if (s->ip < s->swd_f)
407
192k
            s->b_wrap[s->ip] = 0;
408
1.06M
#endif
409
1.06M
    }
410
23.8M
    else
411
23.8M
    {
412
23.8M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
23.8M
        if (s->ip < s->swd_f)
414
680k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
23.8M
    }
416
24.8M
    if (++s->ip == s->b_size)
417
381
        s->ip = 0;
418
24.8M
    if (++s->bp == s->b_size)
419
353
        s->bp = 0;
420
24.8M
    if (++s->rp == s->b_size)
421
381
        s->rp = 0;
422
24.8M
}
lzo1y_9x.c:swd_getbyte
Line
Count
Source
396
30.1M
{
397
30.1M
    int c;
398
399
30.1M
    if ((c = getbyte(*(s->c))) < 0)
400
1.04M
    {
401
1.04M
        if (s->look > 0)
402
1.04M
            --s->look;
403
1.04M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.04M
        s_b(s)[s->ip] = 0;
406
1.04M
        if (s->ip < s->swd_f)
407
238k
            s->b_wrap[s->ip] = 0;
408
1.04M
#endif
409
1.04M
    }
410
29.1M
    else
411
29.1M
    {
412
29.1M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
29.1M
        if (s->ip < s->swd_f)
414
877k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
29.1M
    }
416
30.1M
    if (++s->ip == s->b_size)
417
484
        s->ip = 0;
418
30.1M
    if (++s->bp == s->b_size)
419
454
        s->bp = 0;
420
30.1M
    if (++s->rp == s->b_size)
421
484
        s->rp = 0;
422
30.1M
}
lzo1z_9x.c:swd_getbyte
Line
Count
Source
396
35.7M
{
397
35.7M
    int c;
398
399
35.7M
    if ((c = getbyte(*(s->c))) < 0)
400
1.30M
    {
401
1.30M
        if (s->look > 0)
402
1.29M
            --s->look;
403
1.30M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.30M
        s_b(s)[s->ip] = 0;
406
1.30M
        if (s->ip < s->swd_f)
407
247k
            s->b_wrap[s->ip] = 0;
408
1.30M
#endif
409
1.30M
    }
410
34.4M
    else
411
34.4M
    {
412
34.4M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
34.4M
        if (s->ip < s->swd_f)
414
1.06M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
34.4M
    }
416
35.7M
    if (++s->ip == s->b_size)
417
575
        s->ip = 0;
418
35.7M
    if (++s->bp == s->b_size)
419
543
        s->bp = 0;
420
35.7M
    if (++s->rp == s->b_size)
421
575
        s->rp = 0;
422
35.7M
}
lzo2a_9x.c:swd_getbyte
Line
Count
Source
396
8.37M
{
397
8.37M
    int c;
398
399
8.37M
    if ((c = getbyte(*(s->c))) < 0)
400
433k
    {
401
433k
        if (s->look > 0)
402
433k
            --s->look;
403
433k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
433k
        s_b(s)[s->ip] = 0;
406
433k
        if (s->ip < s->swd_f)
407
163k
            s->b_wrap[s->ip] = 0;
408
433k
#endif
409
433k
    }
410
7.94M
    else
411
7.94M
    {
412
7.94M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
7.94M
        if (s->ip < s->swd_f)
414
1.47M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
7.94M
    }
416
8.37M
    if (++s->ip == s->b_size)
417
789
        s->ip = 0;
418
8.37M
    if (++s->bp == s->b_size)
419
744
        s->bp = 0;
420
8.37M
    if (++s->rp == s->b_size)
421
789
        s->rp = 0;
422
8.37M
}
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
135M
{
432
135M
    if (s->node_count == 0)
433
93.2M
    {
434
93.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
93.2M
        key = HEAD3(s_b(s),node);
450
93.2M
        assert(s_llen3(s)[key] > 0);
451
93.2M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
66.3M
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
66.3M
            if ((lzo_uint) s_head2(s)[key] == node)
458
11.8M
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
93.2M
    }
462
42.5M
    else
463
42.5M
        --s->node_count;
464
135M
}
lzo1b_9x.c:swd_remove_node
Line
Count
Source
431
11.3M
{
432
11.3M
    if (s->node_count == 0)
433
5.85M
    {
434
5.85M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
5.85M
        key = HEAD3(s_b(s),node);
450
5.85M
        assert(s_llen3(s)[key] > 0);
451
5.85M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
            if ((lzo_uint) s_head2(s)[key] == node)
458
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
5.85M
    }
462
5.48M
    else
463
5.48M
        --s->node_count;
464
11.3M
}
lzo1c_9x.c:swd_remove_node
Line
Count
Source
431
10.6M
{
432
10.6M
    if (s->node_count == 0)
433
8.54M
    {
434
8.54M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
8.54M
        key = HEAD3(s_b(s),node);
450
8.54M
        assert(s_llen3(s)[key] > 0);
451
8.54M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
            if ((lzo_uint) s_head2(s)[key] == node)
458
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
8.54M
    }
462
2.06M
    else
463
2.06M
        --s->node_count;
464
10.6M
}
lzo1f_9x.c:swd_remove_node
Line
Count
Source
431
14.6M
{
432
14.6M
    if (s->node_count == 0)
433
12.5M
    {
434
12.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
12.5M
        key = HEAD3(s_b(s),node);
450
12.5M
        assert(s_llen3(s)[key] > 0);
451
12.5M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
            if ((lzo_uint) s_head2(s)[key] == node)
458
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
12.5M
    }
462
2.17M
    else
463
2.17M
        --s->node_count;
464
14.6M
}
lzo1x_9x.c:swd_remove_node
Line
Count
Source
431
24.8M
{
432
24.8M
    if (s->node_count == 0)
433
15.0M
    {
434
15.0M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
15.0M
        key = HEAD3(s_b(s),node);
450
15.0M
        assert(s_llen3(s)[key] > 0);
451
15.0M
        --s_llen3(s)[key];
452
453
15.0M
#ifdef HEAD2
454
15.0M
        IF_HEAD2(s) {
455
15.0M
            key = HEAD2(s_b(s),node);
456
15.0M
            assert(s_head2(s)[key] != NIL2);
457
15.0M
            if ((lzo_uint) s_head2(s)[key] == node)
458
1.96M
                s_head2(s)[key] = NIL2;
459
15.0M
        }
460
15.0M
#endif
461
15.0M
    }
462
9.81M
    else
463
9.81M
        --s->node_count;
464
24.8M
}
lzo1y_9x.c:swd_remove_node
Line
Count
Source
431
30.1M
{
432
30.1M
    if (s->node_count == 0)
433
19.8M
    {
434
19.8M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
19.8M
        key = HEAD3(s_b(s),node);
450
19.8M
        assert(s_llen3(s)[key] > 0);
451
19.8M
        --s_llen3(s)[key];
452
453
19.8M
#ifdef HEAD2
454
19.8M
        IF_HEAD2(s) {
455
19.8M
            key = HEAD2(s_b(s),node);
456
19.8M
            assert(s_head2(s)[key] != NIL2);
457
19.8M
            if ((lzo_uint) s_head2(s)[key] == node)
458
4.25M
                s_head2(s)[key] = NIL2;
459
19.8M
        }
460
19.8M
#endif
461
19.8M
    }
462
10.3M
    else
463
10.3M
        --s->node_count;
464
30.1M
}
lzo1z_9x.c:swd_remove_node
Line
Count
Source
431
35.7M
{
432
35.7M
    if (s->node_count == 0)
433
24.1M
    {
434
24.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
24.1M
        key = HEAD3(s_b(s),node);
450
24.1M
        assert(s_llen3(s)[key] > 0);
451
24.1M
        --s_llen3(s)[key];
452
453
24.1M
#ifdef HEAD2
454
24.1M
        IF_HEAD2(s) {
455
24.1M
            key = HEAD2(s_b(s),node);
456
24.1M
            assert(s_head2(s)[key] != NIL2);
457
24.1M
            if ((lzo_uint) s_head2(s)[key] == node)
458
3.99M
                s_head2(s)[key] = NIL2;
459
24.1M
        }
460
24.1M
#endif
461
24.1M
    }
462
11.5M
    else
463
11.5M
        --s->node_count;
464
35.7M
}
lzo2a_9x.c:swd_remove_node
Line
Count
Source
431
8.37M
{
432
8.37M
    if (s->node_count == 0)
433
7.31M
    {
434
7.31M
        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
7.31M
        key = HEAD3(s_b(s),node);
450
7.31M
        assert(s_llen3(s)[key] > 0);
451
7.31M
        --s_llen3(s)[key];
452
453
7.31M
#ifdef HEAD2
454
7.31M
        IF_HEAD2(s) {
455
7.31M
            key = HEAD2(s_b(s),node);
456
7.31M
            assert(s_head2(s)[key] != NIL2);
457
7.31M
            if ((lzo_uint) s_head2(s)[key] == node)
458
1.65M
                s_head2(s)[key] = NIL2;
459
7.31M
        }
460
7.31M
#endif
461
7.31M
    }
462
1.06M
    else
463
1.06M
        --s->node_count;
464
8.37M
}
465
466
467
/***********************************************************************
468
//
469
************************************************************************/
470
471
static
472
void swd_accept(lzo_swd_p s, lzo_uint n)
473
2.73M
{
474
2.73M
    assert(n <= s->look);
475
476
2.73M
    if (n) do
477
86.7M
    {
478
86.7M
        lzo_uint key;
479
480
86.7M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
86.7M
        key = HEAD3(s_b(s),s->bp);
484
86.7M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
86.7M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
86.7M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
86.7M
        s_llen3(s)[key]++;
488
86.7M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
64.9M
            key = HEAD2(s_b(s),s->bp);
494
64.9M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
86.7M
        swd_getbyte(s);
499
86.7M
    } while (--n != 0);
500
2.73M
}
lzo1b_9x.c:swd_accept
Line
Count
Source
473
126k
{
474
126k
    assert(n <= s->look);
475
476
126k
    if (n) do
477
8.17M
    {
478
8.17M
        lzo_uint key;
479
480
8.17M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
8.17M
        key = HEAD3(s_b(s),s->bp);
484
8.17M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
8.17M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
8.17M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
8.17M
        s_llen3(s)[key]++;
488
8.17M
        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
8.17M
        swd_getbyte(s);
499
8.17M
    } while (--n != 0);
500
126k
}
lzo1c_9x.c:swd_accept
Line
Count
Source
473
151k
{
474
151k
    assert(n <= s->look);
475
476
151k
    if (n) do
477
4.90M
    {
478
4.90M
        lzo_uint key;
479
480
4.90M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
4.90M
        key = HEAD3(s_b(s),s->bp);
484
4.90M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
4.90M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
4.90M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
4.90M
        s_llen3(s)[key]++;
488
4.90M
        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
4.90M
        swd_getbyte(s);
499
4.90M
    } while (--n != 0);
500
151k
}
lzo1f_9x.c:swd_accept
Line
Count
Source
473
337k
{
474
337k
    assert(n <= s->look);
475
476
337k
    if (n) do
477
8.68M
    {
478
8.68M
        lzo_uint key;
479
480
8.68M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
8.68M
        key = HEAD3(s_b(s),s->bp);
484
8.68M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
8.68M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
8.68M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
8.68M
        s_llen3(s)[key]++;
488
8.68M
        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
8.68M
        swd_getbyte(s);
499
8.68M
    } while (--n != 0);
500
337k
}
lzo1x_9x.c:swd_accept
Line
Count
Source
473
633k
{
474
633k
    assert(n <= s->look);
475
476
633k
    if (n) do
477
17.5M
    {
478
17.5M
        lzo_uint key;
479
480
17.5M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
17.5M
        key = HEAD3(s_b(s),s->bp);
484
17.5M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
17.5M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
17.5M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
17.5M
        s_llen3(s)[key]++;
488
17.5M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
17.5M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
17.5M
        IF_HEAD2(s) {
493
17.5M
            key = HEAD2(s_b(s),s->bp);
494
17.5M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
17.5M
        }
496
17.5M
#endif
497
498
17.5M
        swd_getbyte(s);
499
17.5M
    } while (--n != 0);
500
633k
}
lzo1y_9x.c:swd_accept
Line
Count
Source
473
599k
{
474
599k
    assert(n <= s->look);
475
476
599k
    if (n) do
477
17.8M
    {
478
17.8M
        lzo_uint key;
479
480
17.8M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
17.8M
        key = HEAD3(s_b(s),s->bp);
484
17.8M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
17.8M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
17.8M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
17.8M
        s_llen3(s)[key]++;
488
17.8M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
17.8M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
17.8M
        IF_HEAD2(s) {
493
17.8M
            key = HEAD2(s_b(s),s->bp);
494
17.8M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
17.8M
        }
496
17.8M
#endif
497
498
17.8M
        swd_getbyte(s);
499
17.8M
    } while (--n != 0);
500
599k
}
lzo1z_9x.c:swd_accept
Line
Count
Source
473
737k
{
474
737k
    assert(n <= s->look);
475
476
737k
    if (n) do
477
23.6M
    {
478
23.6M
        lzo_uint key;
479
480
23.6M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
23.6M
        key = HEAD3(s_b(s),s->bp);
484
23.6M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
23.6M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
23.6M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
23.6M
        s_llen3(s)[key]++;
488
23.6M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
23.6M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
23.6M
        IF_HEAD2(s) {
493
23.6M
            key = HEAD2(s_b(s),s->bp);
494
23.6M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
23.6M
        }
496
23.6M
#endif
497
498
23.6M
        swd_getbyte(s);
499
23.6M
    } while (--n != 0);
500
737k
}
lzo2a_9x.c:swd_accept
Line
Count
Source
473
145k
{
474
145k
    assert(n <= s->look);
475
476
145k
    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
5.94M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
5.94M
        IF_HEAD2(s) {
493
5.94M
            key = HEAD2(s_b(s),s->bp);
494
5.94M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
5.94M
        }
496
5.94M
#endif
497
498
5.94M
        swd_getbyte(s);
499
5.94M
    } while (--n != 0);
500
145k
}
501
502
503
/***********************************************************************
504
//
505
************************************************************************/
506
507
static
508
void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt)
509
31.7M
{
510
31.7M
    const lzo_bytep p1;
511
31.7M
    const lzo_bytep p2;
512
31.7M
    const lzo_bytep px;
513
31.7M
    lzo_uint m_len = s->m_len;
514
31.7M
    const lzo_bytep b  = s_b(s);
515
31.7M
    const lzo_bytep bp = s_b(s) + s->bp;
516
31.7M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
31.7M
    swd_uintp succ3 = s_succ3(s);
518
31.7M
    unsigned char scan_end1;
519
520
31.7M
    assert(s->m_len > 0);
521
522
31.7M
    scan_end1 = bp[m_len - 1];
523
2.06G
    for ( ; cnt-- > 0; node = succ3[node])
524
2.03G
    {
525
2.03G
        p1 = bp;
526
2.03G
        p2 = b + node;
527
2.03G
        px = bx;
528
529
2.03G
        assert(m_len < s->look);
530
531
2.03G
        if (
532
2.03G
#if 1
533
2.03G
            p2[m_len - 1] == scan_end1 &&
534
1.05G
            p2[m_len] == p1[m_len] &&
535
156M
#endif
536
156M
            p2[0] == p1[0] &&
537
155M
            p2[1] == p1[1])
538
155M
        {
539
155M
            lzo_uint i;
540
155M
            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
155M
            p1 += 2; p2 += 2;
550
3.25G
            do {} while (++p1 < px && *p1 == *++p2);
551
155M
#endif
552
155M
            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
155M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
139M
            if (i < SWD_BEST_OFF)
564
133M
            {
565
133M
                if (s->best_pos[i] == 0)
566
13.0M
                    s->best_pos[i] = node + 1;
567
133M
            }
568
#endif
569
155M
            if (i > m_len)
570
19.6M
            {
571
19.6M
                s->m_len = m_len = i;
572
19.6M
                s->m_pos = node;
573
19.6M
                if (m_len == s->look)
574
23.5k
                    return;
575
19.6M
                if (m_len >= s->nice_length)
576
0
                    return;
577
19.6M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
1.33M
                    return;
579
18.3M
                scan_end1 = bp[m_len - 1];
580
18.3M
            }
581
155M
        }
582
2.03G
    }
583
31.7M
}
lzo1b_9x.c:swd_search
Line
Count
Source
509
3.16M
{
510
3.16M
    const lzo_bytep p1;
511
3.16M
    const lzo_bytep p2;
512
3.16M
    const lzo_bytep px;
513
3.16M
    lzo_uint m_len = s->m_len;
514
3.16M
    const lzo_bytep b  = s_b(s);
515
3.16M
    const lzo_bytep bp = s_b(s) + s->bp;
516
3.16M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
3.16M
    swd_uintp succ3 = s_succ3(s);
518
3.16M
    unsigned char scan_end1;
519
520
3.16M
    assert(s->m_len > 0);
521
522
3.16M
    scan_end1 = bp[m_len - 1];
523
57.1M
    for ( ; cnt-- > 0; node = succ3[node])
524
54.0M
    {
525
54.0M
        p1 = bp;
526
54.0M
        p2 = b + node;
527
54.0M
        px = bx;
528
529
54.0M
        assert(m_len < s->look);
530
531
54.0M
        if (
532
54.0M
#if 1
533
54.0M
            p2[m_len - 1] == scan_end1 &&
534
26.4M
            p2[m_len] == p1[m_len] &&
535
2.58M
#endif
536
2.58M
            p2[0] == p1[0] &&
537
2.53M
            p2[1] == p1[1])
538
2.51M
        {
539
2.51M
            lzo_uint i;
540
2.51M
            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.51M
            p1 += 2; p2 += 2;
550
251M
            do {} while (++p1 < px && *p1 == *++p2);
551
2.51M
#endif
552
2.51M
            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.51M
            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.51M
            if (i > m_len)
570
947k
            {
571
947k
                s->m_len = m_len = i;
572
947k
                s->m_pos = node;
573
947k
                if (m_len == s->look)
574
2.42k
                    return;
575
945k
                if (m_len >= s->nice_length)
576
0
                    return;
577
945k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
57.3k
                    return;
579
887k
                scan_end1 = bp[m_len - 1];
580
887k
            }
581
2.51M
        }
582
54.0M
    }
583
3.16M
}
lzo1c_9x.c:swd_search
Line
Count
Source
509
5.70M
{
510
5.70M
    const lzo_bytep p1;
511
5.70M
    const lzo_bytep p2;
512
5.70M
    const lzo_bytep px;
513
5.70M
    lzo_uint m_len = s->m_len;
514
5.70M
    const lzo_bytep b  = s_b(s);
515
5.70M
    const lzo_bytep bp = s_b(s) + s->bp;
516
5.70M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
5.70M
    swd_uintp succ3 = s_succ3(s);
518
5.70M
    unsigned char scan_end1;
519
520
5.70M
    assert(s->m_len > 0);
521
522
5.70M
    scan_end1 = bp[m_len - 1];
523
91.9M
    for ( ; cnt-- > 0; node = succ3[node])
524
86.2M
    {
525
86.2M
        p1 = bp;
526
86.2M
        p2 = b + node;
527
86.2M
        px = bx;
528
529
86.2M
        assert(m_len < s->look);
530
531
86.2M
        if (
532
86.2M
#if 1
533
86.2M
            p2[m_len - 1] == scan_end1 &&
534
42.5M
            p2[m_len] == p1[m_len] &&
535
4.66M
#endif
536
4.66M
            p2[0] == p1[0] &&
537
4.63M
            p2[1] == p1[1])
538
4.60M
        {
539
4.60M
            lzo_uint i;
540
4.60M
            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
4.60M
            p1 += 2; p2 += 2;
550
235M
            do {} while (++p1 < px && *p1 == *++p2);
551
4.60M
#endif
552
4.60M
            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
4.60M
            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
4.60M
            if (i > m_len)
570
1.14M
            {
571
1.14M
                s->m_len = m_len = i;
572
1.14M
                s->m_pos = node;
573
1.14M
                if (m_len == s->look)
574
1.86k
                    return;
575
1.14M
                if (m_len >= s->nice_length)
576
0
                    return;
577
1.14M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
64.4k
                    return;
579
1.07M
                scan_end1 = bp[m_len - 1];
580
1.07M
            }
581
4.60M
        }
582
86.2M
    }
583
5.70M
}
lzo1f_9x.c:swd_search
Line
Count
Source
509
6.00M
{
510
6.00M
    const lzo_bytep p1;
511
6.00M
    const lzo_bytep p2;
512
6.00M
    const lzo_bytep px;
513
6.00M
    lzo_uint m_len = s->m_len;
514
6.00M
    const lzo_bytep b  = s_b(s);
515
6.00M
    const lzo_bytep bp = s_b(s) + s->bp;
516
6.00M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
6.00M
    swd_uintp succ3 = s_succ3(s);
518
6.00M
    unsigned char scan_end1;
519
520
6.00M
    assert(s->m_len > 0);
521
522
6.00M
    scan_end1 = bp[m_len - 1];
523
95.0M
    for ( ; cnt-- > 0; node = succ3[node])
524
89.2M
    {
525
89.2M
        p1 = bp;
526
89.2M
        p2 = b + node;
527
89.2M
        px = bx;
528
529
89.2M
        assert(m_len < s->look);
530
531
89.2M
        if (
532
89.2M
#if 1
533
89.2M
            p2[m_len - 1] == scan_end1 &&
534
50.1M
            p2[m_len] == p1[m_len] &&
535
5.13M
#endif
536
5.13M
            p2[0] == p1[0] &&
537
5.10M
            p2[1] == p1[1])
538
5.09M
        {
539
5.09M
            lzo_uint i;
540
5.09M
            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
5.09M
            p1 += 2; p2 += 2;
550
317M
            do {} while (++p1 < px && *p1 == *++p2);
551
5.09M
#endif
552
5.09M
            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
5.09M
            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
5.09M
            if (i > m_len)
570
1.68M
            {
571
1.68M
                s->m_len = m_len = i;
572
1.68M
                s->m_pos = node;
573
1.68M
                if (m_len == s->look)
574
3.97k
                    return;
575
1.67M
                if (m_len >= s->nice_length)
576
0
                    return;
577
1.67M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
196k
                    return;
579
1.48M
                scan_end1 = bp[m_len - 1];
580
1.48M
            }
581
5.09M
        }
582
89.2M
    }
583
6.00M
}
lzo1x_9x.c:swd_search
Line
Count
Source
509
3.71M
{
510
3.71M
    const lzo_bytep p1;
511
3.71M
    const lzo_bytep p2;
512
3.71M
    const lzo_bytep px;
513
3.71M
    lzo_uint m_len = s->m_len;
514
3.71M
    const lzo_bytep b  = s_b(s);
515
3.71M
    const lzo_bytep bp = s_b(s) + s->bp;
516
3.71M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
3.71M
    swd_uintp succ3 = s_succ3(s);
518
3.71M
    unsigned char scan_end1;
519
520
3.71M
    assert(s->m_len > 0);
521
522
3.71M
    scan_end1 = bp[m_len - 1];
523
643M
    for ( ; cnt-- > 0; node = succ3[node])
524
639M
    {
525
639M
        p1 = bp;
526
639M
        p2 = b + node;
527
639M
        px = bx;
528
529
639M
        assert(m_len < s->look);
530
531
639M
        if (
532
639M
#if 1
533
639M
            p2[m_len - 1] == scan_end1 &&
534
334M
            p2[m_len] == p1[m_len] &&
535
54.7M
#endif
536
54.7M
            p2[0] == p1[0] &&
537
54.5M
            p2[1] == p1[1])
538
54.4M
        {
539
54.4M
            lzo_uint i;
540
54.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
54.4M
            p1 += 2; p2 += 2;
550
715M
            do {} while (++p1 < px && *p1 == *++p2);
551
54.4M
#endif
552
54.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
54.4M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
54.4M
#if defined(SWD_BEST_OFF)
563
54.4M
            if (i < SWD_BEST_OFF)
564
52.6M
            {
565
52.6M
                if (s->best_pos[i] == 0)
566
4.45M
                    s->best_pos[i] = node + 1;
567
52.6M
            }
568
54.4M
#endif
569
54.4M
            if (i > m_len)
570
5.01M
            {
571
5.01M
                s->m_len = m_len = i;
572
5.01M
                s->m_pos = node;
573
5.01M
                if (m_len == s->look)
574
2.69k
                    return;
575
5.01M
                if (m_len >= s->nice_length)
576
0
                    return;
577
5.01M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
307k
                    return;
579
4.70M
                scan_end1 = bp[m_len - 1];
580
4.70M
            }
581
54.4M
        }
582
639M
    }
583
3.71M
}
lzo1y_9x.c:swd_search
Line
Count
Source
509
6.41M
{
510
6.41M
    const lzo_bytep p1;
511
6.41M
    const lzo_bytep p2;
512
6.41M
    const lzo_bytep px;
513
6.41M
    lzo_uint m_len = s->m_len;
514
6.41M
    const lzo_bytep b  = s_b(s);
515
6.41M
    const lzo_bytep bp = s_b(s) + s->bp;
516
6.41M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
6.41M
    swd_uintp succ3 = s_succ3(s);
518
6.41M
    unsigned char scan_end1;
519
520
6.41M
    assert(s->m_len > 0);
521
522
6.41M
    scan_end1 = bp[m_len - 1];
523
530M
    for ( ; cnt-- > 0; node = succ3[node])
524
523M
    {
525
523M
        p1 = bp;
526
523M
        p2 = b + node;
527
523M
        px = bx;
528
529
523M
        assert(m_len < s->look);
530
531
523M
        if (
532
523M
#if 1
533
523M
            p2[m_len - 1] == scan_end1 &&
534
272M
            p2[m_len] == p1[m_len] &&
535
41.7M
#endif
536
41.7M
            p2[0] == p1[0] &&
537
41.5M
            p2[1] == p1[1])
538
41.4M
        {
539
41.4M
            lzo_uint i;
540
41.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
41.4M
            p1 += 2; p2 += 2;
550
696M
            do {} while (++p1 < px && *p1 == *++p2);
551
41.4M
#endif
552
41.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
41.4M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
41.4M
#if defined(SWD_BEST_OFF)
563
41.4M
            if (i < SWD_BEST_OFF)
564
39.5M
            {
565
39.5M
                if (s->best_pos[i] == 0)
566
4.07M
                    s->best_pos[i] = node + 1;
567
39.5M
            }
568
41.4M
#endif
569
41.4M
            if (i > m_len)
570
4.75M
            {
571
4.75M
                s->m_len = m_len = i;
572
4.75M
                s->m_pos = node;
573
4.75M
                if (m_len == s->look)
574
3.26k
                    return;
575
4.75M
                if (m_len >= s->nice_length)
576
0
                    return;
577
4.75M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
295k
                    return;
579
4.46M
                scan_end1 = bp[m_len - 1];
580
4.46M
            }
581
41.4M
        }
582
523M
    }
583
6.41M
}
lzo1z_9x.c:swd_search
Line
Count
Source
509
6.15M
{
510
6.15M
    const lzo_bytep p1;
511
6.15M
    const lzo_bytep p2;
512
6.15M
    const lzo_bytep px;
513
6.15M
    lzo_uint m_len = s->m_len;
514
6.15M
    const lzo_bytep b  = s_b(s);
515
6.15M
    const lzo_bytep bp = s_b(s) + s->bp;
516
6.15M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
6.15M
    swd_uintp succ3 = s_succ3(s);
518
6.15M
    unsigned char scan_end1;
519
520
6.15M
    assert(s->m_len > 0);
521
522
6.15M
    scan_end1 = bp[m_len - 1];
523
605M
    for ( ; cnt-- > 0; node = succ3[node])
524
599M
    {
525
599M
        p1 = bp;
526
599M
        p2 = b + node;
527
599M
        px = bx;
528
529
599M
        assert(m_len < s->look);
530
531
599M
        if (
532
599M
#if 1
533
599M
            p2[m_len - 1] == scan_end1 &&
534
307M
            p2[m_len] == p1[m_len] &&
535
43.8M
#endif
536
43.8M
            p2[0] == p1[0] &&
537
43.6M
            p2[1] == p1[1])
538
43.6M
        {
539
43.6M
            lzo_uint i;
540
43.6M
            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
43.6M
            p1 += 2; p2 += 2;
550
848M
            do {} while (++p1 < px && *p1 == *++p2);
551
43.6M
#endif
552
43.6M
            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
43.6M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
43.6M
#if defined(SWD_BEST_OFF)
563
43.6M
            if (i < SWD_BEST_OFF)
564
41.0M
            {
565
41.0M
                if (s->best_pos[i] == 0)
566
4.56M
                    s->best_pos[i] = node + 1;
567
41.0M
            }
568
43.6M
#endif
569
43.6M
            if (i > m_len)
570
5.41M
            {
571
5.41M
                s->m_len = m_len = i;
572
5.41M
                s->m_pos = node;
573
5.41M
                if (m_len == s->look)
574
5.07k
                    return;
575
5.41M
                if (m_len >= s->nice_length)
576
0
                    return;
577
5.41M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
372k
                    return;
579
5.04M
                scan_end1 = bp[m_len - 1];
580
5.04M
            }
581
43.6M
        }
582
599M
    }
583
6.15M
}
lzo2a_9x.c:swd_search
Line
Count
Source
509
535k
{
510
535k
    const lzo_bytep p1;
511
535k
    const lzo_bytep p2;
512
535k
    const lzo_bytep px;
513
535k
    lzo_uint m_len = s->m_len;
514
535k
    const lzo_bytep b  = s_b(s);
515
535k
    const lzo_bytep bp = s_b(s) + s->bp;
516
535k
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
535k
    swd_uintp succ3 = s_succ3(s);
518
535k
    unsigned char scan_end1;
519
520
535k
    assert(s->m_len > 0);
521
522
535k
    scan_end1 = bp[m_len - 1];
523
37.5M
    for ( ; cnt-- > 0; node = succ3[node])
524
37.0M
    {
525
37.0M
        p1 = bp;
526
37.0M
        p2 = b + node;
527
37.0M
        px = bx;
528
529
37.0M
        assert(m_len < s->look);
530
531
37.0M
        if (
532
37.0M
#if 1
533
37.0M
            p2[m_len - 1] == scan_end1 &&
534
23.1M
            p2[m_len] == p1[m_len] &&
535
3.43M
#endif
536
3.43M
            p2[0] == p1[0] &&
537
3.41M
            p2[1] == p1[1])
538
3.41M
        {
539
3.41M
            lzo_uint i;
540
3.41M
            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
3.41M
            p1 += 2; p2 += 2;
550
184M
            do {} while (++p1 < px && *p1 == *++p2);
551
3.41M
#endif
552
3.41M
            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
3.41M
            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
3.41M
            if (i > m_len)
570
723k
            {
571
723k
                s->m_len = m_len = i;
572
723k
                s->m_pos = node;
573
723k
                if (m_len == s->look)
574
4.22k
                    return;
575
719k
                if (m_len >= s->nice_length)
576
0
                    return;
577
719k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
45.2k
                    return;
579
674k
                scan_end1 = bp[m_len - 1];
580
674k
            }
581
3.41M
        }
582
37.0M
    }
583
535k
}
584
585
586
/***********************************************************************
587
//
588
************************************************************************/
589
590
#ifdef HEAD2
591
592
static
593
lzo_bool swd_search2(lzo_swd_p s)
594
34.2M
{
595
34.2M
    lzo_uint key;
596
597
34.2M
    assert(s->look >= 2);
598
34.2M
    assert(s->m_len > 0);
599
600
34.2M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
34.2M
    if (key == NIL2)
602
17.4M
        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
34.2M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
#if defined(SWD_BEST_OFF)
610
16.2M
    if (s->best_pos[2] == 0)
611
16.2M
        s->best_pos[2] = key + 1;
612
#endif
613
614
16.8M
    if (s->m_len < 2)
615
16.8M
    {
616
16.8M
        s->m_len = 2;
617
16.8M
        s->m_pos = key;
618
16.8M
    }
619
16.8M
    return 1;
620
34.2M
}
lzo1x_9x.c:swd_search2
Line
Count
Source
594
7.37M
{
595
7.37M
    lzo_uint key;
596
597
7.37M
    assert(s->look >= 2);
598
7.37M
    assert(s->m_len > 0);
599
600
7.37M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
7.37M
    if (key == NIL2)
602
3.65M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
7.37M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
3.71M
#if defined(SWD_BEST_OFF)
610
3.71M
    if (s->best_pos[2] == 0)
611
3.71M
        s->best_pos[2] = key + 1;
612
3.71M
#endif
613
614
3.71M
    if (s->m_len < 2)
615
3.71M
    {
616
3.71M
        s->m_len = 2;
617
3.71M
        s->m_pos = key;
618
3.71M
    }
619
3.71M
    return 1;
620
7.37M
}
lzo1y_9x.c:swd_search2
Line
Count
Source
594
12.3M
{
595
12.3M
    lzo_uint key;
596
597
12.3M
    assert(s->look >= 2);
598
12.3M
    assert(s->m_len > 0);
599
600
12.3M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
12.3M
    if (key == NIL2)
602
5.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
12.3M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
6.41M
#if defined(SWD_BEST_OFF)
610
6.41M
    if (s->best_pos[2] == 0)
611
6.41M
        s->best_pos[2] = key + 1;
612
6.41M
#endif
613
614
6.41M
    if (s->m_len < 2)
615
6.41M
    {
616
6.41M
        s->m_len = 2;
617
6.41M
        s->m_pos = key;
618
6.41M
    }
619
6.41M
    return 1;
620
12.3M
}
lzo1z_9x.c:swd_search2
Line
Count
Source
594
12.0M
{
595
12.0M
    lzo_uint key;
596
597
12.0M
    assert(s->look >= 2);
598
12.0M
    assert(s->m_len > 0);
599
600
12.0M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
12.0M
    if (key == NIL2)
602
5.91M
        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
12.0M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
6.15M
#if defined(SWD_BEST_OFF)
610
6.15M
    if (s->best_pos[2] == 0)
611
6.15M
        s->best_pos[2] = key + 1;
612
6.15M
#endif
613
614
6.15M
    if (s->m_len < 2)
615
6.15M
    {
616
6.15M
        s->m_len = 2;
617
6.15M
        s->m_pos = key;
618
6.15M
    }
619
6.15M
    return 1;
620
12.0M
}
lzo2a_9x.c:swd_search2
Line
Count
Source
594
2.42M
{
595
2.42M
    lzo_uint key;
596
597
2.42M
    assert(s->look >= 2);
598
2.42M
    assert(s->m_len > 0);
599
600
2.42M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
2.42M
    if (key == NIL2)
602
1.89M
        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
2.42M
    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
535k
    if (s->m_len < 2)
615
535k
    {
616
535k
        s->m_len = 2;
617
535k
        s->m_pos = key;
618
535k
    }
619
535k
    return 1;
620
2.42M
}
621
622
#endif
623
624
625
/***********************************************************************
626
//
627
************************************************************************/
628
629
static
630
void swd_findbest(lzo_swd_p s)
631
49.1M
{
632
49.1M
    lzo_uint key;
633
49.1M
    lzo_uint cnt, node;
634
49.1M
    lzo_uint len;
635
636
49.1M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
49.1M
    key = HEAD3(s_b(s),s->bp);
640
49.1M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
49.1M
    cnt = s_llen3(s)[key]++;
642
49.1M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
49.1M
    if (cnt > s->max_chain && s->max_chain > 0)
644
686k
        cnt = s->max_chain;
645
49.1M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
49.1M
    s->b_char = s_b(s)[s->bp];
648
49.1M
    len = s->m_len;
649
49.1M
    if (s->m_len >= s->look)
650
9.95k
    {
651
9.95k
        if (s->look == 0)
652
5.83k
            s->b_char = -1;
653
9.95k
        s->m_off = 0;
654
9.95k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
9.95k
    }
656
49.1M
    else
657
49.1M
    {
658
#if defined(HEAD2)
659
34.2M
        if (swd_search2(s) && s->look >= 3)
660
16.8M
            swd_search(s,node,cnt);
661
#else
662
14.8M
        if (s->look >= 3)
663
14.8M
            swd_search(s,node,cnt);
664
#endif
665
49.1M
        if (s->m_len > len)
666
17.9M
            s->m_off = swd_pos2off(s,s->m_pos);
667
49.1M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
31.8M
        if (s->use_best_off)
671
31.8M
        {
672
31.8M
            unsigned i;
673
1.05G
            for (i = 2; i < SWD_BEST_OFF; i++)
674
1.01G
                if (s->best_pos[i] > 0)
675
29.3M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
989M
                else
677
989M
                    s->best_off[i] = 0;
678
31.8M
        }
679
#endif
680
49.1M
    }
681
682
49.1M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
34.2M
        key = HEAD2(s_b(s),s->bp);
688
34.2M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
49.1M
}
lzo1b_9x.c:swd_findbest
Line
Count
Source
631
3.16M
{
632
3.16M
    lzo_uint key;
633
3.16M
    lzo_uint cnt, node;
634
3.16M
    lzo_uint len;
635
636
3.16M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
3.16M
    key = HEAD3(s_b(s),s->bp);
640
3.16M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
3.16M
    cnt = s_llen3(s)[key]++;
642
3.16M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
3.16M
    if (cnt > s->max_chain && s->max_chain > 0)
644
14.8k
        cnt = s->max_chain;
645
3.16M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
3.16M
    s->b_char = s_b(s)[s->bp];
648
3.16M
    len = s->m_len;
649
3.16M
    if (s->m_len >= s->look)
650
1.03k
    {
651
1.03k
        if (s->look == 0)
652
521
            s->b_char = -1;
653
1.03k
        s->m_off = 0;
654
1.03k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.03k
    }
656
3.16M
    else
657
3.16M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
3.16M
        if (s->look >= 3)
663
3.16M
            swd_search(s,node,cnt);
664
3.16M
#endif
665
3.16M
        if (s->m_len > len)
666
195k
            s->m_off = swd_pos2off(s,s->m_pos);
667
3.16M
        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.16M
    }
681
682
3.16M
    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.16M
}
lzo1c_9x.c:swd_findbest
Line
Count
Source
631
5.70M
{
632
5.70M
    lzo_uint key;
633
5.70M
    lzo_uint cnt, node;
634
5.70M
    lzo_uint len;
635
636
5.70M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
5.70M
    key = HEAD3(s_b(s),s->bp);
640
5.70M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
5.70M
    cnt = s_llen3(s)[key]++;
642
5.70M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
5.70M
    if (cnt > s->max_chain && s->max_chain > 0)
644
19.5k
        cnt = s->max_chain;
645
5.70M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
5.70M
    s->b_char = s_b(s)[s->bp];
648
5.70M
    len = s->m_len;
649
5.70M
    if (s->m_len >= s->look)
650
1.20k
    {
651
1.20k
        if (s->look == 0)
652
588
            s->b_char = -1;
653
1.20k
        s->m_off = 0;
654
1.20k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.20k
    }
656
5.70M
    else
657
5.70M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
5.70M
        if (s->look >= 3)
663
5.70M
            swd_search(s,node,cnt);
664
5.70M
#endif
665
5.70M
        if (s->m_len > len)
666
265k
            s->m_off = swd_pos2off(s,s->m_pos);
667
5.70M
        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.70M
    }
681
682
5.70M
    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
5.70M
}
lzo1f_9x.c:swd_findbest
Line
Count
Source
631
6.00M
{
632
6.00M
    lzo_uint key;
633
6.00M
    lzo_uint cnt, node;
634
6.00M
    lzo_uint len;
635
636
6.00M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
6.00M
    key = HEAD3(s_b(s),s->bp);
640
6.00M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
6.00M
    cnt = s_llen3(s)[key]++;
642
6.00M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
6.00M
    if (cnt > s->max_chain && s->max_chain > 0)
644
24.6k
        cnt = s->max_chain;
645
6.00M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
6.00M
    s->b_char = s_b(s)[s->bp];
648
6.00M
    len = s->m_len;
649
6.00M
    if (s->m_len >= s->look)
650
1.26k
    {
651
1.26k
        if (s->look == 0)
652
648
            s->b_char = -1;
653
1.26k
        s->m_off = 0;
654
1.26k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.26k
    }
656
6.00M
    else
657
6.00M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
6.00M
        if (s->look >= 3)
663
6.00M
            swd_search(s,node,cnt);
664
6.00M
#endif
665
6.00M
        if (s->m_len > len)
666
623k
            s->m_off = swd_pos2off(s,s->m_pos);
667
6.00M
        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.00M
    }
681
682
6.00M
    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.00M
}
lzo1x_9x.c:swd_findbest
Line
Count
Source
631
7.37M
{
632
7.37M
    lzo_uint key;
633
7.37M
    lzo_uint cnt, node;
634
7.37M
    lzo_uint len;
635
636
7.37M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
7.37M
    key = HEAD3(s_b(s),s->bp);
640
7.37M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
7.37M
    cnt = s_llen3(s)[key]++;
642
7.37M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
7.37M
    if (cnt > s->max_chain && s->max_chain > 0)
644
234k
        cnt = s->max_chain;
645
7.37M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
7.37M
    s->b_char = s_b(s)[s->bp];
648
7.37M
    len = s->m_len;
649
7.37M
    if (s->m_len >= s->look)
650
1.67k
    {
651
1.67k
        if (s->look == 0)
652
1.06k
            s->b_char = -1;
653
1.67k
        s->m_off = 0;
654
1.67k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.67k
    }
656
7.37M
    else
657
7.37M
    {
658
7.37M
#if defined(HEAD2)
659
7.37M
        if (swd_search2(s) && s->look >= 3)
660
3.71M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
7.37M
        if (s->m_len > len)
666
3.71M
            s->m_off = swd_pos2off(s,s->m_pos);
667
7.37M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
7.37M
#if defined(SWD_BEST_OFF)
670
7.37M
        if (s->use_best_off)
671
7.37M
        {
672
7.37M
            unsigned i;
673
243M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
236M
                if (s->best_pos[i] > 0)
675
8.17M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
227M
                else
677
227M
                    s->best_off[i] = 0;
678
7.37M
        }
679
7.37M
#endif
680
7.37M
    }
681
682
7.37M
    swd_remove_node(s,s->rp);
683
684
7.37M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
7.37M
    IF_HEAD2(s) {
687
7.37M
        key = HEAD2(s_b(s),s->bp);
688
7.37M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
7.37M
    }
690
7.37M
#endif
691
7.37M
}
lzo1y_9x.c:swd_findbest
Line
Count
Source
631
12.3M
{
632
12.3M
    lzo_uint key;
633
12.3M
    lzo_uint cnt, node;
634
12.3M
    lzo_uint len;
635
636
12.3M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
12.3M
    key = HEAD3(s_b(s),s->bp);
640
12.3M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
12.3M
    cnt = s_llen3(s)[key]++;
642
12.3M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
12.3M
    if (cnt > s->max_chain && s->max_chain > 0)
644
180k
        cnt = s->max_chain;
645
12.3M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
12.3M
    s->b_char = s_b(s)[s->bp];
648
12.3M
    len = s->m_len;
649
12.3M
    if (s->m_len >= s->look)
650
1.64k
    {
651
1.64k
        if (s->look == 0)
652
1.05k
            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
12.3M
    else
657
12.3M
    {
658
12.3M
#if defined(HEAD2)
659
12.3M
        if (swd_search2(s) && s->look >= 3)
660
6.41M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
12.3M
        if (s->m_len > len)
666
6.41M
            s->m_off = swd_pos2off(s,s->m_pos);
667
12.3M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
12.3M
#if defined(SWD_BEST_OFF)
670
12.3M
        if (s->use_best_off)
671
12.3M
        {
672
12.3M
            unsigned i;
673
408M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
396M
                if (s->best_pos[i] > 0)
675
10.4M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
385M
                else
677
385M
                    s->best_off[i] = 0;
678
12.3M
        }
679
12.3M
#endif
680
12.3M
    }
681
682
12.3M
    swd_remove_node(s,s->rp);
683
684
12.3M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
12.3M
    IF_HEAD2(s) {
687
12.3M
        key = HEAD2(s_b(s),s->bp);
688
12.3M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
12.3M
    }
690
12.3M
#endif
691
12.3M
}
lzo1z_9x.c:swd_findbest
Line
Count
Source
631
12.0M
{
632
12.0M
    lzo_uint key;
633
12.0M
    lzo_uint cnt, node;
634
12.0M
    lzo_uint len;
635
636
12.0M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
12.0M
    key = HEAD3(s_b(s),s->bp);
640
12.0M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
12.0M
    cnt = s_llen3(s)[key]++;
642
12.0M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
12.0M
    if (cnt > s->max_chain && s->max_chain > 0)
644
200k
        cnt = s->max_chain;
645
12.0M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
12.0M
    s->b_char = s_b(s)[s->bp];
648
12.0M
    len = s->m_len;
649
12.0M
    if (s->m_len >= s->look)
650
2.11k
    {
651
2.11k
        if (s->look == 0)
652
1.32k
            s->b_char = -1;
653
2.11k
        s->m_off = 0;
654
2.11k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
2.11k
    }
656
12.0M
    else
657
12.0M
    {
658
12.0M
#if defined(HEAD2)
659
12.0M
        if (swd_search2(s) && s->look >= 3)
660
6.15M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
12.0M
        if (s->m_len > len)
666
6.15M
            s->m_off = swd_pos2off(s,s->m_pos);
667
12.0M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
12.0M
#if defined(SWD_BEST_OFF)
670
12.0M
        if (s->use_best_off)
671
12.0M
        {
672
12.0M
            unsigned i;
673
398M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
386M
                if (s->best_pos[i] > 0)
675
10.7M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
375M
                else
677
375M
                    s->best_off[i] = 0;
678
12.0M
        }
679
12.0M
#endif
680
12.0M
    }
681
682
12.0M
    swd_remove_node(s,s->rp);
683
684
12.0M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
12.0M
    IF_HEAD2(s) {
687
12.0M
        key = HEAD2(s_b(s),s->bp);
688
12.0M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
12.0M
    }
690
12.0M
#endif
691
12.0M
}
lzo2a_9x.c:swd_findbest
Line
Count
Source
631
2.43M
{
632
2.43M
    lzo_uint key;
633
2.43M
    lzo_uint cnt, node;
634
2.43M
    lzo_uint len;
635
636
2.43M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
2.43M
    key = HEAD3(s_b(s),s->bp);
640
2.43M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
2.43M
    cnt = s_llen3(s)[key]++;
642
2.43M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
2.43M
    if (cnt > s->max_chain && s->max_chain > 0)
644
11.4k
        cnt = s->max_chain;
645
2.43M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
2.43M
    s->b_char = s_b(s)[s->bp];
648
2.43M
    len = s->m_len;
649
2.43M
    if (s->m_len >= s->look)
650
1.01k
    {
651
1.01k
        if (s->look == 0)
652
646
            s->b_char = -1;
653
1.01k
        s->m_off = 0;
654
1.01k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.01k
    }
656
2.42M
    else
657
2.42M
    {
658
2.42M
#if defined(HEAD2)
659
2.42M
        if (swd_search2(s) && s->look >= 3)
660
535k
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
2.42M
        if (s->m_len > len)
666
535k
            s->m_off = swd_pos2off(s,s->m_pos);
667
2.42M
        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
2.42M
    }
681
682
2.43M
    swd_remove_node(s,s->rp);
683
684
2.43M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
2.43M
    IF_HEAD2(s) {
687
2.43M
        key = HEAD2(s_b(s),s->bp);
688
2.43M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
2.43M
    }
690
2.43M
#endif
691
2.43M
}
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: */