Coverage Report

Created: 2024-05-21 06:11

/src/lzo-2.10/src/lzo_swd.ch
Line
Count
Source (jump to first uncovered line)
1
/* lzo_swd.ch -- sliding window dictionary
2
3
   This file is part of the LZO real-time data compression library.
4
5
   Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
6
   All Rights Reserved.
7
8
   The LZO library is free software; you can redistribute it and/or
9
   modify it under the terms of the GNU General Public License as
10
   published by the Free Software Foundation; either version 2 of
11
   the License, or (at your option) any later version.
12
13
   The LZO library is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
18
   You should have received a copy of the GNU General Public License
19
   along with the LZO library; see the file COPYING.
20
   If not, write to the Free Software Foundation, Inc.,
21
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
23
   Markus F.X.J. Oberhumer
24
   <markus@oberhumer.com>
25
   http://www.oberhumer.com/opensource/lzo/
26
 */
27
28
29
#if (LZO_UINT_MAX < LZO_0xffffffffL)
30
#  error "LZO_UINT_MAX"
31
#endif
32
#if defined(LZO_DEBUG)
33
#  include <stdio.h>
34
#endif
35
#if defined(__LZO_CHECKER)
36
#  include <stdlib.h>
37
#endif
38
39
40
/***********************************************************************
41
//
42
************************************************************************/
43
44
/* unsigned type for dictionary access - don't waste memory here */
45
#if (0UL + SWD_N + SWD_F + SWD_F < 65535UL)
46
   typedef lzo_uint16_t     swd_uint;
47
179M
#  define SWD_UINT_MAX      0xffffu
48
#else
49
   typedef lzo_uint32_t     swd_uint;
50
1.33M
#  define SWD_UINT_MAX      0xffffffffu
51
#endif
52
52.8M
#define swd_uintp           swd_uint *
53
448M
#define SWD_UINT(x)         ((swd_uint)(x))
54
55
56
#ifndef SWD_HSIZE
57
266M
#  define SWD_HSIZE         16384
58
#endif
59
#ifndef SWD_MAX_CHAIN
60
8.36k
#  define SWD_MAX_CHAIN     2048
61
#endif
62
63
#if !defined(HEAD3)
64
#if 1
65
#  define HEAD3(b,p) \
66
266M
    ((DMUL(0x9f5f,(((((lzo_xint)b[p]<<5)^b[p+1])<<5)^b[p+2]))>>5) & (SWD_HSIZE-1))
67
#else
68
#  define HEAD3(b,p) \
69
    ((DMUL(0x9f5f,(((((lzo_xint)b[p+2]<<5)^b[p+1])<<5)^b[p]))>>5) & (SWD_HSIZE-1))
70
#endif
71
#endif
72
73
#if !(SWD_NO_HEAD2) && (SWD_THRESHOLD == 1) && !defined(HEAD2)
74
#  if 1 && (LZO_OPT_UNALIGNED16)
75
261M
#    define HEAD2(b,p)      UA_GET_NE16((b)+(p))
76
#  else
77
#    define HEAD2(b,p)      (b[p] ^ ((unsigned)b[(p)+1]<<8))
78
#  endif
79
83.8M
#  define NIL2              SWD_UINT_MAX
80
#endif
81
#ifndef IF_HEAD2
82
#define IF_HEAD2(s)         /*empty*/
83
#endif
84
85
86
typedef struct
87
{
88
/* public - "built-in" */
89
    lzo_uint swd_n;
90
    lzo_uint swd_f;
91
    lzo_uint swd_threshold;
92
93
/* public - configuration */
94
    lzo_uint max_chain;
95
    lzo_uint nice_length;
96
    lzo_bool use_best_off;
97
    lzo_uint lazy_insert;
98
99
/* public - output */
100
    lzo_uint m_len;
101
    lzo_uint m_off;
102
    lzo_uint look;
103
    int b_char;
104
#if defined(SWD_BEST_OFF)
105
    lzo_uint best_off[ SWD_BEST_OFF ];
106
#endif
107
108
/* semi public */
109
    LZO_COMPRESS_T *c;
110
    lzo_uint m_pos;
111
#if defined(SWD_BEST_OFF)
112
    lzo_uint best_pos[ SWD_BEST_OFF ];
113
#endif
114
115
/* private */
116
    const lzo_bytep dict;
117
    const lzo_bytep dict_end;
118
    lzo_uint dict_len;
119
120
/* private */
121
    lzo_uint ip;                /* input pointer (lookahead) */
122
    lzo_uint bp;                /* buffer pointer */
123
    lzo_uint rp;                /* remove pointer */
124
    lzo_uint b_size;
125
126
    lzo_bytep b_wrap;
127
128
    lzo_uint node_count;
129
    lzo_uint first_rp;
130
131
#if defined(__LZO_CHECKER)
132
    /* malloc arrays of the exact size to detect any overrun */
133
    unsigned char *b;
134
    swd_uint *head3;
135
    swd_uint *succ3;
136
    swd_uint *best3;
137
    swd_uint *llen3;
138
# ifdef HEAD2
139
    swd_uint *head2;
140
# endif
141
142
#else
143
    unsigned char b [ SWD_N + SWD_F + SWD_F ];
144
    swd_uint head3 [ SWD_HSIZE ];
145
    swd_uint succ3 [ SWD_N + SWD_F ];
146
    swd_uint best3 [ SWD_N + SWD_F ];
147
    swd_uint llen3 [ SWD_HSIZE ];
148
# ifdef HEAD2
149
    swd_uint head2 [ 65536L ];
150
# endif
151
#endif
152
}
153
lzo_swd_t;
154
8.36k
#define lzo_swd_p   lzo_swd_t *
155
156
157
405M
#define s_b(s)      s->b
158
303M
#define s_head3(s)  s->head3
159
216M
#define s_succ3(s)  s->succ3
160
176M
#define s_best3(s)  s->best3
161
429M
#define s_llen3(s)  s->llen3
162
#ifdef HEAD2
163
280M
#define s_head2(s)  s->head2
164
#endif
165
#define SIZEOF_LZO_SWD_T    (sizeof(lzo_swd_t))
166
167
168
/* Access macro for head3.
169
 * head3[key] may be uninitialized if the list is emtpy,
170
 * but then its value will never be used.
171
 */
172
#if 1 || defined(__LZO_CHECKER)
173
#  define s_get_head3(s,key) \
174
163M
        ((swd_uint)((s_llen3(s)[key] == 0) ? SWD_UINT_MAX : s_head3(s)[key]))
