home *** CD-ROM | disk | FTP | other *** search
- /*
- *******************************************************************************
- * *
- * COPYRIGHT: *
- * (C) Copyright International Business Machines Corporation, 1998 *
- * Licensed Material - Program-Property of IBM - All Rights Reserved. *
- * US Government Users Restricted Rights - Use, duplication, or disclosure *
- * restricted by GSA ADP Schedule Contract with IBM Corp. *
- * *
- *******************************************************************************
- *
- * File scsu.h
- *
- * Modification History:
- *
- * Date Name Description
- * 05/17/99 stephen Creation (ported from java UnicodeCompressor.java)
- * 09/21/99 stephen Updated to handle data splits on decompression.
- *******************************************************************************
- */
-
- #ifndef SCSU_H
- #define SCSU_H 1
-
- #include "utypes.h"
-
- /* Number of windows */
- #define USCSU_NUM_WINDOWS 8
- #define USCSU_NUM_STATIC_WINDOWS 8
-
- /* Maximum value for a window's index */
- #define USCSU_MAX_INDEX 0xFF
-
- /** The size of the internal buffer for a UnicodeCompressor */
- #define USCSU_BUFSIZE 3
-
- /** The UnicodeCompressor struct */
- struct UnicodeCompressor {
-
- /** Alias to current dynamic window */
- int32_t fCurrentWindow;
-
- /** Dynamic compression window offsets */
- int32_t fOffsets [ USCSU_NUM_WINDOWS ];
-
- /** Current compression mode */
- int32_t fMode;
-
- /** Keeps count of times character indices are encountered */
- int32_t fIndexCount [ USCSU_MAX_INDEX + 1 ];
-
- /** The time stamps indicate when a window was last defined */
- int32_t fTimeStamps [ USCSU_NUM_WINDOWS ];
-
- /** The current time stamp */
- int32_t fTimeStamp;
-
- /** Internal buffer for saving state */
- uint8_t fBuffer [ USCSU_BUFSIZE ];
-
- /** Number of characters in our internal buffer */
- int32_t fBufferLength;
- };
- typedef struct UnicodeCompressor UnicodeCompressor;
-
- /**
- * Initialize a UnicodeCompressor.
- * Sets all windows to their default values.
- * @see #reset
- */
- U_CAPI void U_EXPORT2 scsu_init(UnicodeCompressor *comp);
-
- /**
- * Reset the compressor to its initial state.
- * @param comp The UnicodeCompressor to reset.
- */
- U_CAPI void U_EXPORT2 scsu_reset(UnicodeCompressor *comp);
-
- /**
- * Compress a Unicode character array into a byte array.
- *
- * This function is not guaranteed to completely fill the output buffer, nor
- * is it guaranteed to compress the entire input.
- * If the source data is completely compressed, <TT>status</TT> will be set
- * to <TT>U_ZERO_ERROR</TT>.
- * If the source data is not completely compressed, <TT>status</TT> will be
- * set to <TT>U_INDEX_OUTOFBOUNDS_ERROR</TT>. If this occurs, larger buffers
- * should be allocated, or data flushed, and the function should be called
- * again with the new buffers.
- *
- * @param comp A pointer to a previously-initialized UnicodeCompressor
- * @param target I/O parameter. On input, a pointer to a buffer of bytes to
- * receive the compressed data. On output, points to the byte following
- * the last byte written. This buffer must be at least 4 bytes.
- * @param targetLimit A pointer to the end of the array <TT>target</TT>.
- * @param source I/O parameter. On input, a pointer to a buffer of
- * Unicode characters to be compressed. On output, points to the character
- * following the last character compressed.
- * @param sourceLimit A pointer to the end of the array <TT>source</TT>.
- * @param status A pointer to an UErrorCode to receive any errors.
- *
- * @see #decompress
- */
- U_CAPI void U_EXPORT2 scsu_compress(UnicodeCompressor *comp,
- uint8_t **target,
- const uint8_t *targetLimit,
- const UChar **source,
- const UChar *sourceLimit,
- UErrorCode *status);
-
- /**
- * Decompress a byte array into a Unicode character array.
- *
- * This function will either completely fill the output buffer, or
- * consume the entire input.
- * If the source data is completely compressed, <TT>status</TT> will be set
- * to <TT>U_ZERO_ERROR</TT>.
- * If the source data is not completely compressed, <TT>status</TT> will be
- * set to <TT>U_INDEX_OUTOFBOUNDS_ERROR</TT>. If this occurs, larger buffers
- * should be allocated, or data flushed, and the function should be called
- * again with the new buffers.
- *
- * @param comp A pointer to a previously-initialized UnicodeDecompressor
- * @param target I/O parameter. On input, a pointer to a buffer of Unicode
- * characters to receive the compressed data. On output, points to the
- * character following the last character written. This buffer must be
- * at least 2 bytes.
- * @param targetLimit A pointer to the end of the array <TT>target</TT>.
- * @param source I/O parameter. On input, a pointer to a buffer of
- * bytes to be decompressed. On output, points to the byte following the
- * last byte decompressed.
- * @param sourceLimit A pointer to the end of the array <TT>source</TT>.
- * @param status A pointer to an UErrorCode to receive any errors.
- * @return The number of Unicode characters writeten to <TT>target</TT>.
- *
- * @see #compress
- */
- U_CAPI void U_EXPORT2 scsu_decompress(UnicodeCompressor *comp,
- UChar **target,
- const UChar *targetLimit,
- const uint8_t **source,
- const uint8_t *sourceLimit,
- UErrorCode *status);
-
- #endif
-