Blame src/lzo1x_9x.c

Packit Service 5195f2
/* lzo1x_9x.c -- implementation of the LZO1X-999 compression algorithm
Packit Service 5195f2
Packit Service 5195f2
   This file is part of the LZO real-time data compression library.
Packit Service 5195f2
Packit Service 5195f2
   Copyright (C) 1996-2014 Markus Franz Xaver Johannes Oberhumer
Packit Service 5195f2
   All Rights Reserved.
Packit Service 5195f2
Packit Service 5195f2
   The LZO library is free software; you can redistribute it and/or
Packit Service 5195f2
   modify it under the terms of the GNU General Public License as
Packit Service 5195f2
   published by the Free Software Foundation; either version 2 of
Packit Service 5195f2
   the License, or (at your option) any later version.
Packit Service 5195f2
Packit Service 5195f2
   The LZO library is distributed in the hope that it will be useful,
Packit Service 5195f2
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 5195f2
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit Service 5195f2
   GNU General Public License for more details.
Packit Service 5195f2
Packit Service 5195f2
   You should have received a copy of the GNU General Public License
Packit Service 5195f2
   along with the LZO library; see the file COPYING.
Packit Service 5195f2
   If not, write to the Free Software Foundation, Inc.,
Packit Service 5195f2
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Packit Service 5195f2
Packit Service 5195f2
   Markus F.X.J. Oberhumer
Packit Service 5195f2
   <markus@oberhumer.com>
Packit Service 5195f2
   http://www.oberhumer.com/opensource/lzo/
Packit Service 5195f2
 */
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
#if !defined(LZO1X) && !defined(LZO1Y) && !defined(LZO1Z)
Packit Service 5195f2
#  define LZO1X 1
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
#if defined(LZO1X)
Packit Service 5195f2
#  include "config1x.h"
Packit Service 5195f2
#elif defined(LZO1Y)
Packit Service 5195f2
#  include "config1y.h"
Packit Service 5195f2
#elif defined(LZO1Z)
Packit Service 5195f2
#  include "config1z.h"
Packit Service 5195f2
#else
Packit Service 5195f2
#  error
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
//
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
#define SWD_N           M4_MAX_OFFSET   /* size of ring buffer */
Packit Service 5195f2
#define SWD_THRESHOLD       1           /* lower limit for match length */
Packit Service 5195f2
#define SWD_F            2048           /* upper limit for match length */
Packit Service 5195f2
Packit Service 5195f2
#define SWD_BEST_OFF    (LZO_MAX3( M2_MAX_LEN, M3_MAX_LEN, M4_MAX_LEN ) + 1)
Packit Service 5195f2
Packit Service 5195f2
#if defined(LZO1X)
Packit Service 5195f2
#  define LZO_COMPRESS_T                lzo1x_999_t
Packit Service 5195f2
#  define lzo_swd_t                     lzo1x_999_swd_t
Packit Service 5195f2
#elif defined(LZO1Y)
Packit Service 5195f2
#  define LZO_COMPRESS_T                lzo1y_999_t
Packit Service 5195f2
#  define lzo_swd_t                     lzo1y_999_swd_t
Packit Service 5195f2
#  define lzo1x_999_compress_internal   lzo1y_999_compress_internal
Packit Service 5195f2
#  define lzo1x_999_compress_dict       lzo1y_999_compress_dict
Packit Service 5195f2
#  define lzo1x_999_compress_level      lzo1y_999_compress_level
Packit Service 5195f2
#  define lzo1x_999_compress            lzo1y_999_compress
Packit Service 5195f2
#elif defined(LZO1Z)
Packit Service 5195f2
#  define LZO_COMPRESS_T                lzo1z_999_t
Packit Service 5195f2
#  define lzo_swd_t                     lzo1z_999_swd_t
Packit Service 5195f2
#  define lzo1x_999_compress_internal   lzo1z_999_compress_internal
Packit Service 5195f2
#  define lzo1x_999_compress_dict       lzo1z_999_compress_dict
Packit Service 5195f2
#  define lzo1x_999_compress_level      lzo1z_999_compress_level
Packit Service 5195f2
#  define lzo1x_999_compress            lzo1z_999_compress
Packit Service 5195f2
#else
Packit Service 5195f2
#  error
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
#if 0
Packit Service 5195f2
#  define HEAD3(b,p) \
Packit Service 5195f2
    ((((((lzo_xint)b[p]<<3)^b[p+1])<<3)^b[p+2]) & (SWD_HSIZE-1))
