lzoruby 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. data/{README.txt → README} +3 -7
  2. data/ext/extconf.rb +4 -1
  3. metadata +24 -131
  4. data/ext/compr1b.h +0 -81
  5. data/ext/compr1c.h +0 -81
  6. data/ext/config1.h +0 -61
  7. data/ext/config1a.h +0 -196
  8. data/ext/config1b.h +0 -140
  9. data/ext/config1c.h +0 -145
  10. data/ext/config1f.h +0 -97
  11. data/ext/config1x.h +0 -118
  12. data/ext/config1y.h +0 -66
  13. data/ext/config1z.h +0 -65
  14. data/ext/config2a.h +0 -155
  15. data/ext/lzo/lzo1.h +0 -96
  16. data/ext/lzo/lzo1a.h +0 -96
  17. data/ext/lzo/lzo1b.h +0 -160
  18. data/ext/lzo/lzo1c.h +0 -160
  19. data/ext/lzo/lzo1f.h +0 -108
  20. data/ext/lzo/lzo1x.h +0 -177
  21. data/ext/lzo/lzo1y.h +0 -145
  22. data/ext/lzo/lzo1z.h +0 -150
  23. data/ext/lzo/lzo2a.h +0 -92
  24. data/ext/lzo/lzo_asm.h +0 -139
  25. data/ext/lzo/lzoconf.h +0 -417
  26. data/ext/lzo/lzodefs.h +0 -1807
  27. data/ext/lzo/lzoutil.h +0 -73
  28. data/ext/lzo1.c +0 -635
  29. data/ext/lzo1_99.c +0 -130
  30. data/ext/lzo1_cm.ch +0 -52
  31. data/ext/lzo1_d.ch +0 -155
  32. data/ext/lzo1a.c +0 -657
  33. data/ext/lzo1a_99.c +0 -130
  34. data/ext/lzo1a_cm.ch +0 -242
  35. data/ext/lzo1a_cr.ch +0 -128
  36. data/ext/lzo1a_de.h +0 -158
  37. data/ext/lzo1b_1.c +0 -46
  38. data/ext/lzo1b_2.c +0 -46
  39. data/ext/lzo1b_3.c +0 -46
  40. data/ext/lzo1b_4.c +0 -46
  41. data/ext/lzo1b_5.c +0 -46
  42. data/ext/lzo1b_6.c +0 -46
  43. data/ext/lzo1b_7.c +0 -46
  44. data/ext/lzo1b_8.c +0 -46
  45. data/ext/lzo1b_9.c +0 -46
  46. data/ext/lzo1b_99.c +0 -49
  47. data/ext/lzo1b_9x.c +0 -365
  48. data/ext/lzo1b_c.ch +0 -270
  49. data/ext/lzo1b_cc.c +0 -167
  50. data/ext/lzo1b_cc.h +0 -93
  51. data/ext/lzo1b_cm.ch +0 -294
  52. data/ext/lzo1b_cr.ch +0 -126
  53. data/ext/lzo1b_d.ch +0 -282
  54. data/ext/lzo1b_d1.c +0 -46
  55. data/ext/lzo1b_d2.c +0 -46
  56. data/ext/lzo1b_de.h +0 -344
  57. data/ext/lzo1b_r.ch +0 -117
  58. data/ext/lzo1b_rr.c +0 -43
  59. data/ext/lzo1b_sm.ch +0 -210
  60. data/ext/lzo1b_tm.ch +0 -99
  61. data/ext/lzo1b_xx.c +0 -98
  62. data/ext/lzo1c_1.c +0 -46
  63. data/ext/lzo1c_2.c +0 -46
  64. data/ext/lzo1c_3.c +0 -46
  65. data/ext/lzo1c_4.c +0 -46
  66. data/ext/lzo1c_5.c +0 -46
  67. data/ext/lzo1c_6.c +0 -46
  68. data/ext/lzo1c_7.c +0 -46
  69. data/ext/lzo1c_8.c +0 -46
  70. data/ext/lzo1c_9.c +0 -46
  71. data/ext/lzo1c_99.c +0 -49
  72. data/ext/lzo1c_9x.c +0 -379
  73. data/ext/lzo1c_cc.c +0 -167
  74. data/ext/lzo1c_cc.h +0 -93
  75. data/ext/lzo1c_d1.c +0 -46
  76. data/ext/lzo1c_d2.c +0 -46
  77. data/ext/lzo1c_rr.c +0 -43
  78. data/ext/lzo1c_xx.c +0 -98
  79. data/ext/lzo1f_1.c +0 -312
  80. data/ext/lzo1f_9x.c +0 -345
  81. data/ext/lzo1f_d.ch +0 -223
  82. data/ext/lzo1f_d1.c +0 -46
  83. data/ext/lzo1f_d2.c +0 -46
  84. data/ext/lzo1x_1.c +0 -50
  85. data/ext/lzo1x_1k.c +0 -50
  86. data/ext/lzo1x_1l.c +0 -50
  87. data/ext/lzo1x_1o.c +0 -50
  88. data/ext/lzo1x_9x.c +0 -881
  89. data/ext/lzo1x_c.ch +0 -351
  90. data/ext/lzo1x_d.ch +0 -466
  91. data/ext/lzo1x_d1.c +0 -46
  92. data/ext/lzo1x_d2.c +0 -46
  93. data/ext/lzo1x_d3.c +0 -108
  94. data/ext/lzo1x_o.c +0 -45
  95. data/ext/lzo1x_oo.ch +0 -366
  96. data/ext/lzo1y_1.c +0 -50
  97. data/ext/lzo1y_9x.c +0 -42
  98. data/ext/lzo1y_d1.c +0 -46
  99. data/ext/lzo1y_d2.c +0 -46
  100. data/ext/lzo1y_d3.c +0 -45
  101. data/ext/lzo1y_o.c +0 -45
  102. data/ext/lzo1z_9x.c +0 -42
  103. data/ext/lzo1z_d1.c +0 -46
  104. data/ext/lzo1z_d2.c +0 -46
  105. data/ext/lzo1z_d3.c +0 -45
  106. data/ext/lzo2a_9x.c +0 -357
  107. data/ext/lzo2a_d.ch +0 -188
  108. data/ext/lzo2a_d1.c +0 -46
  109. data/ext/lzo2a_d2.c +0 -46
  110. data/ext/lzo_conf.h +0 -323
  111. data/ext/lzo_crc.c +0 -167
  112. data/ext/lzo_dict.h +0 -316
  113. data/ext/lzo_dll.ch +0 -64
  114. data/ext/lzo_init.c +0 -176
  115. data/ext/lzo_mchw.ch +0 -242
  116. data/ext/lzo_ptr.c +0 -92
  117. data/ext/lzo_ptr.h +0 -154
  118. data/ext/lzo_str.c +0 -71
  119. data/ext/lzo_swd.ch +0 -707
  120. data/ext/lzo_util.c +0 -165
  121. data/ext/miniacc.h +0 -6553
  122. data/ext/stats1a.h +0 -137
  123. data/ext/stats1b.h +0 -142
  124. data/ext/stats1c.h +0 -61
