Coverage Report

Created: 2025-07-18 06:09

/src/lzo-2.10/src/lzo_swd.ch
Line
Count
Source (jump to first uncovered line)
1
/* lzo_swd.ch -- sliding window dictionary
2
3
   This file is part of the LZO real-time data compression library.
4
5
   Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
6
   All Rights Reserved.
7
8
   The LZO library is free software; you can redistribute it and/or
9
   modify it under the terms of the GNU General Public License as
10
   published by the Free Software Foundation; either version 2 of
11
   the License, or (at your option) any later version.
12
13
   The LZO library is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
18
   You should have received a copy of the GNU General Public License
19
   along with the LZO library; see the file COPYING.
20
   If not, write to the Free Software Foundation, Inc.,
21
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
23
   Markus F.X.J. Oberhumer
24
   <markus@oberhumer.com>
25
   http://www.oberhumer.com/opensource/lzo/
26
 */
27
28
29
#if (LZO_UINT_MAX < LZO_0xffffffffL)
30
#  error "LZO_UINT_MAX"
31
#endif
32
#if defined(LZO_DEBUG)
33
#  include <stdio.h>
34
#endif
35
#if defined(__LZO_CHECKER)
36
#  include <stdlib.h>
37
#endif
38
39
40
/***********************************************************************
41
//
42
************************************************************************/
43
44
/* unsigned type for dictionary access - don't waste memory here */
45
#if (0UL + SWD_N + SWD_F + SWD_F < 65535UL)
46
   typedef lzo_uint16_t     swd_uint;
47
112M
#  define SWD_UINT_MAX      0xffffu
48
#else
49
   typedef lzo_uint32_t     swd_uint;