Packit Service 5195f2
#endif
Packit Service 5195f2
#if 0 && (LZO_OPT_UNALIGNED32) && (LZO_ABI_LITTLE_ENDIAN)
Packit Service 5195f2
#  define HEAD3(b,p) \
Packit Service 5195f2
    (((* (lzo_uint32_tp) &b[p]) ^ ((* (lzo_uint32_tp) &b[p])>>10)) & (SWD_HSIZE-1))
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
#include "lzo_mchw.ch"
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/* this is a public functions, but there is no prototype in a header file */
Packit Service 5195f2
LZO_EXTERN(int)
Packit Service 5195f2
lzo1x_999_compress_internal ( const lzo_bytep in , lzo_uint  in_len,
Packit Service 5195f2
                                    lzo_bytep out, lzo_uintp out_len,
Packit Service 5195f2
                                    lzo_voidp wrkmem,
Packit Service 5195f2
                              const lzo_bytep dict, lzo_uint dict_len,
Packit Service 5195f2
                                    lzo_callback_p cb,
Packit Service 5195f2
                                    int try_lazy_parm,
Packit Service 5195f2
                                    lzo_uint good_length,
Packit Service 5195f2
                                    lzo_uint max_lazy,
Packit Service 5195f2
                                    lzo_uint nice_length,
Packit Service 5195f2
                                    lzo_uint max_chain,
Packit Service 5195f2
                                    lzo_uint32_t flags );
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
//
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
static lzo_bytep
Packit Service 5195f2
code_match ( LZO_COMPRESS_T *c, lzo_bytep op, lzo_uint m_len, lzo_uint m_off )
Packit Service 5195f2
{
Packit Service 5195f2
    lzo_uint x_len = m_len;
Packit Service 5195f2
    lzo_uint x_off = m_off;
Packit Service 5195f2
Packit Service 5195f2
    c->match_bytes += (unsigned long) m_len;
Packit Service 5195f2
Packit Service 5195f2
#if 0
Packit Service 5195f2
/*
Packit Service 5195f2
    static lzo_uint last_m_len = 0, last_m_off = 0;
Packit Service 5195f2
    static lzo_uint prev_m_off[4];
Packit Service 5195f2
    static unsigned prev_m_off_ptr = 0;
Packit Service 5195f2
    unsigned i;
Packit Service 5195f2
Packit Service 5195f2
    //if (m_len >= 3 && m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET)
Packit Service 5195f2
    if (m_len >= 3 && m_len <= M2_MAX_LEN)
Packit Service 5195f2
    {
Packit Service 5195f2
    //if (m_len == last_m_len && m_off == last_m_off)
Packit Service 5195f2
        //printf("last_m_len + last_m_off\n");
Packit Service 5195f2
    //else
Packit Service 5195f2
    if (m_off == last_m_off)
Packit Service 5195f2
        printf("last_m_off\n");
Packit Service 5195f2
    else
Packit Service 5195f2
    {
Packit Service 5195f2
        for (i = 0; i < 4; i++)
Packit Service 5195f2
            if (m_off == prev_m_off[i])
Packit Service 5195f2
                printf("prev_m_off %u: %5ld\n",i,(long)m_off);
Packit Service 5195f2
    }
Packit Service 5195f2
    }
Packit Service 5195f2
    last_m_len = m_len;
Packit Service 5195f2
    last_m_off = prev_m_off[prev_m_off_ptr] = m_off;
Packit Service 5195f2
    prev_m_off_ptr = (prev_m_off_ptr + 1) & 3;
Packit Service 5195f2
*/
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
    assert(op > c->out);
Packit Service 5195f2
    if (m_len == 2)
Packit Service 5195f2
    {
Packit Service 5195f2
        assert(m_off <= M1_MAX_OFFSET);
Packit Service 5195f2
        assert(c->r1_lit > 0); assert(c->r1_lit < 4);
Packit Service 5195f2
        m_off -= 1;
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
        *op++ = LZO_BYTE(M1_MARKER | (m_off >> 6));
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off << 2);
Packit Service 5195f2
#else
Packit Service 5195f2
        *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2));
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off >> 2);
Packit Service 5195f2
#endif
Packit Service 5195f2
        c->m1a_m++;
Packit Service 5195f2
    }
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
    else if (m_len <= M2_MAX_LEN && (m_off <= M2_MAX_OFFSET || m_off == c->last_m_off))
Packit Service 5195f2
#else
Packit Service 5195f2
    else if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET)
Packit Service 5195f2
#endif
Packit Service 5195f2
    {
Packit Service 5195f2
        assert(m_len >= 3);
Packit Service 5195f2
#if defined(LZO1X)
Packit Service 5195f2
        m_off -= 1;
Packit Service 5195f2
        *op++ = LZO_BYTE(((m_len - 1) << 5) | ((m_off & 7) << 2));
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off >> 3);
Packit Service 5195f2
        assert(op[-2] >= M2_MARKER);
Packit Service 5195f2
#elif defined(LZO1Y)
Packit Service 5195f2
        m_off -= 1;
Packit Service 5195f2
        *op++ = LZO_BYTE(((m_len + 1) << 4) | ((m_off & 3) << 2));
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off >> 2);
Packit Service 5195f2
        assert(op[-2] >= M2_MARKER);
Packit Service 5195f2
#elif defined(LZO1Z)
Packit Service 5195f2
        if (m_off == c->last_m_off)
Packit Service 5195f2
            *op++ = LZO_BYTE(((m_len - 1) << 5) | (0x700 >> 6));
Packit Service 5195f2
        else
Packit Service 5195f2
        {
Packit Service 5195f2
            m_off -= 1;
Packit Service 5195f2
            *op++ = LZO_BYTE(((m_len - 1) << 5) | (m_off >> 6));
Packit Service 5195f2
            *op++ = LZO_BYTE(m_off << 2);
Packit Service 5195f2
        }
Packit Service 5195f2
#endif
Packit Service 5195f2
        c->m2_m++;
Packit Service 5195f2
    }
Packit Service 5195f2
    else if (m_len == M2_MIN_LEN && m_off <= MX_MAX_OFFSET && c->r1_lit >= 4)
Packit Service 5195f2
    {
Packit Service 5195f2
        assert(m_len == 3);
Packit Service 5195f2
        assert(m_off > M2_MAX_OFFSET);
Packit Service 5195f2
        m_off -= 1 + M2_MAX_OFFSET;
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
        *op++ = LZO_BYTE(M1_MARKER | (m_off >> 6));
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off << 2);
Packit Service 5195f2
#else
Packit Service 5195f2
        *op++ = LZO_BYTE(M1_MARKER | ((m_off & 3) << 2));
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off >> 2);
Packit Service 5195f2
#endif
Packit Service 5195f2
        c->m1b_m++;
Packit Service 5195f2
    }
Packit Service 5195f2
    else if (m_off <= M3_MAX_OFFSET)
