69#if !defined(LZO1X) && !defined(LZO1Y)
78#define M1_MAX_OFFSET 0x0400
80#define M2_MAX_OFFSET 0x0800
82#define M2_MAX_OFFSET 0x0400
84#define M3_MAX_OFFSET 0x4000
85#define M4_MAX_OFFSET 0xbfff
87#define MX_MAX_OFFSET (M1_MAX_OFFSET + M2_MAX_OFFSET)
95#define _DV2(p,shift1,shift2) \
96 (((( (lzo_uint)(p[2]) << shift1) ^ p[1]) << shift2) ^ p[0])
97#define DVAL_NEXT(dv,p) \
98 dv ^= p[-1]; dv = (((dv) >> 5) ^ ((lzo_uint)(p[2]) << (2*5)))
99#define _DV(p,shift) _DV2(p,shift,shift)
100#define DVAL_FIRST(dv,p) dv = _DV((p),5)
101#define _DINDEX(dv,p) ((40799u * (dv)) >> 5)
102#define DINDEX(dv,p) (((_DINDEX(dv,p)) & 0x3fff) << 0)
103#define UPDATE_D(dict,cycle,dv,p) dict[ DINDEX(dv,p) ] = (p)
104#define UPDATE_I(dict,cycle,index,p) dict[index] = (p)
118 const lzo_byte *
const in_end = in + in_len;
119 const lzo_byte *
const ip_end = in + in_len - 9 - 4;
139 m_pos = dict[dindex];
145#if defined(LZO_UNALIGNED_OK_2)
147 if (* (
unsigned short *) m_pos != * (
unsigned short *) ip)
150 if (m_pos[0] != ip[0] || m_pos[1] != ip[1])
154 if (m_pos[2] == ip[2]) {
162 assert(op - 2 > out); op[-2] |=
LZO_BYTE(3);
163 *op++ = *ii++; *op++ = *ii++; *op++ = *ii++;
167 if (*m_pos == ip[3]) {
194 assert(op - 2 > out);
222 if (*m_pos++ != *ip++ || *m_pos++ != *ip++ || *m_pos++ != *ip++ ||
223 *m_pos++ != *ip++ || *m_pos++ != *ip++ || *m_pos++ != *ip++)
227 assert(m_len >= 3); assert(m_len <= 8);
231 *op++ =
LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2));
240 assert(m_off > 0); assert(m_off <= 0x7fff);
242 ((m_off & 0x4000) >> 11) | (m_len - 2));
249 while (ip < end && *m_pos == *ip) {
267 assert(m_off > 0); assert(m_off <= 0x7fff);
270 ((m_off & 0x4000) >> 11) | (m_len - 2));
275 while (m_len > 255) {
285 *op++ =
LZO_BYTE((m_off & 63) << 2);
297 if (in_end - ii > 0) {
300 if (op == out && t <= 238) {
345 if (in_len <= 9 + 4) {
347 do *op++ = *in++;
while (--in_len > 0);
350 r = do_compress(in,in_len,out,out_len,wrkmem);
#define UPDATE_I(dict, cycle, index, p)
#define DVAL_FIRST(dv, p)
int lzo1x_1_compress(const lzo_byte *in, lzo_uint in_len, lzo_byte *out, lzo_uint *out_len, lzo_voidp wrkmem)
#define UPDATE_D(dict, cycle, dv, p)
#define LZO_CHECK_MPOS_NON_DET(m_pos, m_off, in, ip, max_offset)