/* wrap.h -- wrapper functions

   This file is part of the LZO real-time data compression library.

   Copyright (C) 2008 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2007 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2006 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2005 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2004 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2003 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2002 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2001 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 2000 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 1999 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 1998 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 1997 Markus Franz Xaver Johannes Oberhumer
   Copyright (C) 1996 Markus Franz Xaver Johannes Oberhumer
   All Rights Reserved.

   The LZO library is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2 of
   the License, or (at your option) any later version.

   The LZO library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with the LZO library; see the file COPYING.
   If not, write to the Free Software Foundation, Inc.,
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

   Markus F.X.J. Oberhumer
   <markus@oberhumer.com>
   http://www.oberhumer.com/opensource/lzo/
 */


/*************************************************************************
// compression levels of LZO1X-999 and LZO1Y-999
**************************************************************************/

#if defined(HAVE_LZO1X_H)

LZO_PRIVATE(int)
lzo1x_999_1_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 1);
}

LZO_PRIVATE(int)
lzo1x_999_2_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 2);
}

LZO_PRIVATE(int)
lzo1x_999_3_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 3);
}

LZO_PRIVATE(int)
lzo1x_999_4_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 4);
}

LZO_PRIVATE(int)
lzo1x_999_5_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 5);
}

LZO_PRIVATE(int)
lzo1x_999_6_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 6);
}

LZO_PRIVATE(int)
lzo1x_999_7_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 7);
}

LZO_PRIVATE(int)
lzo1x_999_8_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 8);
}

LZO_PRIVATE(int)
lzo1x_999_9_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1x_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 9);
}

#endif


#if defined(HAVE_LZO1Y_H)

LZO_PRIVATE(int)
lzo1y_999_1_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 1);
}

LZO_PRIVATE(int)
lzo1y_999_2_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 2);
}

LZO_PRIVATE(int)
lzo1y_999_3_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 3);
}

LZO_PRIVATE(int)
lzo1y_999_4_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 4);
}

LZO_PRIVATE(int)
lzo1y_999_5_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 5);
}

LZO_PRIVATE(int)
lzo1y_999_6_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 6);
}

LZO_PRIVATE(int)
lzo1y_999_7_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 7);
}

LZO_PRIVATE(int)
lzo1y_999_8_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 8);
}

LZO_PRIVATE(int)
lzo1y_999_9_compress    ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    return lzo1y_999_compress_level(src, src_len, dst, dst_len, wrkmem,
                                    dict.ptr, dict.len, 0, 9);
}

#endif


/*************************************************************************
// other wrappers (pseudo compressors)
**************************************************************************/

LZO_PRIVATE(int)
memcpy_x_compress       ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    lzo_memcpy(dst,src,src_len);
    *dst_len = src_len;
    if (wrkmem) wrkmem = 0; /* avoid warning */
    return 0;
}


LZO_PRIVATE(int)
memset_x_compress       ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    lzo_memset(dst,0,src_len);
    *dst_len = src_len;
    if (src) src = 0;       /* avoid warning */
    if (wrkmem) wrkmem = 0; /* avoid warning */
    return 0;
}


LZO_PRIVATE(int)
adler32_x_compress      ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    lzo_uint32 adler;
    adler = lzo_adler32(0, NULL, 0);
    adler = lzo_adler32(adler, dst, src_len);
    *dst_len = src_len;
    if (src) src = 0;       /* avoid warning */
    if (wrkmem) wrkmem = 0; /* avoid warning */
    return 0;
}


LZO_PRIVATE(int)
crc32_x_compress        ( const lzo_bytep src, lzo_uint  src_len,
                                lzo_bytep dst, lzo_uintp dst_len,
                                lzo_voidp wrkmem )
{
    lzo_uint32 crc;
    crc = lzo_crc32(0, NULL, 0);
    crc = lzo_crc32(crc, dst, src_len);
    *dst_len = src_len;
    if (src) src = 0;       /* avoid warning */
    if (wrkmem) wrkmem = 0; /* avoid warning */
    return 0;
}


#if defined(__LZO_PROFESSIONAL__)
#  include "lzopro/t_wrap.ch"
#endif


/*
vi:ts=4:et
*/