Packit Service 5195f2
    {
Packit Service 5195f2
        assert(m_len >= 3);
Packit Service 5195f2
        m_off -= 1;
Packit Service 5195f2
        if (m_len <= M3_MAX_LEN)
Packit Service 5195f2
            *op++ = LZO_BYTE(M3_MARKER | (m_len - 2));
Packit Service 5195f2
        else
Packit Service 5195f2
        {
Packit Service 5195f2
            m_len -= M3_MAX_LEN;
Packit Service 5195f2
            *op++ = M3_MARKER | 0;
Packit Service 5195f2
            while (m_len > 255)
Packit Service 5195f2
            {
Packit Service 5195f2
                m_len -= 255;
Packit Service 5195f2
                *op++ = 0;
Packit Service 5195f2
            }
Packit Service 5195f2
            assert(m_len > 0);
Packit Service 5195f2
            *op++ = LZO_BYTE(m_len);
Packit Service 5195f2
        }
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off >> 6);
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off << 2);
Packit Service 5195f2
#else
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off << 2);
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off >> 6);
Packit Service 5195f2
#endif
Packit Service 5195f2
        c->m3_m++;
Packit Service 5195f2
    }
Packit Service 5195f2
    else
Packit Service 5195f2
    {
Packit Service 5195f2
        lzo_uint k;
Packit Service 5195f2
Packit Service 5195f2
        assert(m_len >= 3);
Packit Service 5195f2
        assert(m_off > 0x4000); assert(m_off <= 0xbfff);
Packit Service 5195f2
        m_off -= 0x4000;
Packit Service 5195f2
        k = (m_off & 0x4000) >> 11;
Packit Service 5195f2
        if (m_len <= M4_MAX_LEN)
Packit Service 5195f2
            *op++ = LZO_BYTE(M4_MARKER | k | (m_len - 2));
Packit Service 5195f2
        else
Packit Service 5195f2
        {
Packit Service 5195f2
            m_len -= M4_MAX_LEN;
Packit Service 5195f2
            *op++ = LZO_BYTE(M4_MARKER | k | 0);
Packit Service 5195f2
            while (m_len > 255)
Packit Service 5195f2
            {
Packit Service 5195f2
                m_len -= 255;
Packit Service 5195f2
                *op++ = 0;
Packit Service 5195f2
            }
Packit Service 5195f2
            assert(m_len > 0);
Packit Service 5195f2
            *op++ = LZO_BYTE(m_len);
Packit Service 5195f2
        }
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off >> 6);
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off << 2);
Packit Service 5195f2
#else
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off << 2);
Packit Service 5195f2
        *op++ = LZO_BYTE(m_off >> 6);
Packit Service 5195f2
#endif
Packit Service 5195f2
        c->m4_m++;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    c->last_m_len = x_len;
Packit Service 5195f2
    c->last_m_off = x_off;
Packit Service 5195f2
    return op;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
