1a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet./*
2a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   LZ4 HC - High Compression Mode of LZ4
3a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   Header File
494542d845884c922f809725807ecbd2cf7454aceYann Collet   Copyright (C) 2011-2016, Yann Collet.
5a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
6a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.
7a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   Redistribution and use in source and binary forms, with or without
8a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   modification, are permitted provided that the following conditions are
9a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   met:
10a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.
11a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.       * Redistributions of source code must retain the above copyright
12a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   notice, this list of conditions and the following disclaimer.
13a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.       * Redistributions in binary form must reproduce the above
14a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   copyright notice, this list of conditions and the following disclaimer
15a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   in the documentation and/or other materials provided with the
16a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   distribution.
17a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.
18a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.
30a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.   You can contact the author at :
3184cedb4632ab87fbb108b4f7ed6e9ec164b6a4d4Przemyslaw Skibinski   - LZ4 source repository : https://github.com/lz4/lz4
3245a357fd1704e9c6d2d8037277bda62e8c86308eYann Collet   - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c
33a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.*/
3419e585cc462759427f8d125fca3278b8762b3099Yann Collet#ifndef LZ4_HC_H_19834876238432
3519e585cc462759427f8d125fca3278b8762b3099Yann Collet#define LZ4_HC_H_19834876238432
36a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.
37a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.#if defined (__cplusplus)
38a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.extern "C" {
39a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.#endif
40a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.
41874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/* --- Dependency --- */
4294542d845884c922f809725807ecbd2cf7454aceYann Collet/* note : lz4hc is not an independent module, it requires lz4.h/lz4.c for proper compilation */
4394542d845884c922f809725807ecbd2cf7454aceYann Collet#include "lz4.h"   /* stddef, LZ4LIB_API, LZ4_DEPRECATED */
44be9d248851ecd712a8911526b009c5d0c948ee21Yann Collet
45012c66536cdb93d9bcfa565fadaaf2a281c489b9Kouhei Sutou
46874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/* --- Useful constants --- */
4752cac9a97342641315c76cfb861206d6acd631a8Yann Collet#define LZ4HC_CLEVEL_MIN         3
4852cac9a97342641315c76cfb861206d6acd631a8Yann Collet#define LZ4HC_CLEVEL_DEFAULT     9
4952cac9a97342641315c76cfb861206d6acd631a8Yann Collet#define LZ4HC_CLEVEL_OPT_MIN    11
5052cac9a97342641315c76cfb861206d6acd631a8Yann Collet#define LZ4HC_CLEVEL_MAX        12
512cf32ef0f107d18c9779283b8bd1d56f0517dd39inikep
5285aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
5385aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell/*-************************************
54874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet *  Block Compression
55874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet **************************************/
56874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/*! LZ4_compress_HC() :
57874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * Compress data from `src` into `dst`, using the more powerful but slower "HC" algorithm.
58874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * `dst` must be already allocated.
5994542d845884c922f809725807ecbd2cf7454aceYann Collet * Compression is guaranteed to succeed if `dstCapacity >= LZ4_compressBound(srcSize)` (see "lz4.h")
60874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * Max supported `srcSize` value is LZ4_MAX_INPUT_SIZE (see "lz4.h")
61874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * `compressionLevel` : Recommended values are between 4 and 9, although any value between 1 and LZ4HC_MAX_CLEVEL will work.
62c1ef7a177fae1f5435f191cbdebb0c59fb81d8ffPrzemyslaw Skibinski *                      Values >LZ4HC_MAX_CLEVEL behave the same as LZ4HC_MAX_CLEVEL.
63874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * @return : the number of bytes written into 'dst'
64874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet *           or 0 if compression fails.
65874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet */
6694542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API int LZ4_compress_HC (const char* src, char* dst, int srcSize, int dstCapacity, int compressionLevel);
67874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
68874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
69874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/* Note :
70874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet *   Decompression functions are provided within "lz4.h" (BSD license)
71874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet */
72874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
73874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
74874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/*! LZ4_compress_HC_extStateHC() :
75874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * Same as LZ4_compress_HC(), but using an externally allocated memory segment for `state`.
76874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * `state` size is provided by LZ4_sizeofStateHC().
77874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * Memory segment must be aligned on 8-bytes boundaries (which a normal malloc() will do properly).
78874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet */
7994542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API int LZ4_compress_HC_extStateHC(void* state, const char* src, char* dst, int srcSize, int maxDstSize, int compressionLevel);
8094542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API int LZ4_sizeofStateHC(void);
81874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
82874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
83874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/*-************************************
84874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet *  Streaming Compression
85874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet *  Bufferless synchronous API
86874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet **************************************/
87fa158b4118f2d53f6e84ce6ce16aa8d3ccd8a11aYann Collet typedef union LZ4_streamHC_u LZ4_streamHC_t;   /* incomplete type (defined later) */
88874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
89874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/*! LZ4_createStreamHC() and LZ4_freeStreamHC() :
90874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * These functions create and release memory for LZ4 HC streaming state.
91874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * Newly created states are automatically initialized.
92874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * Existing states can be re-used several times, using LZ4_resetStreamHC().
93874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * These methods are API and ABI stable, they can be used in combination with a DLL.
94874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet */
9594542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API LZ4_streamHC_t* LZ4_createStreamHC(void);
9694542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API int             LZ4_freeStreamHC (LZ4_streamHC_t* streamHCPtr);
97874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
9894542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API void LZ4_resetStreamHC (LZ4_streamHC_t* streamHCPtr, int compressionLevel);
9994542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API int  LZ4_loadDictHC (LZ4_streamHC_t* streamHCPtr, const char* dictionary, int dictSize);
100874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
10194542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API int LZ4_compress_HC_continue (LZ4_streamHC_t* streamHCPtr, const char* src, char* dst, int srcSize, int maxDstSize);
102874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
10394542d845884c922f809725807ecbd2cf7454aceYann ColletLZ4LIB_API int LZ4_saveDictHC (LZ4_streamHC_t* streamHCPtr, char* safeBuffer, int maxDictSize);
104874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
105874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/*
106874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  These functions compress data in successive blocks of any size, using previous blocks as dictionary.
107874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  One key assumption is that previous blocks (up to 64 KB) remain read-accessible while compressing next blocks.
108874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  There is an exception for ring buffers, which can be smaller than 64 KB.
10994542d845884c922f809725807ecbd2cf7454aceYann Collet  Ring buffers scenario is automatically detected and handled by LZ4_compress_HC_continue().
110874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
111874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  Before starting compression, state must be properly initialized, using LZ4_resetStreamHC().
112874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  A first "fictional block" can then be designated as initial dictionary, using LZ4_loadDictHC() (Optional).
113874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
114874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  Then, use LZ4_compress_HC_continue() to compress each successive block.
115874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  Previous memory blocks (including initial dictionary when present) must remain accessible and unmodified during compression.
11694542d845884c922f809725807ecbd2cf7454aceYann Collet  'dst' buffer should be sized to handle worst case scenarios, using LZ4_compressBound(), to ensure operation success.
117874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
118874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  If, for any reason, previous data blocks can't be preserved unmodified in memory during next compression block,
119874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  you must save it to a safer memory space, using LZ4_saveDictHC().
120874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  Return value of LZ4_saveDictHC() is the size of dictionary effectively saved into 'safeBuffer'.
121874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet*/
122874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
123874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
124874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet/*-******************************************
125874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * !!!!!   STATIC LINKING ONLY   !!!!!
126874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet *******************************************/
127874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet
128874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet /*-*************************************
129874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet * PRIVATE DEFINITIONS :
13085aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell * Do not use these definitions.
13185aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell * They are exposed to allow static allocation of `LZ4_streamHC_t`.
13294542d845884c922f809725807ecbd2cf7454aceYann Collet * Using these definitions makes the code vulnerable to potential API break when upgrading LZ4
133874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet **************************************/
13476228f064a95f7135e5990387b23002dd296b2daPrzemyslaw Skibinski#define LZ4HC_DICTIONARY_LOGSIZE 17
13576228f064a95f7135e5990387b23002dd296b2daPrzemyslaw Skibinski#define LZ4HC_MAXD (1<<LZ4HC_DICTIONARY_LOGSIZE)
13685aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell#define LZ4HC_MAXD_MASK (LZ4HC_MAXD - 1)
13785aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
138fb6c98c856d300b39baa40f8408ab639e6e9b56aPrzemyslaw Skibinski#define LZ4HC_HASH_LOG 15
13985aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell#define LZ4HC_HASHTABLESIZE (1 << LZ4HC_HASH_LOG)
14085aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell#define LZ4HC_HASH_MASK (LZ4HC_HASHTABLESIZE - 1)
14185aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
14285aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
14385aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
14485aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell#include <stdint.h>
14585aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
14685aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrelltypedef struct
14785aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell{
14885aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    uint32_t   hashTable[LZ4HC_HASHTABLESIZE];
14985aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    uint16_t   chainTable[LZ4HC_MAXD];
15085aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    const uint8_t* end;        /* next block here to continue on current prefix */
15185aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    const uint8_t* base;       /* All index relative to this position */
15285aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    const uint8_t* dictBase;   /* alternate base for extDict */
15385aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    uint8_t* inputBuffer;      /* deprecated */
15485aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    uint32_t   dictLimit;        /* below that point, need extDict */
15585aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    uint32_t   lowLimit;         /* below that point, no more dict */
15685aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    uint32_t   nextToUpdate;     /* index from which to continue dictionary update */
157c1ef7a177fae1f5435f191cbdebb0c59fb81d8ffPrzemyslaw Skibinski    uint32_t   searchNum;        /* only for optimal parser */
15885aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    uint32_t   compressionLevel;
159874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet} LZ4HC_CCtx_internal;
16085aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
16185aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell#else
16285aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
16385aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrelltypedef struct
16485aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell{
16585aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    unsigned int   hashTable[LZ4HC_HASHTABLESIZE];
16685aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    unsigned short   chainTable[LZ4HC_MAXD];
16785aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    const unsigned char* end;        /* next block here to continue on current prefix */
16885aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    const unsigned char* base;       /* All index relative to this position */
16985aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    const unsigned char* dictBase;   /* alternate base for extDict */
17085aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    unsigned char* inputBuffer;      /* deprecated */
17185aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    unsigned int   dictLimit;        /* below that point, need extDict */
17285aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    unsigned int   lowLimit;         /* below that point, no more dict */
17385aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    unsigned int   nextToUpdate;     /* index from which to continue dictionary update */
174c1ef7a177fae1f5435f191cbdebb0c59fb81d8ffPrzemyslaw Skibinski    unsigned int   searchNum;        /* only for optimal parser */
17585aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    unsigned int   compressionLevel;
176874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet} LZ4HC_CCtx_internal;
17785aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
17885aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell#endif
17985aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell
1808c2f23c130c0613dfd243d539f733bc3e44a2a70Przemyslaw Skibinski#define LZ4_STREAMHCSIZE       (4*LZ4HC_HASHTABLESIZE + 2*LZ4HC_MAXD + 56) /* 393268 */
181a357f434f06de70e5d670b8669becccb09f4c7a6Yann Collet#define LZ4_STREAMHCSIZE_SIZET (LZ4_STREAMHCSIZE / sizeof(size_t))
182fa158b4118f2d53f6e84ce6ce16aa8d3ccd8a11aYann Colletunion LZ4_streamHC_u {
18385aeb0e4bb9c0b8dd6f6caa00ac2d9c7a4452660Nick Terrell    size_t table[LZ4_STREAMHCSIZE_SIZET];
184874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet    LZ4HC_CCtx_internal internal_donotuse;
185874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet};   /* previously typedef'd to LZ4_streamHC_t */
186d239a23337e5eba41f557b48eb26f0db81b28f26Yann Collet/*
187874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  LZ4_streamHC_t :
188e05088d0eb500d8d673e081929620e538df3d718Yann Collet  This structure allows static allocation of LZ4 HC streaming state.
189874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  State must be initialized using LZ4_resetStreamHC() before first use.
190d239a23337e5eba41f557b48eb26f0db81b28f26Yann Collet
191874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  Static allocation shall only be used in combination with static linking.
192874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann Collet  When invoking LZ4 from a DLL, use create/free functions instead, which are API and ABI stable.
193d239a23337e5eba41f557b48eb26f0db81b28f26Yann Collet*/
194d239a23337e5eba41f557b48eb26f0db81b28f26Yann Collet
195d239a23337e5eba41f557b48eb26f0db81b28f26Yann Collet
19619e585cc462759427f8d125fca3278b8762b3099Yann Collet/*-************************************
197e05088d0eb500d8d673e081929620e538df3d718Yann Collet*  Deprecated Functions
198e05088d0eb500d8d673e081929620e538df3d718Yann Collet**************************************/
19994542d845884c922f809725807ecbd2cf7454aceYann Collet/* see lz4.h LZ4_DISABLE_DEPRECATE_WARNINGS to turn off deprecation warnings */
200be9d248851ecd712a8911526b009c5d0c948ee21Yann Collet
20119e585cc462759427f8d125fca3278b8762b3099Yann Collet/* deprecated compression functions */
20219e585cc462759427f8d125fca3278b8762b3099Yann Collet/* these functions will trigger warning messages in future releases */
2033580d9698098e8ad2ef757d1c3673aceca38c576Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC() instead") int LZ4_compressHC               (const char* source, char* dest, int inputSize);
2043580d9698098e8ad2ef757d1c3673aceca38c576Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC() instead") int LZ4_compressHC_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize);
20519e585cc462759427f8d125fca3278b8762b3099Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC() instead") int LZ4_compressHC2 (const char* source, char* dest, int inputSize, int compressionLevel);
20619e585cc462759427f8d125fca3278b8762b3099Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC() instead") int LZ4_compressHC2_limitedOutput (const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
207874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann ColletLZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") int LZ4_compressHC_withStateHC               (void* state, const char* source, char* dest, int inputSize);
208874f3e095b1d64ab3545a3f2a3f7403a44ebb3bbYann ColletLZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") int LZ4_compressHC_limitedOutput_withStateHC (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
20919e585cc462759427f8d125fca3278b8762b3099Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") int LZ4_compressHC2_withStateHC (void* state, const char* source, char* dest, int inputSize, int compressionLevel);
21019e585cc462759427f8d125fca3278b8762b3099Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC_extStateHC() instead") int LZ4_compressHC2_limitedOutput_withStateHC(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
2113580d9698098e8ad2ef757d1c3673aceca38c576Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") int LZ4_compressHC_continue               (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize);
2123580d9698098e8ad2ef757d1c3673aceca38c576Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") int LZ4_compressHC_limitedOutput_continue (LZ4_streamHC_t* LZ4_streamHCPtr, const char* source, char* dest, int inputSize, int maxOutputSize);
213be9d248851ecd712a8911526b009c5d0c948ee21Yann Collet
21419e585cc462759427f8d125fca3278b8762b3099Yann Collet/* Deprecated Streaming functions using older model; should no longer be used */
2151c3e633c48766c58df949887297dc5838170a33fYann ColletLZ4_DEPRECATED("use LZ4_createStreamHC() instead") void* LZ4_createHC (char* inputBuffer);
216ad86910b1b3633c2249a607bdbf2c138e8854f83Takayuki MATSUOKALZ4_DEPRECATED("use LZ4_saveDictHC() instead")     char* LZ4_slideInputBufferHC (void* LZ4HC_Data);
217ad86910b1b3633c2249a607bdbf2c138e8854f83Takayuki MATSUOKALZ4_DEPRECATED("use LZ4_freeStreamHC() instead")   int   LZ4_freeHC (void* LZ4HC_Data);
2183580d9698098e8ad2ef757d1c3673aceca38c576Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") int LZ4_compressHC2_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int compressionLevel);
2193580d9698098e8ad2ef757d1c3673aceca38c576Yann ColletLZ4_DEPRECATED("use LZ4_compress_HC_continue() instead") int LZ4_compressHC2_limitedOutput_continue (void* LZ4HC_Data, const char* source, char* dest, int inputSize, int maxOutputSize, int compressionLevel);
220ad86910b1b3633c2249a607bdbf2c138e8854f83Takayuki MATSUOKALZ4_DEPRECATED("use LZ4_createStreamHC() instead") int   LZ4_sizeofStreamStateHC(void);
2211c3e633c48766c58df949887297dc5838170a33fYann ColletLZ4_DEPRECATED("use LZ4_resetStreamHC() instead")  int   LZ4_resetStreamStateHC(void* state, char* inputBuffer);
222a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.
223a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.
224a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.#if defined (__cplusplus)
225a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.}
226a9d8640c1f3898cd47eb1faf22db013e8b9911dbyann.collet.#endif
22719e585cc462759427f8d125fca3278b8762b3099Yann Collet
22819e585cc462759427f8d125fca3278b8762b3099Yann Collet#endif /* LZ4_HC_H_19834876238432 */
229