Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Thursday, April 18, 2024

File: [Platon] / libplaton / platon / compress / rle.h (download)

Revision 1.1, Mon Jan 5 10:48:32 2004 UTC (20 years, 3 months ago) by nepto

Added implementation of RLE and LZ/RLE compression algorithms.

/**
 * RLE related compressions
 *
 * @file    platon/compress/rle.h
 * @author    iMatix SFL project team <sfl@imatix.com>
 * @version    \$Platon: $
 * @date    2004
 *
 * These subroutines are extracted from Standard Function Library (SFL)
 * created by iMatix Corporation.
 */

#ifndef _PLATON_COMPRESS_RLE_H
#define _PLATON_COMPRESS_RLE_H

#ifndef PLATON_FUNC
# define PLATON_FUNC(_name) _name
#endif
#ifndef PLATON_FUNC_STR
# define PLATON_FUNC_STR(_name) #_name
#endif

#ifdef __cplusplus
extern "C" {
#endif

    /**
     * Compresses a block using RLE algorithm
     *
     * @param        src            uncompressed data
     * @param        dst            compressed data
     * @param        src_size    size of uncompressed data
     * @return        size of compressed data
     *
     * Takes a block of uncompressed data in src, compresses it using a RLE
     * algorithm and places the result in dst. To decompress the data, use
     * the uncompress_rle() function. Returns the size of the compressed data.
     * The dst buffer should be 10% larger than the src buffer. The src buffer
     * must be at least src_size + 1 bytes long. It may be modified. The
     * compressed data contains these strings:
     *
     * <PRE>
     * [01-7F][data...]     String of uncompressed data, 1 to 127 bytes.
     * [83-FF][byte]        Run of 3 to 127 identical bytes.
     * [80][len][byte]      Run of 128 to 255 identical bytes.
     * [81][lo][hi][byte]   Run of 256 to 2^16 identical bytes.
     * [82][len]            Run of 3 to 255 spaces.
     * [00][len]            Run of 3 to 255 binary zeroes.
     * </PRE>
     */
    int PLATON_FUNC(compress_rle)
        (unsigned char *src, unsigned char *dst, int src_size);

    /**
     * Expands a block of data previously compressed using
     * the compress_rle() function
     *
     * @param        src            compressed data
     * @param        dst            uncompressed data
     * @param        src_size    size of uncompressed data
     * @return        size of uncompressed data
     *
     * The compressed block is passed in src; the expanded result in dst.
     * Array dst must be large enough to accomodate the largest possible
     * decompressed block. Returns the size of the expanded data.
     */
    int PLATON_FUNC(uncompress_rle)
        (const unsigned char *src, unsigned char *dst, int src_size);

    /**
     * Compresses a block using RLE algorithm optimised towards compression
     * of binary zeroes
     *
     * @param        src            uncompressed data
     * @param        dst            compressed data
     * @param        src_size    size of uncompressed data
     * @return        size of compressed data
     *
     * Use this when you are certain that the sparse areas are set to binary
     * zeroes. You must use uncompress_nulls() to decompress a block compressed
     * with this function. Returns the size of the compressed data. The dst
     * buffer should be 10% larger than the src buffer. The src buffer must be
     * at least src_size + 1 bytes long. It may be modified. The compressed
     * data contains these strings:
     *
     * <PRE>
     * [01-7F][data...]        String of uncompressed data, 1 to 127 bytes.
     * [82-FF]                 Run of 2 to 127 binary zeroes.
     * [81][80-FF]             Run of 128 to 255 binary zeroes.
     * [80][lo][hi]            Run of 256 to 2^16 binary zeroes.
     * [00][len][byte]         Run of 4 to 255 identical bytes.
     * [00][00][lo][hi][byte]  Run of 256 to 2^16 identical bytes.
     * </PRE>
     */
    int PLATON_FUNC(compress_nulls)
        (unsigned char *src, unsigned char *dst, int src_size);

    /**
     * Expands a block of data previously compressed using
     * the compress_nulls() function
     *
     * @param        src            compressed data
     * @param        dst            uncompressed data
     * @param        src_size    size of uncompressed data
     * @return        size of uncompressed data
     *
     * The compressed block is passed in src; the expanded result in dst.
     * Array dst must be large enough to accomodate the largest possible
     * decompressed block. Returns the size of the expanded data.
     */
    int PLATON_FUNC(uncompress_nulls)
        (const unsigned char *src, unsigned char *dst, int src_size);

    /**
     * Compresses a block using RLE algorithm optimised towards compression
     * of sparse bitmaps
     *
     * @param        src            uncompressed data
     * @param        dst            compressed data
     * @param        src_size    size of uncompressed data
     * @return        size of compressed data
     *
     * Use this when you are playing with large, sparse bitmaps. You must use
     * uncompress_bits() to decompress a block compressed with this function.
     * Returns the size of the compressed data. The dst buffer should be 10%
     * larger than the src buffer for worst cases. The src buffer must be at
     * least src_size + 1 bytes long. It may be modified. The compressed data
     * contains these strings:
     *
     * <PRE>
     * [00-07]                 Single byte containing a bit in position 0 to 7.
     * [08-7F][data...]        String of uncompressed data, 1 to 120 bytes.
     * [82-FF]                 Run of 1 to 126 binary zeroes.
     * [81][00-FD]             Run of 127 to 380 binary zeroes.
     * [81][FE][len][byte]     Run of 4 to 255 identical bytes.
     * [81][FF][lo][hi][byte]  Run of 256 to 2^16 identical bytes.
     * [80][lo][hi]            Run of 381 to 2^16 binary zeroes.
     * </PRE>
     */
    int PLATON_FUNC(compress_bits)
        (unsigned char *src, unsigned char *dst, int src_size);

    /**
     * Expands a block of data previously compressed using
     * the compress_bits() function
     *
     * @param        src            compressed data
     * @param        dst            uncompressed data
     * @param        src_size    size of uncompressed data
     * @return        size of uncompressed data
     *
     * The compressed block is passed in src; the expanded result in dst.
     * Array dst must be large enough to accomodate the largest possible
     * decompressed block. Returns the size of the expanded data.
     */
    int PLATON_FUNC(uncompress_bits)
        (const unsigned char *src, unsigned char *dst, int src_size);

#ifdef __cplusplus
}
#endif

#endif /* #ifndef _PLATON_COMPRESS_RLE_H */


Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top