static lzo_bytep
Packit Service 5195f2
STORE_RUN ( LZO_COMPRESS_T *c, lzo_bytep op, const lzo_bytep ii, lzo_uint t )
Packit Service 5195f2
{
Packit Service 5195f2
    c->lit_bytes += (unsigned long) t;
Packit Service 5195f2
Packit Service 5195f2
    if (op == c->out && t <= 238)
Packit Service 5195f2
    {
Packit Service 5195f2
        *op++ = LZO_BYTE(17 + t);
Packit Service 5195f2
    }
Packit Service 5195f2
    else if (t <= 3)
Packit Service 5195f2
    {
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
        op[-1] = LZO_BYTE(op[-1] | t);
Packit Service 5195f2
#else
Packit Service 5195f2
        op[-2] = LZO_BYTE(op[-2] | t);
Packit Service 5195f2
#endif
Packit Service 5195f2
        c->lit1_r++;
Packit Service 5195f2
    }
Packit Service 5195f2
    else if (t <= 18)
Packit Service 5195f2
    {
Packit Service 5195f2
        *op++ = LZO_BYTE(t - 3);
Packit Service 5195f2
        c->lit2_r++;
Packit Service 5195f2
    }
Packit Service 5195f2
    else
Packit Service 5195f2
    {
Packit Service 5195f2
        lzo_uint tt = t - 18;
Packit Service 5195f2
Packit Service 5195f2
        *op++ = 0;
Packit Service 5195f2
        while (tt > 255)
Packit Service 5195f2
        {
Packit Service 5195f2
            tt -= 255;
Packit Service 5195f2
            *op++ = 0;
Packit Service 5195f2
        }
Packit Service 5195f2
        assert(tt > 0);
Packit Service 5195f2
        *op++ = LZO_BYTE(tt);
Packit Service 5195f2
        c->lit3_r++;
Packit Service 5195f2
    }
Packit Service 5195f2
    do *op++ = *ii++; while (--t > 0);
Packit Service 5195f2
Packit Service 5195f2
    return op;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
static lzo_bytep
Packit Service 5195f2
code_run ( LZO_COMPRESS_T *c, lzo_bytep op, const lzo_bytep ii,
Packit Service 5195f2
           lzo_uint lit, lzo_uint m_len )
Packit Service 5195f2
{
Packit Service 5195f2
    if (lit > 0)
Packit Service 5195f2
    {
Packit Service 5195f2
        assert(m_len >= 2);
Packit Service 5195f2
        op = STORE_RUN(c,op,ii,lit);
Packit Service 5195f2
        c->r1_m_len = m_len;
Packit Service 5195f2
        c->r1_lit = lit;
Packit Service 5195f2
    }
Packit Service 5195f2
    else
Packit Service 5195f2
    {
Packit Service 5195f2
        assert(m_len >= 3);
Packit Service 5195f2
        c->r1_m_len = 0;
Packit Service 5195f2
        c->r1_lit = 0;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
    return op;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
//
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
static lzo_uint
Packit Service 5195f2
len_of_coded_match ( lzo_uint m_len, lzo_uint m_off, lzo_uint lit )
Packit Service 5195f2
{
Packit Service 5195f2
    lzo_uint n = 4;
Packit Service 5195f2
Packit Service 5195f2
    if (m_len < 2)
Packit Service 5195f2
        return 0;
Packit Service 5195f2
    if (m_len == 2)
Packit Service 5195f2
        return (m_off <= M1_MAX_OFFSET && lit > 0 && lit < 4) ? 2 : 0;
Packit Service 5195f2
    if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET)
Packit Service 5195f2
        return 2;
Packit Service 5195f2
    if (m_len == M2_MIN_LEN && m_off <= MX_MAX_OFFSET && lit >= 4)
Packit Service 5195f2
        return 2;
Packit Service 5195f2
    if (m_off <= M3_MAX_OFFSET)
Packit Service 5195f2
    {
Packit Service 5195f2
        if (m_len <= M3_MAX_LEN)
Packit Service 5195f2
            return 3;
Packit Service 5195f2
        m_len -= M3_MAX_LEN;
Packit Service 5195f2
        while (m_len > 255)
Packit Service 5195f2
        {
Packit Service 5195f2
            m_len -= 255;
Packit Service 5195f2
            n++;
Packit Service 5195f2
        }
Packit Service 5195f2
        return n;
Packit Service 5195f2
    }
Packit Service 5195f2
    if (m_off <= M4_MAX_OFFSET)
Packit Service 5195f2
    {
Packit Service 5195f2
        if (m_len <= M4_MAX_LEN)
Packit Service 5195f2
            return 3;
Packit Service 5195f2
        m_len -= M4_MAX_LEN;
Packit Service 5195f2
        while (m_len > 255)
Packit Service 5195f2
        {
Packit Service 5195f2
            m_len -= 255;
Packit Service 5195f2
            n++;
Packit Service 5195f2
        }
Packit Service 5195f2
        return n;
Packit Service 5195f2
    }
Packit Service 5195f2
    return 0;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
static lzo_uint
Packit Service 5195f2
min_gain(lzo_uint ahead, lzo_uint lit1, lzo_uint lit2, lzo_uint l1, lzo_uint l2, lzo_uint l3)
Packit Service 5195f2
{
Packit Service 5195f2
    lzo_uint lazy_match_min_gain;
Packit Service 5195f2
Packit Service 5195f2
    assert (ahead >= 1);
Packit Service 5195f2
    lazy_match_min_gain = ahead;
Packit Service 5195f2
Packit Service 5195f2
#if 0
Packit Service 5195f2
    if (l3)
Packit Service 5195f2
        lit2 -= ahead;
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
    if (lit1 <= 3)
Packit Service 5195f2
        lazy_match_min_gain += (lit2 <= 3) ? 0 : 2;
Packit Service 5195f2
    else if (lit1 <= 18)
Packit Service 5195f2
        lazy_match_min_gain += (lit2 <= 18) ? 0 : 1;
Packit Service 5195f2
Packit Service 5195f2
    lazy_match_min_gain += (l2 - l1) * 2;
Packit Service 5195f2
    if (l3)
Packit Service 5195f2
        lazy_match_min_gain -= (ahead - l3) * 2;
Packit Service 5195f2
Packit Service 5195f2
    if ((lzo_int) lazy_match_min_gain < 0)
Packit Service 5195f2
        lazy_match_min_gain = 0;
Packit Service 5195f2
Packit Service 5195f2
#if 0
Packit Service 5195f2
    if (l1 == 2)
Packit Service 5195f2
        if (lazy_match_min_gain == 0)
Packit Service 5195f2
            lazy_match_min_gain = 1;
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
    return lazy_match_min_gain;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
//
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
#if !defined(NDEBUG)
Packit Service 5195f2
static
Packit Service 5195f2
void assert_match( const lzo_swd_p swd, lzo_uint m_len, lzo_uint m_off )
Packit Service 5195f2
{
Packit Service 5195f2
    const LZO_COMPRESS_T *c = swd->c;
Packit Service 5195f2
    lzo_uint d_off;
Packit Service 5195f2
Packit Service 5195f2
    assert(m_len >= 2);
Packit Service 5195f2
    if (m_off <= (lzo_uint) (c->bp - c->in))
Packit Service 5195f2
    {
Packit Service 5195f2
        assert(c->bp - m_off + m_len < c->ip);
Packit Service 5195f2
        assert(lzo_memcmp(c->bp, c->bp - m_off, m_len) == 0);
Packit Service 5195f2
    }
Packit Service 5195f2
    else
Packit Service 5195f2
    {
Packit Service 5195f2
        assert(swd->dict != NULL);
Packit Service 5195f2
        d_off = m_off - (lzo_uint) (c->bp - c->in);
Packit Service 5195f2
        assert(d_off <= swd->dict_len);
Packit Service 5195f2
        if (m_len > d_off)
Packit Service 5195f2
        {
Packit Service 5195f2
            assert(lzo_memcmp(c->bp, swd->dict_end - d_off, d_off) == 0);
Packit Service 5195f2
            assert(c->in + m_len - d_off < c->ip);
Packit Service 5195f2
            assert(lzo_memcmp(c->bp + d_off, c->in, m_len - d_off) == 0);
Packit Service 5195f2
        }
Packit Service 5195f2
        else
Packit Service 5195f2
        {
Packit Service 5195f2
            assert(lzo_memcmp(c->bp, swd->dict_end - d_off, m_len) == 0);
Packit Service 5195f2
        }
Packit Service 5195f2
    }
Packit Service 5195f2
}
Packit Service 5195f2
#else
Packit Service 5195f2
#  define assert_match(a,b,c)   ((void)0)
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
#if defined(SWD_BEST_OFF)
Packit Service 5195f2
Packit Service 5195f2
static void
Packit Service 5195f2
better_match ( const lzo_swd_p swd, lzo_uint *m_len, lzo_uint *m_off )
Packit Service 5195f2
{
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
    const LZO_COMPRESS_T *c = swd->c;
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
    if (*m_len <= M2_MIN_LEN)
Packit Service 5195f2
        return;
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
    if (*m_off == c->last_m_off && *m_len <= M2_MAX_LEN)
Packit Service 5195f2
        return;
Packit Service 5195f2
#if 1
Packit Service 5195f2
    if (*m_len >= M2_MIN_LEN + 1 && *m_len <= M2_MAX_LEN + 1 &&
Packit Service 5195f2
        c->last_m_off && swd->best_off[*m_len-1] == c->last_m_off)
Packit Service 5195f2
    {
Packit Service 5195f2
        *m_len = *m_len - 1;
Packit Service 5195f2
        *m_off = swd->best_off[*m_len];
Packit Service 5195f2
        return;
Packit Service 5195f2
    }
Packit Service 5195f2
#endif
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
    if (*m_off <= M2_MAX_OFFSET)
Packit Service 5195f2
        return;
Packit Service 5195f2
Packit Service 5195f2
#if 1
Packit Service 5195f2
    /* M3/M4 -> M2 */
Packit Service 5195f2
    if (*m_off > M2_MAX_OFFSET &&
Packit Service 5195f2
        *m_len >= M2_MIN_LEN + 1 && *m_len <= M2_MAX_LEN + 1 &&
Packit Service 5195f2
        swd->best_off[*m_len-1] && swd->best_off[*m_len-1] <= M2_MAX_OFFSET)
Packit Service 5195f2
    {
Packit Service 5195f2
        *m_len = *m_len - 1;
Packit Service 5195f2
        *m_off = swd->best_off[*m_len];
Packit Service 5195f2
        return;
Packit Service 5195f2
    }
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
#if 1
Packit Service 5195f2
    /* M4 -> M2 */
Packit Service 5195f2
    if (*m_off > M3_MAX_OFFSET &&
Packit Service 5195f2
        *m_len >= M4_MAX_LEN + 1 && *m_len <= M2_MAX_LEN + 2 &&
Packit Service 5195f2
        swd->best_off[*m_len-2] && swd->best_off[*m_len-2] <= M2_MAX_OFFSET)
Packit Service 5195f2
    {
Packit Service 5195f2
        *m_len = *m_len - 2;
Packit Service 5195f2
        *m_off = swd->best_off[*m_len];
Packit Service 5195f2
        return;
Packit Service 5195f2
    }
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
#if 1
Packit Service 5195f2
    /* M4 -> M3 */
Packit Service 5195f2
    if (*m_off > M3_MAX_OFFSET &&
Packit Service 5195f2
        *m_len >= M4_MAX_LEN + 1 && *m_len <= M3_MAX_LEN + 1 &&
Packit Service 5195f2
        swd->best_off[*m_len-1] && swd->best_off[*m_len-1] <= M3_MAX_OFFSET)
Packit Service 5195f2
    {
Packit Service 5195f2
        *m_len = *m_len - 1;
Packit Service 5195f2
        *m_off = swd->best_off[*m_len];
Packit Service 5195f2
    }
Packit Service 5195f2
#endif
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
//
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(int)
Packit Service 5195f2
lzo1x_999_compress_internal ( const lzo_bytep in , lzo_uint  in_len,
Packit Service 5195f2
                                    lzo_bytep out, lzo_uintp out_len,
Packit Service 5195f2
                                    lzo_voidp wrkmem,
Packit Service 5195f2
                              const lzo_bytep dict, lzo_uint dict_len,
Packit Service 5195f2
                                    lzo_callback_p cb,
Packit Service 5195f2
                                    int try_lazy_parm,
Packit Service 5195f2
                                    lzo_uint good_length,
Packit Service 5195f2
                                    lzo_uint max_lazy,
Packit Service 5195f2
                                    lzo_uint nice_length,
Packit Service 5195f2
                                    lzo_uint max_chain,
Packit Service 5195f2
                                    lzo_uint32_t flags )
Packit Service 5195f2
{
Packit Service 5195f2
    lzo_bytep op;
Packit Service 5195f2
    const lzo_bytep ii;
Packit Service 5195f2
    lzo_uint lit;
Packit Service 5195f2
    lzo_uint m_len, m_off;
Packit Service 5195f2
    LZO_COMPRESS_T cc;
Packit Service 5195f2
    LZO_COMPRESS_T * const c = &cc;
Packit Service 5195f2
    lzo_swd_p const swd = (lzo_swd_p) wrkmem;
Packit Service 5195f2
    lzo_uint try_lazy;
Packit Service 5195f2
    int r;
Packit Service 5195f2
Packit Service 5195f2
    /* sanity check */
Packit Service 5195f2
#if defined(LZO1X)
Packit Service 5195f2
    LZO_COMPILE_TIME_ASSERT(LZO1X_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T)
Packit Service 5195f2
#elif defined(LZO1Y)
Packit Service 5195f2
    LZO_COMPILE_TIME_ASSERT(LZO1Y_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T)
Packit Service 5195f2
#elif defined(LZO1Z)
Packit Service 5195f2
    LZO_COMPILE_TIME_ASSERT(LZO1Z_999_MEM_COMPRESS >= SIZEOF_LZO_SWD_T)
Packit Service 5195f2
#else
Packit Service 5195f2
#  error
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
/* setup parameter defaults */
Packit Service 5195f2
    /* number of lazy match tries */
Packit Service 5195f2
    try_lazy = (lzo_uint) try_lazy_parm;
Packit Service 5195f2
    if (try_lazy_parm < 0)
Packit Service 5195f2
        try_lazy = 1;
Packit Service 5195f2
    /* reduce lazy match search if we already have a match with this length */
Packit Service 5195f2
    if (good_length == 0)
Packit Service 5195f2
        good_length = 32;
Packit Service 5195f2
    /* do not try a lazy match if we already have a match with this length */
Packit Service 5195f2
    if (max_lazy == 0)
Packit Service 5195f2
        max_lazy = 32;
Packit Service 5195f2
    /* stop searching for longer matches than this one */
Packit Service 5195f2
    if (nice_length == 0)
Packit Service 5195f2
        nice_length = 0;
Packit Service 5195f2
    /* don't search more positions than this */
Packit Service 5195f2
    if (max_chain == 0)
Packit Service 5195f2
        max_chain = SWD_MAX_CHAIN;
Packit Service 5195f2
Packit Service 5195f2
    c->init = 0;
Packit Service 5195f2
    c->ip = c->in = in;
Packit Service 5195f2
    c->in_end = in + in_len;
Packit Service 5195f2
    c->out = out;
Packit Service 5195f2
    c->cb = cb;
Packit Service 5195f2
    c->m1a_m = c->m1b_m = c->m2_m = c->m3_m = c->m4_m = 0;
Packit Service 5195f2
    c->lit1_r = c->lit2_r = c->lit3_r = 0;
Packit Service 5195f2
Packit Service 5195f2
    op = out;
Packit Service 5195f2
    ii = c->ip;             /* point to start of literal run */
Packit Service 5195f2
    lit = 0;
Packit Service 5195f2
    c->r1_lit = c->r1_m_len = 0;
Packit Service 5195f2
Packit Service 5195f2
    r = init_match(c,swd,dict,dict_len,flags);
Packit Service 5195f2
    if (r != 0)
Packit Service 5195f2
        return r;
Packit Service 5195f2
    if (max_chain > 0)
Packit Service 5195f2
        swd->max_chain = max_chain;
Packit Service 5195f2
    if (nice_length > 0)
Packit Service 5195f2
        swd->nice_length = nice_length;
Packit Service 5195f2
Packit Service 5195f2
    r = find_match(c,swd,0,0);
Packit Service 5195f2
    if (r != 0)
Packit Service 5195f2
        return r;
Packit Service 5195f2
    while (c->look > 0)
Packit Service 5195f2
    {
Packit Service 5195f2
        lzo_uint ahead;
Packit Service 5195f2
        lzo_uint max_ahead;
Packit Service 5195f2
        lzo_uint l1, l2, l3;
Packit Service 5195f2
Packit Service 5195f2
        c->codesize = pd(op, out);
Packit Service 5195f2
Packit Service 5195f2
        m_len = c->m_len;
Packit Service 5195f2
        m_off = c->m_off;
Packit Service 5195f2
Packit Service 5195f2
        assert(c->bp == c->ip - c->look);
Packit Service 5195f2
        assert(c->bp >= in);
Packit Service 5195f2
        if (lit == 0)
Packit Service 5195f2
            ii = c->bp;
Packit Service 5195f2
        assert(ii + lit == c->bp);
Packit Service 5195f2
        assert(swd->b_char == *(c->bp));
Packit Service 5195f2
Packit Service 5195f2
        if ( m_len < 2 ||
Packit Service 5195f2
            (m_len == 2 && (m_off > M1_MAX_OFFSET || lit == 0 || lit >= 4)) ||
Packit Service 5195f2
#if 1
Packit Service 5195f2
            /* Do not accept this match for compressed-data compatibility
Packit Service 5195f2
             * with LZO v1.01 and before
Packit Service 5195f2
             * [ might be a problem for decompress() and optimize() ]
Packit Service 5195f2
             */
Packit Service 5195f2
            (m_len == 2 && op == out) ||
Packit Service 5195f2
#endif
Packit Service 5195f2
            (op == out && lit == 0))
Packit Service 5195f2
        {
Packit Service 5195f2
            /* a literal */
Packit Service 5195f2
            m_len = 0;
Packit Service 5195f2
        }
Packit Service 5195f2
        else if (m_len == M2_MIN_LEN)
Packit Service 5195f2
        {
Packit Service 5195f2
            /* compression ratio improves if we code a literal in some cases */
Packit Service 5195f2
            if (m_off > MX_MAX_OFFSET && lit >= 4)
Packit Service 5195f2
                m_len = 0;
Packit Service 5195f2
        }
Packit Service 5195f2
Packit Service 5195f2
        if (m_len == 0)
Packit Service 5195f2
        {
Packit Service 5195f2
    /* a literal */
Packit Service 5195f2
            lit++;
Packit Service 5195f2
            swd->max_chain = max_chain;
Packit Service 5195f2
            r = find_match(c,swd,1,0);
Packit Service 5195f2
            assert(r == 0); LZO_UNUSED(r);
Packit Service 5195f2
            continue;
Packit Service 5195f2
        }
Packit Service 5195f2
Packit Service 5195f2
    /* a match */
Packit Service 5195f2
#if defined(SWD_BEST_OFF)
Packit Service 5195f2
        if (swd->use_best_off)
Packit Service 5195f2
            better_match(swd,&m_len,&m_off);
Packit Service 5195f2
#endif
Packit Service 5195f2
        assert_match(swd,m_len,m_off);
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
        /* shall we try a lazy match ? */
Packit Service 5195f2
        ahead = 0;
Packit Service 5195f2
        if (try_lazy == 0 || m_len >= max_lazy)
Packit Service 5195f2
        {
Packit Service 5195f2
            /* no */
Packit Service 5195f2
            l1 = 0;
Packit Service 5195f2
            max_ahead = 0;
Packit Service 5195f2
        }
Packit Service 5195f2
        else
Packit Service 5195f2
        {
Packit Service 5195f2
            /* yes, try a lazy match */
Packit Service 5195f2
            l1 = len_of_coded_match(m_len,m_off,lit);
Packit Service 5195f2
            assert(l1 > 0);
Packit Service 5195f2
#if 1
Packit Service 5195f2
            max_ahead = LZO_MIN(try_lazy, l1 - 1);
Packit Service 5195f2
#else
Packit Service 5195f2
            max_ahead = LZO_MIN3(try_lazy, l1, m_len - 1);
Packit Service 5195f2
#endif
Packit Service 5195f2
        }
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
        while (ahead < max_ahead && c->look > m_len)
Packit Service 5195f2
        {
Packit Service 5195f2
            lzo_uint lazy_match_min_gain;
Packit Service 5195f2
Packit Service 5195f2
            if (m_len >= good_length)
Packit Service 5195f2
                swd->max_chain = max_chain >> 2;
Packit Service 5195f2
            else
Packit Service 5195f2
                swd->max_chain = max_chain;
Packit Service 5195f2
            r = find_match(c,swd,1,0);
Packit Service 5195f2
            ahead++;
Packit Service 5195f2
Packit Service 5195f2
            assert(r == 0); LZO_UNUSED(r);
Packit Service 5195f2
            assert(c->look > 0);
Packit Service 5195f2
            assert(ii + lit + ahead == c->bp);
Packit Service 5195f2
Packit Service 5195f2
#if defined(LZO1Z)
Packit Service 5195f2
            if (m_off == c->last_m_off && c->m_off != c->last_m_off)
Packit Service 5195f2
                if (m_len >= M2_MIN_LEN && m_len <= M2_MAX_LEN)
Packit Service 5195f2
                    c->m_len = 0;
Packit Service 5195f2
#endif
Packit Service 5195f2
            if (c->m_len < m_len)
Packit Service 5195f2
                continue;
Packit Service 5195f2
#if 1
Packit Service 5195f2
            if (c->m_len == m_len && c->m_off >= m_off)
Packit Service 5195f2
                continue;
Packit Service 5195f2
#endif
Packit Service 5195f2
#if defined(SWD_BEST_OFF)
Packit Service 5195f2
            if (swd->use_best_off)
Packit Service 5195f2
                better_match(swd,&c->m_len,&c->m_off);
Packit Service 5195f2
#endif
Packit Service 5195f2
            l2 = len_of_coded_match(c->m_len,c->m_off,lit+ahead);
Packit Service 5195f2
            if (l2 == 0)
Packit Service 5195f2
                continue;
Packit Service 5195f2
#if 0
Packit Service 5195f2
            if (c->m_len == m_len && l2 >= l1)
Packit Service 5195f2
                continue;
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
#if 1
Packit Service 5195f2
            /* compressed-data compatibility [see above] */
Packit Service 5195f2
            l3 = (op == out) ? 0 : len_of_coded_match(ahead,m_off,lit);
Packit Service 5195f2
#else
Packit Service 5195f2
            l3 = len_of_coded_match(ahead,m_off,lit);
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
            lazy_match_min_gain = min_gain(ahead,lit,lit+ahead,l1,l2,l3);
Packit Service 5195f2
            if (c->m_len >= m_len + lazy_match_min_gain)
Packit Service 5195f2
            {
Packit Service 5195f2
                c->lazy++;
Packit Service 5195f2
                assert_match(swd,c->m_len,c->m_off);
Packit Service 5195f2
Packit Service 5195f2
                if (l3)
Packit Service 5195f2
                {
Packit Service 5195f2
                    /* code previous run */
Packit Service 5195f2
                    op = code_run(c,op,ii,lit,ahead);
Packit Service 5195f2
                    lit = 0;
Packit Service 5195f2
                    /* code shortened match */
Packit Service 5195f2
                    op = code_match(c,op,ahead,m_off);
Packit Service 5195f2
                }
Packit Service 5195f2
                else
Packit Service 5195f2
                {
Packit Service 5195f2
                    lit += ahead;
Packit Service 5195f2
                    assert(ii + lit == c->bp);
Packit Service 5195f2
                }
Packit Service 5195f2
                goto lazy_match_done;
Packit Service 5195f2
            }
Packit Service 5195f2
        }
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
        assert(ii + lit + ahead == c->bp);
Packit Service 5195f2
Packit Service 5195f2
        /* 1 - code run */
Packit Service 5195f2
        op = code_run(c,op,ii,lit,m_len);
Packit Service 5195f2
        lit = 0;
Packit Service 5195f2
Packit Service 5195f2
        /* 2 - code match */
Packit Service 5195f2
        op = code_match(c,op,m_len,m_off);
Packit Service 5195f2
        swd->max_chain = max_chain;
Packit Service 5195f2
        r = find_match(c,swd,m_len,1+ahead);
Packit Service 5195f2
        assert(r == 0); LZO_UNUSED(r);
Packit Service 5195f2
Packit Service 5195f2
lazy_match_done: ;
Packit Service 5195f2
    }
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
    /* store final run */
Packit Service 5195f2
    if (lit > 0)
Packit Service 5195f2
        op = STORE_RUN(c,op,ii,lit);
Packit Service 5195f2
Packit Service 5195f2
#if defined(LZO_EOF_CODE)
Packit Service 5195f2
    *op++ = M4_MARKER | 1;
Packit Service 5195f2
    *op++ = 0;
Packit Service 5195f2
    *op++ = 0;
Packit Service 5195f2
#endif
Packit Service 5195f2
Packit Service 5195f2
    c->codesize = pd(op, out);
Packit Service 5195f2
    assert(c->textsize == in_len);
Packit Service 5195f2
Packit Service 5195f2
    *out_len = pd(op, out);
Packit Service 5195f2
Packit Service 5195f2
    if (c->cb && c->cb->nprogress)
Packit Service 5195f2
        (*c->cb->nprogress)(c->cb, c->textsize, c->codesize, 0);
Packit Service 5195f2
Packit Service 5195f2
#if 0
Packit Service 5195f2
    printf("%ld %ld -> %ld  %ld: %ld %ld %ld %ld %ld  %ld: %ld %ld %ld  %ld\n",
Packit Service 5195f2
        (long) c->textsize, (long) in_len, (long) c->codesize,
Packit Service 5195f2
        c->match_bytes, c->m1a_m, c->m1b_m, c->m2_m, c->m3_m, c->m4_m,
Packit Service 5195f2
        c->lit_bytes, c->lit1_r, c->lit2_r, c->lit3_r, c->lazy);
Packit Service 5195f2
#endif
Packit Service 5195f2
    assert(c->lit_bytes + c->match_bytes == in_len);
Packit Service 5195f2
Packit Service 5195f2
    return LZO_E_OK;
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
//
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(int)
Packit Service 5195f2
lzo1x_999_compress_level    ( const lzo_bytep in , lzo_uint  in_len,
Packit Service 5195f2
                                    lzo_bytep out, lzo_uintp out_len,
Packit Service 5195f2
                                    lzo_voidp wrkmem,
Packit Service 5195f2
                              const lzo_bytep dict, lzo_uint dict_len,
Packit Service 5195f2
                                    lzo_callback_p cb,
Packit Service 5195f2
                                    int compression_level )
Packit Service 5195f2
{
Packit Service 5195f2
    static const struct
Packit Service 5195f2
    {
Packit Service 5195f2
        int try_lazy_parm;
Packit Service 5195f2
        lzo_uint good_length;
Packit Service 5195f2
        lzo_uint max_lazy;
Packit Service 5195f2
        lzo_uint nice_length;
Packit Service 5195f2
        lzo_uint max_chain;
Packit Service 5195f2
        lzo_uint32_t flags;
Packit Service 5195f2
    } c[9] = {
Packit Service 5195f2
        /* faster compression */
Packit Service 5195f2
        {   0,     0,     0,     8,    4,   0 },
Packit Service 5195f2
        {   0,     0,     0,    16,    8,   0 },
Packit Service 5195f2
        {   0,     0,     0,    32,   16,   0 },
Packit Service 5195f2
        {   1,     4,     4,    16,   16,   0 },
Packit Service 5195f2
        {   1,     8,    16,    32,   32,   0 },
Packit Service 5195f2
        {   1,     8,    16,   128,  128,   0 },
Packit Service 5195f2
        {   2,     8,    32,   128,  256,   0 },
Packit Service 5195f2
        {   2,    32,   128, SWD_F, 2048,   1 },
Packit Service 5195f2
        {   2, SWD_F, SWD_F, SWD_F, 4096,   1 }
Packit Service 5195f2
        /* max. compression */
Packit Service 5195f2
    };
Packit Service 5195f2
Packit Service 5195f2
    if (compression_level < 1 || compression_level > 9)
Packit Service 5195f2
        return LZO_E_ERROR;
Packit Service 5195f2
Packit Service 5195f2
    compression_level -= 1;
Packit Service 5195f2
    return lzo1x_999_compress_internal(in, in_len, out, out_len, wrkmem,
Packit Service 5195f2
                                       dict, dict_len, cb,
Packit Service 5195f2
                                       c[compression_level].try_lazy_parm,
Packit Service 5195f2
                                       c[compression_level].good_length,
Packit Service 5195f2
                                       c[compression_level].max_lazy,
Packit Service 5195f2
#if 0
Packit Service 5195f2
                                       c[compression_level].nice_length,
Packit Service 5195f2
#else
Packit Service 5195f2
                                       0,
Packit Service 5195f2
#endif
Packit Service 5195f2
                                       c[compression_level].max_chain,
Packit Service 5195f2
                                       c[compression_level].flags);
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/***********************************************************************
Packit Service 5195f2
//
Packit Service 5195f2
************************************************************************/
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(int)
Packit Service 5195f2
lzo1x_999_compress_dict     ( const lzo_bytep in , lzo_uint  in_len,
Packit Service 5195f2
                                    lzo_bytep out, lzo_uintp out_len,
Packit Service 5195f2
                                    lzo_voidp wrkmem,
Packit Service 5195f2
                              const lzo_bytep dict, lzo_uint dict_len )
Packit Service 5195f2
{
Packit Service 5195f2
    return lzo1x_999_compress_level(in, in_len, out, out_len, wrkmem,
Packit Service 5195f2
                                    dict, dict_len, 0, 8);
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
LZO_PUBLIC(int)
Packit Service 5195f2
lzo1x_999_compress  ( const lzo_bytep in , lzo_uint  in_len,
Packit Service 5195f2
                            lzo_bytep out, lzo_uintp out_len,
Packit Service 5195f2
                            lzo_voidp wrkmem )
Packit Service 5195f2
{
Packit Service 5195f2
    return lzo1x_999_compress_level(in, in_len, out, out_len, wrkmem,
Packit Service 5195f2
                                    NULL, 0, (lzo_callback_p) 0, 8);
Packit Service 5195f2
}
Packit Service 5195f2
Packit Service 5195f2
Packit Service 5195f2
/*
Packit Service 5195f2
vi:ts=4:et
Packit Service 5195f2
*/
Packit Service 5195f2