Coverage Report

Created: 2026-07-16 06:53

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