@@ -1,351 +0,0 @@
1
- /* lzo1x_c.ch -- implementation of the LZO1[XY]-1 compression algorithm
2
-
3
- This file is part of the LZO real-time data compression library.
4
-
5
- Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer
6
- Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer
7
- Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer
8
- Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer
9
- Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
10
- Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
11
- Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
12
- Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
13
- Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
14
- Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
15
- Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
16
- Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
17
- Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
18
- All Rights Reserved.
19
-
20
- The LZO library is free software; you can redistribute it and/or
21
- modify it under the terms of the GNU General Public License as
22
- published by the Free Software Foundation; either version 2 of
23
- the License, or (at your option) any later version.
24
-
25
- The LZO library is distributed in the hope that it will be useful,
26
- but WITHOUT ANY WARRANTY; without even the implied warranty of
27
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28
- GNU General Public License for more details.
29
-
30
- You should have received a copy of the GNU General Public License
31
- along with the LZO library; see the file COPYING.
32
- If not, write to the Free Software Foundation, Inc.,
33
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
34
-
35
- Markus F.X.J. Oberhumer
36
- <markus@oberhumer.com>
37
- http://www.oberhumer.com/opensource/lzo/
38
- */
39
-
40
-
41
-
42
- /***********************************************************************
43
- // compress a block of data.
44
- ************************************************************************/
45
-
46
- static __lzo_noinline lzo_uint
47
- do_compress ( const lzo_bytep in , lzo_uint in_len,
48
- lzo_bytep out, lzo_uintp out_len,
49
- lzo_voidp wrkmem )
50
- {
51
- register const lzo_bytep ip;
52
- lzo_bytep op;
53
- const lzo_bytep const in_end = in + in_len;
54
- const lzo_bytep const ip_end = in + in_len - M2_MAX_LEN - 5;
55
- const lzo_bytep ii;
56
- lzo_dict_p const dict = (lzo_dict_p) wrkmem;
57
-
58
- op = out;
59
- ip = in;
60
- ii = ip;
61
-
62
- ip += 4;
63
- for (;;)
64
- {
65
- register const lzo_bytep m_pos;
66
- lzo_uint m_off;
67
- lzo_uint m_len;
68
- lzo_uint dindex;
69
-
70
- DINDEX1(dindex,ip);
71
- GINDEX(m_pos,m_off,dict,dindex,in);
72
- if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET))
73
- goto literal;
74
- #if 1
75
- if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3])
76
- goto try_match;
77
- DINDEX2(dindex,ip);
78
- #endif
79
- GINDEX(m_pos,m_off,dict,dindex,in);
80
- if (LZO_CHECK_MPOS_NON_DET(m_pos,m_off,in,ip,M4_MAX_OFFSET))
81
- goto literal;
82
- if (m_off <= M2_MAX_OFFSET || m_pos[3] == ip[3])
83
- goto try_match;
84
- goto literal;
85
-
86
-
87
- try_match:
88
- #if 1 && defined(LZO_UNALIGNED_OK_2)
89
- if (* (const lzo_ushortp) m_pos != * (const lzo_ushortp) ip)
90
- #else
91
- if (m_pos[0] != ip[0] || m_pos[1] != ip[1])
92
- #endif
93
- {
94
- }
95
- else
96
- {
97
- if __lzo_likely(m_pos[2] == ip[2])
98
- {
99
- #if 0
100
- if (m_off <= M2_MAX_OFFSET)
101
- goto match;
102
- if (lit <= 3)
103
- goto match;
104
- if (lit == 3) /* better compression, but slower */
105
- {
106
- assert(op - 2 > out); op[-2] |= LZO_BYTE(3);
107
- *op++ = *ii++; *op++ = *ii++; *op++ = *ii++;
108
- goto code_match;
109
- }
110
- if (m_pos[3] == ip[3])
111
- #endif
112
- goto match;
113
- }
114
- else
115
- {
116
- /* still need a better way for finding M1 matches */
117
- #if 0
118
- /* a M1 match */
119
- #if 0
120
- if (m_off <= M1_MAX_OFFSET && lit > 0 && lit <= 3)
121
- #else
122
- if (m_off <= M1_MAX_OFFSET && lit == 3)
123
- #endif
124
- {
125
- register lzo_uint t;
126
-
127
- t = lit;
128
- assert(op - 2 > out); op[-2] |= LZO_BYTE(t);
129
- do *op++ = *ii++; while (--t > 0);
130
- assert(ii == ip);
131
- m_off -= 1;
132
- *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2));
133
- *op++ = LZO_BYTE(m_off >> 2);
134
- ip += 2;
135
- goto match_done;
136
- }
137
- #endif
138
- }
139
- }
140
-
141
-
142
- /* a literal */
143
- literal:
144
- UPDATE_I(dict,0,dindex,ip,in);
145
- ++ip;
146
- if __lzo_unlikely(ip >= ip_end)
147
- break;
148
- continue;
149
-
150
-
151
- /* a match */
152
- match:
153
- UPDATE_I(dict,0,dindex,ip,in);
154
- /* store current literal run */
155
- if (pd(ip,ii) > 0)
156
- {
157
- register lzo_uint t = pd(ip,ii);
158
-
159
- if (t <= 3)
160
- {
161
- assert(op - 2 > out);
162
- op[-2] |= LZO_BYTE(t);
163
- }
164
- else if (t <= 18)
165
- *op++ = LZO_BYTE(t - 3);
166
- else
167
- {
168
- register lzo_uint tt = t - 18;
169
-
170
- *op++ = 0;
171
- while (tt > 255)
172
- {
173
- tt -= 255;
174
- *op++ = 0;
175
- }
176
- assert(tt > 0);
177
- *op++ = LZO_BYTE(tt);
178
- }
179
- do *op++ = *ii++; while (--t > 0);
180
- }
181
-
182
- /* code the match */
183
- assert(ii == ip);
184
- ip += 3;
185
- if (m_pos[3] != *ip++ || m_pos[4] != *ip++ || m_pos[5] != *ip++ ||
186
- m_pos[6] != *ip++ || m_pos[7] != *ip++ || m_pos[8] != *ip++
187
- #ifdef LZO1Y
188
- || m_pos[ 9] != *ip++ || m_pos[10] != *ip++ || m_pos[11] != *ip++
189
- || m_pos[12] != *ip++ || m_pos[13] != *ip++ || m_pos[14] != *ip++
190
- #endif
191
- )
192
- {
193
- --ip;
194
- m_len = pd(ip, ii);
195
- assert(m_len >= 3); assert(m_len <= M2_MAX_LEN);
196
-
197
- if (m_off <= M2_MAX_OFFSET)
198
- {
199
- m_off -= 1;
200
- #if defined(LZO1X)
201
- *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2));
202
- *op++ = LZO_BYTE(m_off >> 3);
203
- #elif defined(LZO1Y)
204
- *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2));
205
- *op++ = LZO_BYTE(m_off >> 2);
206
- #endif
207
- }
208
- else if (m_off <= M3_MAX_OFFSET)
209
- {
210
- m_off -= 1;
211
- *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
212
- goto m3_m4_offset;
213
- }
214
- else
215
- #if defined(LZO1X)
216
- {
217
- m_off -= 0x4000;
218
- assert(m_off > 0); assert(m_off <= 0x7fff);
219
- *op++ = LZO_BYTE(M4_MARKER |
220
- ((m_off & 0x4000) >> 11) | (m_len - 2));
221
- goto m3_m4_offset;
222
- }
223
- #elif defined(LZO1Y)
224
- goto m4_match;
225
- #endif
226
- }
227
- else
228
- {
229
- {
230
- const lzo_bytep end = in_end;
231
- const lzo_bytep m = m_pos + M2_MAX_LEN + 1;
232
- while (ip < end && *m == *ip)
233
- m++, ip++;
234
- m_len = pd(ip, ii);
235
- }
236
- assert(m_len > M2_MAX_LEN);
237
-
238
- if (m_off <= M3_MAX_OFFSET)
239
- {
240
- m_off -= 1;
241
- if (m_len <= 33)
242
- *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
243
- else
244
- {
245
- m_len -= 33;
246
- *op++ = M3_MARKER | 0;
247
- goto m3_m4_len;
248
- }
249
- }
250
- else
251
- {
252
- #if defined(LZO1Y)
253
- m4_match:
254
- #endif
255
- m_off -= 0x4000;
256
- assert(m_off > 0); assert(m_off <= 0x7fff);
257
- if (m_len <= M4_MAX_LEN)
258
- *op++ = LZO_BYTE(M4_MARKER |
259
- ((m_off & 0x4000) >> 11) | (m_len - 2));
260
- else
261
- {
262
- m_len -= M4_MAX_LEN;
263
- *op++ = LZO_BYTE(M4_MARKER | ((m_off & 0x4000) >> 11));
264
- m3_m4_len:
265
- while (m_len > 255)
266
- {
267
- m_len -= 255;
268
- *op++ = 0;
269
- }
270
- assert(m_len > 0);
271
- *op++ = LZO_BYTE(m_len);
272
- }
273
- }
274
-
275
- m3_m4_offset:
276
- *op++ = LZO_BYTE((m_off & 63) << 2);
277
- *op++ = LZO_BYTE(m_off >> 6);
278
- }
279
-
280
- #if 0
281
- match_done:
282
- #endif
283
- ii = ip;
284
- if __lzo_unlikely(ip >= ip_end)
285
- break;
286
- }
287
-
288
- *out_len = pd(op, out);
289
- return pd(in_end,ii);
290
- }
291
-
292
-
293
- /***********************************************************************
294
- // public entry point
295
- ************************************************************************/
296
-
297
- LZO_PUBLIC(int)
298
- DO_COMPRESS ( const lzo_bytep in , lzo_uint in_len,
299
- lzo_bytep out, lzo_uintp out_len,
300
- lzo_voidp wrkmem )
301
- {
302
- lzo_bytep op = out;
303
- lzo_uint t;
304
-
305
- if __lzo_unlikely(in_len <= M2_MAX_LEN + 5)
306
- t = in_len;
307
- else
308
- {
309
- t = do_compress(in,in_len,op,out_len,wrkmem);
310
- op += *out_len;
311
- }
312
-
313
- if (t > 0)
314
- {
315
- const lzo_bytep ii = in + in_len - t;
316
-
317
- if (op == out && t <= 238)
318
- *op++ = LZO_BYTE(17 + t);
319
- else if (t <= 3)
320
- op[-2] |= LZO_BYTE(t);
321
- else if (t <= 18)
322
- *op++ = LZO_BYTE(t - 3);
323
- else
324
- {
325
- lzo_uint tt = t - 18;
326
-
327
- *op++ = 0;
328
- while (tt > 255)
329
- {
330
- tt -= 255;
331
- *op++ = 0;
332
- }
333
- assert(tt > 0);
334
- *op++ = LZO_BYTE(tt);
335
- }
336
- do *op++ = *ii++; while (--t > 0);
337
- }
338
-
339
- *op++ = M4_MARKER | 1;
340
- *op++ = 0;
341
- *op++ = 0;
342
-
343
- *out_len = pd(op, out);
344
- return LZO_E_OK;
345
- }
346
-
347
-
348
- /*
349
- vi:ts=4:et
350
- */
351
-
@@ -1,466 +0,0 @@
1
- /* lzo1x_d.ch -- implementation of the LZO1X decompression algorithm
2
-
3
- This file is part of the LZO real-time data compression library.
4
-
5
- Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer
6
- Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer
7
- Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer
8
- Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer
9
- Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
10
- Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
11
- Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
12
- Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
13
- Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
14
- Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
15
- Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
16
- Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
17
- Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
18
- All Rights Reserved.
19
-
20
- The LZO library is free software; you can redistribute it and/or
21
- modify it under the terms of the GNU General Public License as
22
- published by the Free Software Foundation; either version 2 of
23
- the License, or (at your option) any later version.
24
-
25
- The LZO library is distributed in the hope that it will be useful,
26
- but WITHOUT ANY WARRANTY; without even the implied warranty of
27
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
28
- GNU General Public License for more details.
29
-
30
- You should have received a copy of the GNU General Public License
31
- along with the LZO library; see the file COPYING.
32
- If not, write to the Free Software Foundation, Inc.,
33
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
34
-
35
- Markus F.X.J. Oberhumer
36
- <markus@oberhumer.com>
37
- http://www.oberhumer.com/opensource/lzo/
38
- */
39
-
40
-
41
- #include "lzo1_d.ch"
42
-
43
-
44
- #undef __COPY4
45
- #define __COPY4(dst,src) * (lzo_uint32p)(dst) = * (const lzo_uint32p)(src)
46
-
47
- #undef COPY4
48
- #if defined(LZO_UNALIGNED_OK_4)
49
- # define COPY4(dst,src) __COPY4(dst,src)
50
- #elif defined(LZO_ALIGNED_OK_4)
51
- # define COPY4(dst,src) __COPY4((lzo_uintptr_t)(dst),(lzo_uintptr_t)(src))
52
- #endif
53
-
54
-
55
- /***********************************************************************
56
- // decompress a block of data.
57
- ************************************************************************/
58
-
59
- #if defined(DO_DECOMPRESS)
60
- LZO_PUBLIC(int)
61
- DO_DECOMPRESS ( const lzo_bytep in , lzo_uint in_len,
62
- lzo_bytep out, lzo_uintp out_len,
63
- lzo_voidp wrkmem )
64
- #endif
65
- {
66
- register lzo_bytep op;
67
- register const lzo_bytep ip;
68
- register lzo_uint t;
69
- #if defined(COPY_DICT)
70
- lzo_uint m_off;
71
- const lzo_bytep dict_end;
72
- #else
73
- register const lzo_bytep m_pos;
74
- #endif
75
-
76
- const lzo_bytep const ip_end = in + in_len;
77
- #if defined(HAVE_ANY_OP)
78
- lzo_bytep const op_end = out + *out_len;
79
- #endif
80
- #if defined(LZO1Z)
81
- lzo_uint last_m_off = 0;
82
- #endif
83
-
84
- LZO_UNUSED(wrkmem);
85
-
86
- #if defined(COPY_DICT)
87
- if (dict)
88
- {
89
- if (dict_len > M4_MAX_OFFSET)
90
- {
91
- dict += dict_len - M4_MAX_OFFSET;
92
- dict_len = M4_MAX_OFFSET;
93
- }
94
- dict_end = dict + dict_len;
95
- }
96
- else
97
- {
98
- dict_len = 0;
99
- dict_end = NULL;
100
- }
101
- #endif /* COPY_DICT */
102
-
103
- *out_len = 0;
104
-
105
- op = out;
106
- ip = in;
107
-
108
- if (*ip > 17)
109
- {
110
- t = *ip++ - 17;
111
- if (t < 4)
112
- goto match_next;
113
- assert(t > 0); NEED_OP(t); NEED_IP(t+1);
114
- do *op++ = *ip++; while (--t > 0);
115
- goto first_literal_run;
116
- }
117
-
118
- while (TEST_IP && TEST_OP)
119
- {
120
- t = *ip++;
121
- if (t >= 16)
122
- goto match;
123
- /* a literal run */
124
- if (t == 0)
125
- {
126
- NEED_IP(1);
127
- while (*ip == 0)
128
- {
129
- t += 255;
130
- ip++;
131
- NEED_IP(1);
132
- }
133
- t += 15 + *ip++;
134
- }
135
- /* copy literals */
136
- assert(t > 0); NEED_OP(t+3); NEED_IP(t+4);
137
- #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
138
- #if !defined(LZO_UNALIGNED_OK_4)
139
- if (PTR_ALIGNED2_4(op,ip))
140
- {
141
- #endif
142
- COPY4(op,ip);
143
- op += 4; ip += 4;
144
- if (--t > 0)
145
- {
146
- if (t >= 4)
147
- {
148
- do {
149
- COPY4(op,ip);
150
- op += 4; ip += 4; t -= 4;
151
- } while (t >= 4);
152
- if (t > 0) do *op++ = *ip++; while (--t > 0);
153
- }
154
- else
155
- do *op++ = *ip++; while (--t > 0);
156
- }
157
- #if !defined(LZO_UNALIGNED_OK_4)
158
- }
159
- else
160
- #endif
161
- #endif
162
- #if !defined(LZO_UNALIGNED_OK_4)
163
- {
164
- *op++ = *ip++; *op++ = *ip++; *op++ = *ip++;
165
- do *op++ = *ip++; while (--t > 0);
166
- }
167
- #endif
168
-
169
-
170
- first_literal_run:
171
-
172
-
173
- t = *ip++;
174
- if (t >= 16)
175
- goto match;
176
- #if defined(COPY_DICT)
177
- #if defined(LZO1Z)
178
- m_off = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
179
- last_m_off = m_off;
180
- #else
181
- m_off = (1 + M2_MAX_OFFSET) + (t >> 2) + (*ip++ << 2);
182
- #endif
183
- NEED_OP(3);
184
- t = 3; COPY_DICT(t,m_off)
185
- #else /* !COPY_DICT */
186
- #if defined(LZO1Z)
187
- t = (1 + M2_MAX_OFFSET) + (t << 6) + (*ip++ >> 2);
188
- m_pos = op - t;
189
- last_m_off = t;
190
- #else
191
- m_pos = op - (1 + M2_MAX_OFFSET);
192
- m_pos -= t >> 2;
193
- m_pos -= *ip++ << 2;
194
- #endif
195
- TEST_LB(m_pos); NEED_OP(3);
196
- *op++ = *m_pos++; *op++ = *m_pos++; *op++ = *m_pos;
197
- #endif /* COPY_DICT */
198
- goto match_done;
199
-
200
-
201
- /* handle matches */
202
- do {
203
- match:
204
- if (t >= 64) /* a M2 match */
205
- {
206
- #if defined(COPY_DICT)
207
- #if defined(LZO1X)
208
- m_off = 1 + ((t >> 2) & 7) + (*ip++ << 3);
209
- t = (t >> 5) - 1;
210
- #elif defined(LZO1Y)
211
- m_off = 1 + ((t >> 2) & 3) + (*ip++ << 2);
212
- t = (t >> 4) - 3;
213
- #elif defined(LZO1Z)
214
- m_off = t & 0x1f;
215
- if (m_off >= 0x1c)
216
- m_off = last_m_off;
217
- else
218
- {
219
- m_off = 1 + (m_off << 6) + (*ip++ >> 2);
220
- last_m_off = m_off;
221
- }
222
- t = (t >> 5) - 1;
223
- #endif
224
- #else /* !COPY_DICT */
225
- #if defined(LZO1X)
226
- m_pos = op - 1;
227
- m_pos -= (t >> 2) & 7;
228
- m_pos -= *ip++ << 3;
229
- t = (t >> 5) - 1;
230
- #elif defined(LZO1Y)
231
- m_pos = op - 1;
232
- m_pos -= (t >> 2) & 3;
233
- m_pos -= *ip++ << 2;
234
- t = (t >> 4) - 3;
235
- #elif defined(LZO1Z)
236
- {
237
- lzo_uint off = t & 0x1f;
238
- m_pos = op;
239
- if (off >= 0x1c)
240
- {
241
- assert(last_m_off > 0);
242
- m_pos -= last_m_off;
243
- }
244
- else
245
- {
246
- off = 1 + (off << 6) + (*ip++ >> 2);
247
- m_pos -= off;
248
- last_m_off = off;
249
- }
250
- }
251
- t = (t >> 5) - 1;
252
- #endif
253
- TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
254
- goto copy_match;
255
- #endif /* COPY_DICT */
256
- }
257
- else if (t >= 32) /* a M3 match */
258
- {
259
- t &= 31;
260
- if (t == 0)
261
- {
262
- NEED_IP(1);
263
- while (*ip == 0)
264
- {
265
- t += 255;
266
- ip++;
267
- NEED_IP(1);
268
- }
269
- t += 31 + *ip++;
270
- }
271
- #if defined(COPY_DICT)
272
- #if defined(LZO1Z)
273
- m_off = 1 + (ip[0] << 6) + (ip[1] >> 2);
274
- last_m_off = m_off;
275
- #else
276
- m_off = 1 + (ip[0] >> 2) + (ip[1] << 6);
277
- #endif
278
- #else /* !COPY_DICT */
279
- #if defined(LZO1Z)
280
- {
281
- lzo_uint off = 1 + (ip[0] << 6) + (ip[1] >> 2);
282
- m_pos = op - off;
283
- last_m_off = off;
284
- }
285
- #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
286
- m_pos = op - 1;
287
- m_pos -= (* (const lzo_ushortp) ip) >> 2;
288
- #else
289
- m_pos = op - 1;
290
- m_pos -= (ip[0] >> 2) + (ip[1] << 6);
291
- #endif
292
- #endif /* COPY_DICT */
293
- ip += 2;
294
- }
295
- else if (t >= 16) /* a M4 match */
296
- {
297
- #if defined(COPY_DICT)
298
- m_off = (t & 8) << 11;
299
- #else /* !COPY_DICT */
300
- m_pos = op;
301
- m_pos -= (t & 8) << 11;
302
- #endif /* COPY_DICT */
303
- t &= 7;
304
- if (t == 0)
305
- {
306
- NEED_IP(1);
307
- while (*ip == 0)
308
- {
309
- t += 255;
310
- ip++;
311
- NEED_IP(1);
312
- }
313
- t += 7 + *ip++;
314
- }
315
- #if defined(COPY_DICT)
316
- #if defined(LZO1Z)
317
- m_off += (ip[0] << 6) + (ip[1] >> 2);
318
- #else
319
- m_off += (ip[0] >> 2) + (ip[1] << 6);
320
- #endif
321
- ip += 2;
322
- if (m_off == 0)
323
- goto eof_found;
324
- m_off += 0x4000;
325
- #if defined(LZO1Z)
326
- last_m_off = m_off;
327
- #endif
328
- #else /* !COPY_DICT */
329
- #if defined(LZO1Z)
330
- m_pos -= (ip[0] << 6) + (ip[1] >> 2);
331
- #elif defined(LZO_UNALIGNED_OK_2) && defined(LZO_ABI_LITTLE_ENDIAN)
332
- m_pos -= (* (const lzo_ushortp) ip) >> 2;
333
- #else
334
- m_pos -= (ip[0] >> 2) + (ip[1] << 6);
335
- #endif
336
- ip += 2;
337
- if (m_pos == op)
338
- goto eof_found;
339
- m_pos -= 0x4000;
340
- #if defined(LZO1Z)
341
- last_m_off = pd((const lzo_bytep)op, m_pos);
342
- #endif
343
- #endif /* COPY_DICT */
344
- }
345
- else /* a M1 match */
346
- {
347
- #if defined(COPY_DICT)
348
- #if defined(LZO1Z)
349
- m_off = 1 + (t << 6) + (*ip++ >> 2);
350
- last_m_off = m_off;
351
- #else
352
- m_off = 1 + (t >> 2) + (*ip++ << 2);
353
- #endif
354
- NEED_OP(2);
355
- t = 2; COPY_DICT(t,m_off)
356
- #else /* !COPY_DICT */
357
- #if defined(LZO1Z)
358
- t = 1 + (t << 6) + (*ip++ >> 2);
359
- m_pos = op - t;
360
- last_m_off = t;
361
- #else
362
- m_pos = op - 1;
363
- m_pos -= t >> 2;
364
- m_pos -= *ip++ << 2;
365
- #endif
366
- TEST_LB(m_pos); NEED_OP(2);
367
- *op++ = *m_pos++; *op++ = *m_pos;
368
- #endif /* COPY_DICT */
369
- goto match_done;
370
- }
371
-
372
- /* copy match */
373
- #if defined(COPY_DICT)
374
-
375
- NEED_OP(t+3-1);
376
- t += 3-1; COPY_DICT(t,m_off)
377
-
378
- #else /* !COPY_DICT */
379
-
380
- TEST_LB(m_pos); assert(t > 0); NEED_OP(t+3-1);
381
- #if defined(LZO_UNALIGNED_OK_4) || defined(LZO_ALIGNED_OK_4)
382
- #if !defined(LZO_UNALIGNED_OK_4)
383
- if (t >= 2 * 4 - (3 - 1) && PTR_ALIGNED2_4(op,m_pos))
384
- {
385
- assert((op - m_pos) >= 4); /* both pointers are aligned */
386
- #else
387
- if (t >= 2 * 4 - (3 - 1) && (op - m_pos) >= 4)
388
- {
389
- #endif
390
- COPY4(op,m_pos);
391
- op += 4; m_pos += 4; t -= 4 - (3 - 1);
392
- do {
393
- COPY4(op,m_pos);
394
- op += 4; m_pos += 4; t -= 4;
395
- } while (t >= 4);
396
- if (t > 0) do *op++ = *m_pos++; while (--t > 0);
397
- }
398
- else
399
- #endif
400
- {
401
- copy_match:
402
- *op++ = *m_pos++; *op++ = *m_pos++;
403
- do *op++ = *m_pos++; while (--t > 0);
404
- }
405
-
406
- #endif /* COPY_DICT */
407
-
408
- match_done:
409
- #if defined(LZO1Z)
410
- t = ip[-1] & 3;
411
- #else
412
- t = ip[-2] & 3;
413
- #endif
414
- if (t == 0)
415
- break;
416
-
417
- /* copy literals */
418
- match_next:
419
- assert(t > 0); assert(t < 4); NEED_OP(t); NEED_IP(t+1);
420
- #if 0
421
- do *op++ = *ip++; while (--t > 0);
422
- #else
423
- *op++ = *ip++;
424
- if (t > 1) { *op++ = *ip++; if (t > 2) { *op++ = *ip++; } }
425
- #endif
426
- t = *ip++;
427
- } while (TEST_IP && TEST_OP);
428
- }
429
-
430
- #if defined(HAVE_TEST_IP) || defined(HAVE_TEST_OP)
431
- /* no EOF code was found */
432
- *out_len = pd(op, out);
433
- return LZO_E_EOF_NOT_FOUND;
434
- #endif
435
-
436
- eof_found:
437
- assert(t == 1);
438
- *out_len = pd(op, out);
439
- return (ip == ip_end ? LZO_E_OK :
440
- (ip < ip_end ? LZO_E_INPUT_NOT_CONSUMED : LZO_E_INPUT_OVERRUN));
441
-
442
-
443
- #if defined(HAVE_NEED_IP)
444
- input_overrun:
445
- *out_len = pd(op, out);
446
- return LZO_E_INPUT_OVERRUN;
447
- #endif
448
-
449
- #if defined(HAVE_NEED_OP)
450
- output_overrun:
451
- *out_len = pd(op, out);
452
- return LZO_E_OUTPUT_OVERRUN;
453
- #endif
454
-
455
- #if defined(LZO_TEST_OVERRUN_LOOKBEHIND)
456
- lookbehind_overrun:
457
- *out_len = pd(op, out);
458
- return LZO_E_LOOKBEHIND_OVERRUN;
459
- #endif
460
- }
461
-
462
-
463
- /*
464
- vi:ts=4:et
465
- */
466
-