Coverage Report

Created: 2026-06-08 06:19

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/lzo-2.10/src/lzo_swd.ch
Line
Count
Source
1
/* lzo_swd.ch -- sliding window dictionary
2
3
   This file is part of the LZO real-time data compression library.
4
5
   Copyright (C) 1996-2017 Markus Franz Xaver Johannes Oberhumer
6
   All Rights Reserved.
7
8
   The LZO library is free software; you can redistribute it and/or
9
   modify it under the terms of the GNU General Public License as
10
   published by the Free Software Foundation; either version 2 of
11
   the License, or (at your option) any later version.
12
13
   The LZO library is distributed in the hope that it will be useful,
14
   but WITHOUT ANY WARRANTY; without even the implied warranty of
15
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
   GNU General Public License for more details.
17
18
   You should have received a copy of the GNU General Public License
19
   along with the LZO library; see the file COPYING.
20
   If not, write to the Free Software Foundation, Inc.,
21
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22
23
   Markus F.X.J. Oberhumer
24
   <markus@oberhumer.com>
25
   http://www.oberhumer.com/opensource/lzo/
26
 */
27
28
29
#if (LZO_UINT_MAX < LZO_0xffffffffL)
30
#  error "LZO_UINT_MAX"
31
#endif
32
#if defined(LZO_DEBUG)
33
#  include <stdio.h>
34
#endif
35
#if defined(__LZO_CHECKER)
36
#  include <stdlib.h>
37
#endif
38
39
40
/***********************************************************************
41
//
42
************************************************************************/
43
44
/* unsigned type for dictionary access - don't waste memory here */
45
#if (0UL + SWD_N + SWD_F + SWD_F < 65535UL)
46
   typedef lzo_uint16_t     swd_uint;
47
143M
#  define SWD_UINT_MAX      0xffffu
48
#else
49
   typedef lzo_uint32_t     swd_uint;