50
861k
#  define SWD_UINT_MAX      0xffffffffu
51
#endif
52
27.1M
#define swd_uintp           swd_uint *
53
344M
#define SWD_UINT(x)         ((swd_uint)(x))
54
55
56
#ifndef SWD_HSIZE
57
205M
#  define SWD_HSIZE         16384
58
#endif
59
#ifndef SWD_MAX_CHAIN
60
6.32k
#  define SWD_MAX_CHAIN     2048
61
#endif
62
63
#if !defined(HEAD3)
64
#if 1
65
#  define HEAD3(b,p) \
66
205M
    ((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
184M
#    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
40.7M
#  define NIL2              SWD_UINT_MAX
80
#endif
81
#ifndef IF_HEAD2
82
#define IF_HEAD2(s)         /*empty*/
83
#endif
84
85
86
typedef struct
87
{
88
/* public - "built-in" */
89
    lzo_uint swd_n;
90
    lzo_uint swd_f;
91
    lzo_uint swd_threshold;
92
93
/* public - configuration */
94
    lzo_uint max_chain;
95
    lzo_uint nice_length;
96
    lzo_bool use_best_off;
97
    lzo_uint lazy_insert;
98
99
/* public - output */
100
    lzo_uint m_len;
101
    lzo_uint m_off;
102
    lzo_uint look;
103
    int b_char;
104
#if defined(SWD_BEST_OFF)
105
    lzo_uint best_off[ SWD_BEST_OFF ];
106
#endif
107
108
/* semi public */
109
    LZO_COMPRESS_T *c;
110
    lzo_uint m_pos;
111
#if defined(SWD_BEST_OFF)
112
    lzo_uint best_pos[ SWD_BEST_OFF ];
113
#endif
114
115
/* private */
116
    const lzo_bytep dict;
117
    const lzo_bytep dict_end;
118
    lzo_uint dict_len;
119
120
/* private */
121
    lzo_uint ip;                /* input pointer (lookahead) */
122
    lzo_uint bp;                /* buffer pointer */
123
    lzo_uint rp;                /* remove pointer */
124
    lzo_uint b_size;
125
126
    lzo_bytep b_wrap;
127
128
    lzo_uint node_count;
129
    lzo_uint first_rp;
130
131
#if defined(__LZO_CHECKER)
132
    /* malloc arrays of the exact size to detect any overrun */
133
    unsigned char *b;
134
    swd_uint *head3;
135
    swd_uint *succ3;
136
    swd_uint *best3;
137
    swd_uint *llen3;
138
# ifdef HEAD2
139
    swd_uint *head2;
140
# endif
141
142
#else
143
    unsigned char b [ SWD_N + SWD_F + SWD_F ];
144
    swd_uint head3 [ SWD_HSIZE ];
145
    swd_uint succ3 [ SWD_N + SWD_F ];
146
    swd_uint best3 [ SWD_N + SWD_F ];
147
    swd_uint llen3 [ SWD_HSIZE ];
148
# ifdef HEAD2
149
    swd_uint head2 [ 65536L ];
150
# endif
151
#endif
152
}
153
lzo_swd_t;
154
6.32k
#define lzo_swd_p   lzo_swd_t *
155
156
157
249M
#define s_b(s)      s->b
158
236M
#define s_head3(s)  s->head3
159
152M
#define s_succ3(s)  s->succ3
160
144M
#define s_best3(s)  s->best3
161
330M
#define s_llen3(s)  s->llen3
162
#ifdef HEAD2
163
193M
#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
125M
        ((swd_uint)((s_llen3(s)[key] == 0) ? SWD_UINT_MAX : s_head3(s)[key]))
175
#else
176
#  define s_get_head3(s,key)    (s_head3(s)[key])
177
#endif
178
179
180
/***********************************************************************
181
//
182
************************************************************************/
183
184
static
185
void swd_initdict(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len)
186
6.32k
{
187
6.32k
    s->dict = s->dict_end = NULL;
188
6.32k
    s->dict_len = 0;
189
190
6.32k
    if (!dict || dict_len == 0)
191
6.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
}
lzo1b_9x.c:swd_initdict
Line
Count
Source
186
547
{
187
547
    s->dict = s->dict_end = NULL;
188
547
    s->dict_len = 0;
189
190
547
    if (!dict || dict_len == 0)
191
547
        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
628
{
187
628
    s->dict = s->dict_end = NULL;
188
628
    s->dict_len = 0;
189
190
628
    if (!dict || dict_len == 0)
191
628
        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
690
{
187
690
    s->dict = s->dict_end = NULL;
188
690
    s->dict_len = 0;
189
190
690
    if (!dict || dict_len == 0)
191
690
        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.15k
{
187
1.15k
    s->dict = s->dict_end = NULL;
188
1.15k
    s->dict_len = 0;
189
190
1.15k
    if (!dict || dict_len == 0)
191
1.15k
        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.17k
{
187
1.17k
    s->dict = s->dict_end = NULL;
188
1.17k
    s->dict_len = 0;
189
190
1.17k
    if (!dict || dict_len == 0)
191
1.17k
        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.45k
{
187
1.45k
    s->dict = s->dict_end = NULL;
188
1.45k
    s->dict_len = 0;
189
190
1.45k
    if (!dict || dict_len == 0)
191
1.45k
        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
679
{
187
679
    s->dict = s->dict_end = NULL;
188
679
    s->dict_len = 0;
189
190
679
    if (!dict || dict_len == 0)
191
679
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
204
205
206
static
207
void swd_insertdict(lzo_swd_p s, lzo_uint node, lzo_uint len)
208
0
{
209
0
    lzo_uint key;
210
211
0
    s->node_count = s->swd_n - len;
212
0
    s->first_rp = node;
213
214
0
    if (len) do
215
0
    {
216
0
        key = HEAD3(s_b(s),node);
217
0
        s_succ3(s)[node] = s_get_head3(s,key);
218
0
        s_head3(s)[key] = SWD_UINT(node);
219
0
        s_best3(s)[node] = SWD_UINT(s->swd_f + 1);
220
0
        s_llen3(s)[key]++;
221
0
        assert(s_llen3(s)[key] <= s->swd_n);
222
223
#ifdef HEAD2
224
        IF_HEAD2(s) {
225
0
            key = HEAD2(s_b(s),node);
226
0
            s_head2(s)[key] = SWD_UINT(node);
227
        }
228
#endif
229
230
0
        node++;
231
0
    }
232
0
    while (--len != 0);
233
0
}
Unexecuted instantiation: lzo1b_9x.c:swd_insertdict
Unexecuted instantiation: lzo1c_9x.c:swd_insertdict
Unexecuted instantiation: lzo1f_9x.c:swd_insertdict
Unexecuted instantiation: lzo1x_9x.c:swd_insertdict
Unexecuted instantiation: lzo1y_9x.c:swd_insertdict
Unexecuted instantiation: lzo1z_9x.c:swd_insertdict
Unexecuted instantiation: lzo2a_9x.c:swd_insertdict
234
235
236
/***********************************************************************
237
//
238
************************************************************************/
239
240
static void swd_exit(lzo_swd_p s);
241
242
static
243
int swd_init(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len)
244
6.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
6.32k
    s->m_len = 0;
270
6.32k
    s->m_off = 0;
271
#if defined(SWD_BEST_OFF)
272
    {
273
        unsigned i;
274
132k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
128k
            s->best_off[i] = s->best_pos[i] = 0;
276
    }
277
#endif
278
279
6.32k
    s->swd_n = SWD_N;
280
6.32k
    s->swd_f = SWD_F;
281
6.32k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
6.32k
    s->max_chain = SWD_MAX_CHAIN;
285
6.32k
    s->nice_length = s->swd_f;
286
6.32k
    s->use_best_off = 0;
287
6.32k
    s->lazy_insert = 0;
288
289
6.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
6.32k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
6.32k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
6.32k
#endif
297
6.32k
    s->b_wrap = s_b(s) + s->b_size;
298
6.32k
    s->node_count = s->swd_n;
299
300
6.32k
    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.45k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
    }
312
#endif
313
314
6.32k
    s->ip = 0;
315
6.32k
    swd_initdict(s,dict,dict_len);
316
6.32k
    s->bp = s->ip;
317
6.32k
    s->first_rp = s->ip;
318
319
6.32k
    assert(s->ip + s->swd_f <= s->b_size);
320
6.32k
#if 1
321
6.32k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
6.32k
    if (s->look > 0)
323
6.31k
    {
324
6.31k
        if (s->look > s->swd_f)
325
2.15k
            s->look = s->swd_f;
326
6.31k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
6.31k
        s->c->ip += s->look;
328
6.31k
        s->ip += s->look;
329
6.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
6.32k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
6.32k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
6.32k
    s->rp = s->first_rp;
349
6.32k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
6.32k
    else
352
6.32k
        s->rp += s->b_size - s->node_count;
353
354
6.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
6.32k
    if (s->look < 3) {
358
81
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
81
        p[0] = p[1] = p[2] = 0;
360
81
    }
361
6.32k
#endif
362
363
6.32k
    return LZO_E_OK;
364
6.32k
}
lzo1b_9x.c:swd_init
Line
Count
Source
244
547
{
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
547
    s->m_len = 0;
270
547
    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
547
    s->swd_n = SWD_N;
280
547
    s->swd_f = SWD_F;
281
547
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
547
    s->max_chain = SWD_MAX_CHAIN;
285
547
    s->nice_length = s->swd_f;
286
547
    s->use_best_off = 0;
287
547
    s->lazy_insert = 0;
288
289
547
    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
547
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
547
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
547
#endif
297
547
    s->b_wrap = s_b(s) + s->b_size;
298
547
    s->node_count = s->swd_n;
299
300
547
    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
547
    s->ip = 0;
315
547
    swd_initdict(s,dict,dict_len);
316
547
    s->bp = s->ip;
317
547
    s->first_rp = s->ip;
318
319
547
    assert(s->ip + s->swd_f <= s->b_size);
320
547
#if 1
321
547
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
547
    if (s->look > 0)
323
546
    {
324
546
        if (s->look > s->swd_f)
325
172
            s->look = s->swd_f;
326
546
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
546
        s->c->ip += s->look;
328
546
        s->ip += s->look;
329
546
    }
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
547
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
547
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
547
    s->rp = s->first_rp;
349
547
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
547
    else
352
547
        s->rp += s->b_size - s->node_count;
353
354
547
#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
547
    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
547
#endif
362
363
547
    return LZO_E_OK;
364
547
}
lzo1c_9x.c:swd_init
Line
Count
Source
244
628
{
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
628
    s->m_len = 0;
270
628
    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
628
    s->swd_n = SWD_N;
280
628
    s->swd_f = SWD_F;
281
628
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
628
    s->max_chain = SWD_MAX_CHAIN;
285
628
    s->nice_length = s->swd_f;
286
628
    s->use_best_off = 0;
287
628
    s->lazy_insert = 0;
288
289
628
    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
628
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
628
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
628
#endif
297
628
    s->b_wrap = s_b(s) + s->b_size;
298
628
    s->node_count = s->swd_n;
299
300
628
    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
628
    s->ip = 0;
315
628
    swd_initdict(s,dict,dict_len);
316
628
    s->bp = s->ip;
317
628
    s->first_rp = s->ip;
318
319
628
    assert(s->ip + s->swd_f <= s->b_size);
320
628
#if 1
321
628
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
628
    if (s->look > 0)
323
627
    {
324
627
        if (s->look > s->swd_f)
325
190
            s->look = s->swd_f;
326
627
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
627
        s->c->ip += s->look;
328
627
        s->ip += s->look;
329
627
    }
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
628
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
628
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
628
    s->rp = s->first_rp;
349
628
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
628
    else
352
628
        s->rp += s->b_size - s->node_count;
353
354
628
#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
628
    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
628
#endif
362
363
628
    return LZO_E_OK;
364
628
}
lzo1f_9x.c:swd_init
Line
Count
Source
244
690
{
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
690
    s->m_len = 0;
270
690
    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
690
    s->swd_n = SWD_N;
280
690
    s->swd_f = SWD_F;
281
690
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
690
    s->max_chain = SWD_MAX_CHAIN;
285
690
    s->nice_length = s->swd_f;
286
690
    s->use_best_off = 0;
287
690
    s->lazy_insert = 0;
288
289
690
    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
690
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
690
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
690
#endif
297
690
    s->b_wrap = s_b(s) + s->b_size;
298
690
    s->node_count = s->swd_n;
299
300
690
    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
690
    s->ip = 0;
315
690
    swd_initdict(s,dict,dict_len);
316
690
    s->bp = s->ip;
317
690
    s->first_rp = s->ip;
318
319
690
    assert(s->ip + s->swd_f <= s->b_size);
320
690
#if 1
321
690
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
690
    if (s->look > 0)
323
689
    {
324
689
        if (s->look > s->swd_f)
325
223
            s->look = s->swd_f;
326
689
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
689
        s->c->ip += s->look;
328
689
        s->ip += s->look;
329
689
    }
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
690
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
690
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
690
    s->rp = s->first_rp;
349
690
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
690
    else
352
690
        s->rp += s->b_size - s->node_count;
353
354
690
#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
690
    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
690
#endif
362
363
690
    return LZO_E_OK;
364
690
}
lzo1x_9x.c:swd_init
Line
Count
Source
244
1.15k
{
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.15k
    s->m_len = 0;
270
1.15k
    s->m_off = 0;
271
1.15k
#if defined(SWD_BEST_OFF)
272
1.15k
    {
273
1.15k
        unsigned i;
274
40.3k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
39.2k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.15k
    }
277
1.15k
#endif
278
279
1.15k
    s->swd_n = SWD_N;
280
1.15k
    s->swd_f = SWD_F;
281
1.15k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.15k
    s->max_chain = SWD_MAX_CHAIN;
285
1.15k
    s->nice_length = s->swd_f;
286
1.15k
    s->use_best_off = 0;
287
1.15k
    s->lazy_insert = 0;
288
289
1.15k
    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.15k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.15k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.15k
#endif
297
1.15k
    s->b_wrap = s_b(s) + s->b_size;
298
1.15k
    s->node_count = s->swd_n;
299
300
1.15k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.15k
#ifdef HEAD2
302
1.15k
    IF_HEAD2(s) {
303
1.15k
#if 1
304
1.15k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.15k
        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.15k
    }
312
1.15k
#endif
313
314
1.15k
    s->ip = 0;
315
1.15k
    swd_initdict(s,dict,dict_len);
316
1.15k
    s->bp = s->ip;
317
1.15k
    s->first_rp = s->ip;
318
319
1.15k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.15k
#if 1
321
1.15k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.15k
    if (s->look > 0)
323
1.15k
    {
324
1.15k
        if (s->look > s->swd_f)
325
465
            s->look = s->swd_f;
326
1.15k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.15k
        s->c->ip += s->look;
328
1.15k
        s->ip += s->look;
329
1.15k
    }
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.15k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.15k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.15k
    s->rp = s->first_rp;
349
1.15k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.15k
    else
352
1.15k
        s->rp += s->b_size - s->node_count;
353
354
1.15k
#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.15k
    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.15k
#endif
362
363
1.15k
    return LZO_E_OK;
364
1.15k
}
lzo1y_9x.c:swd_init
Line
Count
Source
244
1.17k
{
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.17k
    s->m_len = 0;
270
1.17k
    s->m_off = 0;
271
1.17k
#if defined(SWD_BEST_OFF)
272
1.17k
    {
273
1.17k
        unsigned i;
274
41.0k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
39.8k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.17k
    }
277
1.17k
#endif
278
279
1.17k
    s->swd_n = SWD_N;
280
1.17k
    s->swd_f = SWD_F;
281
1.17k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.17k
    s->max_chain = SWD_MAX_CHAIN;
285
1.17k
    s->nice_length = s->swd_f;
286
1.17k
    s->use_best_off = 0;
287
1.17k
    s->lazy_insert = 0;
288
289
1.17k
    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.17k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.17k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.17k
#endif
297
1.17k
    s->b_wrap = s_b(s) + s->b_size;
298
1.17k
    s->node_count = s->swd_n;
299
300
1.17k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.17k
#ifdef HEAD2
302
1.17k
    IF_HEAD2(s) {
303
1.17k
#if 1
304
1.17k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.17k
        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.17k
    }
312
1.17k
#endif
313
314
1.17k
    s->ip = 0;
315
1.17k
    swd_initdict(s,dict,dict_len);
316
1.17k
    s->bp = s->ip;
317
1.17k
    s->first_rp = s->ip;
318
319
1.17k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.17k
#if 1
321
1.17k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.17k
    if (s->look > 0)
323
1.17k
    {
324
1.17k
        if (s->look > s->swd_f)
325
426
            s->look = s->swd_f;
326
1.17k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.17k
        s->c->ip += s->look;
328
1.17k
        s->ip += s->look;
329
1.17k
    }
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.17k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.17k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.17k
    s->rp = s->first_rp;
349
1.17k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.17k
    else
352
1.17k
        s->rp += s->b_size - s->node_count;
353
354
1.17k
#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.17k
    if (s->look < 3) {
358
12
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
12
        p[0] = p[1] = p[2] = 0;
360
12
    }
361
1.17k
#endif
362
363
1.17k
    return LZO_E_OK;
364
1.17k
}
lzo1z_9x.c:swd_init
Line
Count
Source
244
1.45k
{
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.45k
    s->m_len = 0;
270
1.45k
    s->m_off = 0;
271
1.45k
#if defined(SWD_BEST_OFF)
272
1.45k
    {
273
1.45k
        unsigned i;
274
50.7k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
49.3k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.45k
    }
277
1.45k
#endif
278
279
1.45k
    s->swd_n = SWD_N;
280
1.45k
    s->swd_f = SWD_F;
281
1.45k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.45k
    s->max_chain = SWD_MAX_CHAIN;
285
1.45k
    s->nice_length = s->swd_f;
286
1.45k
    s->use_best_off = 0;
287
1.45k
    s->lazy_insert = 0;
288
289
1.45k
    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.45k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.45k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.45k
#endif
297
1.45k
    s->b_wrap = s_b(s) + s->b_size;
298
1.45k
    s->node_count = s->swd_n;
299
300
1.45k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.45k
#ifdef HEAD2
302
1.45k
    IF_HEAD2(s) {
303
1.45k
#if 1
304
1.45k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.45k
        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.45k
    }
312
1.45k
#endif
313
314
1.45k
    s->ip = 0;
315
1.45k
    swd_initdict(s,dict,dict_len);
316
1.45k
    s->bp = s->ip;
317
1.45k
    s->first_rp = s->ip;
318
319
1.45k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.45k
#if 1
321
1.45k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.45k
    if (s->look > 0)
323
1.44k
    {
324
1.44k
        if (s->look > s->swd_f)
325
522
            s->look = s->swd_f;
326
1.44k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.44k
        s->c->ip += s->look;
328
1.44k
        s->ip += s->look;
329
1.44k
    }
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.45k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.45k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.45k
    s->rp = s->first_rp;
349
1.45k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.45k
    else
352
1.45k
        s->rp += s->b_size - s->node_count;
353
354
1.45k
#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.45k
    if (s->look < 3) {
358
12
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
12
        p[0] = p[1] = p[2] = 0;
360
12
    }
361
1.45k
#endif
362
363
1.45k
    return LZO_E_OK;
364
1.45k
}
lzo2a_9x.c:swd_init
Line
Count
Source
244
679
{
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
679
    s->m_len = 0;
270
679
    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
679
    s->swd_n = SWD_N;
280
679
    s->swd_f = SWD_F;
281
679
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
679
    s->max_chain = SWD_MAX_CHAIN;
285
679
    s->nice_length = s->swd_f;
286
679
    s->use_best_off = 0;
287
679
    s->lazy_insert = 0;
288
289
679
    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
679
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
679
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
679
#endif
297
679
    s->b_wrap = s_b(s) + s->b_size;
298
679
    s->node_count = s->swd_n;
299
300
679
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
679
#ifdef HEAD2
302
679
    IF_HEAD2(s) {
303
679
#if 1
304
679
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
679
        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
679
    }
312
679
#endif
313
314
679
    s->ip = 0;
315
679
    swd_initdict(s,dict,dict_len);
316
679
    s->bp = s->ip;
317
679
    s->first_rp = s->ip;
318
319
679
    assert(s->ip + s->swd_f <= s->b_size);
320
679
#if 1
321
679
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
679
    if (s->look > 0)
323
678
    {
324
678
        if (s->look > s->swd_f)
325
157
            s->look = s->swd_f;
326
678
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
678
        s->c->ip += s->look;
328
678
        s->ip += s->look;
329
678
    }
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
679
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
679
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
679
    s->rp = s->first_rp;
349
679
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
679
    else
352
679
        s->rp += s->b_size - s->node_count;
353
354
679
#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
679
    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
679
#endif
362
363
679
    return LZO_E_OK;
364
679
}
365
366
367
static
368
void swd_exit(lzo_swd_p s)
369
6.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
6.32k
    LZO_UNUSED(s);
382
6.32k
#endif
383
6.32k
}
lzo1b_9x.c:swd_exit
Line
Count
Source
369
547
{
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
547
    LZO_UNUSED(s);
382
547
#endif
383
547
}
lzo1c_9x.c:swd_exit
Line
Count
Source
369
628
{
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
628
    LZO_UNUSED(s);
382
628
#endif
383
628
}
lzo1f_9x.c:swd_exit
Line
Count
Source
369
690
{
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
690
    LZO_UNUSED(s);
382
690
#endif
383
690
}
lzo1x_9x.c:swd_exit
Line
Count
Source
369
1.15k
{
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.15k
    LZO_UNUSED(s);
382
1.15k
#endif
383
1.15k
}
lzo1y_9x.c:swd_exit
Line
Count
Source
369
1.17k
{
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.17k
    LZO_UNUSED(s);
382
1.17k
#endif
383
1.17k
}
lzo1z_9x.c:swd_exit
Line
Count
Source
369
1.45k
{
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.45k
    LZO_UNUSED(s);
382
1.45k
#endif
383
1.45k
}
lzo2a_9x.c:swd_exit
Line
Count
Source
369
679
{
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
679
    LZO_UNUSED(s);
382
679
#endif
383
679
}
384
385
386
#define swd_pos2off(s,pos) \
387
43.8M
    (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
125M
{
397
125M
    int c;
398
399
125M
    if ((c = getbyte(*(s->c))) < 0)
400
5.78M
    {
401
5.78M
        if (s->look > 0)
402
5.78M
            --s->look;
403
5.78M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
5.78M
        s_b(s)[s->ip] = 0;
406
5.78M
        if (s->ip < s->swd_f)
407
1.33M
            s->b_wrap[s->ip] = 0;
408
5.78M
#endif
409
5.78M
    }
410
119M
    else
411
119M
    {
412
119M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
119M
        if (s->ip < s->swd_f)
414
5.70M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
119M
    }
416
125M
    if (++s->ip == s->b_size)
417
3.15k
        s->ip = 0;
418
125M
    if (++s->bp == s->b_size)
419
2.94k
        s->bp = 0;
420
125M
    if (++s->rp == s->b_size)
421
3.15k
        s->rp = 0;
422
125M
}
lzo1b_9x.c:swd_getbyte
Line
Count
Source
396
10.3M
{
397
10.3M
    int c;
398
399
10.3M
    if ((c = getbyte(*(s->c))) < 0)
400
455k
    {
401
455k
        if (s->look > 0)
402
454k
            --s->look;
403
455k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
455k
        s_b(s)[s->ip] = 0;
406
455k
        if (s->ip < s->swd_f)
407
117k
            s->b_wrap[s->ip] = 0;
408
455k
#endif
409
455k
    }
410
9.85M
    else
411
9.85M
    {
412
9.85M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
9.85M
        if (s->ip < s->swd_f)
414
170k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
9.85M
    }
416
10.3M
    if (++s->ip == s->b_size)
417
122
        s->ip = 0;
418
10.3M
    if (++s->bp == s->b_size)
419
101
        s->bp = 0;
420
10.3M
    if (++s->rp == s->b_size)
421
122
        s->rp = 0;
422
10.3M
}
lzo1c_9x.c:swd_getbyte
Line
Count
Source
396
9.25M
{
397
9.25M
    int c;
398
399
9.25M
    if ((c = getbyte(*(s->c))) < 0)
400
527k
    {
401
527k
        if (s->look > 0)
402
527k
            --s->look;
403
527k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
527k
        s_b(s)[s->ip] = 0;
406
527k
        if (s->ip < s->swd_f)
407
151k
            s->b_wrap[s->ip] = 0;
408
527k
#endif
409
527k
    }
410
8.72M
    else
411
8.72M
    {
412
8.72M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
8.72M
        if (s->ip < s->swd_f)
414
822k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
8.72M
    }
416
9.25M
    if (++s->ip == s->b_size)
417
450
        s->ip = 0;
418
9.25M
    if (++s->bp == s->b_size)
419
428
        s->bp = 0;
420
9.25M
    if (++s->rp == s->b_size)
421
450
        s->rp = 0;
422
9.25M
}
lzo1f_9x.c:swd_getbyte
Line
Count
Source
396
11.4M
{
397
11.4M
    int c;
398
399
11.4M
    if ((c = getbyte(*(s->c))) < 0)
400
596k
    {
401
596k
        if (s->look > 0)
402
595k
            --s->look;
403
596k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
596k
        s_b(s)[s->ip] = 0;
406
596k
        if (s->ip < s->swd_f)
407
144k
            s->b_wrap[s->ip] = 0;
408
596k
#endif
409
596k
    }
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
1.06M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
10.8M
    }
416
11.4M
    if (++s->ip == s->b_size)
417
572
        s->ip = 0;
418
11.4M
    if (++s->bp == s->b_size)
419
543
        s->bp = 0;
420
11.4M
    if (++s->rp == s->b_size)
421
572
        s->rp = 0;
422
11.4M
}
lzo1x_9x.c:swd_getbyte
Line
Count
Source
396
23.7M
{
397
23.7M
    int c;
398
399
23.7M
    if ((c = getbyte(*(s->c))) < 0)
400
1.15M
    {
401
1.15M
        if (s->look > 0)
402
1.14M
            --s->look;
403
1.15M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.15M
        s_b(s)[s->ip] = 0;
406
1.15M
        if (s->ip < s->swd_f)
407
209k
            s->b_wrap[s->ip] = 0;
408
1.15M
#endif
409
1.15M
    }
410
22.5M
    else
411
22.5M
    {
412
22.5M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
22.5M
        if (s->ip < s->swd_f)
414
608k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
22.5M
    }
416
23.7M
    if (++s->ip == s->b_size)
417
348
        s->ip = 0;
418
23.7M
    if (++s->bp == s->b_size)
419
318
        s->bp = 0;
420
23.7M
    if (++s->rp == s->b_size)
421
348
        s->rp = 0;
422
23.7M
}
lzo1y_9x.c:swd_getbyte
Line
Count
Source
396
30.8M
{
397
30.8M
    int c;
398
399
30.8M
    if ((c = getbyte(*(s->c))) < 0)
400
1.17M
    {
401
1.17M
        if (s->look > 0)
402
1.17M
            --s->look;
403
1.17M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.17M
        s_b(s)[s->ip] = 0;
406
1.17M
        if (s->ip < s->swd_f)
407
271k
            s->b_wrap[s->ip] = 0;
408
1.17M
#endif
409
1.17M
    }
410
29.7M
    else
411
29.7M
    {
412
29.7M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
29.7M
        if (s->ip < s->swd_f)
414
877k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
29.7M
    }
416
30.8M
    if (++s->ip == s->b_size)
417
486
        s->ip = 0;
418
30.8M
    if (++s->bp == s->b_size)
419
454
        s->bp = 0;
420
30.8M
    if (++s->rp == s->b_size)
421
486
        s->rp = 0;
422
30.8M
}
lzo1z_9x.c:swd_getbyte
Line
Count
Source
396
32.0M
{
397
32.0M
    int c;
398
399
32.0M
    if ((c = getbyte(*(s->c))) < 0)
400
1.42M
    {
401
1.42M
        if (s->look > 0)
402
1.42M
            --s->look;
403
1.42M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.42M
        s_b(s)[s->ip] = 0;
406
1.42M
        if (s->ip < s->swd_f)
407
269k
            s->b_wrap[s->ip] = 0;
408
1.42M
#endif
409
1.42M
    }
410
30.6M
    else
411
30.6M
    {
412
30.6M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
30.6M
        if (s->ip < s->swd_f)
414
888k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
30.6M
    }
416
32.0M
    if (++s->ip == s->b_size)
417
491
        s->ip = 0;
418
32.0M
    if (++s->bp == s->b_size)
419
459
        s->bp = 0;
420
32.0M
    if (++s->rp == s->b_size)
421
491
        s->rp = 0;
422
32.0M
}
lzo2a_9x.c:swd_getbyte
Line
Count
Source
396
7.40M
{
397
7.40M
    int c;
398
399
7.40M
    if ((c = getbyte(*(s->c))) < 0)
400
457k
    {
401
457k
        if (s->look > 0)
402
456k
            --s->look;
403
457k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
457k
        s_b(s)[s->ip] = 0;
406
457k
        if (s->ip < s->swd_f)
407
169k
            s->b_wrap[s->ip] = 0;
408
457k
#endif
409
457k
    }
410
6.94M
    else
411
6.94M
    {
412
6.94M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
6.94M
        if (s->ip < s->swd_f)
414
1.26M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
6.94M
    }
416
7.40M
    if (++s->ip == s->b_size)
417
690
        s->ip = 0;
418
7.40M
    if (++s->bp == s->b_size)
419
644
        s->bp = 0;
420
7.40M
    if (++s->rp == s->b_size)
421
690
        s->rp = 0;
422
7.40M
}
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
125M
{
432
125M
    if (s->node_count == 0)
433
80.2M
    {
434
80.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
80.2M
        key = HEAD3(s_b(s),node);
450
80.2M
        assert(s_llen3(s)[key] > 0);
451
80.2M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
59.0M
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
59.0M
            if ((lzo_uint) s_head2(s)[key] == node)
458
9.81M
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
80.2M
    }
462
44.8M
    else
463
44.8M
        --s->node_count;
464
125M
}
lzo1b_9x.c:swd_remove_node
Line
Count
Source
431
10.3M
{
432
10.3M
    if (s->node_count == 0)
433
4.87M
    {
434
4.87M
        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
4.87M
        key = HEAD3(s_b(s),node);
450
4.87M
        assert(s_llen3(s)[key] > 0);
451
4.87M
        --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
4.87M
    }
462
5.43M
    else
463
5.43M
        --s->node_count;
464
10.3M
}
lzo1c_9x.c:swd_remove_node
Line
Count
Source
431
9.25M
{
432
9.25M
    if (s->node_count == 0)
433
7.11M
    {
434
7.11M
        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.11M
        key = HEAD3(s_b(s),node);
450
7.11M
        assert(s_llen3(s)[key] > 0);
451
7.11M
        --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
7.11M
    }
462
2.13M
    else
463
2.13M
        --s->node_count;
464
9.25M
}
lzo1f_9x.c:swd_remove_node
Line
Count
Source
431
11.4M
{
432
11.4M
    if (s->node_count == 0)
433
9.29M
    {
434
9.29M
        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
9.29M
        key = HEAD3(s_b(s),node);
450
9.29M
        assert(s_llen3(s)[key] > 0);
451
9.29M
        --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
9.29M
    }
462
2.16M
    else
463
2.16M
        --s->node_count;
464
11.4M
}
lzo1x_9x.c:swd_remove_node
Line
Count
Source
431
23.7M
{
432
23.7M
    if (s->node_count == 0)
433
13.2M
    {
434
13.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
13.2M
        key = HEAD3(s_b(s),node);
450
13.2M
        assert(s_llen3(s)[key] > 0);
451
13.2M
        --s_llen3(s)[key];
452
453
13.2M
#ifdef HEAD2
454
13.2M
        IF_HEAD2(s) {
455
13.2M
            key = HEAD2(s_b(s),node);
456
13.2M
            assert(s_head2(s)[key] != NIL2);
457
13.2M
            if ((lzo_uint) s_head2(s)[key] == node)
458
2.08M
                s_head2(s)[key] = NIL2;
459
13.2M
        }
460
13.2M
#endif
461
13.2M
    }
462
10.4M
    else
463
10.4M
        --s->node_count;
464
23.7M
}
lzo1y_9x.c:swd_remove_node
Line
Count
Source
431
30.8M
{
432
30.8M
    if (s->node_count == 0)
433
19.6M
    {
434
19.6M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
19.6M
        key = HEAD3(s_b(s),node);
450
19.6M
        assert(s_llen3(s)[key] > 0);
451
19.6M
        --s_llen3(s)[key];
452
453
19.6M
#ifdef HEAD2
454
19.6M
        IF_HEAD2(s) {
455
19.6M
            key = HEAD2(s_b(s),node);
456
19.6M
            assert(s_head2(s)[key] != NIL2);
457
19.6M
            if ((lzo_uint) s_head2(s)[key] == node)
458
3.93M
                s_head2(s)[key] = NIL2;
459
19.6M
        }
460
19.6M
#endif
461
19.6M
    }
462
11.2M
    else
463
11.2M
        --s->node_count;
464
30.8M
}
lzo1z_9x.c:swd_remove_node
Line
Count
Source
431
32.0M
{
432
32.0M
    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
2.85M
                s_head2(s)[key] = NIL2;
459
19.8M
        }
460
19.8M
#endif
461
19.8M
    }
462
12.2M
    else
463
12.2M
        --s->node_count;
464
32.0M
}
lzo2a_9x.c:swd_remove_node
Line
Count
Source
431
7.40M
{
432
7.40M
    if (s->node_count == 0)
433
6.29M
    {
434
6.29M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
6.29M
        key = HEAD3(s_b(s),node);
450
6.29M
        assert(s_llen3(s)[key] > 0);
451
6.29M
        --s_llen3(s)[key];
452
453
6.29M
#ifdef HEAD2
454
6.29M
        IF_HEAD2(s) {
455
6.29M
            key = HEAD2(s_b(s),node);
456
6.29M
            assert(s_head2(s)[key] != NIL2);
457
6.29M
            if ((lzo_uint) s_head2(s)[key] == node)
458
950k
                s_head2(s)[key] = NIL2;
459
6.29M
        }
460
6.29M
#endif
461
6.29M
    }
462
1.11M
    else
463
1.11M
        --s->node_count;
464
7.40M
}
465
466
467
/***********************************************************************
468
//
469
************************************************************************/
470
471
static
472
void swd_accept(lzo_swd_p s, lzo_uint n)
473
2.54M
{
474
2.54M
    assert(n <= s->look);
475
476
2.54M
    if (n) do
477
82.1M
    {
478
82.1M
        lzo_uint key;
479
480
82.1M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
82.1M
        key = HEAD3(s_b(s),s->bp);
484
82.1M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
82.1M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
82.1M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
82.1M
        s_llen3(s)[key]++;
488
82.1M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
63.1M
            key = HEAD2(s_b(s),s->bp);
494
63.1M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
82.1M
        swd_getbyte(s);
499
82.1M
    } while (--n != 0);
500
2.54M
}
lzo1b_9x.c:swd_accept
Line
Count
Source
473
127k
{
474
127k
    assert(n <= s->look);
475
476
127k
    if (n) do
477
7.13M
    {
478
7.13M
        lzo_uint key;
479
480
7.13M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
7.13M
        key = HEAD3(s_b(s),s->bp);
484
7.13M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
7.13M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
7.13M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
7.13M
        s_llen3(s)[key]++;
488
7.13M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
            key = HEAD2(s_b(s),s->bp);
494
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
7.13M
        swd_getbyte(s);
499
7.13M
    } while (--n != 0);
500
127k
}
lzo1c_9x.c:swd_accept
Line
Count
Source
473
158k
{
474
158k
    assert(n <= s->look);
475
476
158k
    if (n) do
477
5.16M
    {
478
5.16M
        lzo_uint key;
479
480
5.16M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
5.16M
        key = HEAD3(s_b(s),s->bp);
484
5.16M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
5.16M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
5.16M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
5.16M
        s_llen3(s)[key]++;
488
5.16M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
            key = HEAD2(s_b(s),s->bp);
494
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
5.16M
        swd_getbyte(s);
499
5.16M
    } while (--n != 0);
500
158k
}
lzo1f_9x.c:swd_accept
Line
Count
Source
473
144k
{
474
144k
    assert(n <= s->look);
475
476
144k
    if (n) do
477
6.68M
    {
478
6.68M
        lzo_uint key;
479
480
6.68M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
6.68M
        key = HEAD3(s_b(s),s->bp);
484
6.68M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
6.68M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
6.68M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
6.68M
        s_llen3(s)[key]++;
488
6.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
6.68M
        swd_getbyte(s);
499
6.68M
    } while (--n != 0);
500
144k
}
lzo1x_9x.c:swd_accept
Line
Count
Source
473
574k
{
474
574k
    assert(n <= s->look);
475
476
574k
    if (n) do
477
16.1M
    {
478
16.1M
        lzo_uint key;
479
480
16.1M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
16.1M
        key = HEAD3(s_b(s),s->bp);
484
16.1M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
16.1M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
16.1M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
16.1M
        s_llen3(s)[key]++;
488
16.1M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
16.1M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
16.1M
        IF_HEAD2(s) {
493
16.1M
            key = HEAD2(s_b(s),s->bp);
494
16.1M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
16.1M
        }
496
16.1M
#endif
497
498
16.1M
        swd_getbyte(s);
499
16.1M
    } while (--n != 0);
500
574k
}
lzo1y_9x.c:swd_accept
Line
Count
Source
473
609k
{
474
609k
    assert(n <= s->look);
475
476
609k
    if (n) do
477
19.1M
    {
478
19.1M
        lzo_uint key;
479
480
19.1M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
19.1M
        key = HEAD3(s_b(s),s->bp);
484
19.1M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
19.1M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
19.1M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
19.1M
        s_llen3(s)[key]++;
488
19.1M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
19.1M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
19.1M
        IF_HEAD2(s) {
493
19.1M
            key = HEAD2(s_b(s),s->bp);
494
19.1M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
19.1M
        }
496
19.1M
#endif
497
498
19.1M
        swd_getbyte(s);
499
19.1M
    } while (--n != 0);
500
609k
}
lzo1z_9x.c:swd_accept
Line
Count
Source
473
809k
{
474
809k
    assert(n <= s->look);
475
476
809k
    if (n) do
477
22.0M
    {
478
22.0M
        lzo_uint key;
479
480
22.0M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
22.0M
        key = HEAD3(s_b(s),s->bp);
484
22.0M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
22.0M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
22.0M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
22.0M
        s_llen3(s)[key]++;
488
22.0M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
22.0M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
22.0M
        IF_HEAD2(s) {
493
22.0M
            key = HEAD2(s_b(s),s->bp);
494
22.0M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
22.0M
        }
496
22.0M
#endif
497
498
22.0M
        swd_getbyte(s);
499
22.0M
    } while (--n != 0);
500
809k
}
lzo2a_9x.c:swd_accept
Line
Count
Source
473
124k
{
474
124k
    assert(n <= s->look);
475
476
124k
    if (n) do
477
5.83M
    {
478
5.83M
        lzo_uint key;
479
480
5.83M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
5.83M
        key = HEAD3(s_b(s),s->bp);
484
5.83M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
5.83M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
5.83M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
5.83M
        s_llen3(s)[key]++;
488
5.83M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
5.83M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
5.83M
        IF_HEAD2(s) {
493
5.83M
            key = HEAD2(s_b(s),s->bp);
494
5.83M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
5.83M
        }
496
5.83M
#endif
497
498
5.83M
        swd_getbyte(s);
499
5.83M
    } while (--n != 0);
500
124k
}
501
502
503
/***********************************************************************
504
//
505
************************************************************************/
506
507
static
508
void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt)
509
27.1M
{
510
27.1M
    const lzo_bytep p1;
511
27.1M
    const lzo_bytep p2;
512
27.1M
    const lzo_bytep px;
513
27.1M
    lzo_uint m_len = s->m_len;
514
27.1M
    const lzo_bytep b  = s_b(s);
515
27.1M
    const lzo_bytep bp = s_b(s) + s->bp;
516
27.1M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
27.1M
    swd_uintp succ3 = s_succ3(s);
518
27.1M
    unsigned char scan_end1;
519
520
27.1M
    assert(s->m_len > 0);
521
522
27.1M
    scan_end1 = bp[m_len - 1];
523
1.96G
    for ( ; cnt-- > 0; node = succ3[node])
524
1.93G
    {
525
1.93G
        p1 = bp;
526
1.93G
        p2 = b + node;
527
1.93G
        px = bx;
528
529
1.93G
        assert(m_len < s->look);
530
531
1.93G
        if (
532
1.93G
#if 1
533
1.93G
            p2[m_len - 1] == scan_end1 &&
534
1.93G
            p2[m_len] == p1[m_len] &&
535
1.93G
#endif
536
1.93G
            p2[0] == p1[0] &&
537
1.93G
            p2[1] == p1[1])
538
154M
        {
539
154M
            lzo_uint i;
540
154M
            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
154M
            p1 += 2; p2 += 2;
550
3.40G
            do {} while (++p1 < px && *p1 == *++p2);
551
154M
#endif
552
154M
            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
154M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
142M
            if (i < SWD_BEST_OFF)
564
136M
            {
565
136M
                if (s->best_pos[i] == 0)
566
13.1M
                    s->best_pos[i] = node + 1;
567
136M
            }
568
#endif
569
154M
            if (i > m_len)
570
19.4M
            {
571
19.4M
                s->m_len = m_len = i;
572
19.4M
                s->m_pos = node;
573
19.4M
                if (m_len == s->look)
574
23.2k
                    return;
575
19.4M
                if (m_len >= s->nice_length)
576
0
                    return;
577
19.4M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
1.22M
                    return;
579
18.1M
                scan_end1 = bp[m_len - 1];
580
18.1M
            }
581
154M
        }
582
1.93G
    }
583
27.1M
}
lzo1b_9x.c:swd_search
Line
Count
Source
509
3.17M
{
510
3.17M
    const lzo_bytep p1;
511
3.17M
    const lzo_bytep p2;
512
3.17M
    const lzo_bytep px;
513
3.17M
    lzo_uint m_len = s->m_len;
514
3.17M
    const lzo_bytep b  = s_b(s);
515
3.17M
    const lzo_bytep bp = s_b(s) + s->bp;
516
3.17M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
3.17M
    swd_uintp succ3 = s_succ3(s);
518
3.17M
    unsigned char scan_end1;
519
520
3.17M
    assert(s->m_len > 0);
521
522
3.17M
    scan_end1 = bp[m_len - 1];
523
57.2M
    for ( ; cnt-- > 0; node = succ3[node])
524
54.1M
    {
525
54.1M
        p1 = bp;
526
54.1M
        p2 = b + node;
527
54.1M
        px = bx;
528
529
54.1M
        assert(m_len < s->look);
530
531
54.1M
        if (
532
54.1M
#if 1
533
54.1M
            p2[m_len - 1] == scan_end1 &&
534
54.1M
            p2[m_len] == p1[m_len] &&
535
54.1M
#endif
536
54.1M
            p2[0] == p1[0] &&
537
54.1M
            p2[1] == p1[1])
538
2.48M
        {
539
2.48M
            lzo_uint i;
540
2.48M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
2.48M
            p1 += 2; p2 += 2;
550
212M
            do {} while (++p1 < px && *p1 == *++p2);
551
2.48M
#endif
552
2.48M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
2.48M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
            if (i < SWD_BEST_OFF)
564
            {
565
                if (s->best_pos[i] == 0)
566
                    s->best_pos[i] = node + 1;
567
            }
568
#endif
569
2.48M
            if (i > m_len)
570
912k
            {
571
912k
                s->m_len = m_len = i;
572
912k
                s->m_pos = node;
573
912k
                if (m_len == s->look)
574
1.91k
                    return;
575
910k
                if (m_len >= s->nice_length)
576
0
                    return;
577
910k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
57.6k
                    return;
579
852k
                scan_end1 = bp[m_len - 1];
580
852k
            }
581
2.48M
        }
582
54.1M
    }
583
3.17M
}
lzo1c_9x.c:swd_search
Line
Count
Source
509
4.08M
{
510
4.08M
    const lzo_bytep p1;
511
4.08M
    const lzo_bytep p2;
512
4.08M
    const lzo_bytep px;
513
4.08M
    lzo_uint m_len = s->m_len;
514
4.08M
    const lzo_bytep b  = s_b(s);
515
4.08M
    const lzo_bytep bp = s_b(s) + s->bp;
516
4.08M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
4.08M
    swd_uintp succ3 = s_succ3(s);
518
4.08M
    unsigned char scan_end1;
519
520
4.08M
    assert(s->m_len > 0);
521
522
4.08M
    scan_end1 = bp[m_len - 1];
523
86.6M
    for ( ; cnt-- > 0; node = succ3[node])
524
82.6M
    {
525
82.6M
        p1 = bp;
526
82.6M
        p2 = b + node;
527
82.6M
        px = bx;
528
529
82.6M
        assert(m_len < s->look);
530
531
82.6M
        if (
532
82.6M
#if 1
533
82.6M
            p2[m_len - 1] == scan_end1 &&
534
82.6M
            p2[m_len] == p1[m_len] &&
535
82.6M
#endif
536
82.6M
            p2[0] == p1[0] &&
537
82.6M
            p2[1] == p1[1])
538
4.74M
        {
539
4.74M
            lzo_uint i;
540
4.74M
            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.74M
            p1 += 2; p2 += 2;
550
255M
            do {} while (++p1 < px && *p1 == *++p2);
551
4.74M
#endif
552
4.74M
            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.74M
            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.74M
            if (i > m_len)
570
1.18M
            {
571
1.18M
                s->m_len = m_len = i;
572
1.18M
                s->m_pos = node;
573
1.18M
                if (m_len == s->look)
574
2.05k
                    return;
575
1.18M
                if (m_len >= s->nice_length)
576
0
                    return;
577
1.18M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
69.4k
                    return;
579
1.11M
                scan_end1 = bp[m_len - 1];
580
1.11M
            }
581
4.74M
        }
582
82.6M
    }
583
4.08M
}
lzo1f_9x.c:swd_search
Line
Count
Source
509
4.77M
{
510
4.77M
    const lzo_bytep p1;
511
4.77M
    const lzo_bytep p2;
512
4.77M
    const lzo_bytep px;
513
4.77M
    lzo_uint m_len = s->m_len;
514
4.77M
    const lzo_bytep b  = s_b(s);
515
4.77M
    const lzo_bytep bp = s_b(s) + s->bp;
516
4.77M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
4.77M
    swd_uintp succ3 = s_succ3(s);
518
4.77M
    unsigned char scan_end1;
519
520
4.77M
    assert(s->m_len > 0);
521
522
4.77M
    scan_end1 = bp[m_len - 1];
523
51.0M
    for ( ; cnt-- > 0; node = succ3[node])
524
46.3M
    {
525
46.3M
        p1 = bp;
526
46.3M
        p2 = b + node;
527
46.3M
        px = bx;
528
529
46.3M
        assert(m_len < s->look);
530
531
46.3M
        if (
532
46.3M
#if 1
533
46.3M
            p2[m_len - 1] == scan_end1 &&
534
46.3M
            p2[m_len] == p1[m_len] &&
535
46.3M
#endif
536
46.3M
            p2[0] == p1[0] &&
537
46.3M
            p2[1] == p1[1])
538
2.82M
        {
539
2.82M
            lzo_uint i;
540
2.82M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
2.82M
            p1 += 2; p2 += 2;
550
276M
            do {} while (++p1 < px && *p1 == *++p2);
551
2.82M
#endif
552
2.82M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
2.82M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
            if (i < SWD_BEST_OFF)
564
            {
565
                if (s->best_pos[i] == 0)
566
                    s->best_pos[i] = node + 1;
567
            }
568
#endif
569
2.82M
            if (i > m_len)
570
1.11M
            {
571
1.11M
                s->m_len = m_len = i;
572
1.11M
                s->m_pos = node;
573
1.11M
                if (m_len == s->look)
574
3.90k
                    return;
575
1.11M
                if (m_len >= s->nice_length)
576
0
                    return;
577
1.11M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
81.3k
                    return;
579
1.03M
                scan_end1 = bp[m_len - 1];
580
1.03M
            }
581
2.82M
        }
582
46.3M
    }
583
4.77M
}
lzo1x_9x.c:swd_search
Line
Count
Source
509
3.65M
{
510
3.65M
    const lzo_bytep p1;
511
3.65M
    const lzo_bytep p2;
512
3.65M
    const lzo_bytep px;
513
3.65M
    lzo_uint m_len = s->m_len;
514
3.65M
    const lzo_bytep b  = s_b(s);
515
3.65M
    const lzo_bytep bp = s_b(s) + s->bp;
516
3.65M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
3.65M
    swd_uintp succ3 = s_succ3(s);
518
3.65M
    unsigned char scan_end1;
519
520
3.65M
    assert(s->m_len > 0);
521
522
3.65M
    scan_end1 = bp[m_len - 1];
523
617M
    for ( ; cnt-- > 0; node = succ3[node])
524
613M
    {
525
613M
        p1 = bp;
526
613M
        p2 = b + node;
527
613M
        px = bx;
528
529
613M
        assert(m_len < s->look);
530
531
613M
        if (
532
613M
#if 1
533
613M
            p2[m_len - 1] == scan_end1 &&
534
613M
            p2[m_len] == p1[m_len] &&
535
613M
#endif
536
613M
            p2[0] == p1[0] &&
537
613M
            p2[1] == p1[1])
538
54.2M
        {
539
54.2M
            lzo_uint i;
540
54.2M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
54.2M
            p1 += 2; p2 += 2;
550
756M
            do {} while (++p1 < px && *p1 == *++p2);
551
54.2M
#endif
552
54.2M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
54.2M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
54.2M
#if defined(SWD_BEST_OFF)
563
54.2M
            if (i < SWD_BEST_OFF)
564
52.4M
            {
565
52.4M
                if (s->best_pos[i] == 0)
566
4.25M
                    s->best_pos[i] = node + 1;
567
52.4M
            }
568
54.2M
#endif
569
54.2M
            if (i > m_len)
570
4.82M
            {
571
4.82M
                s->m_len = m_len = i;
572
4.82M
                s->m_pos = node;
573
4.82M
                if (m_len == s->look)
574
2.71k
                    return;
575
4.82M
                if (m_len >= s->nice_length)
576
0
                    return;
577
4.82M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
277k
                    return;
579
4.54M
                scan_end1 = bp[m_len - 1];
580
4.54M
            }
581
54.2M
        }
582
613M
    }
583
3.65M
}
lzo1y_9x.c:swd_search
Line
Count
Source
509
6.03M
{
510
6.03M
    const lzo_bytep p1;
511
6.03M
    const lzo_bytep p2;
512
6.03M
    const lzo_bytep px;
513
6.03M
    lzo_uint m_len = s->m_len;
514
6.03M
    const lzo_bytep b  = s_b(s);
515
6.03M
    const lzo_bytep bp = s_b(s) + s->bp;
516
6.03M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
6.03M
    swd_uintp succ3 = s_succ3(s);
518
6.03M
    unsigned char scan_end1;
519
520
6.03M
    assert(s->m_len > 0);
521
522
6.03M
    scan_end1 = bp[m_len - 1];
523
559M
    for ( ; cnt-- > 0; node = succ3[node])
524
553M
    {
525
553M
        p1 = bp;
526
553M
        p2 = b + node;
527
553M
        px = bx;
528
529
553M
        assert(m_len < s->look);
530
531
553M
        if (
532
553M
#if 1
533
553M
            p2[m_len - 1] == scan_end1 &&
534
553M
            p2[m_len] == p1[m_len] &&
535
553M
#endif
536
553M
            p2[0] == p1[0] &&
537
553M
            p2[1] == p1[1])
538
43.8M
        {
539
43.8M
            lzo_uint i;
540
43.8M
            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.8M
            p1 += 2; p2 += 2;
550
831M
            do {} while (++p1 < px && *p1 == *++p2);
551
43.8M
#endif
552
43.8M
            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.8M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
43.8M
#if defined(SWD_BEST_OFF)
563
43.8M
            if (i < SWD_BEST_OFF)
564
41.6M
            {
565
41.6M
                if (s->best_pos[i] == 0)
566
4.18M
                    s->best_pos[i] = node + 1;
567
41.6M
            }
568
43.8M
#endif
569
43.8M
            if (i > m_len)
570
5.08M
            {
571
5.08M
                s->m_len = m_len = i;
572
5.08M
                s->m_pos = node;
573
5.08M
                if (m_len == s->look)
574
3.54k
                    return;
575
5.08M
                if (m_len >= s->nice_length)
576
0
                    return;
577
5.08M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
300k
                    return;
579
4.78M
                scan_end1 = bp[m_len - 1];
580
4.78M
            }
581
43.8M
        }
582
553M
    }
583
6.03M
}
lzo1z_9x.c:swd_search
Line
Count
Source
509
5.08M
{
510
5.08M
    const lzo_bytep p1;
511
5.08M
    const lzo_bytep p2;
512
5.08M
    const lzo_bytep px;
513
5.08M
    lzo_uint m_len = s->m_len;
514
5.08M
    const lzo_bytep b  = s_b(s);
515
5.08M
    const lzo_bytep bp = s_b(s) + s->bp;
516
5.08M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
5.08M
    swd_uintp succ3 = s_succ3(s);
518
5.08M
    unsigned char scan_end1;
519
520
5.08M
    assert(s->m_len > 0);
521
522
5.08M
    scan_end1 = bp[m_len - 1];
523
565M
    for ( ; cnt-- > 0; node = succ3[node])
524
560M
    {
525
560M
        p1 = bp;
526
560M
        p2 = b + node;
527
560M
        px = bx;
528
529
560M
        assert(m_len < s->look);
530
531
560M
        if (
532
560M
#if 1
533
560M
            p2[m_len - 1] == scan_end1 &&
534
560M
            p2[m_len] == p1[m_len] &&
535
560M
#endif
536
560M
            p2[0] == p1[0] &&
537
560M
            p2[1] == p1[1])
538
44.7M
        {
539
44.7M
            lzo_uint i;
540
44.7M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
44.7M
            p1 += 2; p2 += 2;
550
900M
            do {} while (++p1 < px && *p1 == *++p2);
551
44.7M
#endif
552
44.7M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
44.7M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
44.7M
#if defined(SWD_BEST_OFF)
563
44.7M
            if (i < SWD_BEST_OFF)
564
42.1M
            {
565
42.1M
                if (s->best_pos[i] == 0)
566
4.74M
                    s->best_pos[i] = node + 1;
567
42.1M
            }
568
44.7M
#endif
569
44.7M
            if (i > m_len)
570
5.64M
            {
571
5.64M
                s->m_len = m_len = i;
572
5.64M
                s->m_pos = node;
573
5.64M
                if (m_len == s->look)
574
4.89k
                    return;
575
5.63M
                if (m_len >= s->nice_length)
576
0
                    return;
577
5.63M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
403k
                    return;
579
5.23M
                scan_end1 = bp[m_len - 1];
580
5.23M
            }
581
44.7M
        }
582
560M
    }
583
5.08M
}
lzo2a_9x.c:swd_search
Line
Count
Source
509
366k
{
510
366k
    const lzo_bytep p1;
511
366k
    const lzo_bytep p2;
512
366k
    const lzo_bytep px;
513
366k
    lzo_uint m_len = s->m_len;
514
366k
    const lzo_bytep b  = s_b(s);
515
366k
    const lzo_bytep bp = s_b(s) + s->bp;
516
366k
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
366k
    swd_uintp succ3 = s_succ3(s);
518
366k
    unsigned char scan_end1;
519
520
366k
    assert(s->m_len > 0);
521
522
366k
    scan_end1 = bp[m_len - 1];
523
27.0M
    for ( ; cnt-- > 0; node = succ3[node])
524
26.7M
    {
525
26.7M
        p1 = bp;
526
26.7M
        p2 = b + node;
527
26.7M
        px = bx;
528
529
26.7M
        assert(m_len < s->look);
530
531
26.7M
        if (
532
26.7M
#if 1
533
26.7M
            p2[m_len - 1] == scan_end1 &&
534
26.7M
            p2[m_len] == p1[m_len] &&
535
26.7M
#endif
536
26.7M
            p2[0] == p1[0] &&
537
26.7M
            p2[1] == p1[1])
538
2.07M
        {
539
2.07M
            lzo_uint i;
540
2.07M
            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.07M
            p1 += 2; p2 += 2;
550
176M
            do {} while (++p1 < px && *p1 == *++p2);
551
2.07M
#endif
552
2.07M
            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.07M
            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.07M
            if (i > m_len)
570
652k
            {
571
652k
                s->m_len = m_len = i;
572
652k
                s->m_pos = node;
573
652k
                if (m_len == s->look)
574
4.21k
                    return;
575
648k
                if (m_len >= s->nice_length)
576
0
                    return;
577
648k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
38.5k
                    return;
579
609k
                scan_end1 = bp[m_len - 1];
580
609k
            }
581
2.07M
        }
582
26.7M
    }
583
366k
}
584
585
586
/***********************************************************************
587
//
588
************************************************************************/
589
590
#ifdef HEAD2
591
592
static
593
lzo_bool swd_search2(lzo_swd_p s)
594
30.9M
{
595
30.9M
    lzo_uint key;
596
597
30.9M
    assert(s->look >= 2);
598
30.9M
    assert(s->m_len > 0);
599
600
30.9M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
30.9M
    if (key == NIL2)
602
15.7M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
15.1M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
#if defined(SWD_BEST_OFF)
610
14.7M
    if (s->best_pos[2] == 0)
611
14.7M
        s->best_pos[2] = key + 1;
612
#endif
613
614
15.1M
    if (s->m_len < 2)
615
15.1M
    {
616
15.1M
        s->m_len = 2;
617
15.1M
        s->m_pos = key;
618
15.1M
    }
619
15.1M
    return 1;
620
30.9M
}
lzo1x_9x.c:swd_search2
Line
Count
Source
594
7.60M
{
595
7.60M
    lzo_uint key;
596
597
7.60M
    assert(s->look >= 2);
598
7.60M
    assert(s->m_len > 0);
599
600
7.60M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
7.60M
    if (key == NIL2)
602
3.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
3.65M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
3.65M
#if defined(SWD_BEST_OFF)
610
3.65M
    if (s->best_pos[2] == 0)
611
3.65M
        s->best_pos[2] = key + 1;
612
3.65M
#endif
613
614
3.65M
    if (s->m_len < 2)
615
3.65M
    {
616
3.65M
        s->m_len = 2;
617
3.65M
        s->m_pos = key;
618
3.65M
    }
619
3.65M
    return 1;
620
7.60M
}
lzo1y_9x.c:swd_search2
Line
Count
Source
594
11.7M
{
595
11.7M
    lzo_uint key;
596
597
11.7M
    assert(s->look >= 2);
598
11.7M
    assert(s->m_len > 0);
599
600
11.7M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
11.7M
    if (key == NIL2)
602
5.73M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
6.03M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
6.03M
#if defined(SWD_BEST_OFF)
610
6.03M
    if (s->best_pos[2] == 0)
611
6.03M
        s->best_pos[2] = key + 1;
612
6.03M
#endif
613
614
6.03M
    if (s->m_len < 2)
615
6.03M
    {
616
6.03M
        s->m_len = 2;
617
6.03M
        s->m_pos = key;
618
6.03M
    }
619
6.03M
    return 1;
620
11.7M
}
lzo1z_9x.c:swd_search2
Line
Count
Source
594
9.98M
{
595
9.98M
    lzo_uint key;
596
597
9.98M
    assert(s->look >= 2);
598
9.98M
    assert(s->m_len > 0);
599
600
9.98M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
9.98M
    if (key == NIL2)
602
4.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
5.08M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
5.08M
#if defined(SWD_BEST_OFF)
610
5.08M
    if (s->best_pos[2] == 0)
611
5.08M
        s->best_pos[2] = key + 1;
612
5.08M
#endif
613
614
5.08M
    if (s->m_len < 2)
615
5.08M
    {
616
5.08M
        s->m_len = 2;
617
5.08M
        s->m_pos = key;
618
5.08M
    }
619
5.08M
    return 1;
620
9.98M
}
lzo2a_9x.c:swd_search2
Line
Count
Source
594
1.56M
{
595
1.56M
    lzo_uint key;
596
597
1.56M
    assert(s->look >= 2);
598
1.56M
    assert(s->m_len > 0);
599
600
1.56M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
1.56M
    if (key == NIL2)
602
1.20M
        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
366k
    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
366k
    if (s->m_len < 2)
615
366k
    {
616
366k
        s->m_len = 2;
617
366k
        s->m_pos = key;
618
366k
    }
619
366k
    return 1;
620
1.56M
}
621
622
#endif
623
624
625
/***********************************************************************
626
//
627
************************************************************************/
628
629
static
630
void swd_findbest(lzo_swd_p s)
631
42.9M
{
632
42.9M
    lzo_uint key;
633
42.9M
    lzo_uint cnt, node;
634
42.9M
    lzo_uint len;
635
636
42.9M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
42.9M
    key = HEAD3(s_b(s),s->bp);
640
42.9M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
42.9M
    cnt = s_llen3(s)[key]++;
642
42.9M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
42.9M
    if (cnt > s->max_chain && s->max_chain > 0)
644
647k
        cnt = s->max_chain;
645
42.9M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
42.9M
    s->b_char = s_b(s)[s->bp];
648
42.9M
    len = s->m_len;
649
42.9M
    if (s->m_len >= s->look)
650
10.7k
    {
651
10.7k
        if (s->look == 0)
652
6.32k
            s->b_char = -1;
653
10.7k
        s->m_off = 0;
654
10.7k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
10.7k
    }
656
42.9M
    else
657
42.9M
    {
658
#if defined(HEAD2)
659
30.9M
        if (swd_search2(s) && s->look >= 3)
660
15.1M
            swd_search(s,node,cnt);
661
#else
662
12.0M
        if (s->look >= 3)
663
12.0M
            swd_search(s,node,cnt);
664
#endif
665
42.9M
        if (s->m_len > len)
666
15.8M
            s->m_off = swd_pos2off(s,s->m_pos);
667
42.9M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
29.3M
        if (s->use_best_off)
671
29.3M
        {
672
29.3M
            unsigned i;
673
968M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
939M
                if (s->best_pos[i] > 0)
675
27.9M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
911M
                else
677
911M
                    s->best_off[i] = 0;
678
29.3M
        }
679
#endif
680
42.9M
    }
681
682
42.9M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
30.9M
        key = HEAD2(s_b(s),s->bp);
688
30.9M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
42.9M
}
lzo1b_9x.c:swd_findbest
Line
Count
Source
631
3.17M
{
632
3.17M
    lzo_uint key;
633
3.17M
    lzo_uint cnt, node;
634
3.17M
    lzo_uint len;
635
636
3.17M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
3.17M
    key = HEAD3(s_b(s),s->bp);
640
3.17M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
3.17M
    cnt = s_llen3(s)[key]++;
642
3.17M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
3.17M
    if (cnt > s->max_chain && s->max_chain > 0)
644
14.3k
        cnt = s->max_chain;
645
3.17M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
3.17M
    s->b_char = s_b(s)[s->bp];
648
3.17M
    len = s->m_len;
649
3.17M
    if (s->m_len >= s->look)
650
1.09k
    {
651
1.09k
        if (s->look == 0)
652
547
            s->b_char = -1;
653
1.09k
        s->m_off = 0;
654
1.09k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.09k
    }
656
3.17M
    else
657
3.17M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
3.17M
        if (s->look >= 3)
663
3.17M
            swd_search(s,node,cnt);
664
3.17M
#endif
665
3.17M
        if (s->m_len > len)
666
196k
            s->m_off = swd_pos2off(s,s->m_pos);
667
3.17M
        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.17M
    }
681
682
3.17M
    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.17M
}
lzo1c_9x.c:swd_findbest
Line
Count
Source
631
4.08M
{
632
4.08M
    lzo_uint key;
633
4.08M
    lzo_uint cnt, node;
634
4.08M
    lzo_uint len;
635
636
4.08M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
4.08M
    key = HEAD3(s_b(s),s->bp);
640
4.08M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
4.08M
    cnt = s_llen3(s)[key]++;
642
4.08M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
4.08M
    if (cnt > s->max_chain && s->max_chain > 0)
644
20.4k
        cnt = s->max_chain;
645
4.08M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
4.08M
    s->b_char = s_b(s)[s->bp];
648
4.08M
    len = s->m_len;
649
4.08M
    if (s->m_len >= s->look)
650
1.29k
    {
651
1.29k
        if (s->look == 0)
652
628
            s->b_char = -1;
653
1.29k
        s->m_off = 0;
654
1.29k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.29k
    }
656
4.08M
    else
657
4.08M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
4.08M
        if (s->look >= 3)
663
4.08M
            swd_search(s,node,cnt);
664
4.08M
#endif
665
4.08M
        if (s->m_len > len)
666
276k
            s->m_off = swd_pos2off(s,s->m_pos);
667
4.08M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
        if (s->use_best_off)
671
        {
672
            unsigned i;
673
            for (i = 2; i < SWD_BEST_OFF; i++)
674
                if (s->best_pos[i] > 0)
675
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
                else
677
                    s->best_off[i] = 0;
678
        }
679
#endif
680
4.08M
    }
681
682
4.08M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
        key = HEAD2(s_b(s),s->bp);
688
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
4.08M
}
lzo1f_9x.c:swd_findbest
Line
Count
Source
631
4.77M
{
632
4.77M
    lzo_uint key;
633
4.77M
    lzo_uint cnt, node;
634
4.77M
    lzo_uint len;
635
636
4.77M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
4.77M
    key = HEAD3(s_b(s),s->bp);
640
4.77M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
4.77M
    cnt = s_llen3(s)[key]++;
642
4.77M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
4.77M
    if (cnt > s->max_chain && s->max_chain > 0)
644
9.49k
        cnt = s->max_chain;
645
4.77M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
4.77M
    s->b_char = s_b(s)[s->bp];
648
4.77M
    len = s->m_len;
649
4.77M
    if (s->m_len >= s->look)
650
1.35k
    {
651
1.35k
        if (s->look == 0)
652
690
            s->b_char = -1;
653
1.35k
        s->m_off = 0;
654
1.35k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.35k
    }
656
4.77M
    else
657
4.77M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
4.77M
        if (s->look >= 3)
663
4.77M
            swd_search(s,node,cnt);
664
4.77M
#endif
665
4.77M
        if (s->m_len > len)
666
280k
            s->m_off = swd_pos2off(s,s->m_pos);
667
4.77M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
        if (s->use_best_off)
671
        {
672
            unsigned i;
673
            for (i = 2; i < SWD_BEST_OFF; i++)
674
                if (s->best_pos[i] > 0)
675
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
                else
677
                    s->best_off[i] = 0;
678
        }
679
#endif
680
4.77M
    }
681
682
4.77M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
        key = HEAD2(s_b(s),s->bp);
688
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
4.77M
}
lzo1x_9x.c:swd_findbest
Line
Count
Source
631
7.61M
{
632
7.61M
    lzo_uint key;
633
7.61M
    lzo_uint cnt, node;
634
7.61M
    lzo_uint len;
635
636
7.61M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
7.61M
    key = HEAD3(s_b(s),s->bp);
640
7.61M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
7.61M
    cnt = s_llen3(s)[key]++;
642
7.61M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
7.61M
    if (cnt > s->max_chain && s->max_chain > 0)
644
220k
        cnt = s->max_chain;
645
7.61M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
7.61M
    s->b_char = s_b(s)[s->bp];
648
7.61M
    len = s->m_len;
649
7.61M
    if (s->m_len >= s->look)
650
1.82k
    {
651
1.82k
        if (s->look == 0)
652
1.15k
            s->b_char = -1;
653
1.82k
        s->m_off = 0;
654
1.82k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.82k
    }
656
7.60M
    else
657
7.60M
    {
658
7.60M
#if defined(HEAD2)
659
7.60M
        if (swd_search2(s) && s->look >= 3)
660
3.65M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
7.60M
        if (s->m_len > len)
666
3.65M
            s->m_off = swd_pos2off(s,s->m_pos);
667
7.60M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
7.60M
#if defined(SWD_BEST_OFF)
670
7.60M
        if (s->use_best_off)
671
7.60M
        {
672
7.60M
            unsigned i;
673
251M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
243M
                if (s->best_pos[i] > 0)
675
7.91M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
235M
                else
677
235M
                    s->best_off[i] = 0;
678
7.60M
        }
679
7.60M
#endif
680
7.60M
    }
681
682
7.61M
    swd_remove_node(s,s->rp);
683
684
7.61M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
7.61M
    IF_HEAD2(s) {
687
7.61M
        key = HEAD2(s_b(s),s->bp);
688
7.61M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
7.61M
    }
690
7.61M
#endif
691
7.61M
}
lzo1y_9x.c:swd_findbest
Line
Count
Source
631
11.7M
{
632
11.7M
    lzo_uint key;
633
11.7M
    lzo_uint cnt, node;
634
11.7M
    lzo_uint len;
635
636
11.7M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
11.7M
    key = HEAD3(s_b(s),s->bp);
640
11.7M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
11.7M
    cnt = s_llen3(s)[key]++;
642
11.7M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
11.7M
    if (cnt > s->max_chain && s->max_chain > 0)
644
193k
        cnt = s->max_chain;
645
11.7M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
11.7M
    s->b_char = s_b(s)[s->bp];
648
11.7M
    len = s->m_len;
649
11.7M
    if (s->m_len >= s->look)
650
1.83k
    {
651
1.83k
        if (s->look == 0)
652
1.17k
            s->b_char = -1;
653
1.83k
        s->m_off = 0;
654
1.83k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.83k
    }
656
11.7M
    else
657
11.7M
    {
658
11.7M
#if defined(HEAD2)
659
11.7M
        if (swd_search2(s) && s->look >= 3)
660
6.03M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
11.7M
        if (s->m_len > len)
666
6.03M
            s->m_off = swd_pos2off(s,s->m_pos);
667
11.7M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
11.7M
#if defined(SWD_BEST_OFF)
670
11.7M
        if (s->use_best_off)
671
11.7M
        {
672
11.7M
            unsigned i;
673
388M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
376M
                if (s->best_pos[i] > 0)
675
10.2M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
366M
                else
677
366M
                    s->best_off[i] = 0;
678
11.7M
        }
679
11.7M
#endif
680
11.7M
    }
681
682
11.7M
    swd_remove_node(s,s->rp);
683
684
11.7M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
11.7M
    IF_HEAD2(s) {
687
11.7M
        key = HEAD2(s_b(s),s->bp);
688
11.7M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
11.7M
    }
690
11.7M
#endif
691
11.7M
}
lzo1z_9x.c:swd_findbest
Line
Count
Source
631
9.98M
{
632
9.98M
    lzo_uint key;
633
9.98M
    lzo_uint cnt, node;
634
9.98M
    lzo_uint len;
635
636
9.98M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
9.98M
    key = HEAD3(s_b(s),s->bp);
640
9.98M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
9.98M
    cnt = s_llen3(s)[key]++;
642
9.98M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
9.98M
    if (cnt > s->max_chain && s->max_chain > 0)
644
180k
        cnt = s->max_chain;
645
9.98M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
9.98M
    s->b_char = s_b(s)[s->bp];
648
9.98M
    len = s->m_len;
649
9.98M
    if (s->m_len >= s->look)
650
2.33k
    {
651
2.33k
        if (s->look == 0)
652
1.45k
            s->b_char = -1;
653
2.33k
        s->m_off = 0;
654
2.33k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
2.33k
    }
656
9.98M
    else
657
9.98M
    {
658
9.98M
#if defined(HEAD2)
659
9.98M
        if (swd_search2(s) && s->look >= 3)
660
5.08M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
9.98M
        if (s->m_len > len)
666
5.08M
            s->m_off = swd_pos2off(s,s->m_pos);
667
9.98M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
9.98M
#if defined(SWD_BEST_OFF)
670
9.98M
        if (s->use_best_off)
671
9.98M
        {
672
9.98M
            unsigned i;
673
329M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
319M
                if (s->best_pos[i] > 0)
675
9.83M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
309M
                else
677
309M
                    s->best_off[i] = 0;
678
9.98M
        }
679
9.98M
#endif
680
9.98M
    }
681
682
9.98M
    swd_remove_node(s,s->rp);
683
684
9.98M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
9.98M
    IF_HEAD2(s) {
687
9.98M
        key = HEAD2(s_b(s),s->bp);
688
9.98M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
9.98M
    }
690
9.98M
#endif
691
9.98M
}
lzo2a_9x.c:swd_findbest
Line
Count
Source
631
1.57M
{
632
1.57M
    lzo_uint key;
633
1.57M
    lzo_uint cnt, node;
634
1.57M
    lzo_uint len;
635
636
1.57M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
1.57M
    key = HEAD3(s_b(s),s->bp);
640
1.57M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
1.57M
    cnt = s_llen3(s)[key]++;
642
1.57M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
1.57M
    if (cnt > s->max_chain && s->max_chain > 0)
644
8.68k
        cnt = s->max_chain;
645
1.57M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
1.57M
    s->b_char = s_b(s)[s->bp];
648
1.57M
    len = s->m_len;
649
1.57M
    if (s->m_len >= s->look)
650
1.06k
    {
651
1.06k
        if (s->look == 0)
652
679
            s->b_char = -1;
653
1.06k
        s->m_off = 0;
654
1.06k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.06k
    }
656
1.56M
    else
657
1.56M
    {
658
1.56M
#if defined(HEAD2)
659
1.56M
        if (swd_search2(s) && s->look >= 3)
660
366k
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
1.56M
        if (s->m_len > len)
666
366k
            s->m_off = swd_pos2off(s,s->m_pos);
667
1.56M
        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
1.56M
    }
681
682
1.57M
    swd_remove_node(s,s->rp);
683
684
1.57M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
1.57M
    IF_HEAD2(s) {
687
1.57M
        key = HEAD2(s_b(s),s->bp);
688
1.57M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
1.57M
    }
690
1.57M
#endif
691
1.57M
}
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: */