175
#else
176
#  define s_get_head3(s,key)    (s_head3(s)[key])
177
#endif
178
179
180
/***********************************************************************
181
//
182
************************************************************************/
183
184
static
185
void swd_initdict(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len)
186
8.36k
{
187
8.36k
    s->dict = s->dict_end = NULL;
188
8.36k
    s->dict_len = 0;
189
190
8.36k
    if (!dict || dict_len == 0)
191
8.36k
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
lzo1b_9x.c:swd_initdict
Line
Count
Source
186
746
{
187
746
    s->dict = s->dict_end = NULL;
188
746
    s->dict_len = 0;
189
190
746
    if (!dict || dict_len == 0)
191
746
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
lzo1c_9x.c:swd_initdict
Line
Count
Source
186
805
{
187
805
    s->dict = s->dict_end = NULL;
188
805
    s->dict_len = 0;
189
190
805
    if (!dict || dict_len == 0)
191
805
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
lzo1f_9x.c:swd_initdict
Line
Count
Source
186
880
{
187
880
    s->dict = s->dict_end = NULL;
188
880
    s->dict_len = 0;
189
190
880
    if (!dict || dict_len == 0)
191
880
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
lzo1x_9x.c:swd_initdict
Line
Count
Source
186
1.60k
{
187
1.60k
    s->dict = s->dict_end = NULL;
188
1.60k
    s->dict_len = 0;
189
190
1.60k
    if (!dict || dict_len == 0)
191
1.60k
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
lzo1y_9x.c:swd_initdict
Line
Count
Source
186
1.60k
{
187
1.60k
    s->dict = s->dict_end = NULL;
188
1.60k
    s->dict_len = 0;
189
190
1.60k
    if (!dict || dict_len == 0)
191
1.60k
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
lzo1z_9x.c:swd_initdict
Line
Count
Source
186
1.91k
{
187
1.91k
    s->dict = s->dict_end = NULL;
188
1.91k
    s->dict_len = 0;
189
190
1.91k
    if (!dict || dict_len == 0)
191
1.91k
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
lzo2a_9x.c:swd_initdict
Line
Count
Source
186
814
{
187
814
    s->dict = s->dict_end = NULL;
188
814
    s->dict_len = 0;
189
190
814
    if (!dict || dict_len == 0)
191
814
        return;
192
0
    if (dict_len > s->swd_n)
193
0
    {
194
0
        dict += dict_len - s->swd_n;
195
0
        dict_len = s->swd_n;
196
0
    }
197
198
0
    s->dict = dict;
199
0
    s->dict_len = dict_len;
200
0
    s->dict_end = dict + dict_len;
201
0
    lzo_memcpy(s_b(s),dict,dict_len);
202
0
    s->ip = dict_len;
203
0
}
204
205
206
static
207
void swd_insertdict(lzo_swd_p s, lzo_uint node, lzo_uint len)
208
0
{
209
0
    lzo_uint key;
210
211
0
    s->node_count = s->swd_n - len;
212
0
    s->first_rp = node;
213
214
0
    if (len) do
215
0
    {
216
0
        key = HEAD3(s_b(s),node);
217
0
        s_succ3(s)[node] = s_get_head3(s,key);
218
0
        s_head3(s)[key] = SWD_UINT(node);
219
0
        s_best3(s)[node] = SWD_UINT(s->swd_f + 1);
220
0
        s_llen3(s)[key]++;
221
0
        assert(s_llen3(s)[key] <= s->swd_n);
222
223
#ifdef HEAD2
224
        IF_HEAD2(s) {
225
0
            key = HEAD2(s_b(s),node);
226
0
            s_head2(s)[key] = SWD_UINT(node);
227
        }
228
#endif
229
230
0
        node++;
231
0
    }
232
0
    while (--len != 0);
233
0
}
Unexecuted instantiation: lzo1b_9x.c:swd_insertdict
Unexecuted instantiation: lzo1c_9x.c:swd_insertdict
Unexecuted instantiation: lzo1f_9x.c:swd_insertdict
Unexecuted instantiation: lzo1x_9x.c:swd_insertdict
Unexecuted instantiation: lzo1y_9x.c:swd_insertdict
Unexecuted instantiation: lzo1z_9x.c:swd_insertdict
Unexecuted instantiation: lzo2a_9x.c:swd_insertdict
234
235
236
/***********************************************************************
237
//
238
************************************************************************/
239
240
static void swd_exit(lzo_swd_p s);
241
242
static
243
int swd_init(lzo_swd_p s, const lzo_bytep dict, lzo_uint dict_len)
244
8.36k
{
245
#if defined(__LZO_CHECKER)
246
    unsigned r = 1;
247
    s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
248
    s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
249
    s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
250
    s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
251
    s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
252
    r &= s->b != NULL;
253
    r &= s->head3 != NULL;
254
    r &= s->succ3 != NULL;
255
    r &= s->best3 != NULL;
256
    r &= s->llen3 != NULL;
257
#ifdef HEAD2
258
    IF_HEAD2(s) {
259
        s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
260
        r &= s->head2 != NULL;
261
    }
262
#endif
263
    if (r != 1) {
264
        swd_exit(s);
265
        return LZO_E_OUT_OF_MEMORY;
266
    }
267
#endif
268
269
8.36k
    s->m_len = 0;
270
8.36k
    s->m_off = 0;
271
#if defined(SWD_BEST_OFF)
272
    {
273
        unsigned i;
274
179k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
174k
            s->best_off[i] = s->best_pos[i] = 0;
276
    }
277
#endif
278
279
8.36k
    s->swd_n = SWD_N;
280
8.36k
    s->swd_f = SWD_F;
281
8.36k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
8.36k
    s->max_chain = SWD_MAX_CHAIN;
285
8.36k
    s->nice_length = s->swd_f;
286
8.36k
    s->use_best_off = 0;
287
8.36k
    s->lazy_insert = 0;
288
289
8.36k
    s->b_size = s->swd_n + s->swd_f;
290
#if 0
291
    if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
292
        return LZO_E_ERROR;
293
#else
294
8.36k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
8.36k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
8.36k
#endif
297
8.36k
    s->b_wrap = s_b(s) + s->b_size;
298
8.36k
    s->node_count = s->swd_n;
299
300
8.36k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
#ifdef HEAD2
302
    IF_HEAD2(s) {
303
#if 1
304
5.93k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
    }
312
#endif
313
314
8.36k
    s->ip = 0;
315
8.36k
    swd_initdict(s,dict,dict_len);
316
8.36k
    s->bp = s->ip;
317
8.36k
    s->first_rp = s->ip;
318
319
8.36k
    assert(s->ip + s->swd_f <= s->b_size);
320
8.36k
#if 1
321
8.36k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
8.36k
    if (s->look > 0)
323
8.35k
    {
324
8.35k
        if (s->look > s->swd_f)
325
2.97k
            s->look = s->swd_f;
326
8.35k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
8.35k
        s->c->ip += s->look;
328
8.35k
        s->ip += s->look;
329
8.35k
    }
330
#else
331
    s->look = 0;
332
    while (s->look < s->swd_f)
333
    {
334
        int c;
335
        if ((c = getbyte(*(s->c))) < 0)
336
            break;
337
        s_b(s)[s->ip] = LZO_BYTE(c);
338
        s->ip++;
339
        s->look++;
340
    }
341
#endif
342
8.36k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
8.36k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
8.36k
    s->rp = s->first_rp;
349
8.36k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
8.36k
    else
352
8.36k
        s->rp += s->b_size - s->node_count;
353
354
8.36k
#if 1 || defined(__LZO_CHECKER)
355
    /* initialize memory for the first few HEAD3 (if s->ip is not far
356
     * enough ahead to do this job for us). The value doesn't matter. */
357
8.36k
    if (s->look < 3) {
358
85
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
85
        p[0] = p[1] = p[2] = 0;
360
85
    }
361
8.36k
#endif
362
363
8.36k
    return LZO_E_OK;
364
8.36k
}
lzo1b_9x.c:swd_init
Line
Count
Source
244
746
{
245
#if defined(__LZO_CHECKER)
246
    unsigned r = 1;
247
    s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
248
    s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
249
    s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
250
    s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
251
    s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
252
    r &= s->b != NULL;
253
    r &= s->head3 != NULL;
254
    r &= s->succ3 != NULL;
255
    r &= s->best3 != NULL;
256
    r &= s->llen3 != NULL;
257
#ifdef HEAD2
258
    IF_HEAD2(s) {
259
        s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
260
        r &= s->head2 != NULL;
261
    }
262
#endif
263
    if (r != 1) {
264
        swd_exit(s);
265
        return LZO_E_OUT_OF_MEMORY;
266
    }
267
#endif
268
269
746
    s->m_len = 0;
270
746
    s->m_off = 0;
271
#if defined(SWD_BEST_OFF)
272
    {
273
        unsigned i;
274
        for (i = 0; i < SWD_BEST_OFF; i++)
275
            s->best_off[i] = s->best_pos[i] = 0;
276
    }
277
#endif
278
279
746
    s->swd_n = SWD_N;
280
746
    s->swd_f = SWD_F;
281
746
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
746
    s->max_chain = SWD_MAX_CHAIN;
285
746
    s->nice_length = s->swd_f;
286
746
    s->use_best_off = 0;
287
746
    s->lazy_insert = 0;
288
289
746
    s->b_size = s->swd_n + s->swd_f;
290
#if 0
291
    if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
292
        return LZO_E_ERROR;
293
#else
294
746
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
746
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
746
#endif
297
746
    s->b_wrap = s_b(s) + s->b_size;
298
746
    s->node_count = s->swd_n;
299
300
746
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
#ifdef HEAD2
302
    IF_HEAD2(s) {
303
#if 1
304
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
    }
312
#endif
313
314
746
    s->ip = 0;
315
746
    swd_initdict(s,dict,dict_len);
316
746
    s->bp = s->ip;
317
746
    s->first_rp = s->ip;
318
319
746
    assert(s->ip + s->swd_f <= s->b_size);
320
746
#if 1
321
746
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
746
    if (s->look > 0)
323
745
    {
324
745
        if (s->look > s->swd_f)
325
254
            s->look = s->swd_f;
326
745
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
745
        s->c->ip += s->look;
328
745
        s->ip += s->look;
329
745
    }
330
#else
331
    s->look = 0;
332
    while (s->look < s->swd_f)
333
    {
334
        int c;
335
        if ((c = getbyte(*(s->c))) < 0)
336
            break;
337
        s_b(s)[s->ip] = LZO_BYTE(c);
338
        s->ip++;
339
        s->look++;
340
    }
341
#endif
342
746
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
746
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
746
    s->rp = s->first_rp;
349
746
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
746
    else
352
746
        s->rp += s->b_size - s->node_count;
353
354
746
#if 1 || defined(__LZO_CHECKER)
355
    /* initialize memory for the first few HEAD3 (if s->ip is not far
356
     * enough ahead to do this job for us). The value doesn't matter. */
357
746
    if (s->look < 3) {
358
13
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
13
        p[0] = p[1] = p[2] = 0;
360
13
    }
361
746
#endif
362
363
746
    return LZO_E_OK;
364
746
}
lzo1c_9x.c:swd_init
Line
Count
Source
244
805
{
245
#if defined(__LZO_CHECKER)
246
    unsigned r = 1;
247
    s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
248
    s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
249
    s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
250
    s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
251
    s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
252
    r &= s->b != NULL;
253
    r &= s->head3 != NULL;
254
    r &= s->succ3 != NULL;
255
    r &= s->best3 != NULL;
256
    r &= s->llen3 != NULL;
257
#ifdef HEAD2
258
    IF_HEAD2(s) {
259
        s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
260
        r &= s->head2 != NULL;
261
    }
262
#endif
263
    if (r != 1) {
264
        swd_exit(s);
265
        return LZO_E_OUT_OF_MEMORY;
266
    }
267
#endif
268
269
805
    s->m_len = 0;
270
805
    s->m_off = 0;
271
#if defined(SWD_BEST_OFF)
272
    {
273
        unsigned i;
274
        for (i = 0; i < SWD_BEST_OFF; i++)
275
            s->best_off[i] = s->best_pos[i] = 0;
276
    }
277
#endif
278
279
805
    s->swd_n = SWD_N;
280
805
    s->swd_f = SWD_F;
281
805
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
805
    s->max_chain = SWD_MAX_CHAIN;
285
805
    s->nice_length = s->swd_f;
286
805
    s->use_best_off = 0;
287
805
    s->lazy_insert = 0;
288
289
805
    s->b_size = s->swd_n + s->swd_f;
290
#if 0
291
    if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
292
        return LZO_E_ERROR;
293
#else
294
805
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
805
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
805
#endif
297
805
    s->b_wrap = s_b(s) + s->b_size;
298
805
    s->node_count = s->swd_n;
299
300
805
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
#ifdef HEAD2
302
    IF_HEAD2(s) {
303
#if 1
304
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
    }
312
#endif
313
314
805
    s->ip = 0;
315
805
    swd_initdict(s,dict,dict_len);
316
805
    s->bp = s->ip;
317
805
    s->first_rp = s->ip;
318
319
805
    assert(s->ip + s->swd_f <= s->b_size);
320
805
#if 1
321
805
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
805
    if (s->look > 0)
323
804
    {
324
804
        if (s->look > s->swd_f)
325
236
            s->look = s->swd_f;
326
804
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
804
        s->c->ip += s->look;
328
804
        s->ip += s->look;
329
804
    }
330
#else
331
    s->look = 0;
332
    while (s->look < s->swd_f)
333
    {
334
        int c;
335
        if ((c = getbyte(*(s->c))) < 0)
336
            break;
337
        s_b(s)[s->ip] = LZO_BYTE(c);
338
        s->ip++;
339
        s->look++;
340
    }
341
#endif
342
805
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
805
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
805
    s->rp = s->first_rp;
349
805
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
805
    else
352
805
        s->rp += s->b_size - s->node_count;
353
354
805
#if 1 || defined(__LZO_CHECKER)
355
    /* initialize memory for the first few HEAD3 (if s->ip is not far
356
     * enough ahead to do this job for us). The value doesn't matter. */
357
805
    if (s->look < 3) {
358
11
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
11
        p[0] = p[1] = p[2] = 0;
360
11
    }
361
805
#endif
362
363
805
    return LZO_E_OK;
364
805
}
lzo1f_9x.c:swd_init
Line
Count
Source
244
880
{
245
#if defined(__LZO_CHECKER)
246
    unsigned r = 1;
247
    s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
248
    s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
249
    s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
250
    s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
251
    s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
252
    r &= s->b != NULL;
253
    r &= s->head3 != NULL;
254
    r &= s->succ3 != NULL;
255
    r &= s->best3 != NULL;
256
    r &= s->llen3 != NULL;
257
#ifdef HEAD2
258
    IF_HEAD2(s) {
259
        s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
260
        r &= s->head2 != NULL;
261
    }
262
#endif
263
    if (r != 1) {
264
        swd_exit(s);
265
        return LZO_E_OUT_OF_MEMORY;
266
    }
267
#endif
268
269
880
    s->m_len = 0;
270
880
    s->m_off = 0;
271
#if defined(SWD_BEST_OFF)
272
    {
273
        unsigned i;
274
        for (i = 0; i < SWD_BEST_OFF; i++)
275
            s->best_off[i] = s->best_pos[i] = 0;
276
    }
277
#endif
278
279
880
    s->swd_n = SWD_N;
280
880
    s->swd_f = SWD_F;
281
880
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
880
    s->max_chain = SWD_MAX_CHAIN;
285
880
    s->nice_length = s->swd_f;
286
880
    s->use_best_off = 0;
287
880
    s->lazy_insert = 0;
288
289
880
    s->b_size = s->swd_n + s->swd_f;
290
#if 0
291
    if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
292
        return LZO_E_ERROR;
293
#else
294
880
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
880
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
880
#endif
297
880
    s->b_wrap = s_b(s) + s->b_size;
298
880
    s->node_count = s->swd_n;
299
300
880
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
#ifdef HEAD2
302
    IF_HEAD2(s) {
303
#if 1
304
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
    }
312
#endif
313
314
880
    s->ip = 0;
315
880
    swd_initdict(s,dict,dict_len);
316
880
    s->bp = s->ip;
317
880
    s->first_rp = s->ip;
318
319
880
    assert(s->ip + s->swd_f <= s->b_size);
320
880
#if 1
321
880
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
880
    if (s->look > 0)
323
879
    {
324
879
        if (s->look > s->swd_f)
325
244
            s->look = s->swd_f;
326
879
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
879
        s->c->ip += s->look;
328
879
        s->ip += s->look;
329
879
    }
330
#else
331
    s->look = 0;
332
    while (s->look < s->swd_f)
333
    {
334
        int c;
335
        if ((c = getbyte(*(s->c))) < 0)
336
            break;
337
        s_b(s)[s->ip] = LZO_BYTE(c);
338
        s->ip++;
339
        s->look++;
340
    }
341
#endif
342
880
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
880
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
880
    s->rp = s->first_rp;
349
880
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
880
    else
352
880
        s->rp += s->b_size - s->node_count;
353
354
880
#if 1 || defined(__LZO_CHECKER)
355
    /* initialize memory for the first few HEAD3 (if s->ip is not far
356
     * enough ahead to do this job for us). The value doesn't matter. */
357
880
    if (s->look < 3) {
358
12
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
12
        p[0] = p[1] = p[2] = 0;
360
12
    }
361
880
#endif
362
363
880
    return LZO_E_OK;
364
880
}
lzo1x_9x.c:swd_init
Line
Count
Source
244
1.60k
{
245
#if defined(__LZO_CHECKER)
246
    unsigned r = 1;
247
    s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
248
    s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
249
    s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
250
    s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
251
    s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
252
    r &= s->b != NULL;
253
    r &= s->head3 != NULL;
254
    r &= s->succ3 != NULL;
255
    r &= s->best3 != NULL;
256
    r &= s->llen3 != NULL;
257
#ifdef HEAD2
258
    IF_HEAD2(s) {
259
        s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
260
        r &= s->head2 != NULL;
261
    }
262
#endif
263
    if (r != 1) {
264
        swd_exit(s);
265
        return LZO_E_OUT_OF_MEMORY;
266
    }
267
#endif
268
269
1.60k
    s->m_len = 0;
270
1.60k
    s->m_off = 0;
271
1.60k
#if defined(SWD_BEST_OFF)
272
1.60k
    {
273
1.60k
        unsigned i;
274
56.0k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
54.4k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.60k
    }
277
1.60k
#endif
278
279
1.60k
    s->swd_n = SWD_N;
280
1.60k
    s->swd_f = SWD_F;
281
1.60k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.60k
    s->max_chain = SWD_MAX_CHAIN;
285
1.60k
    s->nice_length = s->swd_f;
286
1.60k
    s->use_best_off = 0;
287
1.60k
    s->lazy_insert = 0;
288
289
1.60k
    s->b_size = s->swd_n + s->swd_f;
290
#if 0
291
    if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
292
        return LZO_E_ERROR;
293
#else
294
1.60k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.60k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.60k
#endif
297
1.60k
    s->b_wrap = s_b(s) + s->b_size;
298
1.60k
    s->node_count = s->swd_n;
299
300
1.60k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.60k
#ifdef HEAD2
302
1.60k
    IF_HEAD2(s) {
303
1.60k
#if 1
304
1.60k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.60k
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
1.60k
    }
312
1.60k
#endif
313
314
1.60k
    s->ip = 0;
315
1.60k
    swd_initdict(s,dict,dict_len);
316
1.60k
    s->bp = s->ip;
317
1.60k
    s->first_rp = s->ip;
318
319
1.60k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.60k
#if 1
321
1.60k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.60k
    if (s->look > 0)
323
1.60k
    {
324
1.60k
        if (s->look > s->swd_f)
325
704
            s->look = s->swd_f;
326
1.60k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.60k
        s->c->ip += s->look;
328
1.60k
        s->ip += s->look;
329
1.60k
    }
330
#else
331
    s->look = 0;
332
    while (s->look < s->swd_f)
333
    {
334
        int c;
335
        if ((c = getbyte(*(s->c))) < 0)
336
            break;
337
        s_b(s)[s->ip] = LZO_BYTE(c);
338
        s->ip++;
339
        s->look++;
340
    }
341
#endif
342
1.60k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.60k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.60k
    s->rp = s->first_rp;
349
1.60k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.60k
    else
352
1.60k
        s->rp += s->b_size - s->node_count;
353
354
1.60k
#if 1 || defined(__LZO_CHECKER)
355
    /* initialize memory for the first few HEAD3 (if s->ip is not far
356
     * enough ahead to do this job for us). The value doesn't matter. */
357
1.60k
    if (s->look < 3) {
358
12
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
12
        p[0] = p[1] = p[2] = 0;
360
12
    }
361
1.60k
#endif
362
363
1.60k
    return LZO_E_OK;
364
1.60k
}
lzo1y_9x.c:swd_init
Line
Count
Source
244
1.60k
{
245
#if defined(__LZO_CHECKER)
246
    unsigned r = 1;
247
    s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
248
    s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
249
    s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
250
    s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
251
    s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
252
    r &= s->b != NULL;
253
    r &= s->head3 != NULL;
254
    r &= s->succ3 != NULL;
255
    r &= s->best3 != NULL;
256
    r &= s->llen3 != NULL;
257
#ifdef HEAD2
258
    IF_HEAD2(s) {
259
        s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
260
        r &= s->head2 != NULL;
261
    }
262
#endif
263
    if (r != 1) {
264
        swd_exit(s);
265
        return LZO_E_OUT_OF_MEMORY;
266
    }
267
#endif
268
269
1.60k
    s->m_len = 0;
270
1.60k
    s->m_off = 0;
271
1.60k
#if defined(SWD_BEST_OFF)
272
1.60k
    {
273
1.60k
        unsigned i;
274
56.1k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
54.5k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.60k
    }
277
1.60k
#endif
278
279
1.60k
    s->swd_n = SWD_N;
280
1.60k
    s->swd_f = SWD_F;
281
1.60k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.60k
    s->max_chain = SWD_MAX_CHAIN;
285
1.60k
    s->nice_length = s->swd_f;
286
1.60k
    s->use_best_off = 0;
287
1.60k
    s->lazy_insert = 0;
288
289
1.60k
    s->b_size = s->swd_n + s->swd_f;
290
#if 0
291
    if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
292
        return LZO_E_ERROR;
293
#else
294
1.60k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.60k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.60k
#endif
297
1.60k
    s->b_wrap = s_b(s) + s->b_size;
298
1.60k
    s->node_count = s->swd_n;
299
300
1.60k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.60k
#ifdef HEAD2
302
1.60k
    IF_HEAD2(s) {
303
1.60k
#if 1
304
1.60k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.60k
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
1.60k
    }
312
1.60k
#endif
313
314
1.60k
    s->ip = 0;
315
1.60k
    swd_initdict(s,dict,dict_len);
316
1.60k
    s->bp = s->ip;
317
1.60k
    s->first_rp = s->ip;
318
319
1.60k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.60k
#if 1
321
1.60k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.60k
    if (s->look > 0)
323
1.60k
    {
324
1.60k
        if (s->look > s->swd_f)
325
635
            s->look = s->swd_f;
326
1.60k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.60k
        s->c->ip += s->look;
328
1.60k
        s->ip += s->look;
329
1.60k
    }
330
#else
331
    s->look = 0;
332
    while (s->look < s->swd_f)
333
    {
334
        int c;
335
        if ((c = getbyte(*(s->c))) < 0)
336
            break;
337
        s_b(s)[s->ip] = LZO_BYTE(c);
338
        s->ip++;
339
        s->look++;
340
    }
341
#endif
342
1.60k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.60k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.60k
    s->rp = s->first_rp;
349
1.60k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.60k
    else
352
1.60k
        s->rp += s->b_size - s->node_count;
353
354
1.60k
#if 1 || defined(__LZO_CHECKER)
355
    /* initialize memory for the first few HEAD3 (if s->ip is not far
356
     * enough ahead to do this job for us). The value doesn't matter. */
357
1.60k
    if (s->look < 3) {
358
13
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
13
        p[0] = p[1] = p[2] = 0;
360
13
    }
361
1.60k
#endif
362
363
1.60k
    return LZO_E_OK;
364
1.60k
}
lzo1z_9x.c:swd_init
Line
Count
Source
244
1.91k
{
245
#if defined(__LZO_CHECKER)
246
    unsigned r = 1;
247
    s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
248
    s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
249
    s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
250
    s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
251
    s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
252
    r &= s->b != NULL;
253
    r &= s->head3 != NULL;
254
    r &= s->succ3 != NULL;
255
    r &= s->best3 != NULL;
256
    r &= s->llen3 != NULL;
257
#ifdef HEAD2
258
    IF_HEAD2(s) {
259
        s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
260
        r &= s->head2 != NULL;
261
    }
262
#endif
263
    if (r != 1) {
264
        swd_exit(s);
265
        return LZO_E_OUT_OF_MEMORY;
266
    }
267
#endif
268
269
1.91k
    s->m_len = 0;
270
1.91k
    s->m_off = 0;
271
1.91k
#if defined(SWD_BEST_OFF)
272
1.91k
    {
273
1.91k
        unsigned i;
274
66.9k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
65.0k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.91k
    }
277
1.91k
#endif
278
279
1.91k
    s->swd_n = SWD_N;
280
1.91k
    s->swd_f = SWD_F;
281
1.91k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.91k
    s->max_chain = SWD_MAX_CHAIN;
285
1.91k
    s->nice_length = s->swd_f;
286
1.91k
    s->use_best_off = 0;
287
1.91k
    s->lazy_insert = 0;
288
289
1.91k
    s->b_size = s->swd_n + s->swd_f;
290
#if 0
291
    if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
292
        return LZO_E_ERROR;
293
#else
294
1.91k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.91k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.91k
#endif
297
1.91k
    s->b_wrap = s_b(s) + s->b_size;
298
1.91k
    s->node_count = s->swd_n;
299
300
1.91k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.91k
#ifdef HEAD2
302
1.91k
    IF_HEAD2(s) {
303
1.91k
#if 1
304
1.91k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.91k
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
1.91k
    }
312
1.91k
#endif
313
314
1.91k
    s->ip = 0;
315
1.91k
    swd_initdict(s,dict,dict_len);
316
1.91k
    s->bp = s->ip;
317
1.91k
    s->first_rp = s->ip;
318
319
1.91k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.91k
#if 1
321
1.91k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.91k
    if (s->look > 0)
323
1.91k
    {
324
1.91k
        if (s->look > s->swd_f)
325
717
            s->look = s->swd_f;
326
1.91k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.91k
        s->c->ip += s->look;
328
1.91k
        s->ip += s->look;
329
1.91k
    }
330
#else
331
    s->look = 0;
332
    while (s->look < s->swd_f)
333
    {
334
        int c;
335
        if ((c = getbyte(*(s->c))) < 0)
336
            break;
337
        s_b(s)[s->ip] = LZO_BYTE(c);
338
        s->ip++;
339
        s->look++;
340
    }
341
#endif
342
1.91k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.91k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.91k
    s->rp = s->first_rp;
349
1.91k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.91k
    else
352
1.91k
        s->rp += s->b_size - s->node_count;
353
354
1.91k
#if 1 || defined(__LZO_CHECKER)
355
    /* initialize memory for the first few HEAD3 (if s->ip is not far
356
     * enough ahead to do this job for us). The value doesn't matter. */
357
1.91k
    if (s->look < 3) {
358
12
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
12
        p[0] = p[1] = p[2] = 0;
360
12
    }
361
1.91k
#endif
362
363
1.91k
    return LZO_E_OK;
364
1.91k
}
lzo2a_9x.c:swd_init
Line
Count
Source
244
814
{
245
#if defined(__LZO_CHECKER)
246
    unsigned r = 1;
247
    s->b = (lzo_bytep) malloc(SWD_N + SWD_F + SWD_F);
248
    s->head3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
249
    s->succ3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
250
    s->best3 = (swd_uintp) malloc(sizeof(swd_uint) * (SWD_N + SWD_F));
251
    s->llen3 = (swd_uintp) malloc(sizeof(swd_uint) * SWD_HSIZE);
252
    r &= s->b != NULL;
253
    r &= s->head3 != NULL;
254
    r &= s->succ3 != NULL;
255
    r &= s->best3 != NULL;
256
    r &= s->llen3 != NULL;
257
#ifdef HEAD2
258
    IF_HEAD2(s) {
259
        s->head2 = (swd_uintp) malloc(sizeof(swd_uint) * 65536L);
260
        r &= s->head2 != NULL;
261
    }
262
#endif
263
    if (r != 1) {
264
        swd_exit(s);
265
        return LZO_E_OUT_OF_MEMORY;
266
    }
267
#endif
268
269
814
    s->m_len = 0;
270
814
    s->m_off = 0;
271
#if defined(SWD_BEST_OFF)
272
    {
273
        unsigned i;
274
        for (i = 0; i < SWD_BEST_OFF; i++)
275
            s->best_off[i] = s->best_pos[i] = 0;
276
    }
277
#endif
278
279
814
    s->swd_n = SWD_N;
280
814
    s->swd_f = SWD_F;
281
814
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
814
    s->max_chain = SWD_MAX_CHAIN;
285
814
    s->nice_length = s->swd_f;
286
814
    s->use_best_off = 0;
287
814
    s->lazy_insert = 0;
288
289
814
    s->b_size = s->swd_n + s->swd_f;
290
#if 0
291
    if (2 * s->swd_f >= s->swd_n || s->b_size + s->swd_f >= SWD_UINT_MAX)
292
        return LZO_E_ERROR;
293
#else
294
814
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
814
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
814
#endif
297
814
    s->b_wrap = s_b(s) + s->b_size;
298
814
    s->node_count = s->swd_n;
299
300
814
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
814
#ifdef HEAD2
302
814
    IF_HEAD2(s) {
303
814
#if 1
304
814
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
814
        assert(s_head2(s)[0] == NIL2);
306
#else
307
        lzo_xint i;
308
        for (i = 0; i < 65536L; i++)
309
            s_head2(s)[i] = NIL2;
310
#endif
311
814
    }
312
814
#endif
313
314
814
    s->ip = 0;
315
814
    swd_initdict(s,dict,dict_len);
316
814
    s->bp = s->ip;
317
814
    s->first_rp = s->ip;
318
319
814
    assert(s->ip + s->swd_f <= s->b_size);
320
814
#if 1
321
814
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
814
    if (s->look > 0)
323
812
    {
324
812
        if (s->look > s->swd_f)
325
184
            s->look = s->swd_f;
326
812
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
812
        s->c->ip += s->look;
328
812
        s->ip += s->look;
329
812
    }
330
#else
331
    s->look = 0;
332
    while (s->look < s->swd_f)
333
    {
334
        int c;
335
        if ((c = getbyte(*(s->c))) < 0)
336
            break;
337
        s_b(s)[s->ip] = LZO_BYTE(c);
338
        s->ip++;
339
        s->look++;
340
    }
341
#endif
342
814
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
814
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
814
    s->rp = s->first_rp;
349
814
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
814
    else
352
814
        s->rp += s->b_size - s->node_count;
353
354
814
#if 1 || defined(__LZO_CHECKER)
355
    /* initialize memory for the first few HEAD3 (if s->ip is not far
356
     * enough ahead to do this job for us). The value doesn't matter. */
357
814
    if (s->look < 3) {
358
12
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
12
        p[0] = p[1] = p[2] = 0;
360
12
    }
361
814
#endif
362
363
814
    return LZO_E_OK;
364
814
}
365
366
367
static
368
void swd_exit(lzo_swd_p s)
369
8.36k
{
370
#if defined(__LZO_CHECKER)
371
    /* free in reverse order of allocations */
372
#ifdef HEAD2
373
    free(s->head2); s->head2 = NULL;
374
#endif
375
    free(s->llen3); s->llen3 = NULL;
376
    free(s->best3); s->best3 = NULL;
377
    free(s->succ3); s->succ3 = NULL;
378
    free(s->head3); s->head3 = NULL;
379
    free(s->b); s->b = NULL;
380
#else
381
8.36k
    LZO_UNUSED(s);
382
8.36k
#endif
383
8.36k
}
lzo1b_9x.c:swd_exit
Line
Count
Source
369
746
{
370
#if defined(__LZO_CHECKER)
371
    /* free in reverse order of allocations */
372
#ifdef HEAD2
373
    free(s->head2); s->head2 = NULL;
374
#endif
375
    free(s->llen3); s->llen3 = NULL;
376
    free(s->best3); s->best3 = NULL;
377
    free(s->succ3); s->succ3 = NULL;
378
    free(s->head3); s->head3 = NULL;
379
    free(s->b); s->b = NULL;
380
#else
381
746
    LZO_UNUSED(s);
382
746
#endif
383
746
}
lzo1c_9x.c:swd_exit
Line
Count
Source
369
805
{
370
#if defined(__LZO_CHECKER)
371
    /* free in reverse order of allocations */
372
#ifdef HEAD2
373
    free(s->head2); s->head2 = NULL;
374
#endif
375
    free(s->llen3); s->llen3 = NULL;
376
    free(s->best3); s->best3 = NULL;
377
    free(s->succ3); s->succ3 = NULL;
378
    free(s->head3); s->head3 = NULL;
379
    free(s->b); s->b = NULL;
380
#else
381
805
    LZO_UNUSED(s);
382
805
#endif
383
805
}
lzo1f_9x.c:swd_exit
Line
Count
Source
369
880
{
370
#if defined(__LZO_CHECKER)
371
    /* free in reverse order of allocations */
372
#ifdef HEAD2
373
    free(s->head2); s->head2 = NULL;
374
#endif
375
    free(s->llen3); s->llen3 = NULL;
376
    free(s->best3); s->best3 = NULL;
377
    free(s->succ3); s->succ3 = NULL;
378
    free(s->head3); s->head3 = NULL;
379
    free(s->b); s->b = NULL;
380
#else
381
880
    LZO_UNUSED(s);
382
880
#endif
383
880
}
lzo1x_9x.c:swd_exit
Line
Count
Source
369
1.60k
{
370
#if defined(__LZO_CHECKER)
371
    /* free in reverse order of allocations */
372
#ifdef HEAD2
373
    free(s->head2); s->head2 = NULL;
374
#endif
375
    free(s->llen3); s->llen3 = NULL;
376
    free(s->best3); s->best3 = NULL;
377
    free(s->succ3); s->succ3 = NULL;
378
    free(s->head3); s->head3 = NULL;
379
    free(s->b); s->b = NULL;
380
#else
381
1.60k
    LZO_UNUSED(s);
382
1.60k
#endif
383
1.60k
}
lzo1y_9x.c:swd_exit
Line
Count
Source
369
1.60k
{
370
#if defined(__LZO_CHECKER)
371
    /* free in reverse order of allocations */
372
#ifdef HEAD2
373
    free(s->head2); s->head2 = NULL;
374
#endif
375
    free(s->llen3); s->llen3 = NULL;
376
    free(s->best3); s->best3 = NULL;
377
    free(s->succ3); s->succ3 = NULL;
378
    free(s->head3); s->head3 = NULL;
379
    free(s->b); s->b = NULL;
380
#else
381
1.60k
    LZO_UNUSED(s);
382
1.60k
#endif
383
1.60k
}
lzo1z_9x.c:swd_exit
Line
Count
Source
369
1.91k
{
370
#if defined(__LZO_CHECKER)
371
    /* free in reverse order of allocations */
372
#ifdef HEAD2
373
    free(s->head2); s->head2 = NULL;
374
#endif
375
    free(s->llen3); s->llen3 = NULL;
376
    free(s->best3); s->best3 = NULL;
377
    free(s->succ3); s->succ3 = NULL;
378
    free(s->head3); s->head3 = NULL;
379
    free(s->b); s->b = NULL;
380
#else
381
1.91k
    LZO_UNUSED(s);
382
1.91k
#endif
383
1.91k
}
lzo2a_9x.c:swd_exit
Line
Count
Source
369
814
{
370
#if defined(__LZO_CHECKER)
371
    /* free in reverse order of allocations */
372
#ifdef HEAD2
373
    free(s->head2); s->head2 = NULL;
374
#endif
375
    free(s->llen3); s->llen3 = NULL;
376
    free(s->best3); s->best3 = NULL;
377
    free(s->succ3); s->succ3 = NULL;
378
    free(s->head3); s->head3 = NULL;
379
    free(s->b); s->b = NULL;
380
#else
381
814
    LZO_UNUSED(s);
382
814
#endif
383
814
}
384
385
386
#define swd_pos2off(s,pos) \
387
74.7M
    (s->bp > (pos) ? s->bp - (pos) : s->b_size - ((pos) - s->bp))
388
389
390
/***********************************************************************
391
//
392
************************************************************************/
393
394
static __lzo_inline
395
void swd_getbyte(lzo_swd_p s)
396
163M
{
397
163M
    int c;
398
399
163M
    if ((c = getbyte(*(s->c))) < 0)
400
7.83M
    {
401
7.83M
        if (s->look > 0)
402
7.82M
            --s->look;
403
7.83M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
7.83M
        s_b(s)[s->ip] = 0;
406
7.83M
        if (s->ip < s->swd_f)
407
1.67M
            s->b_wrap[s->ip] = 0;
408
7.83M
#endif
409
7.83M
    }
410
155M
    else
411
155M
    {
412
155M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
155M
        if (s->ip < s->swd_f)
414
7.95M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
155M
    }
416
163M
    if (++s->ip == s->b_size)
417
4.44k
        s->ip = 0;
418
163M
    if (++s->bp == s->b_size)
419
4.13k
        s->bp = 0;
420
163M
    if (++s->rp == s->b_size)
421
4.44k
        s->rp = 0;
422
163M
}
lzo1b_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
649k
    {
401
649k
        if (s->look > 0)
402
648k
            --s->look;
403
649k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
649k
        s_b(s)[s->ip] = 0;
406
649k
        if (s->ip < s->swd_f)
407
149k
            s->b_wrap[s->ip] = 0;
408
649k
#endif
409
649k
    }
410
12.3M
    else
411
12.3M
    {
412
12.3M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
12.3M
        if (s->ip < s->swd_f)
414
195k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
12.3M
    }
416
13.0M
    if (++s->ip == s->b_size)
417
154
        s->ip = 0;
418
13.0M
    if (++s->bp == s->b_size)
419
127
        s->bp = 0;
420
13.0M
    if (++s->rp == s->b_size)
421
154
        s->rp = 0;
422
13.0M
}
lzo1c_9x.c:swd_getbyte
Line
Count
Source
396
14.9M
{
397
14.9M
    int c;
398
399
14.9M
    if ((c = getbyte(*(s->c))) < 0)
400
634k
    {
401
634k
        if (s->look > 0)
402
633k
            --s->look;
403
634k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
634k
        s_b(s)[s->ip] = 0;
406
634k
        if (s->ip < s->swd_f)
407
185k
            s->b_wrap[s->ip] = 0;
408
634k
#endif
409
634k
    }
410
14.2M
    else
411
14.2M
    {
412
14.2M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
14.2M
        if (s->ip < s->swd_f)
414
1.38M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
14.2M
    }
416
14.9M
    if (++s->ip == s->b_size)
417
751
        s->ip = 0;
418
14.9M
    if (++s->bp == s->b_size)
419
711
        s->bp = 0;
420
14.9M
    if (++s->rp == s->b_size)
421
751
        s->rp = 0;
422
14.9M
}
lzo1f_9x.c:swd_getbyte
Line
Count
Source
396
12.6M
{
397
12.6M
    int c;
398
399
12.6M
    if ((c = getbyte(*(s->c))) < 0)
400
717k
    {
401
717k
        if (s->look > 0)
402
716k
            --s->look;
403
717k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
717k
        s_b(s)[s->ip] = 0;
406
717k
        if (s->ip < s->swd_f)
407
193k
            s->b_wrap[s->ip] = 0;
408
717k
#endif
409
717k
    }
410
11.9M
    else
411
11.9M
    {
412
11.9M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
11.9M
        if (s->ip < s->swd_f)
414
1.14M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
11.9M
    }
416
12.6M
    if (++s->ip == s->b_size)
417
636
        s->ip = 0;
418
12.6M
    if (++s->bp == s->b_size)
419
599
        s->bp = 0;
420
12.6M
    if (++s->rp == s->b_size)
421
636
        s->rp = 0;
422
12.6M
}
lzo1x_9x.c:swd_getbyte
Line
Count
Source
396
35.3M
{
397
35.3M
    int c;
398
399
35.3M
    if ((c = getbyte(*(s->c))) < 0)
400
1.70M
    {
401
1.70M
        if (s->look > 0)
402
1.70M
            --s->look;
403
1.70M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.70M
        s_b(s)[s->ip] = 0;
406
1.70M
        if (s->ip < s->swd_f)
407
259k
            s->b_wrap[s->ip] = 0;
408
1.70M
#endif
409
1.70M
    }
410
33.6M
    else
411
33.6M
    {
412
33.6M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
33.6M
        if (s->ip < s->swd_f)
414
922k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
33.6M
    }
416
35.3M
    if (++s->ip == s->b_size)
417
537
        s->ip = 0;
418
35.3M
    if (++s->bp == s->b_size)
419
488
        s->bp = 0;
420
35.3M
    if (++s->rp == s->b_size)
421
537
        s->rp = 0;
422
35.3M
}
lzo1y_9x.c:swd_getbyte
Line
Count
Source
396
33.9M
{
397
33.9M
    int c;
398
399
33.9M
    if ((c = getbyte(*(s->c))) < 0)
400
1.66M
    {
401
1.66M
        if (s->look > 0)
402
1.66M
            --s->look;
403
1.66M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.66M
        s_b(s)[s->ip] = 0;
406
1.66M
        if (s->ip < s->swd_f)
407
380k
            s->b_wrap[s->ip] = 0;
408
1.66M
#endif
409
1.66M
    }
410
32.2M
    else
411
32.2M
    {
412
32.2M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
32.2M
        if (s->ip < s->swd_f)
414
848k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
32.2M
    }
416
33.9M
    if (++s->ip == s->b_size)
417
505
        s->ip = 0;
418
33.9M
    if (++s->bp == s->b_size)
419
452
        s->bp = 0;
420
33.9M
    if (++s->rp == s->b_size)
421
505
        s->rp = 0;
422
33.9M
}
lzo1z_9x.c:swd_getbyte
Line
Count
Source
396
39.9M
{
397
39.9M
    int c;
398
399
39.9M
    if ((c = getbyte(*(s->c))) < 0)
400
1.93M
    {
401
1.93M
        if (s->look > 0)
402
1.93M
            --s->look;
403
1.93M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.93M
        s_b(s)[s->ip] = 0;
406
1.93M
        if (s->ip < s->swd_f)
407
318k
            s->b_wrap[s->ip] = 0;
408
1.93M
#endif
409
1.93M
    }
410
37.9M
    else
411
37.9M
    {
412
37.9M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
37.9M
        if (s->ip < s->swd_f)
414
1.05M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
37.9M
    }
416
39.9M
    if (++s->ip == s->b_size)
417
599
        s->ip = 0;
418
39.9M
    if (++s->bp == s->b_size)
419
552
        s->bp = 0;
420
39.9M
    if (++s->rp == s->b_size)
421
599
        s->rp = 0;
422
39.9M
}
lzo2a_9x.c:swd_getbyte
Line
Count
Source
396
13.2M
{
397
13.2M
    int c;
398
399
13.2M
    if ((c = getbyte(*(s->c))) < 0)
400
522k
    {
401
522k
        if (s->look > 0)
402
521k
            --s->look;
403
522k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
522k
        s_b(s)[s->ip] = 0;
406
522k
        if (s->ip < s->swd_f)
407
192k
            s->b_wrap[s->ip] = 0;
408
522k
#endif
409
522k
    }
410
12.7M
    else
411
12.7M
    {
412
12.7M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
12.7M
        if (s->ip < s->swd_f)
414
2.40M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
12.7M
    }
416
13.2M
    if (++s->ip == s->b_size)
417
1.26k
        s->ip = 0;
418
13.2M
    if (++s->bp == s->b_size)
419
1.21k
        s->bp = 0;
420
13.2M
    if (++s->rp == s->b_size)
421
1.26k
        s->rp = 0;
422
13.2M
}
423
424
425
/***********************************************************************
426
// remove node from lists
427
************************************************************************/
428
429
static __lzo_inline
430
void swd_remove_node(lzo_swd_p s, lzo_uint node)
431
163M
{
432
163M
    if (s->node_count == 0)
433
103M
    {
434
103M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
103M
        key = HEAD3(s_b(s),node);
450
103M
        assert(s_llen3(s)[key] > 0);
451
103M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
74.4M
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
74.4M
            if ((lzo_uint) s_head2(s)[key] == node)
458
19.6M
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
103M
    }
462
59.9M
    else
463
59.9M
        --s->node_count;
464
163M
}
lzo1b_9x.c:swd_remove_node
Line
Count
Source
431
13.0M
{
432
13.0M
    if (s->node_count == 0)
433
6.25M
    {
434
6.25M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
6.25M
        key = HEAD3(s_b(s),node);
450
6.25M
        assert(s_llen3(s)[key] > 0);
451
6.25M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
            if ((lzo_uint) s_head2(s)[key] == node)
458
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
6.25M
    }
462
6.77M
    else
463
6.77M
        --s->node_count;
464
13.0M
}
lzo1c_9x.c:swd_remove_node
Line
Count
Source
431
14.9M
{
432
14.9M
    if (s->node_count == 0)
433
12.2M
    {
434
12.2M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
12.2M
        key = HEAD3(s_b(s),node);
450
12.2M
        assert(s_llen3(s)[key] > 0);
451
12.2M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
            if ((lzo_uint) s_head2(s)[key] == node)
458
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
12.2M
    }
462
2.65M
    else
463
2.65M
        --s->node_count;
464
14.9M
}
lzo1f_9x.c:swd_remove_node
Line
Count
Source
431
12.6M
{
432
12.6M
    if (s->node_count == 0)
433
10.2M
    {
434
10.2M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
10.2M
        key = HEAD3(s_b(s),node);
450
10.2M
        assert(s_llen3(s)[key] > 0);
451
10.2M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
            if ((lzo_uint) s_head2(s)[key] == node)
458
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
10.2M
    }
462
2.41M
    else
463
2.41M
        --s->node_count;
464
12.6M
}
lzo1x_9x.c:swd_remove_node
Line
Count
Source
431
35.3M
{
432
35.3M
    if (s->node_count == 0)
433
20.1M
    {
434
20.1M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
20.1M
        key = HEAD3(s_b(s),node);
450
20.1M
        assert(s_llen3(s)[key] > 0);
451
20.1M
        --s_llen3(s)[key];
452
453
20.1M
#ifdef HEAD2
454
20.1M
        IF_HEAD2(s) {
455
20.1M
            key = HEAD2(s_b(s),node);
456
20.1M
            assert(s_head2(s)[key] != NIL2);
457
20.1M
            if ((lzo_uint) s_head2(s)[key] == node)
458
5.72M
                s_head2(s)[key] = NIL2;
459
20.1M
        }
460
20.1M
#endif
461
20.1M
    }
462
15.2M
    else
463
15.2M
        --s->node_count;
464
35.3M
}
lzo1y_9x.c:swd_remove_node
Line
Count
Source
431
33.9M
{
432
33.9M
    if (s->node_count == 0)
433
18.7M
    {
434
18.7M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
18.7M
        key = HEAD3(s_b(s),node);
450
18.7M
        assert(s_llen3(s)[key] > 0);
451
18.7M
        --s_llen3(s)[key];
452
453
18.7M
#ifdef HEAD2
454
18.7M
        IF_HEAD2(s) {
455
18.7M
            key = HEAD2(s_b(s),node);
456
18.7M
            assert(s_head2(s)[key] != NIL2);
457
18.7M
            if ((lzo_uint) s_head2(s)[key] == node)
458
5.07M
                s_head2(s)[key] = NIL2;
459
18.7M
        }
460
18.7M
#endif
461
18.7M
    }
462
15.2M
    else
463
15.2M
        --s->node_count;
464
33.9M
}
lzo1z_9x.c:swd_remove_node
Line
Count
Source
431
39.9M
{
432
39.9M
    if (s->node_count == 0)
433
23.5M
    {
434
23.5M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
23.5M
        key = HEAD3(s_b(s),node);
450
23.5M
        assert(s_llen3(s)[key] > 0);
451
23.5M
        --s_llen3(s)[key];
452
453
23.5M
#ifdef HEAD2
454
23.5M
        IF_HEAD2(s) {
455
23.5M
            key = HEAD2(s_b(s),node);
456
23.5M
            assert(s_head2(s)[key] != NIL2);
457
23.5M
            if ((lzo_uint) s_head2(s)[key] == node)
458
5.38M
                s_head2(s)[key] = NIL2;
459
23.5M
        }
460
23.5M
#endif
461
23.5M
    }
462
16.3M
    else
463
16.3M
        --s->node_count;
464
39.9M
}
lzo2a_9x.c:swd_remove_node
Line
Count
Source
431
13.2M
{
432
13.2M
    if (s->node_count == 0)
433
11.9M
    {
434
11.9M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
11.9M
        key = HEAD3(s_b(s),node);
450
11.9M
        assert(s_llen3(s)[key] > 0);
451
11.9M
        --s_llen3(s)[key];
452
453
11.9M
#ifdef HEAD2
454
11.9M
        IF_HEAD2(s) {
455
11.9M
            key = HEAD2(s_b(s),node);
456
11.9M
            assert(s_head2(s)[key] != NIL2);
457
11.9M
            if ((lzo_uint) s_head2(s)[key] == node)
458
3.45M
                s_head2(s)[key] = NIL2;
459
11.9M
        }
460
11.9M
#endif
461
11.9M
    }
462
1.29M
    else
463
1.29M
        --s->node_count;
464
13.2M
}
465
466
467
/***********************************************************************
468
//
469
************************************************************************/
470
471
static
472
void swd_accept(lzo_swd_p s, lzo_uint n)
473
3.25M
{
474
3.25M
    assert(n <= s->look);
475
476
3.25M
    if (n) do
477
79.6M
    {
478
79.6M
        lzo_uint key;
479
480
79.6M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
79.6M
        key = HEAD3(s_b(s),s->bp);
484
79.6M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
79.6M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
79.6M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
79.6M
        s_llen3(s)[key]++;
488
79.6M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
58.2M
            key = HEAD2(s_b(s),s->bp);
494
58.2M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
79.6M
        swd_getbyte(s);
499
79.6M
    } while (--n != 0);
500
3.25M
}
lzo1b_9x.c:swd_accept
Line
Count
Source
473
176k
{
474
176k
    assert(n <= s->look);
475
476
176k
    if (n) do
477
9.04M
    {
478
9.04M
        lzo_uint key;
479
480
9.04M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
9.04M
        key = HEAD3(s_b(s),s->bp);
484
9.04M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
9.04M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
9.04M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
9.04M
        s_llen3(s)[key]++;
488
9.04M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
            key = HEAD2(s_b(s),s->bp);
494
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
9.04M
        swd_getbyte(s);
499
9.04M
    } while (--n != 0);
500
176k
}
lzo1c_9x.c:swd_accept
Line
Count
Source
473
73.1k
{
474
73.1k
    assert(n <= s->look);
475
476
73.1k
    if (n) do
477
5.94M
    {
478
5.94M
        lzo_uint key;
479
480
5.94M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
5.94M
        key = HEAD3(s_b(s),s->bp);
484
5.94M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
5.94M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
5.94M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
5.94M
        s_llen3(s)[key]++;
488
5.94M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
            key = HEAD2(s_b(s),s->bp);
494
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
5.94M
        swd_getbyte(s);
499
5.94M
    } while (--n != 0);
500
73.1k
}
lzo1f_9x.c:swd_accept
Line
Count
Source
473
138k
{
474
138k
    assert(n <= s->look);
475
476
138k
    if (n) do
477
6.39M
    {
478
6.39M
        lzo_uint key;
479
480
6.39M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
6.39M
        key = HEAD3(s_b(s),s->bp);
484
6.39M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
6.39M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
6.39M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
6.39M
        s_llen3(s)[key]++;
488
6.39M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
            key = HEAD2(s_b(s),s->bp);
494
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
6.39M
        swd_getbyte(s);
499
6.39M
    } while (--n != 0);
500
138k
}
lzo1x_9x.c:swd_accept
Line
Count
Source
473
777k
{
474
777k
    assert(n <= s->look);
475
476
777k
    if (n) do
477
15.3M
    {
478
15.3M
        lzo_uint key;
479
480
15.3M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
15.3M
        key = HEAD3(s_b(s),s->bp);
484
15.3M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
15.3M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
15.3M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
15.3M
        s_llen3(s)[key]++;
488
15.3M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
15.3M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
15.3M
        IF_HEAD2(s) {
493
15.3M
            key = HEAD2(s_b(s),s->bp);
494
15.3M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
15.3M
        }
496
15.3M
#endif
497
498
15.3M
        swd_getbyte(s);
499
15.3M
    } while (--n != 0);
500
777k
}
lzo1y_9x.c:swd_accept
Line
Count
Source
473
677k
{
474
677k
    assert(n <= s->look);
475
476
677k
    if (n) do
477
15.2M
    {
478
15.2M
        lzo_uint key;
479
480
15.2M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
15.2M
        key = HEAD3(s_b(s),s->bp);
484
15.2M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
15.2M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
15.2M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
15.2M
        s_llen3(s)[key]++;
488
15.2M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
15.2M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
15.2M
        IF_HEAD2(s) {
493
15.2M
            key = HEAD2(s_b(s),s->bp);
494
15.2M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
15.2M
        }
496
15.2M
#endif
497
498
15.2M
        swd_getbyte(s);
499
15.2M
    } while (--n != 0);
500
677k
}
lzo1z_9x.c:swd_accept
Line
Count
Source
473
967k
{
474
967k
    assert(n <= s->look);
475
476
967k
    if (n) do
477
20.0M
    {
478
20.0M
        lzo_uint key;
479
480
20.0M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
20.0M
        key = HEAD3(s_b(s),s->bp);
484
20.0M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
20.0M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
20.0M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
20.0M
        s_llen3(s)[key]++;
488
20.0M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
20.0M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
20.0M
        IF_HEAD2(s) {
493
20.0M
            key = HEAD2(s_b(s),s->bp);
494
20.0M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
20.0M
        }
496
20.0M
#endif
497
498
20.0M
        swd_getbyte(s);
499
20.0M
    } while (--n != 0);
500
967k
}
lzo2a_9x.c:swd_accept
Line
Count
Source
473
446k
{
474
446k
    assert(n <= s->look);
475
476
446k
    if (n) do
477
7.63M
    {
478
7.63M
        lzo_uint key;
479
480
7.63M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
7.63M
        key = HEAD3(s_b(s),s->bp);
484
7.63M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
7.63M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
7.63M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
7.63M
        s_llen3(s)[key]++;
488
7.63M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
7.63M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
7.63M
        IF_HEAD2(s) {
493
7.63M
            key = HEAD2(s_b(s),s->bp);
494
7.63M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
7.63M
        }
496
7.63M
#endif
497
498
7.63M
        swd_getbyte(s);
499
7.63M
    } while (--n != 0);
500
446k
}
501
502
503
/***********************************************************************
504
//
505
************************************************************************/
506
507
static
508
void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt)
509
52.8M
{
510
52.8M
    const lzo_bytep p1;
511
52.8M
    const lzo_bytep p2;
512
52.8M
    const lzo_bytep px;
513
52.8M
    lzo_uint m_len = s->m_len;
514
52.8M
    const lzo_bytep b  = s_b(s);
515
52.8M
    const lzo_bytep bp = s_b(s) + s->bp;
516
52.8M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
52.8M
    swd_uintp succ3 = s_succ3(s);
518
52.8M
    unsigned char scan_end1;
519
520
52.8M
    assert(s->m_len > 0);
521
522
52.8M
    scan_end1 = bp[m_len - 1];
523
786M
    for ( ; cnt-- > 0; node = succ3[node])
524
735M
    {
525
735M
        p1 = bp;
526
735M
        p2 = b + node;
527
735M
        px = bx;
528
529
735M
        assert(m_len < s->look);
530
531
735M
        if (
532
735M
#if 1
533
735M
            p2[m_len - 1] == scan_end1 &&
534
735M
            p2[m_len] == p1[m_len] &&
535
735M
#endif
536
735M
            p2[0] == p1[0] &&
537
735M
            p2[1] == p1[1])
538
39.4M
        {
539
39.4M
            lzo_uint i;
540
39.4M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
39.4M
            p1 += 2; p2 += 2;
550
2.52G
            do {} while (++p1 < px && *p1 == *++p2);
551
39.4M
#endif
552
39.4M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
39.4M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
32.3M
            if (i < SWD_BEST_OFF)
564
28.4M
            {
565
28.4M
                if (s->best_pos[i] == 0)
566
8.55M
                    s->best_pos[i] = node + 1;
567
28.4M
            }
568
#endif
569
39.4M
            if (i > m_len)
570
13.8M
            {
571
13.8M
                s->m_len = m_len = i;
572
13.8M
                s->m_pos = node;
573
13.8M
                if (m_len == s->look)
574
33.8k
                    return;
575
13.7M
                if (m_len >= s->nice_length)
576
0
                    return;
577
13.7M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
1.61M
                    return;
579
12.1M
                scan_end1 = bp[m_len - 1];
580
12.1M
            }
581
39.4M
        }
582
735M
    }
583
52.8M
}
lzo1b_9x.c:swd_search
Line
Count
Source
509
3.97M
{
510
3.97M
    const lzo_bytep p1;
511
3.97M
    const lzo_bytep p2;
512
3.97M
    const lzo_bytep px;
513
3.97M
    lzo_uint m_len = s->m_len;
514
3.97M
    const lzo_bytep b  = s_b(s);
515
3.97M
    const lzo_bytep bp = s_b(s) + s->bp;
516
3.97M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
3.97M
    swd_uintp succ3 = s_succ3(s);
518
3.97M
    unsigned char scan_end1;
519
520
3.97M
    assert(s->m_len > 0);
521
522
3.97M
    scan_end1 = bp[m_len - 1];
523
43.8M
    for ( ; cnt-- > 0; node = succ3[node])
524
39.9M
    {
525
39.9M
        p1 = bp;
526
39.9M
        p2 = b + node;
527
39.9M
        px = bx;
528
529
39.9M
        assert(m_len < s->look);
530
531
39.9M
        if (
532
39.9M
#if 1
533
39.9M
            p2[m_len - 1] == scan_end1 &&
534
39.9M
            p2[m_len] == p1[m_len] &&
535
39.9M
#endif
536
39.9M
            p2[0] == p1[0] &&
537
39.9M
            p2[1] == p1[1])
538
2.08M
        {
539
2.08M
            lzo_uint i;
540
2.08M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
2.08M
            p1 += 2; p2 += 2;
550
436M
            do {} while (++p1 < px && *p1 == *++p2);
551
2.08M
#endif
552
2.08M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
2.08M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
            if (i < SWD_BEST_OFF)
564
            {
565
                if (s->best_pos[i] == 0)
566
                    s->best_pos[i] = node + 1;
567
            }
568
#endif
569
2.08M
            if (i > m_len)
570
1.07M
            {
571
1.07M
                s->m_len = m_len = i;
572
1.07M
                s->m_pos = node;
573
1.07M
                if (m_len == s->look)
574
3.19k
                    return;
575
1.07M
                if (m_len >= s->nice_length)
576
0
                    return;
577
1.07M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
91.7k
                    return;
579
984k
                scan_end1 = bp[m_len - 1];
580
984k
            }
581
2.08M
        }
582
39.9M
    }
583
3.97M
}
lzo1c_9x.c:swd_search
Line
Count
Source
509
8.97M
{
510
8.97M
    const lzo_bytep p1;
511
8.97M
    const lzo_bytep p2;
512
8.97M
    const lzo_bytep px;
513
8.97M
    lzo_uint m_len = s->m_len;
514
8.97M
    const lzo_bytep b  = s_b(s);
515
8.97M
    const lzo_bytep bp = s_b(s) + s->bp;
516
8.97M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
8.97M
    swd_uintp succ3 = s_succ3(s);
518
8.97M
    unsigned char scan_end1;
519
520
8.97M
    assert(s->m_len > 0);
521
522
8.97M
    scan_end1 = bp[m_len - 1];
523
47.4M
    for ( ; cnt-- > 0; node = succ3[node])
524
38.4M
    {
525
38.4M
        p1 = bp;
526
38.4M
        p2 = b + node;
527
38.4M
        px = bx;
528
529
38.4M
        assert(m_len < s->look);
530
531
38.4M
        if (
532
38.4M
#if 1
533
38.4M
            p2[m_len - 1] == scan_end1 &&
534
38.4M
            p2[m_len] == p1[m_len] &&
535
38.4M
#endif
536
38.4M
            p2[0] == p1[0] &&
537
38.4M
            p2[1] == p1[1])
538
1.68M
        {
539
1.68M
            lzo_uint i;
540
1.68M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
1.68M
            p1 += 2; p2 += 2;
550
324M
            do {} while (++p1 < px && *p1 == *++p2);
551
1.68M
#endif
552
1.68M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
1.68M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
            if (i < SWD_BEST_OFF)
564
            {
565
                if (s->best_pos[i] == 0)
566
                    s->best_pos[i] = node + 1;
567
            }
568
#endif
569
1.68M
            if (i > m_len)
570
705k
            {
571
705k
                s->m_len = m_len = i;
572
705k
                s->m_pos = node;
573
705k
                if (m_len == s->look)
574
7.96k
                    return;
575
698k
                if (m_len >= s->nice_length)
576
0
                    return;
577
698k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
39.8k
                    return;
579
658k
                scan_end1 = bp[m_len - 1];
580
658k
            }
581
1.68M
        }
582
38.4M
    }
583
8.97M
}
lzo1f_9x.c:swd_search
Line
Count
Source
509
6.23M
{
510
6.23M
    const lzo_bytep p1;
511
6.23M
    const lzo_bytep p2;
512
6.23M
    const lzo_bytep px;
513
6.23M
    lzo_uint m_len = s->m_len;
514
6.23M
    const lzo_bytep b  = s_b(s);
515
6.23M
    const lzo_bytep bp = s_b(s) + s->bp;
516
6.23M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
6.23M
    swd_uintp succ3 = s_succ3(s);
518
6.23M
    unsigned char scan_end1;
519
520
6.23M
    assert(s->m_len > 0);
521
522
6.23M
    scan_end1 = bp[m_len - 1];
523
33.1M
    for ( ; cnt-- > 0; node = succ3[node])
524
27.0M
    {
525
27.0M
        p1 = bp;
526
27.0M
        p2 = b + node;
527
27.0M
        px = bx;
528
529
27.0M
        assert(m_len < s->look);
530
531
27.0M
        if (
532
27.0M
#if 1
533
27.0M
            p2[m_len - 1] == scan_end1 &&
534
27.0M
            p2[m_len] == p1[m_len] &&
535
27.0M
#endif
536
27.0M
            p2[0] == p1[0] &&
537
27.0M
            p2[1] == p1[1])
538
1.82M
        {
539
1.82M
            lzo_uint i;
540
1.82M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
1.82M
            p1 += 2; p2 += 2;
550
282M
            do {} while (++p1 < px && *p1 == *++p2);
551
1.82M
#endif
552
1.82M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
1.82M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
            if (i < SWD_BEST_OFF)
564
            {
565
                if (s->best_pos[i] == 0)
566
                    s->best_pos[i] = node + 1;
567
            }
568
#endif
569
1.82M
            if (i > m_len)
570
854k
            {
571
854k
                s->m_len = m_len = i;
572
854k
                s->m_pos = node;
573
854k
                if (m_len == s->look)
574
4.66k
                    return;
575
849k
                if (m_len >= s->nice_length)
576
0
                    return;
577
849k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
77.2k
                    return;
579
772k
                scan_end1 = bp[m_len - 1];
580
772k
            }
581
1.82M
        }
582
27.0M
    }
583
6.23M
}
lzo1x_9x.c:swd_search
Line
Count
Source
509
10.8M
{
510
10.8M
    const lzo_bytep p1;
511
10.8M
    const lzo_bytep p2;
512
10.8M
    const lzo_bytep px;
513
10.8M
    lzo_uint m_len = s->m_len;
514
10.8M
    const lzo_bytep b  = s_b(s);
515
10.8M
    const lzo_bytep bp = s_b(s) + s->bp;
516
10.8M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
10.8M
    swd_uintp succ3 = s_succ3(s);
518
10.8M
    unsigned char scan_end1;
519
520
10.8M
    assert(s->m_len > 0);
521
522
10.8M
    scan_end1 = bp[m_len - 1];
523
240M
    for ( ; cnt-- > 0; node = succ3[node])
524
230M
    {
525
230M
        p1 = bp;
526
230M
        p2 = b + node;
527
230M
        px = bx;
528
529
230M
        assert(m_len < s->look);
530
531
230M
        if (
532
230M
#if 1
533
230M
            p2[m_len - 1] == scan_end1 &&
534
230M
            p2[m_len] == p1[m_len] &&
535
230M
#endif
536
230M
            p2[0] == p1[0] &&
537
230M
            p2[1] == p1[1])
538
11.9M
        {
539
11.9M
            lzo_uint i;
540
11.9M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
11.9M
            p1 += 2; p2 += 2;
550
408M
            do {} while (++p1 < px && *p1 == *++p2);
551
11.9M
#endif
552
11.9M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
11.9M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
11.9M
#if defined(SWD_BEST_OFF)
563
11.9M
            if (i < SWD_BEST_OFF)
564
10.6M
            {
565
10.6M
                if (s->best_pos[i] == 0)
566
2.79M
                    s->best_pos[i] = node + 1;
567
10.6M
            }
568
11.9M
#endif
569
11.9M
            if (i > m_len)
570
3.40M
            {
571
3.40M
                s->m_len = m_len = i;
572
3.40M
                s->m_pos = node;
573
3.40M
                if (m_len == s->look)
574
3.69k
                    return;
575
3.40M
                if (m_len >= s->nice_length)
576
0
                    return;
577
3.40M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
400k
                    return;
579
2.99M
                scan_end1 = bp[m_len - 1];
580
2.99M
            }
581
11.9M
        }
582
230M
    }
583
10.8M
}
lzo1y_9x.c:swd_search
Line
Count
Source
509
10.1M
{
510
10.1M
    const lzo_bytep p1;
511
10.1M
    const lzo_bytep p2;
512
10.1M
    const lzo_bytep px;
513
10.1M
    lzo_uint m_len = s->m_len;
514
10.1M
    const lzo_bytep b  = s_b(s);
515
10.1M
    const lzo_bytep bp = s_b(s) + s->bp;
516
10.1M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
10.1M
    swd_uintp succ3 = s_succ3(s);
518
10.1M
    unsigned char scan_end1;
519
520
10.1M
    assert(s->m_len > 0);
521
522
10.1M
    scan_end1 = bp[m_len - 1];
523
174M
    for ( ; cnt-- > 0; node = succ3[node])
524
164M
    {
525
164M
        p1 = bp;
526
164M
        p2 = b + node;
527
164M
        px = bx;
528
529
164M
        assert(m_len < s->look);
530
531
164M
        if (
532
164M
#if 1
533
164M
            p2[m_len - 1] == scan_end1 &&
534
164M
            p2[m_len] == p1[m_len] &&
535
164M
#endif
536
164M
            p2[0] == p1[0] &&
537
164M
            p2[1] == p1[1])
538
8.59M
        {
539
8.59M
            lzo_uint i;
540
8.59M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
8.59M
            p1 += 2; p2 += 2;
550
400M
            do {} while (++p1 < px && *p1 == *++p2);
551
8.59M
#endif
552
8.59M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
8.59M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
8.59M
#if defined(SWD_BEST_OFF)
563
8.59M
            if (i < SWD_BEST_OFF)
564
7.28M
            {
565
7.28M
                if (s->best_pos[i] == 0)
566
2.43M
                    s->best_pos[i] = node + 1;
567
7.28M
            }
568
8.59M
#endif
569
8.59M
            if (i > m_len)
570
3.11M
            {
571
3.11M
                s->m_len = m_len = i;
572
3.11M
                s->m_pos = node;
573
3.11M
                if (m_len == s->look)
574
3.56k
                    return;
575
3.11M
                if (m_len >= s->nice_length)
576
0
                    return;
577
3.11M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
406k
                    return;
579
2.70M
                scan_end1 = bp[m_len - 1];
580
2.70M
            }
581
8.59M
        }
582
164M
    }
583
10.1M
}
lzo1z_9x.c:swd_search
Line
Count
Source
509
10.8M
{
510
10.8M
    const lzo_bytep p1;
511
10.8M
    const lzo_bytep p2;
512
10.8M
    const lzo_bytep px;
513
10.8M
    lzo_uint m_len = s->m_len;
514
10.8M
    const lzo_bytep b  = s_b(s);
515
10.8M
    const lzo_bytep bp = s_b(s) + s->bp;
516
10.8M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
10.8M
    swd_uintp succ3 = s_succ3(s);
518
10.8M
    unsigned char scan_end1;
519
520
10.8M
    assert(s->m_len > 0);
521
522
10.8M
    scan_end1 = bp[m_len - 1];
523
228M
    for ( ; cnt-- > 0; node = succ3[node])
524
218M
    {
525
218M
        p1 = bp;
526
218M
        p2 = b + node;
527
218M
        px = bx;
528
529
218M
        assert(m_len < s->look);
530
531
218M
        if (
532
218M
#if 1
533
218M
            p2[m_len - 1] == scan_end1 &&
534
218M
            p2[m_len] == p1[m_len] &&
535
218M
#endif
536
218M
            p2[0] == p1[0] &&
537
218M
            p2[1] == p1[1])
538
11.7M
        {
539
11.7M
            lzo_uint i;
540
11.7M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
11.7M
            p1 += 2; p2 += 2;
550
353M
            do {} while (++p1 < px && *p1 == *++p2);
551
11.7M
#endif
552
11.7M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
11.7M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
11.7M
#if defined(SWD_BEST_OFF)
563
11.7M
            if (i < SWD_BEST_OFF)
564
10.5M
            {
565
10.5M
                if (s->best_pos[i] == 0)
566
3.31M
                    s->best_pos[i] = node + 1;
567
10.5M
            }
568
11.7M
#endif
569
11.7M
            if (i > m_len)
570
3.89M
            {
571
3.89M
                s->m_len = m_len = i;
572
3.89M
                s->m_pos = node;
573
3.89M
                if (m_len == s->look)
574
4.52k
                    return;
575
3.89M
                if (m_len >= s->nice_length)
576
0
                    return;
577
3.89M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
518k
                    return;
579
3.37M
                scan_end1 = bp[m_len - 1];
580
3.37M
            }
581
11.7M
        }
582
218M
    }
583
10.8M
}
lzo2a_9x.c:swd_search
Line
Count
Source
509
1.88M
{
510
1.88M
    const lzo_bytep p1;
511
1.88M
    const lzo_bytep p2;
512
1.88M
    const lzo_bytep px;
513
1.88M
    lzo_uint m_len = s->m_len;
514
1.88M
    const lzo_bytep b  = s_b(s);
515
1.88M
    const lzo_bytep bp = s_b(s) + s->bp;
516
1.88M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
1.88M
    swd_uintp succ3 = s_succ3(s);
518
1.88M
    unsigned char scan_end1;
519
520
1.88M
    assert(s->m_len > 0);
521
522
1.88M
    scan_end1 = bp[m_len - 1];
523
18.0M
    for ( ; cnt-- > 0; node = succ3[node])
524
16.2M
    {
525
16.2M
        p1 = bp;
526
16.2M
        p2 = b + node;
527
16.2M
        px = bx;
528
529
16.2M
        assert(m_len < s->look);
530
531
16.2M
        if (
532
16.2M
#if 1
533
16.2M
            p2[m_len - 1] == scan_end1 &&
534
16.2M
            p2[m_len] == p1[m_len] &&
535
16.2M
#endif
536
16.2M
            p2[0] == p1[0] &&
537
16.2M
            p2[1] == p1[1])
538
1.55M
        {
539
1.55M
            lzo_uint i;
540
1.55M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
1.55M
            p1 += 2; p2 += 2;
550
318M
            do {} while (++p1 < px && *p1 == *++p2);
551
1.55M
#endif
552
1.55M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
1.55M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
            if (i < SWD_BEST_OFF)
564
            {
565
                if (s->best_pos[i] == 0)
566
                    s->best_pos[i] = node + 1;
567
            }
568
#endif
569
1.55M
            if (i > m_len)
570
768k
            {
571
768k
                s->m_len = m_len = i;
572
768k
                s->m_pos = node;
573
768k
                if (m_len == s->look)
574
6.23k
                    return;
575
762k
                if (m_len >= s->nice_length)
576
0
                    return;
577
762k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
76.5k
                    return;
579
685k
                scan_end1 = bp[m_len - 1];
580
685k
            }
581
1.55M
        }
582
16.2M
    }
583
1.88M
}
584
585
586
/***********************************************************************
587
//
588
************************************************************************/
589
590
#ifdef HEAD2
591
592
static
593
lzo_bool swd_search2(lzo_swd_p s)
594
64.2M
{
595
64.2M
    lzo_uint key;
596
597
64.2M
    assert(s->look >= 2);
598
64.2M
    assert(s->m_len > 0);
599
600
64.2M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
64.2M
    if (key == NIL2)
602
30.5M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
33.7M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
#if defined(SWD_BEST_OFF)
610
31.8M
    if (s->best_pos[2] == 0)
611
31.8M
        s->best_pos[2] = key + 1;
612
#endif
613
614
33.7M
    if (s->m_len < 2)
615
33.7M
    {
616
33.7M
        s->m_len = 2;
617
33.7M
        s->m_pos = key;
618
33.7M
    }
619
33.7M
    return 1;
620
64.2M
}
lzo1x_9x.c:swd_search2
Line
Count
Source
594
20.0M
{
595
20.0M
    lzo_uint key;
596
597
20.0M
    assert(s->look >= 2);
598
20.0M
    assert(s->m_len > 0);
599
600
20.0M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
20.0M
    if (key == NIL2)
602
9.21M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
10.8M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
10.8M
#if defined(SWD_BEST_OFF)
610
10.8M
    if (s->best_pos[2] == 0)
611
10.8M
        s->best_pos[2] = key + 1;
612
10.8M
#endif
613
614
10.8M
    if (s->m_len < 2)
615
10.8M
    {
616
10.8M
        s->m_len = 2;
617
10.8M
        s->m_pos = key;
618
10.8M
    }
619
10.8M
    return 1;
620
20.0M
}
lzo1y_9x.c:swd_search2
Line
Count
Source
594
18.7M
{
595
18.7M
    lzo_uint key;
596
597
18.7M
    assert(s->look >= 2);
598
18.7M
    assert(s->m_len > 0);
599
600
18.7M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
18.7M
    if (key == NIL2)
602
8.61M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
10.1M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
10.1M
#if defined(SWD_BEST_OFF)
610
10.1M
    if (s->best_pos[2] == 0)
611
10.1M
        s->best_pos[2] = key + 1;
612
10.1M
#endif
613
614
10.1M
    if (s->m_len < 2)
615
10.1M
    {
616
10.1M
        s->m_len = 2;
617
10.1M
        s->m_pos = key;
618
10.1M
    }
619
10.1M
    return 1;
620
18.7M
}
lzo1z_9x.c:swd_search2
Line
Count
Source
594
19.8M
{
595
19.8M
    lzo_uint key;
596
597
19.8M
    assert(s->look >= 2);
598
19.8M
    assert(s->m_len > 0);
599
600
19.8M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
19.8M
    if (key == NIL2)
602
8.95M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
10.8M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
10.8M
#if defined(SWD_BEST_OFF)
610
10.8M
    if (s->best_pos[2] == 0)
611
10.8M
        s->best_pos[2] = key + 1;
612
10.8M
#endif
613
614
10.8M
    if (s->m_len < 2)
615
10.8M
    {
616
10.8M
        s->m_len = 2;
617
10.8M
        s->m_pos = key;
618
10.8M
    }
619
10.8M
    return 1;
620
19.8M
}
lzo2a_9x.c:swd_search2
Line
Count
Source
594
5.64M
{
595
5.64M
    lzo_uint key;
596
597
5.64M
    assert(s->look >= 2);
598
5.64M
    assert(s->m_len > 0);
599
600
5.64M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
5.64M
    if (key == NIL2)
602
3.76M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
1.88M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
#if defined(SWD_BEST_OFF)
610
    if (s->best_pos[2] == 0)
611
        s->best_pos[2] = key + 1;
612
#endif
613
614
1.88M
    if (s->m_len < 2)
615
1.88M
    {
616
1.88M
        s->m_len = 2;
617
1.88M
        s->m_pos = key;
618
1.88M
    }
619
1.88M
    return 1;
620
5.64M
}
621
622
#endif
623
624
625
/***********************************************************************
626
//
627
************************************************************************/
628
629
static
630
void swd_findbest(lzo_swd_p s)
631
83.4M
{
632
83.4M
    lzo_uint key;
633
83.4M
    lzo_uint cnt, node;
634
83.4M
    lzo_uint len;
635
636
83.4M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
83.4M
    key = HEAD3(s_b(s),s->bp);
640
83.4M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
83.4M
    cnt = s_llen3(s)[key]++;
642
83.4M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
83.4M
    if (cnt > s->max_chain && s->max_chain > 0)
644
159k
        cnt = s->max_chain;
645
83.4M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
83.4M
    s->b_char = s_b(s)[s->bp];
648
83.4M
    len = s->m_len;
649
83.4M
    if (s->m_len >= s->look)
650
13.8k
    {
651
13.8k
        if (s->look == 0)
652
8.36k
            s->b_char = -1;
653
13.8k
        s->m_off = 0;
654
13.8k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
13.8k
    }
656
83.4M
    else
657
83.4M
    {
658
#if defined(HEAD2)
659
64.2M
        if (swd_search2(s) && s->look >= 3)
660
33.7M
            swd_search(s,node,cnt);
661
#else
662
19.1M
        if (s->look >= 3)
663
19.1M
            swd_search(s,node,cnt);
664
#endif
665
83.4M
        if (s->m_len > len)
666
34.3M
            s->m_off = swd_pos2off(s,s->m_pos);
667
83.4M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
58.6M
        if (s->use_best_off)
671
58.6M
        {
672
58.6M
            unsigned i;
673
1.93G
            for (i = 2; i < SWD_BEST_OFF; i++)
674
1.87G
                if (s->best_pos[i] > 0)
675
40.3M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
1.83G
                else
677
1.83G
                    s->best_off[i] = 0;
678
58.6M
        }
679
#endif
680
83.4M
    }
681
682
83.4M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
64.2M
        key = HEAD2(s_b(s),s->bp);
688
64.2M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
83.4M
}
lzo1b_9x.c:swd_findbest
Line
Count
Source
631
3.98M
{
632
3.98M
    lzo_uint key;
633
3.98M
    lzo_uint cnt, node;
634
3.98M
    lzo_uint len;
635
636
3.98M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
3.98M
    key = HEAD3(s_b(s),s->bp);
640
3.98M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
3.98M
    cnt = s_llen3(s)[key]++;
642
3.98M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
3.98M
    if (cnt > s->max_chain && s->max_chain > 0)
644
9.74k
        cnt = s->max_chain;
645
3.98M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
3.98M
    s->b_char = s_b(s)[s->bp];
648
3.98M
    len = s->m_len;
649
3.98M
    if (s->m_len >= s->look)
650
1.40k
    {
651
1.40k
        if (s->look == 0)
652
746
            s->b_char = -1;
653
1.40k
        s->m_off = 0;
654
1.40k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.40k
    }
656
3.97M
    else
657
3.97M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
3.97M
        if (s->look >= 3)
663
3.97M
            swd_search(s,node,cnt);
664
3.97M
#endif
665
3.97M
        if (s->m_len > len)
666
275k
            s->m_off = swd_pos2off(s,s->m_pos);
667
3.97M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
        if (s->use_best_off)
671
        {
672
            unsigned i;
673
            for (i = 2; i < SWD_BEST_OFF; i++)
674
                if (s->best_pos[i] > 0)
675
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
                else
677
                    s->best_off[i] = 0;
678
        }
679
#endif
680
3.97M
    }
681
682
3.98M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
        key = HEAD2(s_b(s),s->bp);
688
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
3.98M
}
lzo1c_9x.c:swd_findbest
Line
Count
Source
631
8.97M
{
632
8.97M
    lzo_uint key;
633
8.97M
    lzo_uint cnt, node;
634
8.97M
    lzo_uint len;
635
636
8.97M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
8.97M
    key = HEAD3(s_b(s),s->bp);
640
8.97M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
8.97M
    cnt = s_llen3(s)[key]++;
642
8.97M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
8.97M
    if (cnt > s->max_chain && s->max_chain > 0)
644
12.3k
        cnt = s->max_chain;
645
8.97M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
8.97M
    s->b_char = s_b(s)[s->bp];
648
8.97M
    len = s->m_len;
649
8.97M
    if (s->m_len >= s->look)
650
1.50k
    {
651
1.50k
        if (s->look == 0)
652
805
            s->b_char = -1;
653
1.50k
        s->m_off = 0;
654
1.50k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.50k
    }
656
8.97M
    else
657
8.97M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
8.97M
        if (s->look >= 3)
663
8.97M
            swd_search(s,node,cnt);
664
8.97M
#endif
665
8.97M
        if (s->m_len > len)
666
125k
            s->m_off = swd_pos2off(s,s->m_pos);
667
8.97M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
        if (s->use_best_off)
671
        {
672
            unsigned i;
673
            for (i = 2; i < SWD_BEST_OFF; i++)
674
                if (s->best_pos[i] > 0)
675
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
                else
677
                    s->best_off[i] = 0;
678
        }
679
#endif
680
8.97M
    }
681
682
8.97M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
        key = HEAD2(s_b(s),s->bp);
688
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
8.97M
}
lzo1f_9x.c:swd_findbest
Line
Count
Source
631
6.24M
{
632
6.24M
    lzo_uint key;
633
6.24M
    lzo_uint cnt, node;
634
6.24M
    lzo_uint len;
635
636
6.24M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
6.24M
    key = HEAD3(s_b(s),s->bp);
640
6.24M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
6.24M
    cnt = s_llen3(s)[key]++;
642
6.24M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
6.24M
    if (cnt > s->max_chain && s->max_chain > 0)
644
7.26k
        cnt = s->max_chain;
645
6.24M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
6.24M
    s->b_char = s_b(s)[s->bp];
648
6.24M
    len = s->m_len;
649
6.24M
    if (s->m_len >= s->look)
650
1.64k
    {
651
1.64k
        if (s->look == 0)
652
880
            s->b_char = -1;
653
1.64k
        s->m_off = 0;
654
1.64k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.64k
    }
656
6.23M
    else
657
6.23M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
6.23M
        if (s->look >= 3)
663
6.23M
            swd_search(s,node,cnt);
664
6.23M
#endif
665
6.23M
        if (s->m_len > len)
666
241k
            s->m_off = swd_pos2off(s,s->m_pos);
667
6.23M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
        if (s->use_best_off)
671
        {
672
            unsigned i;
673
            for (i = 2; i < SWD_BEST_OFF; i++)
674
                if (s->best_pos[i] > 0)
675
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
                else
677
                    s->best_off[i] = 0;
678
        }
679
#endif
680
6.23M
    }
681
682
6.24M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
        key = HEAD2(s_b(s),s->bp);
688
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
6.24M
}
lzo1x_9x.c:swd_findbest
Line
Count
Source
631
20.0M
{
632
20.0M
    lzo_uint key;
633
20.0M
    lzo_uint cnt, node;
634
20.0M
    lzo_uint len;
635
636
20.0M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
20.0M
    key = HEAD3(s_b(s),s->bp);
640
20.0M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
20.0M
    cnt = s_llen3(s)[key]++;
642
20.0M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
20.0M
    if (cnt > s->max_chain && s->max_chain > 0)
644
46.1k
        cnt = s->max_chain;
645
20.0M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
20.0M
    s->b_char = s_b(s)[s->bp];
648
20.0M
    len = s->m_len;
649
20.0M
    if (s->m_len >= s->look)
650
2.49k
    {
651
2.49k
        if (s->look == 0)
652
1.60k
            s->b_char = -1;
653
2.49k
        s->m_off = 0;
654
2.49k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
2.49k
    }
656
20.0M
    else
657
20.0M
    {
658
20.0M
#if defined(HEAD2)
659
20.0M
        if (swd_search2(s) && s->look >= 3)
660
10.8M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
20.0M
        if (s->m_len > len)
666
10.8M
            s->m_off = swd_pos2off(s,s->m_pos);
667
20.0M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
20.0M
#if defined(SWD_BEST_OFF)
670
20.0M
        if (s->use_best_off)
671
20.0M
        {
672
20.0M
            unsigned i;
673
660M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
640M
                if (s->best_pos[i] > 0)
675
13.6M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
626M
                else
677
626M
                    s->best_off[i] = 0;
678
20.0M
        }
679
20.0M
#endif
680
20.0M
    }
681
682
20.0M
    swd_remove_node(s,s->rp);
683
684
20.0M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
20.0M
    IF_HEAD2(s) {
687
20.0M
        key = HEAD2(s_b(s),s->bp);
688
20.0M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
20.0M
    }
690
20.0M
#endif
691
20.0M
}
lzo1y_9x.c:swd_findbest
Line
Count
Source
631
18.7M
{
632
18.7M
    lzo_uint key;
633
18.7M
    lzo_uint cnt, node;
634
18.7M
    lzo_uint len;
635
636
18.7M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
18.7M
    key = HEAD3(s_b(s),s->bp);
640
18.7M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
18.7M
    cnt = s_llen3(s)[key]++;
642
18.7M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
18.7M
    if (cnt > s->max_chain && s->max_chain > 0)
644
35.0k
        cnt = s->max_chain;
645
18.7M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
18.7M
    s->b_char = s_b(s)[s->bp];
648
18.7M
    len = s->m_len;
649
18.7M
    if (s->m_len >= s->look)
650
2.49k
    {
651
2.49k
        if (s->look == 0)
652
1.60k
            s->b_char = -1;
653
2.49k
        s->m_off = 0;
654
2.49k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
2.49k
    }
656
18.7M
    else
657
18.7M
    {
658
18.7M
#if defined(HEAD2)
659
18.7M
        if (swd_search2(s) && s->look >= 3)
660
10.1M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
18.7M
        if (s->m_len > len)
666
10.1M
            s->m_off = swd_pos2off(s,s->m_pos);
667
18.7M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
18.7M
#if defined(SWD_BEST_OFF)
670
18.7M
        if (s->use_best_off)
671
18.7M
        {
672
18.7M
            unsigned i;
673
618M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
599M
                if (s->best_pos[i] > 0)
675
12.5M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
587M
                else
677
587M
                    s->best_off[i] = 0;
678
18.7M
        }
679
18.7M
#endif
680
18.7M
    }
681
682
18.7M
    swd_remove_node(s,s->rp);
683
684
18.7M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
18.7M
    IF_HEAD2(s) {
687
18.7M
        key = HEAD2(s_b(s),s->bp);
688
18.7M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
18.7M
    }
690
18.7M
#endif
691
18.7M
}
lzo1z_9x.c:swd_findbest
Line
Count
Source
631
19.8M
{
632
19.8M
    lzo_uint key;
633
19.8M
    lzo_uint cnt, node;
634
19.8M
    lzo_uint len;
635
636
19.8M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
19.8M
    key = HEAD3(s_b(s),s->bp);
640
19.8M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
19.8M
    cnt = s_llen3(s)[key]++;
642
19.8M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
19.8M
    if (cnt > s->max_chain && s->max_chain > 0)
644
40.4k
        cnt = s->max_chain;
645
19.8M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
19.8M
    s->b_char = s_b(s)[s->bp];
648
19.8M
    len = s->m_len;
649
19.8M
    if (s->m_len >= s->look)
650
3.07k
    {
651
3.07k
        if (s->look == 0)
652
1.91k
            s->b_char = -1;
653
3.07k
        s->m_off = 0;
654
3.07k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
3.07k
    }
656
19.8M
    else
657
19.8M
    {
658
19.8M
#if defined(HEAD2)
659
19.8M
        if (swd_search2(s) && s->look >= 3)
660
10.8M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
19.8M
        if (s->m_len > len)
666
10.8M
            s->m_off = swd_pos2off(s,s->m_pos);
667
19.8M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
19.8M
#if defined(SWD_BEST_OFF)
670
19.8M
        if (s->use_best_off)
671
19.8M
        {
672
19.8M
            unsigned i;
673
655M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
635M
                if (s->best_pos[i] > 0)
675
14.2M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
621M
                else
677
621M
                    s->best_off[i] = 0;
678
19.8M
        }
679
19.8M
#endif
680
19.8M
    }
681
682
19.8M
    swd_remove_node(s,s->rp);
683
684
19.8M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
19.8M
    IF_HEAD2(s) {
687
19.8M
        key = HEAD2(s_b(s),s->bp);
688
19.8M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
19.8M
    }
690
19.8M
#endif
691
19.8M
}
lzo2a_9x.c:swd_findbest
Line
Count
Source
631
5.64M
{
632
5.64M
    lzo_uint key;
633
5.64M
    lzo_uint cnt, node;
634
5.64M
    lzo_uint len;
635
636
5.64M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
5.64M
    key = HEAD3(s_b(s),s->bp);
640
5.64M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
5.64M
    cnt = s_llen3(s)[key]++;
642
5.64M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
5.64M
    if (cnt > s->max_chain && s->max_chain > 0)
644
8.75k
        cnt = s->max_chain;
645
5.64M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
5.64M
    s->b_char = s_b(s)[s->bp];
648
5.64M
    len = s->m_len;
649
5.64M
    if (s->m_len >= s->look)
650
1.22k
    {
651
1.22k
        if (s->look == 0)
652
814
            s->b_char = -1;
653
1.22k
        s->m_off = 0;
654
1.22k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.22k
    }
656
5.64M
    else
657
5.64M
    {
658
5.64M
#if defined(HEAD2)
659
5.64M
        if (swd_search2(s) && s->look >= 3)
660
1.88M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
5.64M
        if (s->m_len > len)
666
1.88M
            s->m_off = swd_pos2off(s,s->m_pos);
667
5.64M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
        if (s->use_best_off)
671
        {
672
            unsigned i;
673
            for (i = 2; i < SWD_BEST_OFF; i++)
674
                if (s->best_pos[i] > 0)
675
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
                else
677
                    s->best_off[i] = 0;
678
        }
679
#endif
680
5.64M
    }
681
682
5.64M
    swd_remove_node(s,s->rp);
683
684
5.64M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
5.64M
    IF_HEAD2(s) {
687
5.64M
        key = HEAD2(s_b(s),s->bp);
688
5.64M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
5.64M
    }
690
5.64M
#endif
691
5.64M
}
692
693
694
#undef HEAD3
695
#undef HEAD2
696
#undef IF_HEAD2
697
#undef s_get_head3
698
699
700
/* vim:set ts=4 sw=4 et: */