50
1.15M
#  define SWD_UINT_MAX      0xffffffffu
51
#endif
52
51.0M
#define swd_uintp           swd_uint *
53
406M
#define SWD_UINT(x)         ((swd_uint)(x))
54
55
56
#ifndef SWD_HSIZE
57
248M
#  define SWD_HSIZE         16384
58
#endif
59
#ifndef SWD_MAX_CHAIN
60
7.40k
#  define SWD_MAX_CHAIN     2048
61
#endif
62
63
#if !defined(HEAD3)
64
#if 1
65
#  define HEAD3(b,p) \
66
248M
    ((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
210M
#    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
61.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
7.40k
#define lzo_swd_p   lzo_swd_t *
155
156
157
379M
#define s_b(s)      s->b
158
281M
#define s_head3(s)  s->head3
159
202M
#define s_succ3(s)  s->succ3
160
167M
#define s_best3(s)  s->best3
161
400M
#define s_llen3(s)  s->llen3
162
#ifdef HEAD2
163
224M
#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
151M
        ((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
7.40k
{
187
7.40k
    s->dict = s->dict_end = NULL;
188
7.40k
    s->dict_len = 0;
189
190
7.40k
    if (!dict || dict_len == 0)
191
7.40k
        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
659
{
187
659
    s->dict = s->dict_end = NULL;
188
659
    s->dict_len = 0;
189
190
659
    if (!dict || dict_len == 0)
191
659
        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
718
{
187
718
    s->dict = s->dict_end = NULL;
188
718
    s->dict_len = 0;
189
190
718
    if (!dict || dict_len == 0)
191
718
        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
832
{
187
832
    s->dict = s->dict_end = NULL;
188
832
    s->dict_len = 0;
189
190
832
    if (!dict || dict_len == 0)
191
832
        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.35k
{
187
1.35k
    s->dict = s->dict_end = NULL;
188
1.35k
    s->dict_len = 0;
189
190
1.35k
    if (!dict || dict_len == 0)
191
1.35k
        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.40k
{
187
1.40k
    s->dict = s->dict_end = NULL;
188
1.40k
    s->dict_len = 0;
189
190
1.40k
    if (!dict || dict_len == 0)
191
1.40k
        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.69k
{
187
1.69k
    s->dict = s->dict_end = NULL;
188
1.69k
    s->dict_len = 0;
189
190
1.69k
    if (!dict || dict_len == 0)
191
1.69k
        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
735
{
187
735
    s->dict = s->dict_end = NULL;
188
735
    s->dict_len = 0;
189
190
735
    if (!dict || dict_len == 0)
191
735
        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
7.40k
{
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
7.40k
    s->m_len = 0;
270
7.40k
    s->m_off = 0;
271
#if defined(SWD_BEST_OFF)
272
    {
273
        unsigned i;
274
156k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
151k
            s->best_off[i] = s->best_pos[i] = 0;
276
    }
277
#endif
278
279
7.40k
    s->swd_n = SWD_N;
280
7.40k
    s->swd_f = SWD_F;
281
7.40k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
7.40k
    s->max_chain = SWD_MAX_CHAIN;
285
7.40k
    s->nice_length = s->swd_f;
286
7.40k
    s->use_best_off = 0;
287
7.40k
    s->lazy_insert = 0;
288
289
7.40k
    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
7.40k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
7.40k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
7.40k
#endif
297
7.40k
    s->b_wrap = s_b(s) + s->b_size;
298
7.40k
    s->node_count = s->swd_n;
299
300
7.40k
    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.19k
        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
7.40k
    s->ip = 0;
315
7.40k
    swd_initdict(s,dict,dict_len);
316
7.40k
    s->bp = s->ip;
317
7.40k
    s->first_rp = s->ip;
318
319
7.40k
    assert(s->ip + s->swd_f <= s->b_size);
320
7.40k
#if 1
321
7.40k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
7.40k
    if (s->look > 0)
323
7.39k
    {
324
7.39k
        if (s->look > s->swd_f)
325
2.75k
            s->look = s->swd_f;
326
7.39k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
7.39k
        s->c->ip += s->look;
328
7.39k
        s->ip += s->look;
329
7.39k
    }
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
7.40k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
7.40k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
7.40k
    s->rp = s->first_rp;
349
7.40k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
7.40k
    else
352
7.40k
        s->rp += s->b_size - s->node_count;
353
354
7.40k
#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
7.40k
    if (s->look < 3) {
358
80
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
80
        p[0] = p[1] = p[2] = 0;
360
80
    }
361
7.40k
#endif
362
363
7.40k
    return LZO_E_OK;
364
7.40k
}
lzo1b_9x.c:swd_init
Line
Count
Source
244
659
{
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
659
    s->m_len = 0;
270
659
    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
659
    s->swd_n = SWD_N;
280
659
    s->swd_f = SWD_F;
281
659
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
659
    s->max_chain = SWD_MAX_CHAIN;
285
659
    s->nice_length = s->swd_f;
286
659
    s->use_best_off = 0;
287
659
    s->lazy_insert = 0;
288
289
659
    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
659
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
659
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
659
#endif
297
659
    s->b_wrap = s_b(s) + s->b_size;
298
659
    s->node_count = s->swd_n;
299
300
659
    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
659
    s->ip = 0;
315
659
    swd_initdict(s,dict,dict_len);
316
659
    s->bp = s->ip;
317
659
    s->first_rp = s->ip;
318
319
659
    assert(s->ip + s->swd_f <= s->b_size);
320
659
#if 1
321
659
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
659
    if (s->look > 0)
323
658
    {
324
658
        if (s->look > s->swd_f)
325
236
            s->look = s->swd_f;
326
658
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
658
        s->c->ip += s->look;
328
658
        s->ip += s->look;
329
658
    }
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
659
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
659
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
659
    s->rp = s->first_rp;
349
659
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
659
    else
352
659
        s->rp += s->b_size - s->node_count;
353
354
659
#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
659
    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
659
#endif
362
363
659
    return LZO_E_OK;
364
659
}
lzo1c_9x.c:swd_init
Line
Count
Source
244
718
{
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
718
    s->m_len = 0;
270
718
    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
718
    s->swd_n = SWD_N;
280
718
    s->swd_f = SWD_F;
281
718
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
718
    s->max_chain = SWD_MAX_CHAIN;
285
718
    s->nice_length = s->swd_f;
286
718
    s->use_best_off = 0;
287
718
    s->lazy_insert = 0;
288
289
718
    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
718
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
718
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
718
#endif
297
718
    s->b_wrap = s_b(s) + s->b_size;
298
718
    s->node_count = s->swd_n;
299
300
718
    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
718
    s->ip = 0;
315
718
    swd_initdict(s,dict,dict_len);
316
718
    s->bp = s->ip;
317
718
    s->first_rp = s->ip;
318
319
718
    assert(s->ip + s->swd_f <= s->b_size);
320
718
#if 1
321
718
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
718
    if (s->look > 0)
323
717
    {
324
717
        if (s->look > s->swd_f)
325
232
            s->look = s->swd_f;
326
717
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
717
        s->c->ip += s->look;
328
717
        s->ip += s->look;
329
717
    }
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
718
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
718
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
718
    s->rp = s->first_rp;
349
718
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
718
    else
352
718
        s->rp += s->b_size - s->node_count;
353
354
718
#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
718
    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
718
#endif
362
363
718
    return LZO_E_OK;
364
718
}
lzo1f_9x.c:swd_init
Line
Count
Source
244
832
{
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
832
    s->m_len = 0;
270
832
    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
832
    s->swd_n = SWD_N;
280
832
    s->swd_f = SWD_F;
281
832
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
832
    s->max_chain = SWD_MAX_CHAIN;
285
832
    s->nice_length = s->swd_f;
286
832
    s->use_best_off = 0;
287
832
    s->lazy_insert = 0;
288
289
832
    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
832
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
832
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
832
#endif
297
832
    s->b_wrap = s_b(s) + s->b_size;
298
832
    s->node_count = s->swd_n;
299
300
832
    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
832
    s->ip = 0;
315
832
    swd_initdict(s,dict,dict_len);
316
832
    s->bp = s->ip;
317
832
    s->first_rp = s->ip;
318
319
832
    assert(s->ip + s->swd_f <= s->b_size);
320
832
#if 1
321
832
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
832
    if (s->look > 0)
323
831
    {
324
831
        if (s->look > s->swd_f)
325
245
            s->look = s->swd_f;
326
831
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
831
        s->c->ip += s->look;
328
831
        s->ip += s->look;
329
831
    }
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
832
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
832
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
832
    s->rp = s->first_rp;
349
832
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
832
    else
352
832
        s->rp += s->b_size - s->node_count;
353
354
832
#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
832
    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
832
#endif
362
363
832
    return LZO_E_OK;
364
832
}
lzo1x_9x.c:swd_init
Line
Count
Source
244
1.35k
{
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.35k
    s->m_len = 0;
270
1.35k
    s->m_off = 0;
271
1.35k
#if defined(SWD_BEST_OFF)
272
1.35k
    {
273
1.35k
        unsigned i;
274
47.5k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
46.2k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.35k
    }
277
1.35k
#endif
278
279
1.35k
    s->swd_n = SWD_N;
280
1.35k
    s->swd_f = SWD_F;
281
1.35k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.35k
    s->max_chain = SWD_MAX_CHAIN;
285
1.35k
    s->nice_length = s->swd_f;
286
1.35k
    s->use_best_off = 0;
287
1.35k
    s->lazy_insert = 0;
288
289
1.35k
    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.35k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.35k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.35k
#endif
297
1.35k
    s->b_wrap = s_b(s) + s->b_size;
298
1.35k
    s->node_count = s->swd_n;
299
300
1.35k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.35k
#ifdef HEAD2
302
1.35k
    IF_HEAD2(s) {
303
1.35k
#if 1
304
1.35k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.35k
        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.35k
    }
312
1.35k
#endif
313
314
1.35k
    s->ip = 0;
315
1.35k
    swd_initdict(s,dict,dict_len);
316
1.35k
    s->bp = s->ip;
317
1.35k
    s->first_rp = s->ip;
318
319
1.35k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.35k
#if 1
321
1.35k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.35k
    if (s->look > 0)
323
1.35k
    {
324
1.35k
        if (s->look > s->swd_f)
325
643
            s->look = s->swd_f;
326
1.35k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.35k
        s->c->ip += s->look;
328
1.35k
        s->ip += s->look;
329
1.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
1.35k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.35k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.35k
    s->rp = s->first_rp;
349
1.35k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.35k
    else
352
1.35k
        s->rp += s->b_size - s->node_count;
353
354
1.35k
#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.35k
    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.35k
#endif
362
363
1.35k
    return LZO_E_OK;
364
1.35k
}
lzo1y_9x.c:swd_init
Line
Count
Source
244
1.40k
{
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.40k
    s->m_len = 0;
270
1.40k
    s->m_off = 0;
271
1.40k
#if defined(SWD_BEST_OFF)
272
1.40k
    {
273
1.40k
        unsigned i;
274
49.2k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
47.8k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.40k
    }
277
1.40k
#endif
278
279
1.40k
    s->swd_n = SWD_N;
280
1.40k
    s->swd_f = SWD_F;
281
1.40k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.40k
    s->max_chain = SWD_MAX_CHAIN;
285
1.40k
    s->nice_length = s->swd_f;
286
1.40k
    s->use_best_off = 0;
287
1.40k
    s->lazy_insert = 0;
288
289
1.40k
    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.40k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.40k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.40k
#endif
297
1.40k
    s->b_wrap = s_b(s) + s->b_size;
298
1.40k
    s->node_count = s->swd_n;
299
300
1.40k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.40k
#ifdef HEAD2
302
1.40k
    IF_HEAD2(s) {
303
1.40k
#if 1
304
1.40k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.40k
        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.40k
    }
312
1.40k
#endif
313
314
1.40k
    s->ip = 0;
315
1.40k
    swd_initdict(s,dict,dict_len);
316
1.40k
    s->bp = s->ip;
317
1.40k
    s->first_rp = s->ip;
318
319
1.40k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.40k
#if 1
321
1.40k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.40k
    if (s->look > 0)
323
1.40k
    {
324
1.40k
        if (s->look > s->swd_f)
325
565
            s->look = s->swd_f;
326
1.40k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.40k
        s->c->ip += s->look;
328
1.40k
        s->ip += s->look;
329
1.40k
    }
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.40k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.40k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.40k
    s->rp = s->first_rp;
349
1.40k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.40k
    else
352
1.40k
        s->rp += s->b_size - s->node_count;
353
354
1.40k
#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.40k
    if (s->look < 3) {
358
10
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
10
        p[0] = p[1] = p[2] = 0;
360
10
    }
361
1.40k
#endif
362
363
1.40k
    return LZO_E_OK;
364
1.40k
}
lzo1z_9x.c:swd_init
Line
Count
Source
244
1.69k
{
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.69k
    s->m_len = 0;
270
1.69k
    s->m_off = 0;
271
1.69k
#if defined(SWD_BEST_OFF)
272
1.69k
    {
273
1.69k
        unsigned i;
274
59.2k
        for (i = 0; i < SWD_BEST_OFF; i++)
275
57.5k
            s->best_off[i] = s->best_pos[i] = 0;
276
1.69k
    }
277
1.69k
#endif
278
279
1.69k
    s->swd_n = SWD_N;
280
1.69k
    s->swd_f = SWD_F;
281
1.69k
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
1.69k
    s->max_chain = SWD_MAX_CHAIN;
285
1.69k
    s->nice_length = s->swd_f;
286
1.69k
    s->use_best_off = 0;
287
1.69k
    s->lazy_insert = 0;
288
289
1.69k
    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.69k
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
1.69k
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
1.69k
#endif
297
1.69k
    s->b_wrap = s_b(s) + s->b_size;
298
1.69k
    s->node_count = s->swd_n;
299
300
1.69k
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
1.69k
#ifdef HEAD2
302
1.69k
    IF_HEAD2(s) {
303
1.69k
#if 1
304
1.69k
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
1.69k
        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.69k
    }
312
1.69k
#endif
313
314
1.69k
    s->ip = 0;
315
1.69k
    swd_initdict(s,dict,dict_len);
316
1.69k
    s->bp = s->ip;
317
1.69k
    s->first_rp = s->ip;
318
319
1.69k
    assert(s->ip + s->swd_f <= s->b_size);
320
1.69k
#if 1
321
1.69k
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
1.69k
    if (s->look > 0)
323
1.69k
    {
324
1.69k
        if (s->look > s->swd_f)
325
660
            s->look = s->swd_f;
326
1.69k
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
1.69k
        s->c->ip += s->look;
328
1.69k
        s->ip += s->look;
329
1.69k
    }
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.69k
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
1.69k
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
1.69k
    s->rp = s->first_rp;
349
1.69k
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
1.69k
    else
352
1.69k
        s->rp += s->b_size - s->node_count;
353
354
1.69k
#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.69k
    if (s->look < 3) {
358
11
        lzo_bytep p = &s_b(s)[s->bp+s->look];
359
11
        p[0] = p[1] = p[2] = 0;
360
11
    }
361
1.69k
#endif
362
363
1.69k
    return LZO_E_OK;
364
1.69k
}
lzo2a_9x.c:swd_init
Line
Count
Source
244
735
{
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
735
    s->m_len = 0;
270
735
    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
735
    s->swd_n = SWD_N;
280
735
    s->swd_f = SWD_F;
281
735
    s->swd_threshold = SWD_THRESHOLD;
282
283
    /* defaults */
284
735
    s->max_chain = SWD_MAX_CHAIN;
285
735
    s->nice_length = s->swd_f;
286
735
    s->use_best_off = 0;
287
735
    s->lazy_insert = 0;
288
289
735
    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
735
    LZO_COMPILE_TIME_ASSERT(!(0ul + 2 * SWD_F >= SWD_N))
295
735
    LZO_COMPILE_TIME_ASSERT(!(0ul + SWD_N + SWD_F + SWD_F >= SWD_UINT_MAX))
296
735
#endif
297
735
    s->b_wrap = s_b(s) + s->b_size;
298
735
    s->node_count = s->swd_n;
299
300
735
    lzo_memset(s_llen3(s), 0, (lzo_uint)sizeof(s_llen3(s)[0]) * (lzo_uint)SWD_HSIZE);
301
735
#ifdef HEAD2
302
735
    IF_HEAD2(s) {
303
735
#if 1
304
735
        lzo_memset(s_head2(s), 0xff, (lzo_uint)sizeof(s_head2(s)[0]) * 65536L);
305
735
        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
735
    }
312
735
#endif
313
314
735
    s->ip = 0;
315
735
    swd_initdict(s,dict,dict_len);
316
735
    s->bp = s->ip;
317
735
    s->first_rp = s->ip;
318
319
735
    assert(s->ip + s->swd_f <= s->b_size);
320
735
#if 1
321
735
    s->look = (lzo_uint) (s->c->in_end - s->c->ip);
322
735
    if (s->look > 0)
323
734
    {
324
734
        if (s->look > s->swd_f)
325
170
            s->look = s->swd_f;
326
734
        lzo_memcpy(&s_b(s)[s->ip],s->c->ip,s->look);
327
734
        s->c->ip += s->look;
328
734
        s->ip += s->look;
329
734
    }
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
735
    if (s->ip == s->b_size)
343
0
        s->ip = 0;
344
345
735
    if (s->look >= 2 && s->dict_len > 0)
346
0
        swd_insertdict(s,0,s->dict_len);
347
348
735
    s->rp = s->first_rp;
349
735
    if (s->rp >= s->node_count)
350
0
        s->rp -= s->node_count;
351
735
    else
352
735
        s->rp += s->b_size - s->node_count;
353
354
735
#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
735
    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
735
#endif
362
363
735
    return LZO_E_OK;
364
735
}
365
366
367
static
368
void swd_exit(lzo_swd_p s)
369
7.40k
{
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
7.40k
    LZO_UNUSED(s);
382
7.40k
#endif
383
7.40k
}
lzo1b_9x.c:swd_exit
Line
Count
Source
369
659
{
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
659
    LZO_UNUSED(s);
382
659
#endif
383
659
}
lzo1c_9x.c:swd_exit
Line
Count
Source
369
718
{
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
718
    LZO_UNUSED(s);
382
718
#endif
383
718
}
lzo1f_9x.c:swd_exit
Line
Count
Source
369
832
{
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
832
    LZO_UNUSED(s);
382
832
#endif
383
832
}
lzo1x_9x.c:swd_exit
Line
Count
Source
369
1.35k
{
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.35k
    LZO_UNUSED(s);
382
1.35k
#endif
383
1.35k
}
lzo1y_9x.c:swd_exit
Line
Count
Source
369
1.40k
{
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.40k
    LZO_UNUSED(s);
382
1.40k
#endif
383
1.40k
}
lzo1z_9x.c:swd_exit
Line
Count
Source
369
1.69k
{
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.69k
    LZO_UNUSED(s);
382
1.69k
#endif
383
1.69k
}
lzo2a_9x.c:swd_exit
Line
Count
Source
369
735
{
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
735
    LZO_UNUSED(s);
382
735
#endif
383
735
}
384
385
386
#define swd_pos2off(s,pos) \
387
58.0M
    (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
151M
{
397
151M
    int c;
398
399
151M
    if ((c = getbyte(*(s->c))) < 0)
400
7.20M
    {
401
7.20M
        if (s->look > 0)
402
7.19M
            --s->look;
403
7.20M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
7.20M
        s_b(s)[s->ip] = 0;
406
7.20M
        if (s->ip < s->swd_f)
407
1.56M
            s->b_wrap[s->ip] = 0;
408
7.20M
#endif
409
7.20M
    }
410
144M
    else
411
144M
    {
412
144M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
144M
        if (s->ip < s->swd_f)
414
8.09M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
144M
    }
416
151M
    if (++s->ip == s->b_size)
417
4.49k
        s->ip = 0;
418
151M
    if (++s->bp == s->b_size)
419
4.20k
        s->bp = 0;
420
151M
    if (++s->rp == s->b_size)
421
4.49k
        s->rp = 0;
422
151M
}
lzo1b_9x.c:swd_getbyte
Line
Count
Source
396
13.4M
{
397
13.4M
    int c;
398
399
13.4M
    if ((c = getbyte(*(s->c))) < 0)
400
608k
    {
401
608k
        if (s->look > 0)
402
607k
            --s->look;
403
608k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
608k
        s_b(s)[s->ip] = 0;
406
608k
        if (s->ip < s->swd_f)
407
149k
            s->b_wrap[s->ip] = 0;
408
608k
#endif
409
608k
    }
410
12.8M
    else
411
12.8M
    {
412
12.8M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
12.8M
        if (s->ip < s->swd_f)
414
212k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
12.8M
    }
416
13.4M
    if (++s->ip == s->b_size)
417
162
        s->ip = 0;
418
13.4M
    if (++s->bp == s->b_size)
419
134
        s->bp = 0;
420
13.4M
    if (++s->rp == s->b_size)
421
162
        s->rp = 0;
422
13.4M
}
lzo1c_9x.c:swd_getbyte
Line
Count
Source
396
17.1M
{
397
17.1M
    int c;
398
399
17.1M
    if ((c = getbyte(*(s->c))) < 0)
400
619k
    {
401
619k
        if (s->look > 0)
402
618k
            --s->look;
403
619k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
619k
        s_b(s)[s->ip] = 0;
406
619k
        if (s->ip < s->swd_f)
407
161k
            s->b_wrap[s->ip] = 0;
408
619k
#endif
409
619k
    }
410
16.5M
    else
411
16.5M
    {
412
16.5M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
16.5M
        if (s->ip < s->swd_f)
414
1.64M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
16.5M
    }
416
17.1M
    if (++s->ip == s->b_size)
417
869
        s->ip = 0;
418
17.1M
    if (++s->bp == s->b_size)
419
836
        s->bp = 0;
420
17.1M
    if (++s->rp == s->b_size)
421
869
        s->rp = 0;
422
17.1M
}
lzo1f_9x.c:swd_getbyte
Line
Count
Source
396
17.9M
{
397
17.9M
    int c;
398
399
17.9M
    if ((c = getbyte(*(s->c))) < 0)
400
694k
    {
401
694k
        if (s->look > 0)
402
693k
            --s->look;
403
694k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
694k
        s_b(s)[s->ip] = 0;
406
694k
        if (s->ip < s->swd_f)
407
189k
            s->b_wrap[s->ip] = 0;
408
694k
#endif
409
694k
    }
410
17.2M
    else
411
17.2M
    {
412
17.2M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
17.2M
        if (s->ip < s->swd_f)
414
1.74M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
17.2M
    }
416
17.9M
    if (++s->ip == s->b_size)
417
924
        s->ip = 0;
418
17.9M
    if (++s->bp == s->b_size)
419
890
        s->bp = 0;
420
17.9M
    if (++s->rp == s->b_size)
421
924
        s->rp = 0;
422
17.9M
}
lzo1x_9x.c:swd_getbyte
Line
Count
Source
396
25.7M
{
397
25.7M
    int c;
398
399
25.7M
    if ((c = getbyte(*(s->c))) < 0)
400
1.52M
    {
401
1.52M
        if (s->look > 0)
402
1.51M
            --s->look;
403
1.52M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.52M
        s_b(s)[s->ip] = 0;
406
1.52M
        if (s->ip < s->swd_f)
407
234k
            s->b_wrap[s->ip] = 0;
408
1.52M
#endif
409
1.52M
    }
410
24.2M
    else
411
24.2M
    {
412
24.2M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
24.2M
        if (s->ip < s->swd_f)
414
548k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
24.2M
    }
416
25.7M
    if (++s->ip == s->b_size)
417
354
        s->ip = 0;
418
25.7M
    if (++s->bp == s->b_size)
419
303
        s->bp = 0;
420
25.7M
    if (++s->rp == s->b_size)
421
354
        s->rp = 0;
422
25.7M
}
lzo1y_9x.c:swd_getbyte
Line
Count
Source
396
33.3M
{
397
33.3M
    int c;
398
399
33.3M
    if ((c = getbyte(*(s->c))) < 0)
400
1.47M
    {
401
1.47M
        if (s->look > 0)
402
1.47M
            --s->look;
403
1.47M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.47M
        s_b(s)[s->ip] = 0;
406
1.47M
        if (s->ip < s->swd_f)
407
322k
            s->b_wrap[s->ip] = 0;
408
1.47M
#endif
409
1.47M
    }
410
31.8M
    else
411
31.8M
    {
412
31.8M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
31.8M
        if (s->ip < s->swd_f)
414
849k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
31.8M
    }
416
33.3M
    if (++s->ip == s->b_size)
417
503
        s->ip = 0;
418
33.3M
    if (++s->bp == s->b_size)
419
455
        s->bp = 0;
420
33.3M
    if (++s->rp == s->b_size)
421
503
        s->rp = 0;
422
33.3M
}
lzo1z_9x.c:swd_getbyte
Line
Count
Source
396
31.1M
{
397
31.1M
    int c;
398
399
31.1M
    if ((c = getbyte(*(s->c))) < 0)
400
1.79M
    {
401
1.79M
        if (s->look > 0)
402
1.79M
            --s->look;
403
1.79M
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
1.79M
        s_b(s)[s->ip] = 0;
406
1.79M
        if (s->ip < s->swd_f)
407
312k
            s->b_wrap[s->ip] = 0;
408
1.79M
#endif
409
1.79M
    }
410
29.3M
    else
411
29.3M
    {
412
29.3M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
29.3M
        if (s->ip < s->swd_f)
414
736k
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
29.3M
    }
416
31.1M
    if (++s->ip == s->b_size)
417
446
        s->ip = 0;
418
31.1M
    if (++s->bp == s->b_size)
419
398
        s->bp = 0;
420
31.1M
    if (++s->rp == s->b_size)
421
446
        s->rp = 0;
422
31.1M
}
lzo2a_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
497k
    {
401
497k
        if (s->look > 0)
402
497k
            --s->look;
403
497k
#if 1 || defined(__LZO_CHECKER)
404
        /* initialize memory - value doesn't matter */
405
497k
        s_b(s)[s->ip] = 0;
406
497k
        if (s->ip < s->swd_f)
407
191k
            s->b_wrap[s->ip] = 0;
408
497k
#endif
409
497k
    }
410
12.5M
    else
411
12.5M
    {
412
12.5M
        s_b(s)[s->ip] = LZO_BYTE(c);
413
12.5M
        if (s->ip < s->swd_f)
414
2.35M
            s->b_wrap[s->ip] = LZO_BYTE(c);
415
12.5M
    }
416
13.0M
    if (++s->ip == s->b_size)
417
1.23k
        s->ip = 0;
418
13.0M
    if (++s->bp == s->b_size)
419
1.18k
        s->bp = 0;
420
13.0M
    if (++s->rp == s->b_size)
421
1.23k
        s->rp = 0;
422
13.0M
}
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
151M
{
432
151M
    if (s->node_count == 0)
433
96.5M
    {
434
96.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
96.5M
        key = HEAD3(s_b(s),node);
450
96.5M
        assert(s_llen3(s)[key] > 0);
451
96.5M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
59.9M
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
59.9M
            if ((lzo_uint) s_head2(s)[key] == node)
458
14.4M
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
96.5M
    }
462
55.2M
    else
463
55.2M
        --s->node_count;
464
151M
}
lzo1b_9x.c:swd_remove_node
Line
Count
Source
431
13.4M
{
432
13.4M
    if (s->node_count == 0)
433
6.54M
    {
434
6.54M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
6.54M
        key = HEAD3(s_b(s),node);
450
6.54M
        assert(s_llen3(s)[key] > 0);
451
6.54M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
            if ((lzo_uint) s_head2(s)[key] == node)
458
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
6.54M
    }
462
6.89M
    else
463
6.89M
        --s->node_count;
464
13.4M
}
lzo1c_9x.c:swd_remove_node
Line
Count
Source
431
17.1M
{
432
17.1M
    if (s->node_count == 0)
433
14.6M
    {
434
14.6M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
14.6M
        key = HEAD3(s_b(s),node);
450
14.6M
        assert(s_llen3(s)[key] > 0);
451
14.6M
        --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
14.6M
    }
462
2.56M
    else
463
2.56M
        --s->node_count;
464
17.1M
}
lzo1f_9x.c:swd_remove_node
Line
Count
Source
431
17.9M
{
432
17.9M
    if (s->node_count == 0)
433
15.5M
    {
434
15.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
15.5M
        key = HEAD3(s_b(s),node);
450
15.5M
        assert(s_llen3(s)[key] > 0);
451
15.5M
        --s_llen3(s)[key];
452
453
#ifdef HEAD2
454
        IF_HEAD2(s) {
455
            key = HEAD2(s_b(s),node);
456
            assert(s_head2(s)[key] != NIL2);
457
            if ((lzo_uint) s_head2(s)[key] == node)
458
                s_head2(s)[key] = NIL2;
459
        }
460
#endif
461
15.5M
    }
462
2.43M
    else
463
2.43M
        --s->node_count;
464
17.9M
}
lzo1x_9x.c:swd_remove_node
Line
Count
Source
431
25.7M
{
432
25.7M
    if (s->node_count == 0)
433
12.1M
    {
434
12.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
12.1M
        key = HEAD3(s_b(s),node);
450
12.1M
        assert(s_llen3(s)[key] > 0);
451
12.1M
        --s_llen3(s)[key];
452
453
12.1M
#ifdef HEAD2
454
12.1M
        IF_HEAD2(s) {
455
12.1M
            key = HEAD2(s_b(s),node);
456
12.1M
            assert(s_head2(s)[key] != NIL2);
457
12.1M
            if ((lzo_uint) s_head2(s)[key] == node)
458
2.35M
                s_head2(s)[key] = NIL2;
459
12.1M
        }
460
12.1M
#endif
461
12.1M
    }
462
13.6M
    else
463
13.6M
        --s->node_count;
464
25.7M
}
lzo1y_9x.c:swd_remove_node
Line
Count
Source
431
33.3M
{
432
33.3M
    if (s->node_count == 0)
433
19.2M
    {
434
19.2M
        lzo_uint key;
435
436
#ifdef LZO_DEBUG
437
        if (s->first_rp != LZO_UINT_MAX)
438
        {
439
            if (node != s->first_rp)
440
                printf("Remove %5ld: %5ld %5ld %5ld %5ld  %6ld %6ld\n",
441
                        (long)node, (long)s->rp, (long)s->ip, (long)s->bp,
442
                        (long)s->first_rp, (long)(s->ip - node),
443
                        (long)(s->ip - s->bp));
444
            assert(node == s->first_rp);
445
            s->first_rp = LZO_UINT_MAX;
446
        }
447
#endif
448
449
19.2M
        key = HEAD3(s_b(s),node);
450
19.2M
        assert(s_llen3(s)[key] > 0);
451
19.2M
        --s_llen3(s)[key];
452
453
19.2M
#ifdef HEAD2
454
19.2M
        IF_HEAD2(s) {
455
19.2M
            key = HEAD2(s_b(s),node);
456
19.2M
            assert(s_head2(s)[key] != NIL2);
457
19.2M
            if ((lzo_uint) s_head2(s)[key] == node)
458
5.36M
                s_head2(s)[key] = NIL2;
459
19.2M
        }
460
19.2M
#endif
461
19.2M
    }
462
14.0M
    else
463
14.0M
        --s->node_count;
464
33.3M
}
lzo1z_9x.c:swd_remove_node
Line
Count
Source
431
31.1M
{
432
31.1M
    if (s->node_count == 0)
433
16.7M
    {
434
16.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
16.7M
        key = HEAD3(s_b(s),node);
450
16.7M
        assert(s_llen3(s)[key] > 0);
451
16.7M
        --s_llen3(s)[key];
452
453
16.7M
#ifdef HEAD2
454
16.7M
        IF_HEAD2(s) {
455
16.7M
            key = HEAD2(s_b(s),node);
456
16.7M
            assert(s_head2(s)[key] != NIL2);
457
16.7M
            if ((lzo_uint) s_head2(s)[key] == node)
458
2.61M
                s_head2(s)[key] = NIL2;
459
16.7M
        }
460
16.7M
#endif
461
16.7M
    }
462
14.4M
    else
463
14.4M
        --s->node_count;
464
31.1M
}
lzo2a_9x.c:swd_remove_node
Line
Count
Source
431
13.0M
{
432
13.0M
    if (s->node_count == 0)
433
11.7M
    {
434
11.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
11.7M
        key = HEAD3(s_b(s),node);
450
11.7M
        assert(s_llen3(s)[key] > 0);
451
11.7M
        --s_llen3(s)[key];
452
453
11.7M
#ifdef HEAD2
454
11.7M
        IF_HEAD2(s) {
455
11.7M
            key = HEAD2(s_b(s),node);
456
11.7M
            assert(s_head2(s)[key] != NIL2);
457
11.7M
            if ((lzo_uint) s_head2(s)[key] == node)
458
4.09M
                s_head2(s)[key] = NIL2;
459
11.7M
        }
460
11.7M
#endif
461
11.7M
    }
462
1.27M
    else
463
1.27M
        --s->node_count;
464
13.0M
}
465
466
467
/***********************************************************************
468
//
469
************************************************************************/
470
471
static
472
void swd_accept(lzo_swd_p s, lzo_uint n)
473
3.92M
{
474
3.92M
    assert(n <= s->look);
475
476
3.92M
    if (n) do
477
77.4M
    {
478
77.4M
        lzo_uint key;
479
480
77.4M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
77.4M
        key = HEAD3(s_b(s),s->bp);
484
77.4M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
77.4M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
77.4M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
77.4M
        s_llen3(s)[key]++;
488
77.4M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
        IF_HEAD2(s) {
493
55.8M
            key = HEAD2(s_b(s),s->bp);
494
55.8M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
        }
496
#endif
497
498
77.4M
        swd_getbyte(s);
499
77.4M
    } while (--n != 0);
500
3.92M
}
lzo1b_9x.c:swd_accept
Line
Count
Source
473
156k
{
474
156k
    assert(n <= s->look);
475
476
156k
    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
156k
}
lzo1c_9x.c:swd_accept
Line
Count
Source
473
93.2k
{
474
93.2k
    assert(n <= s->look);
475
476
93.2k
    if (n) do
477
6.20M
    {
478
6.20M
        lzo_uint key;
479
480
6.20M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
6.20M
        key = HEAD3(s_b(s),s->bp);
484
6.20M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
6.20M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
6.20M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
6.20M
        s_llen3(s)[key]++;
488
6.20M
        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.20M
        swd_getbyte(s);
499
6.20M
    } while (--n != 0);
500
93.2k
}
lzo1f_9x.c:swd_accept
Line
Count
Source
473
105k
{
474
105k
    assert(n <= s->look);
475
476
105k
    if (n) do
477
6.34M
    {
478
6.34M
        lzo_uint key;
479
480
6.34M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
6.34M
        key = HEAD3(s_b(s),s->bp);
484
6.34M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
6.34M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
6.34M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
6.34M
        s_llen3(s)[key]++;
488
6.34M
        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.34M
        swd_getbyte(s);
499
6.34M
    } while (--n != 0);
500
105k
}
lzo1x_9x.c:swd_accept
Line
Count
Source
473
860k
{
474
860k
    assert(n <= s->look);
475
476
860k
    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
860k
}
lzo1y_9x.c:swd_accept
Line
Count
Source
473
811k
{
474
811k
    assert(n <= s->look);
475
476
811k
    if (n) do
477
14.9M
    {
478
14.9M
        lzo_uint key;
479
480
14.9M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
14.9M
        key = HEAD3(s_b(s),s->bp);
484
14.9M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
14.9M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
14.9M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
14.9M
        s_llen3(s)[key]++;
488
14.9M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
14.9M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
14.9M
        IF_HEAD2(s) {
493
14.9M
            key = HEAD2(s_b(s),s->bp);
494
14.9M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
14.9M
        }
496
14.9M
#endif
497
498
14.9M
        swd_getbyte(s);
499
14.9M
    } while (--n != 0);
500
811k
}
lzo1z_9x.c:swd_accept
Line
Count
Source
473
1.03M
{
474
1.03M
    assert(n <= s->look);
475
476
1.03M
    if (n) do
477
19.2M
    {
478
19.2M
        lzo_uint key;
479
480
19.2M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
19.2M
        key = HEAD3(s_b(s),s->bp);
484
19.2M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
19.2M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
19.2M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
19.2M
        s_llen3(s)[key]++;
488
19.2M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
19.2M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
19.2M
        IF_HEAD2(s) {
493
19.2M
            key = HEAD2(s_b(s),s->bp);
494
19.2M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
19.2M
        }
496
19.2M
#endif
497
498
19.2M
        swd_getbyte(s);
499
19.2M
    } while (--n != 0);
500
1.03M
}
lzo2a_9x.c:swd_accept
Line
Count
Source
473
863k
{
474
863k
    assert(n <= s->look);
475
476
863k
    if (n) do
477
6.46M
    {
478
6.46M
        lzo_uint key;
479
480
6.46M
        swd_remove_node(s,s->rp);
481
482
        /* add bp into HEAD3 */
483
6.46M
        key = HEAD3(s_b(s),s->bp);
484
6.46M
        s_succ3(s)[s->bp] = s_get_head3(s,key);
485
6.46M
        s_head3(s)[key] = SWD_UINT(s->bp);
486
6.46M
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
487
6.46M
        s_llen3(s)[key]++;
488
6.46M
        assert(s_llen3(s)[key] <= s->swd_n);
489
490
6.46M
#ifdef HEAD2
491
        /* add bp into HEAD2 */
492
6.46M
        IF_HEAD2(s) {
493
6.46M
            key = HEAD2(s_b(s),s->bp);
494
6.46M
            s_head2(s)[key] = SWD_UINT(s->bp);
495
6.46M
        }
496
6.46M
#endif
497
498
6.46M
        swd_getbyte(s);
499
6.46M
    } while (--n != 0);
500
863k
}
501
502
503
/***********************************************************************
504
//
505
************************************************************************/
506
507
static
508
void swd_search(lzo_swd_p s, lzo_uint node, lzo_uint cnt)
509
51.0M
{
510
51.0M
    const lzo_bytep p1;
511
51.0M
    const lzo_bytep p2;
512
51.0M
    const lzo_bytep px;
513
51.0M
    lzo_uint m_len = s->m_len;
514
51.0M
    const lzo_bytep b  = s_b(s);
515
51.0M
    const lzo_bytep bp = s_b(s) + s->bp;
516
51.0M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
51.0M
    swd_uintp succ3 = s_succ3(s);
518
51.0M
    unsigned char scan_end1;
519
520
51.0M
    assert(s->m_len > 0);
521
522
51.0M
    scan_end1 = bp[m_len - 1];
523
1.52G
    for ( ; cnt-- > 0; node = succ3[node])
524
1.47G
    {
525
1.47G
        p1 = bp;
526
1.47G
        p2 = b + node;
527
1.47G
        px = bx;
528
529
1.47G
        assert(m_len < s->look);
530
531
1.47G
        if (
532
1.47G
#if 1
533
1.47G
            p2[m_len - 1] == scan_end1 &&
534
664M
            p2[m_len] == p1[m_len] &&
535
99.0M
#endif
536
99.0M
            p2[0] == p1[0] &&
537
98.8M
            p2[1] == p1[1])
538
98.7M
        {
539
98.7M
            lzo_uint i;
540
98.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
98.7M
            p1 += 2; p2 += 2;
550
2.64G
            do {} while (++p1 < px && *p1 == *++p2);
551
98.7M
#endif
552
98.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
98.7M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
90.3M
            if (i < SWD_BEST_OFF)
564
86.3M
            {
565
86.3M
                if (s->best_pos[i] == 0)
566
11.6M
                    s->best_pos[i] = node + 1;
567
86.3M
            }
568
#endif
569
98.7M
            if (i > m_len)
570
15.8M
            {
571
15.8M
                s->m_len = m_len = i;
572
15.8M
                s->m_pos = node;
573
15.8M
                if (m_len == s->look)
574
33.3k
                    return;
575
15.7M
                if (m_len >= s->nice_length)
576
0
                    return;
577
15.7M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
1.39M
                    return;
579
14.3M
                scan_end1 = bp[m_len - 1];
580
14.3M
            }
581
98.7M
        }
582
1.47G
    }
583
51.0M
}
lzo1b_9x.c:swd_search
Line
Count
Source
509
4.39M
{
510
4.39M
    const lzo_bytep p1;
511
4.39M
    const lzo_bytep p2;
512
4.39M
    const lzo_bytep px;
513
4.39M
    lzo_uint m_len = s->m_len;
514
4.39M
    const lzo_bytep b  = s_b(s);
515
4.39M
    const lzo_bytep bp = s_b(s) + s->bp;
516
4.39M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
4.39M
    swd_uintp succ3 = s_succ3(s);
518
4.39M
    unsigned char scan_end1;
519
520
4.39M
    assert(s->m_len > 0);
521
522
4.39M
    scan_end1 = bp[m_len - 1];
523
49.2M
    for ( ; cnt-- > 0; node = succ3[node])
524
44.9M
    {
525
44.9M
        p1 = bp;
526
44.9M
        p2 = b + node;
527
44.9M
        px = bx;
528
529
44.9M
        assert(m_len < s->look);
530
531
44.9M
        if (
532
44.9M
#if 1
533
44.9M
            p2[m_len - 1] == scan_end1 &&
534
20.3M
            p2[m_len] == p1[m_len] &&
535
2.59M
#endif
536
2.59M
            p2[0] == p1[0] &&
537
2.58M
            p2[1] == p1[1])
538
2.58M
        {
539
2.58M
            lzo_uint i;
540
2.58M
            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.58M
            p1 += 2; p2 += 2;
550
358M
            do {} while (++p1 < px && *p1 == *++p2);
551
2.58M
#endif
552
2.58M
            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.58M
            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.58M
            if (i > m_len)
570
943k
            {
571
943k
                s->m_len = m_len = i;
572
943k
                s->m_pos = node;
573
943k
                if (m_len == s->look)
574
2.89k
                    return;
575
940k
                if (m_len >= s->nice_length)
576
0
                    return;
577
940k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
76.2k
                    return;
579
864k
                scan_end1 = bp[m_len - 1];
580
864k
            }
581
2.58M
        }
582
44.9M
    }
583
4.39M
}
lzo1c_9x.c:swd_search
Line
Count
Source
509
10.9M
{
510
10.9M
    const lzo_bytep p1;
511
10.9M
    const lzo_bytep p2;
512
10.9M
    const lzo_bytep px;
513
10.9M
    lzo_uint m_len = s->m_len;
514
10.9M
    const lzo_bytep b  = s_b(s);
515
10.9M
    const lzo_bytep bp = s_b(s) + s->bp;
516
10.9M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
10.9M
    swd_uintp succ3 = s_succ3(s);
518
10.9M
    unsigned char scan_end1;
519
520
10.9M
    assert(s->m_len > 0);
521
522
10.9M
    scan_end1 = bp[m_len - 1];
523
64.7M
    for ( ; cnt-- > 0; node = succ3[node])
524
53.7M
    {
525
53.7M
        p1 = bp;
526
53.7M
        p2 = b + node;
527
53.7M
        px = bx;
528
529
53.7M
        assert(m_len < s->look);
530
531
53.7M
        if (
532
53.7M
#if 1
533
53.7M
            p2[m_len - 1] == scan_end1 &&
534
16.9M
            p2[m_len] == p1[m_len] &&
535
2.52M
#endif
536
2.52M
            p2[0] == p1[0] &&
537
2.49M
            p2[1] == p1[1])
538
2.48M
        {
539
2.48M
            lzo_uint i;
540
2.48M
            assert(lzo_memcmp(bp,&b[node],3) == 0);
541
542
#if 0 && (LZO_OPT_UNALIGNED32)
543
            p1 += 3; p2 += 3;
544
            while (p1 + 4 <= px && UA_GET_NE32(p1) == UA_GET_NE32(p2))
545
                p1 += 4, p2 += 4;
546
            while (p1 < px && *p1 == *p2)
547
                p1 += 1, p2 += 1;
548
#else
549
2.48M
            p1 += 2; p2 += 2;
550
247M
            do {} while (++p1 < px && *p1 == *++p2);
551
2.48M
#endif
552
2.48M
            i = pd(p1, bp);
553
554
#ifdef LZO_DEBUG
555
            if (lzo_memcmp(bp,&b[node],i) != 0)
556
                printf("%5ld %5ld %5ld %02x/%02x %02x/%02x\n",
557
                        (long)s->bp, (long) node, (long) i,
558
                        bp[0], bp[1], b[node], b[node+1]);
559
#endif
560
2.48M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
#if defined(SWD_BEST_OFF)
563
            if (i < SWD_BEST_OFF)
564
            {
565
                if (s->best_pos[i] == 0)
566
                    s->best_pos[i] = node + 1;
567
            }
568
#endif
569
2.48M
            if (i > m_len)
570
656k
            {
571
656k
                s->m_len = m_len = i;
572
656k
                s->m_pos = node;
573
656k
                if (m_len == s->look)
574
8.36k
                    return;
575
647k
                if (m_len >= s->nice_length)
576
0
                    return;
577
647k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
46.9k
                    return;
579
600k
                scan_end1 = bp[m_len - 1];
580
600k
            }
581
2.48M
        }
582
53.7M
    }
583
10.9M
}
lzo1f_9x.c:swd_search
Line
Count
Source
509
11.6M
{
510
11.6M
    const lzo_bytep p1;
511
11.6M
    const lzo_bytep p2;
512
11.6M
    const lzo_bytep px;
513
11.6M
    lzo_uint m_len = s->m_len;
514
11.6M
    const lzo_bytep b  = s_b(s);
515
11.6M
    const lzo_bytep bp = s_b(s) + s->bp;
516
11.6M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
11.6M
    swd_uintp succ3 = s_succ3(s);
518
11.6M
    unsigned char scan_end1;
519
520
11.6M
    assert(s->m_len > 0);
521
522
11.6M
    scan_end1 = bp[m_len - 1];
523
52.1M
    for ( ; cnt-- > 0; node = succ3[node])
524
40.6M
    {
525
40.6M
        p1 = bp;
526
40.6M
        p2 = b + node;
527
40.6M
        px = bx;
528
529
40.6M
        assert(m_len < s->look);
530
531
40.6M
        if (
532
40.6M
#if 1
533
40.6M
            p2[m_len - 1] == scan_end1 &&
534
11.4M
            p2[m_len] == p1[m_len] &&
535
1.48M
#endif
536
1.48M
            p2[0] == p1[0] &&
537
1.46M
            p2[1] == p1[1])
538
1.45M
        {
539
1.45M
            lzo_uint i;
540
1.45M
            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.45M
            p1 += 2; p2 += 2;
550
228M
            do {} while (++p1 < px && *p1 == *++p2);
551
1.45M
#endif
552
1.45M
            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.45M
            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.45M
            if (i > m_len)
570
634k
            {
571
634k
                s->m_len = m_len = i;
572
634k
                s->m_pos = node;
573
634k
                if (m_len == s->look)
574
4.86k
                    return;
575
629k
                if (m_len >= s->nice_length)
576
0
                    return;
577
629k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
65.8k
                    return;
579
563k
                scan_end1 = bp[m_len - 1];
580
563k
            }
581
1.45M
        }
582
40.6M
    }
583
11.6M
}
lzo1x_9x.c:swd_search
Line
Count
Source
509
5.49M
{
510
5.49M
    const lzo_bytep p1;
511
5.49M
    const lzo_bytep p2;
512
5.49M
    const lzo_bytep px;
513
5.49M
    lzo_uint m_len = s->m_len;
514
5.49M
    const lzo_bytep b  = s_b(s);
515
5.49M
    const lzo_bytep bp = s_b(s) + s->bp;
516
5.49M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
5.49M
    swd_uintp succ3 = s_succ3(s);
518
5.49M
    unsigned char scan_end1;
519
520
5.49M
    assert(s->m_len > 0);
521
522
5.49M
    scan_end1 = bp[m_len - 1];
523
473M
    for ( ; cnt-- > 0; node = succ3[node])
524
468M
    {
525
468M
        p1 = bp;
526
468M
        p2 = b + node;
527
468M
        px = bx;
528
529
468M
        assert(m_len < s->look);
530
531
468M
        if (
532
468M
#if 1
533
468M
            p2[m_len - 1] == scan_end1 &&
534
221M
            p2[m_len] == p1[m_len] &&
535
35.8M
#endif
536
35.8M
            p2[0] == p1[0] &&
537
35.7M
            p2[1] == p1[1])
538
35.7M
        {
539
35.7M
            lzo_uint i;
540
35.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
35.7M
            p1 += 2; p2 += 2;
550
449M
            do {} while (++p1 < px && *p1 == *++p2);
551
35.7M
#endif
552
35.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
35.7M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
35.7M
#if defined(SWD_BEST_OFF)
563
35.7M
            if (i < SWD_BEST_OFF)
564
34.4M
            {
565
34.4M
                if (s->best_pos[i] == 0)
566
4.27M
                    s->best_pos[i] = node + 1;
567
34.4M
            }
568
35.7M
#endif
569
35.7M
            if (i > m_len)
570
4.51M
            {
571
4.51M
                s->m_len = m_len = i;
572
4.51M
                s->m_pos = node;
573
4.51M
                if (m_len == s->look)
574
3.49k
                    return;
575
4.51M
                if (m_len >= s->nice_length)
576
0
                    return;
577
4.51M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
370k
                    return;
579
4.14M
                scan_end1 = bp[m_len - 1];
580
4.14M
            }
581
35.7M
        }
582
468M
    }
583
5.49M
}
lzo1y_9x.c:swd_search
Line
Count
Source
509
9.77M
{
510
9.77M
    const lzo_bytep p1;
511
9.77M
    const lzo_bytep p2;
512
9.77M
    const lzo_bytep px;
513
9.77M
    lzo_uint m_len = s->m_len;
514
9.77M
    const lzo_bytep b  = s_b(s);
515
9.77M
    const lzo_bytep bp = s_b(s) + s->bp;
516
9.77M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
9.77M
    swd_uintp succ3 = s_succ3(s);
518
9.77M
    unsigned char scan_end1;
519
520
9.77M
    assert(s->m_len > 0);
521
522
9.77M
    scan_end1 = bp[m_len - 1];
523
410M
    for ( ; cnt-- > 0; node = succ3[node])
524
401M
    {
525
401M
        p1 = bp;
526
401M
        p2 = b + node;
527
401M
        px = bx;
528
529
401M
        assert(m_len < s->look);
530
531
401M
        if (
532
401M
#if 1
533
401M
            p2[m_len - 1] == scan_end1 &&
534
181M
            p2[m_len] == p1[m_len] &&
535
27.2M
#endif
536
27.2M
            p2[0] == p1[0] &&
537
27.1M
            p2[1] == p1[1])
538
27.1M
        {
539
27.1M
            lzo_uint i;
540
27.1M
            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
27.1M
            p1 += 2; p2 += 2;
550
514M
            do {} while (++p1 < px && *p1 == *++p2);
551
27.1M
#endif
552
27.1M
            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
27.1M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
27.1M
#if defined(SWD_BEST_OFF)
563
27.1M
            if (i < SWD_BEST_OFF)
564
25.7M
            {
565
25.7M
                if (s->best_pos[i] == 0)
566
3.35M
                    s->best_pos[i] = node + 1;
567
25.7M
            }
568
27.1M
#endif
569
27.1M
            if (i > m_len)
570
3.81M
            {
571
3.81M
                s->m_len = m_len = i;
572
3.81M
                s->m_pos = node;
573
3.81M
                if (m_len == s->look)
574
3.64k
                    return;
575
3.80M
                if (m_len >= s->nice_length)
576
0
                    return;
577
3.80M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
350k
                    return;
579
3.45M
                scan_end1 = bp[m_len - 1];
580
3.45M
            }
581
27.1M
        }
582
401M
    }
583
9.77M
}
lzo1z_9x.c:swd_search
Line
Count
Source
509
6.57M
{
510
6.57M
    const lzo_bytep p1;
511
6.57M
    const lzo_bytep p2;
512
6.57M
    const lzo_bytep px;
513
6.57M
    lzo_uint m_len = s->m_len;
514
6.57M
    const lzo_bytep b  = s_b(s);
515
6.57M
    const lzo_bytep bp = s_b(s) + s->bp;
516
6.57M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
6.57M
    swd_uintp succ3 = s_succ3(s);
518
6.57M
    unsigned char scan_end1;
519
520
6.57M
    assert(s->m_len > 0);
521
522
6.57M
    scan_end1 = bp[m_len - 1];
523
446M
    for ( ; cnt-- > 0; node = succ3[node])
524
440M
    {
525
440M
        p1 = bp;
526
440M
        p2 = b + node;
527
440M
        px = bx;
528
529
440M
        assert(m_len < s->look);
530
531
440M
        if (
532
440M
#if 1
533
440M
            p2[m_len - 1] == scan_end1 &&
534
199M
            p2[m_len] == p1[m_len] &&
535
27.5M
#endif
536
27.5M
            p2[0] == p1[0] &&
537
27.5M
            p2[1] == p1[1])
538
27.4M
        {
539
27.4M
            lzo_uint i;
540
27.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
27.4M
            p1 += 2; p2 += 2;
550
514M
            do {} while (++p1 < px && *p1 == *++p2);
551
27.4M
#endif
552
27.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
27.4M
            assert(lzo_memcmp(bp,&b[node],i) == 0);
561
562
27.4M
#if defined(SWD_BEST_OFF)
563
27.4M
            if (i < SWD_BEST_OFF)
564
26.0M
            {
565
26.0M
                if (s->best_pos[i] == 0)
566
3.97M
                    s->best_pos[i] = node + 1;
567
26.0M
            }
568
27.4M
#endif
569
27.4M
            if (i > m_len)
570
4.44M
            {
571
4.44M
                s->m_len = m_len = i;
572
4.44M
                s->m_pos = node;
573
4.44M
                if (m_len == s->look)
574
5.20k
                    return;
575
4.44M
                if (m_len >= s->nice_length)
576
0
                    return;
577
4.44M
                if (m_len > (lzo_uint) s_best3(s)[node])
578
427k
                    return;
579
4.01M
                scan_end1 = bp[m_len - 1];
580
4.01M
            }
581
27.4M
        }
582
440M
    }
583
6.57M
}
lzo2a_9x.c:swd_search
Line
Count
Source
509
2.16M
{
510
2.16M
    const lzo_bytep p1;
511
2.16M
    const lzo_bytep p2;
512
2.16M
    const lzo_bytep px;
513
2.16M
    lzo_uint m_len = s->m_len;
514
2.16M
    const lzo_bytep b  = s_b(s);
515
2.16M
    const lzo_bytep bp = s_b(s) + s->bp;
516
2.16M
    const lzo_bytep bx = s_b(s) + s->bp + s->look;
517
2.16M
    swd_uintp succ3 = s_succ3(s);
518
2.16M
    unsigned char scan_end1;
519
520
2.16M
    assert(s->m_len > 0);
521
522
2.16M
    scan_end1 = bp[m_len - 1];
523
23.6M
    for ( ; cnt-- > 0; node = succ3[node])
524
21.5M
    {
525
21.5M
        p1 = bp;
526
21.5M
        p2 = b + node;
527
21.5M
        px = bx;
528
529
21.5M
        assert(m_len < s->look);
530
531
21.5M
        if (
532
21.5M
#if 1
533
21.5M
            p2[m_len - 1] == scan_end1 &&
534
12.9M
            p2[m_len] == p1[m_len] &&
535
1.88M
#endif
536
1.88M
            p2[0] == p1[0] &&
537
1.88M
            p2[1] == p1[1])
538
1.87M
        {
539
1.87M
            lzo_uint i;
540
1.87M
            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.87M
            p1 += 2; p2 += 2;
550
331M
            do {} while (++p1 < px && *p1 == *++p2);
551
1.87M
#endif
552
1.87M
            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.87M
            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.87M
            if (i > m_len)
570
791k
            {
571
791k
                s->m_len = m_len = i;
572
791k
                s->m_pos = node;
573
791k
                if (m_len == s->look)
574
4.89k
                    return;
575
786k
                if (m_len >= s->nice_length)
576
0
                    return;
577
786k
                if (m_len > (lzo_uint) s_best3(s)[node])
578
54.2k
                    return;
579
732k
                scan_end1 = bp[m_len - 1];
580
732k
            }
581
1.87M
        }
582
21.5M
    }
583
2.16M
}
584
585
586
/***********************************************************************
587
//
588
************************************************************************/
589
590
#ifdef HEAD2
591
592
static
593
lzo_bool swd_search2(lzo_swd_p s)
594
47.3M
{
595
47.3M
    lzo_uint key;
596
597
47.3M
    assert(s->look >= 2);
598
47.3M
    assert(s->m_len > 0);
599
600
47.3M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
47.3M
    if (key == NIL2)
602
23.3M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
47.3M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
#if defined(SWD_BEST_OFF)
610
21.8M
    if (s->best_pos[2] == 0)
611
21.8M
        s->best_pos[2] = key + 1;
612
#endif
613
614
24.0M
    if (s->m_len < 2)
615
24.0M
    {
616
24.0M
        s->m_len = 2;
617
24.0M
        s->m_pos = key;
618
24.0M
    }
619
24.0M
    return 1;
620
47.3M
}
lzo1x_9x.c:swd_search2
Line
Count
Source
594
10.5M
{
595
10.5M
    lzo_uint key;
596
597
10.5M
    assert(s->look >= 2);
598
10.5M
    assert(s->m_len > 0);
599
600
10.5M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
10.5M
    if (key == NIL2)
602
5.03M
        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.5M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
5.49M
#if defined(SWD_BEST_OFF)
610
5.49M
    if (s->best_pos[2] == 0)
611
5.49M
        s->best_pos[2] = key + 1;
612
5.49M
#endif
613
614
5.49M
    if (s->m_len < 2)
615
5.49M
    {
616
5.49M
        s->m_len = 2;
617
5.49M
        s->m_pos = key;
618
5.49M
    }
619
5.49M
    return 1;
620
10.5M
}
lzo1y_9x.c:swd_search2
Line
Count
Source
594
18.3M
{
595
18.3M
    lzo_uint key;
596
597
18.3M
    assert(s->look >= 2);
598
18.3M
    assert(s->m_len > 0);
599
600
18.3M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
18.3M
    if (key == NIL2)
602
8.59M
        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
18.3M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
9.77M
#if defined(SWD_BEST_OFF)
610
9.77M
    if (s->best_pos[2] == 0)
611
9.77M
        s->best_pos[2] = key + 1;
612
9.77M
#endif
613
614
9.77M
    if (s->m_len < 2)
615
9.77M
    {
616
9.77M
        s->m_len = 2;
617
9.77M
        s->m_pos = key;
618
9.77M
    }
619
9.77M
    return 1;
620
18.3M
}
lzo1z_9x.c:swd_search2
Line
Count
Source
594
11.9M
{
595
11.9M
    lzo_uint key;
596
597
11.9M
    assert(s->look >= 2);
598
11.9M
    assert(s->m_len > 0);
599
600
11.9M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
11.9M
    if (key == NIL2)
602
5.34M
        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
11.9M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
6.57M
#if defined(SWD_BEST_OFF)
610
6.57M
    if (s->best_pos[2] == 0)
611
6.57M
        s->best_pos[2] = key + 1;
612
6.57M
#endif
613
614
6.57M
    if (s->m_len < 2)
615
6.57M
    {
616
6.57M
        s->m_len = 2;
617
6.57M
        s->m_pos = key;
618
6.57M
    }
619
6.57M
    return 1;
620
11.9M
}
lzo2a_9x.c:swd_search2
Line
Count
Source
594
6.54M
{
595
6.54M
    lzo_uint key;
596
597
6.54M
    assert(s->look >= 2);
598
6.54M
    assert(s->m_len > 0);
599
600
6.54M
    key = s_head2(s)[ HEAD2(s_b(s),s->bp) ];
601
6.54M
    if (key == NIL2)
602
4.38M
        return 0;
603
#ifdef LZO_DEBUG
604
    if (lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) != 0)
605
        printf("%5ld %5ld %02x/%02x %02x/%02x\n", (long)s->bp, (long)key,
606
                s_b(s)[s->bp], s_b(s)[s->bp+1], s_b(s)[key], s_b(s)[key+1]);
607
#endif
608
6.54M
    assert(lzo_memcmp(&s_b(s)[s->bp],&s_b(s)[key],2) == 0);
609
#if defined(SWD_BEST_OFF)
610
    if (s->best_pos[2] == 0)
611
        s->best_pos[2] = key + 1;
612
#endif
613
614
2.16M
    if (s->m_len < 2)
615
2.16M
    {
616
2.16M
        s->m_len = 2;
617
2.16M
        s->m_pos = key;
618
2.16M
    }
619
2.16M
    return 1;
620
6.54M
}
621
622
#endif
623
624
625
/***********************************************************************
626
//
627
************************************************************************/
628
629
static
630
void swd_findbest(lzo_swd_p s)
631
74.3M
{
632
74.3M
    lzo_uint key;
633
74.3M
    lzo_uint cnt, node;
634
74.3M
    lzo_uint len;
635
636
74.3M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
74.3M
    key = HEAD3(s_b(s),s->bp);
640
74.3M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
74.3M
    cnt = s_llen3(s)[key]++;
642
74.3M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
74.3M
    if (cnt > s->max_chain && s->max_chain > 0)
644
358k
        cnt = s->max_chain;
645
74.3M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
74.3M
    s->b_char = s_b(s)[s->bp];
648
74.3M
    len = s->m_len;
649
74.3M
    if (s->m_len >= s->look)
650
12.8k
    {
651
12.8k
        if (s->look == 0)
652
7.40k
            s->b_char = -1;
653
12.8k
        s->m_off = 0;
654
12.8k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
12.8k
    }
656
74.3M
    else
657
74.3M
    {
658
#if defined(HEAD2)
659
47.3M
        if (swd_search2(s) && s->look >= 3)
660
24.0M
            swd_search(s,node,cnt);
661
#else
662
26.9M
        if (s->look >= 3)
663
26.9M
            swd_search(s,node,cnt);
664
#endif
665
74.3M
        if (s->m_len > len)
666
24.6M
            s->m_off = swd_pos2off(s,s->m_pos);
667
74.3M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
40.8M
        if (s->use_best_off)
671
40.8M
        {
672
40.8M
            unsigned i;
673
1.34G
            for (i = 2; i < SWD_BEST_OFF; i++)
674
1.30G
                if (s->best_pos[i] > 0)
675
33.4M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
1.27G
                else
677
1.27G
                    s->best_off[i] = 0;
678
40.8M
        }
679
#endif
680
74.3M
    }
681
682
74.3M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
47.3M
        key = HEAD2(s_b(s),s->bp);
688
47.3M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
74.3M
}
lzo1b_9x.c:swd_findbest
Line
Count
Source
631
4.39M
{
632
4.39M
    lzo_uint key;
633
4.39M
    lzo_uint cnt, node;
634
4.39M
    lzo_uint len;
635
636
4.39M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
4.39M
    key = HEAD3(s_b(s),s->bp);
640
4.39M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
4.39M
    cnt = s_llen3(s)[key]++;
642
4.39M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
4.39M
    if (cnt > s->max_chain && s->max_chain > 0)
644
8.82k
        cnt = s->max_chain;
645
4.39M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
4.39M
    s->b_char = s_b(s)[s->bp];
648
4.39M
    len = s->m_len;
649
4.39M
    if (s->m_len >= s->look)
650
1.37k
    {
651
1.37k
        if (s->look == 0)
652
659
            s->b_char = -1;
653
1.37k
        s->m_off = 0;
654
1.37k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.37k
    }
656
4.39M
    else
657
4.39M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
4.39M
        if (s->look >= 3)
663
4.39M
            swd_search(s,node,cnt);
664
4.39M
#endif
665
4.39M
        if (s->m_len > len)
666
245k
            s->m_off = swd_pos2off(s,s->m_pos);
667
4.39M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
#if defined(SWD_BEST_OFF)
670
        if (s->use_best_off)
671
        {
672
            unsigned i;
673
            for (i = 2; i < SWD_BEST_OFF; i++)
674
                if (s->best_pos[i] > 0)
675
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
                else
677
                    s->best_off[i] = 0;
678
        }
679
#endif
680
4.39M
    }
681
682
4.39M
    swd_remove_node(s,s->rp);
683
684
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
    IF_HEAD2(s) {
687
        key = HEAD2(s_b(s),s->bp);
688
        s_head2(s)[key] = SWD_UINT(s->bp);
689
    }
690
#endif
691
4.39M
}
lzo1c_9x.c:swd_findbest
Line
Count
Source
631
10.9M
{
632
10.9M
    lzo_uint key;
633
10.9M
    lzo_uint cnt, node;
634
10.9M
    lzo_uint len;
635
636
10.9M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
10.9M
    key = HEAD3(s_b(s),s->bp);
640
10.9M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
10.9M
    cnt = s_llen3(s)[key]++;
642
10.9M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
10.9M
    if (cnt > s->max_chain && s->max_chain > 0)
644
12.0k
        cnt = s->max_chain;
645
10.9M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
10.9M
    s->b_char = s_b(s)[s->bp];
648
10.9M
    len = s->m_len;
649
10.9M
    if (s->m_len >= s->look)
650
1.35k
    {
651
1.35k
        if (s->look == 0)
652
718
            s->b_char = -1;
653
1.35k
        s->m_off = 0;
654
1.35k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.35k
    }
656
10.9M
    else
657
10.9M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
10.9M
        if (s->look >= 3)
663
10.9M
            swd_search(s,node,cnt);
664
10.9M
#endif
665
10.9M
        if (s->m_len > len)
666
169k
            s->m_off = swd_pos2off(s,s->m_pos);
667
10.9M
        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
10.9M
    }
681
682
10.9M
    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
10.9M
}
lzo1f_9x.c:swd_findbest
Line
Count
Source
631
11.6M
{
632
11.6M
    lzo_uint key;
633
11.6M
    lzo_uint cnt, node;
634
11.6M
    lzo_uint len;
635
636
11.6M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
11.6M
    key = HEAD3(s_b(s),s->bp);
640
11.6M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
11.6M
    cnt = s_llen3(s)[key]++;
642
11.6M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
11.6M
    if (cnt > s->max_chain && s->max_chain > 0)
644
5.08k
        cnt = s->max_chain;
645
11.6M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
11.6M
    s->b_char = s_b(s)[s->bp];
648
11.6M
    len = s->m_len;
649
11.6M
    if (s->m_len >= s->look)
650
1.66k
    {
651
1.66k
        if (s->look == 0)
652
832
            s->b_char = -1;
653
1.66k
        s->m_off = 0;
654
1.66k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.66k
    }
656
11.6M
    else
657
11.6M
    {
658
#if defined(HEAD2)
659
        if (swd_search2(s) && s->look >= 3)
660
            swd_search(s,node,cnt);
661
#else
662
11.6M
        if (s->look >= 3)
663
11.6M
            swd_search(s,node,cnt);
664
11.6M
#endif
665
11.6M
        if (s->m_len > len)
666
191k
            s->m_off = swd_pos2off(s,s->m_pos);
667
11.6M
        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
11.6M
    }
681
682
11.6M
    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
11.6M
}
lzo1x_9x.c:swd_findbest
Line
Count
Source
631
10.5M
{
632
10.5M
    lzo_uint key;
633
10.5M
    lzo_uint cnt, node;
634
10.5M
    lzo_uint len;
635
636
10.5M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
10.5M
    key = HEAD3(s_b(s),s->bp);
640
10.5M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
10.5M
    cnt = s_llen3(s)[key]++;
642
10.5M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
10.5M
    if (cnt > s->max_chain && s->max_chain > 0)
644
107k
        cnt = s->max_chain;
645
10.5M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
10.5M
    s->b_char = s_b(s)[s->bp];
648
10.5M
    len = s->m_len;
649
10.5M
    if (s->m_len >= s->look)
650
2.16k
    {
651
2.16k
        if (s->look == 0)
652
1.35k
            s->b_char = -1;
653
2.16k
        s->m_off = 0;
654
2.16k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
2.16k
    }
656
10.5M
    else
657
10.5M
    {
658
10.5M
#if defined(HEAD2)
659
10.5M
        if (swd_search2(s) && s->look >= 3)
660
5.49M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
10.5M
        if (s->m_len > len)
666
5.49M
            s->m_off = swd_pos2off(s,s->m_pos);
667
10.5M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
10.5M
#if defined(SWD_BEST_OFF)
670
10.5M
        if (s->use_best_off)
671
10.5M
        {
672
10.5M
            unsigned i;
673
347M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
336M
                if (s->best_pos[i] > 0)
675
9.77M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
327M
                else
677
327M
                    s->best_off[i] = 0;
678
10.5M
        }
679
10.5M
#endif
680
10.5M
    }
681
682
10.5M
    swd_remove_node(s,s->rp);
683
684
10.5M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
10.5M
    IF_HEAD2(s) {
687
10.5M
        key = HEAD2(s_b(s),s->bp);
688
10.5M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
10.5M
    }
690
10.5M
#endif
691
10.5M
}
lzo1y_9x.c:swd_findbest
Line
Count
Source
631
18.3M
{
632
18.3M
    lzo_uint key;
633
18.3M
    lzo_uint cnt, node;
634
18.3M
    lzo_uint len;
635
636
18.3M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
18.3M
    key = HEAD3(s_b(s),s->bp);
640
18.3M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
18.3M
    cnt = s_llen3(s)[key]++;
642
18.3M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
18.3M
    if (cnt > s->max_chain && s->max_chain > 0)
644
101k
        cnt = s->max_chain;
645
18.3M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
18.3M
    s->b_char = s_b(s)[s->bp];
648
18.3M
    len = s->m_len;
649
18.3M
    if (s->m_len >= s->look)
650
2.29k
    {
651
2.29k
        if (s->look == 0)
652
1.40k
            s->b_char = -1;
653
2.29k
        s->m_off = 0;
654
2.29k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
2.29k
    }
656
18.3M
    else
657
18.3M
    {
658
18.3M
#if defined(HEAD2)
659
18.3M
        if (swd_search2(s) && s->look >= 3)
660
9.77M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
18.3M
        if (s->m_len > len)
666
9.77M
            s->m_off = swd_pos2off(s,s->m_pos);
667
18.3M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
18.3M
#if defined(SWD_BEST_OFF)
670
18.3M
        if (s->use_best_off)
671
18.3M
        {
672
18.3M
            unsigned i;
673
606M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
588M
                if (s->best_pos[i] > 0)
675
13.1M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
574M
                else
677
574M
                    s->best_off[i] = 0;
678
18.3M
        }
679
18.3M
#endif
680
18.3M
    }
681
682
18.3M
    swd_remove_node(s,s->rp);
683
684
18.3M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
18.3M
    IF_HEAD2(s) {
687
18.3M
        key = HEAD2(s_b(s),s->bp);
688
18.3M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
18.3M
    }
690
18.3M
#endif
691
18.3M
}
lzo1z_9x.c:swd_findbest
Line
Count
Source
631
11.9M
{
632
11.9M
    lzo_uint key;
633
11.9M
    lzo_uint cnt, node;
634
11.9M
    lzo_uint len;
635
636
11.9M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
11.9M
    key = HEAD3(s_b(s),s->bp);
640
11.9M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
11.9M
    cnt = s_llen3(s)[key]++;
642
11.9M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
11.9M
    if (cnt > s->max_chain && s->max_chain > 0)
644
113k
        cnt = s->max_chain;
645
11.9M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
11.9M
    s->b_char = s_b(s)[s->bp];
648
11.9M
    len = s->m_len;
649
11.9M
    if (s->m_len >= s->look)
650
2.78k
    {
651
2.78k
        if (s->look == 0)
652
1.69k
            s->b_char = -1;
653
2.78k
        s->m_off = 0;
654
2.78k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
2.78k
    }
656
11.9M
    else
657
11.9M
    {
658
11.9M
#if defined(HEAD2)
659
11.9M
        if (swd_search2(s) && s->look >= 3)
660
6.57M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
11.9M
        if (s->m_len > len)
666
6.57M
            s->m_off = swd_pos2off(s,s->m_pos);
667
11.9M
        s_best3(s)[s->bp] = SWD_UINT(s->m_len);
668
669
11.9M
#if defined(SWD_BEST_OFF)
670
11.9M
        if (s->use_best_off)
671
11.9M
        {
672
11.9M
            unsigned i;
673
393M
            for (i = 2; i < SWD_BEST_OFF; i++)
674
381M
                if (s->best_pos[i] > 0)
675
10.5M
                    s->best_off[i] = swd_pos2off(s,s->best_pos[i]-1);
676
371M
                else
677
371M
                    s->best_off[i] = 0;
678
11.9M
        }
679
11.9M
#endif
680
11.9M
    }
681
682
11.9M
    swd_remove_node(s,s->rp);
683
684
11.9M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
11.9M
    IF_HEAD2(s) {
687
11.9M
        key = HEAD2(s_b(s),s->bp);
688
11.9M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
11.9M
    }
690
11.9M
#endif
691
11.9M
}
lzo2a_9x.c:swd_findbest
Line
Count
Source
631
6.54M
{
632
6.54M
    lzo_uint key;
633
6.54M
    lzo_uint cnt, node;
634
6.54M
    lzo_uint len;
635
636
6.54M
    assert(s->m_len > 0);
637
638
    /* get current head, add bp into HEAD3 */
639
6.54M
    key = HEAD3(s_b(s),s->bp);
640
6.54M
    node = s_succ3(s)[s->bp] = s_get_head3(s,key);
641
6.54M
    cnt = s_llen3(s)[key]++;
642
6.54M
    assert(s_llen3(s)[key] <= s->swd_n + s->swd_f);
643
6.54M
    if (cnt > s->max_chain && s->max_chain > 0)
644
8.88k
        cnt = s->max_chain;
645
6.54M
    s_head3(s)[key] = SWD_UINT(s->bp);
646
647
6.54M
    s->b_char = s_b(s)[s->bp];
648
6.54M
    len = s->m_len;
649
6.54M
    if (s->m_len >= s->look)
650
1.16k
    {
651
1.16k
        if (s->look == 0)
652
735
            s->b_char = -1;
653
1.16k
        s->m_off = 0;
654
1.16k
        s_best3(s)[s->bp] = SWD_UINT(s->swd_f + 1);
655
1.16k
    }
656
6.54M
    else
657
6.54M
    {
658
6.54M
#if defined(HEAD2)
659
6.54M
        if (swd_search2(s) && s->look >= 3)
660
2.16M
            swd_search(s,node,cnt);
661
#else
662
        if (s->look >= 3)
663
            swd_search(s,node,cnt);
664
#endif
665
6.54M
        if (s->m_len > len)
666
2.16M
            s->m_off = swd_pos2off(s,s->m_pos);
667
6.54M
        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.54M
    }
681
682
6.54M
    swd_remove_node(s,s->rp);
683
684
6.54M
#ifdef HEAD2
685
    /* add bp into HEAD2 */
686
6.54M
    IF_HEAD2(s) {
687
6.54M
        key = HEAD2(s_b(s),s->bp);
688
6.54M
        s_head2(s)[key] = SWD_UINT(s->bp);
689
6.54M
    }
690
6.54M
#endif
691
6.54M
}
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: */