extzstd 0.0.3.CONCEPT → 0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY.ja +5 -0
- data/LICENSE +6 -6
- data/README.md +35 -22
- data/contrib/zstd/LICENSE +13 -9
- data/contrib/zstd/README.md +37 -44
- data/contrib/zstd/common/entropy_common.c +33 -39
- data/contrib/zstd/common/error_private.c +43 -0
- data/contrib/zstd/common/error_private.h +11 -60
- data/contrib/zstd/common/fse.h +11 -5
- data/contrib/zstd/common/fse_decompress.c +14 -16
- data/contrib/zstd/common/huf.h +1 -1
- data/contrib/zstd/common/mem.h +36 -43
- data/contrib/zstd/common/xxhash.c +31 -18
- data/contrib/zstd/common/xxhash.h +71 -35
- data/contrib/zstd/common/zbuff.h +29 -35
- data/contrib/zstd/common/zstd_common.c +24 -32
- data/contrib/zstd/common/zstd_errors.h +60 -0
- data/contrib/zstd/common/zstd_internal.h +109 -80
- data/contrib/zstd/compress/fse_compress.c +9 -6
- data/contrib/zstd/compress/huf_compress.c +30 -74
- data/contrib/zstd/compress/zbuff_compress.c +43 -51
- data/contrib/zstd/compress/zstd_compress.c +953 -763
- data/contrib/zstd/compress/zstd_opt.h +115 -261
- data/contrib/zstd/decompress/huf_decompress.c +29 -40
- data/contrib/zstd/decompress/zbuff_decompress.c +36 -78
- data/contrib/zstd/decompress/zstd_decompress.c +976 -496
- data/contrib/zstd/dictBuilder/divsufsort.h +5 -5
- data/contrib/zstd/dictBuilder/zdict.c +194 -229
- data/contrib/zstd/dictBuilder/zdict.h +66 -68
- data/contrib/zstd/legacy/zstd_legacy.h +168 -49
- data/contrib/zstd/legacy/zstd_v01.c +95 -178
- data/contrib/zstd/legacy/zstd_v01.h +12 -32
- data/contrib/zstd/legacy/zstd_v02.c +48 -274
- data/contrib/zstd/legacy/zstd_v02.h +12 -32
- data/contrib/zstd/legacy/zstd_v03.c +48 -274
- data/contrib/zstd/legacy/zstd_v03.h +12 -32
- data/contrib/zstd/legacy/zstd_v04.c +63 -320
- data/contrib/zstd/legacy/zstd_v04.h +13 -33
- data/contrib/zstd/legacy/zstd_v05.c +80 -345
- data/contrib/zstd/legacy/zstd_v05.h +9 -31
- data/contrib/zstd/legacy/zstd_v06.c +48 -458
- data/contrib/zstd/legacy/zstd_v06.h +41 -67
- data/contrib/zstd/legacy/zstd_v07.c +4544 -0
- data/contrib/zstd/legacy/zstd_v07.h +173 -0
- data/contrib/zstd/zstd.h +640 -0
- data/ext/extconf.rb +7 -3
- data/ext/extzstd.c +263 -106
- data/ext/extzstd.h +8 -6
- data/ext/extzstd_nogvls.h +0 -117
- data/ext/extzstd_stream.c +347 -0
- data/ext/zstd_common.c +8 -0
- data/ext/zstd_compress.c +6 -0
- data/ext/zstd_decompress.c +5 -0
- data/ext/zstd_dictbuilder.c +5 -0
- data/ext/zstd_legacy_v07.c +1 -0
- data/gemstub.rb +18 -16
- data/lib/extzstd/version.rb +1 -1
- data/lib/extzstd.rb +77 -43
- data/test/test_basic.rb +11 -6
- metadata +23 -10
- data/contrib/zstd/common/error_public.h +0 -77
- data/contrib/zstd/common/zstd.h +0 -475
- data/ext/extzstd_buffered.c +0 -265
- data/ext/zstd_amalgam.c +0 -18
data/contrib/zstd/common/zstd.h
DELETED
@@ -1,475 +0,0 @@
|
|
1
|
-
/*
|
2
|
-
zstd - standard compression library
|
3
|
-
Header File
|
4
|
-
Copyright (C) 2014-2016, Yann Collet.
|
5
|
-
|
6
|
-
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
|
7
|
-
|
8
|
-
Redistribution and use in source and binary forms, with or without
|
9
|
-
modification, are permitted provided that the following conditions are
|
10
|
-
met:
|
11
|
-
* Redistributions of source code must retain the above copyright
|
12
|
-
notice, this list of conditions and the following disclaimer.
|
13
|
-
* Redistributions in binary form must reproduce the above
|
14
|
-
copyright notice, this list of conditions and the following disclaimer
|
15
|
-
in the documentation and/or other materials provided with the
|
16
|
-
distribution.
|
17
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
18
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
19
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
20
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
21
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
24
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
25
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
29
|
-
You can contact the author at :
|
30
|
-
- zstd source repository : https://github.com/Cyan4973/zstd
|
31
|
-
*/
|
32
|
-
#ifndef ZSTD_H_235446
|
33
|
-
#define ZSTD_H_235446
|
34
|
-
|
35
|
-
#if defined (__cplusplus)
|
36
|
-
extern "C" {
|
37
|
-
#endif
|
38
|
-
|
39
|
-
/*-*************************************
|
40
|
-
* Dependencies
|
41
|
-
***************************************/
|
42
|
-
#include <stddef.h> /* size_t */
|
43
|
-
|
44
|
-
|
45
|
-
/*-***************************************************************
|
46
|
-
* Export parameters
|
47
|
-
*****************************************************************/
|
48
|
-
/*!
|
49
|
-
* ZSTD_DLL_EXPORT :
|
50
|
-
* Enable exporting of functions when building a Windows DLL
|
51
|
-
*/
|
52
|
-
#if defined(_WIN32) && defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
53
|
-
# define ZSTDLIB_API __declspec(dllexport)
|
54
|
-
#else
|
55
|
-
# define ZSTDLIB_API
|
56
|
-
#endif
|
57
|
-
|
58
|
-
|
59
|
-
/* *************************************
|
60
|
-
* Version
|
61
|
-
***************************************/
|
62
|
-
#define ZSTD_VERSION_MAJOR 0
|
63
|
-
#define ZSTD_VERSION_MINOR 7
|
64
|
-
#define ZSTD_VERSION_RELEASE 4
|
65
|
-
|
66
|
-
#define ZSTD_LIB_VERSION ZSTD_VERSION_MAJOR.ZSTD_VERSION_MINOR.ZSTD_VERSION_RELEASE
|
67
|
-
#define ZSTD_QUOTE(str) #str
|
68
|
-
#define ZSTD_EXPAND_AND_QUOTE(str) ZSTD_QUOTE(str)
|
69
|
-
#define ZSTD_VERSION_STRING ZSTD_EXPAND_AND_QUOTE(ZSTD_LIB_VERSION)
|
70
|
-
|
71
|
-
#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
|
72
|
-
ZSTDLIB_API unsigned ZSTD_versionNumber (void);
|
73
|
-
|
74
|
-
|
75
|
-
/* *************************************
|
76
|
-
* Simple functions
|
77
|
-
***************************************/
|
78
|
-
/*! ZSTD_compress() :
|
79
|
-
Compresses `srcSize` bytes from buffer `src` into buffer `dst` of size `dstCapacity`.
|
80
|
-
Destination buffer must be already allocated.
|
81
|
-
Compression runs faster if `dstCapacity` >= `ZSTD_compressBound(srcSize)`.
|
82
|
-
@return : the number of bytes written into `dst`,
|
83
|
-
or an error code if it fails (which can be tested using ZSTD_isError()) */
|
84
|
-
ZSTDLIB_API size_t ZSTD_compress( void* dst, size_t dstCapacity,
|
85
|
-
const void* src, size_t srcSize,
|
86
|
-
int compressionLevel);
|
87
|
-
|
88
|
-
/** ZSTD_getDecompressedSize() :
|
89
|
-
* @return : decompressed size if known, 0 otherwise.
|
90
|
-
note : to know precise reason why result is `0`, follow up with ZSTD_getFrameParams() */
|
91
|
-
unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize);
|
92
|
-
|
93
|
-
/*! ZSTD_decompress() :
|
94
|
-
`compressedSize` : is the _exact_ size of compressed input, otherwise decompression will fail.
|
95
|
-
`dstCapacity` must be equal or larger than originalSize.
|
96
|
-
@return : the number of bytes decompressed into `dst` (<= `dstCapacity`),
|
97
|
-
or an errorCode if it fails (which can be tested using ZSTD_isError()) */
|
98
|
-
ZSTDLIB_API size_t ZSTD_decompress( void* dst, size_t dstCapacity,
|
99
|
-
const void* src, size_t compressedSize);
|
100
|
-
|
101
|
-
|
102
|
-
/* *************************************
|
103
|
-
* Helper functions
|
104
|
-
***************************************/
|
105
|
-
ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize); /*!< maximum compressed size (worst case scenario) */
|
106
|
-
|
107
|
-
/* Error Management */
|
108
|
-
ZSTDLIB_API unsigned ZSTD_isError(size_t code); /*!< tells if a `size_t` function result is an error code */
|
109
|
-
ZSTDLIB_API const char* ZSTD_getErrorName(size_t code); /*!< provides readable string for an error code */
|
110
|
-
|
111
|
-
|
112
|
-
/* *************************************
|
113
|
-
* Explicit memory management
|
114
|
-
***************************************/
|
115
|
-
/** Compression context */
|
116
|
-
typedef struct ZSTD_CCtx_s ZSTD_CCtx; /*< incomplete type */
|
117
|
-
ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx(void);
|
118
|
-
ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /*!< @return : errorCode */
|
119
|
-
|
120
|
-
/** ZSTD_compressCCtx() :
|
121
|
-
Same as ZSTD_compress(), but requires an already allocated ZSTD_CCtx (see ZSTD_createCCtx()) */
|
122
|
-
ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* ctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize, int compressionLevel);
|
123
|
-
|
124
|
-
/** Decompression context */
|
125
|
-
typedef struct ZSTD_DCtx_s ZSTD_DCtx;
|
126
|
-
ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx(void);
|
127
|
-
ZSTDLIB_API size_t ZSTD_freeDCtx(ZSTD_DCtx* dctx); /*!< @return : errorCode */
|
128
|
-
|
129
|
-
/** ZSTD_decompressDCtx() :
|
130
|
-
* Same as ZSTD_decompress(), but requires an already allocated ZSTD_DCtx (see ZSTD_createDCtx()) */
|
131
|
-
ZSTDLIB_API size_t ZSTD_decompressDCtx(ZSTD_DCtx* ctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
132
|
-
|
133
|
-
|
134
|
-
/*-************************
|
135
|
-
* Simple dictionary API
|
136
|
-
***************************/
|
137
|
-
/*! ZSTD_compress_usingDict() :
|
138
|
-
* Compression using a pre-defined Dictionary content (see dictBuilder).
|
139
|
-
* Note 1 : This function load the dictionary, resulting in a significant startup time.
|
140
|
-
* Note 2 : `dict` must remain accessible and unmodified during compression operation.
|
141
|
-
* Note 3 : `dict` can be `NULL`, in which case, it's equivalent to ZSTD_compressCCtx() */
|
142
|
-
ZSTDLIB_API size_t ZSTD_compress_usingDict(ZSTD_CCtx* ctx,
|
143
|
-
void* dst, size_t dstCapacity,
|
144
|
-
const void* src, size_t srcSize,
|
145
|
-
const void* dict,size_t dictSize,
|
146
|
-
int compressionLevel);
|
147
|
-
|
148
|
-
/*! ZSTD_decompress_usingDict() :
|
149
|
-
* Decompression using a pre-defined Dictionary content (see dictBuilder).
|
150
|
-
* Dictionary must be identical to the one used during compression.
|
151
|
-
* Note 1 : This function load the dictionary, resulting in a significant startup time
|
152
|
-
* Note 2 : `dict` must remain accessible and unmodified during compression operation.
|
153
|
-
* Note 3 : `dict` can be `NULL`, in which case, it's equivalent to ZSTD_decompressDCtx() */
|
154
|
-
ZSTDLIB_API size_t ZSTD_decompress_usingDict(ZSTD_DCtx* dctx,
|
155
|
-
void* dst, size_t dstCapacity,
|
156
|
-
const void* src, size_t srcSize,
|
157
|
-
const void* dict,size_t dictSize);
|
158
|
-
|
159
|
-
|
160
|
-
/*-**************************
|
161
|
-
* Advanced Dictionary API
|
162
|
-
****************************/
|
163
|
-
/*! ZSTD_createCDict() :
|
164
|
-
* Create a digested dictionary, ready to start compression operation without startup delay.
|
165
|
-
* `dict` can be released after creation */
|
166
|
-
typedef struct ZSTD_CDict_s ZSTD_CDict;
|
167
|
-
ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict(const void* dict, size_t dictSize, int compressionLevel);
|
168
|
-
ZSTDLIB_API size_t ZSTD_freeCDict(ZSTD_CDict* CDict);
|
169
|
-
|
170
|
-
/*! ZSTD_compress_usingCDict() :
|
171
|
-
* Compression using a pre-digested Dictionary.
|
172
|
-
* Much faster than ZSTD_compress_usingDict() when same dictionary is used multiple times.
|
173
|
-
* Note that compression level is decided during dictionary creation */
|
174
|
-
ZSTDLIB_API size_t ZSTD_compress_usingCDict(ZSTD_CCtx* cctx,
|
175
|
-
void* dst, size_t dstCapacity,
|
176
|
-
const void* src, size_t srcSize,
|
177
|
-
const ZSTD_CDict* cdict);
|
178
|
-
|
179
|
-
/*! ZSTD_createDDict() :
|
180
|
-
* Create a digested dictionary, ready to start decompression operation without startup delay.
|
181
|
-
* `dict` can be released after creation */
|
182
|
-
typedef struct ZSTD_DDict_s ZSTD_DDict;
|
183
|
-
ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict(const void* dict, size_t dictSize);
|
184
|
-
ZSTDLIB_API size_t ZSTD_freeDDict(ZSTD_DDict* ddict);
|
185
|
-
|
186
|
-
/*! ZSTD_decompress_usingDDict() :
|
187
|
-
* Decompression using a pre-digested Dictionary
|
188
|
-
* Much faster than ZSTD_decompress_usingDict() when same dictionary is used multiple times. */
|
189
|
-
ZSTDLIB_API size_t ZSTD_decompress_usingDDict(ZSTD_DCtx* dctx,
|
190
|
-
void* dst, size_t dstCapacity,
|
191
|
-
const void* src, size_t srcSize,
|
192
|
-
const ZSTD_DDict* ddict);
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
#ifdef ZSTD_STATIC_LINKING_ONLY
|
197
|
-
|
198
|
-
/* ====================================================================================
|
199
|
-
* The definitions in this section are considered experimental.
|
200
|
-
* They should never be used with a dynamic library, as they may change in the future.
|
201
|
-
* They are provided for advanced usages.
|
202
|
-
* Use them only in association with static linking.
|
203
|
-
* ==================================================================================== */
|
204
|
-
|
205
|
-
/*--- Constants ---*/
|
206
|
-
#define ZSTD_MAGICNUMBER 0xFD2FB527 /* v0.7 */
|
207
|
-
#define ZSTD_MAGIC_SKIPPABLE_START 0x184D2A50U
|
208
|
-
|
209
|
-
#define ZSTD_WINDOWLOG_MAX_32 25
|
210
|
-
#define ZSTD_WINDOWLOG_MAX_64 27
|
211
|
-
#define ZSTD_WINDOWLOG_MAX ((U32)(MEM_32bits() ? ZSTD_WINDOWLOG_MAX_32 : ZSTD_WINDOWLOG_MAX_64))
|
212
|
-
#define ZSTD_WINDOWLOG_MIN 18
|
213
|
-
#define ZSTD_CHAINLOG_MAX (ZSTD_WINDOWLOG_MAX+1)
|
214
|
-
#define ZSTD_CHAINLOG_MIN 4
|
215
|
-
#define ZSTD_HASHLOG_MAX ZSTD_WINDOWLOG_MAX
|
216
|
-
#define ZSTD_HASHLOG_MIN 12
|
217
|
-
#define ZSTD_HASHLOG3_MAX 17
|
218
|
-
//#define ZSTD_HASHLOG3_MIN 15
|
219
|
-
#define ZSTD_SEARCHLOG_MAX (ZSTD_WINDOWLOG_MAX-1)
|
220
|
-
#define ZSTD_SEARCHLOG_MIN 1
|
221
|
-
#define ZSTD_SEARCHLENGTH_MAX 7
|
222
|
-
#define ZSTD_SEARCHLENGTH_MIN 3
|
223
|
-
#define ZSTD_TARGETLENGTH_MIN 4
|
224
|
-
#define ZSTD_TARGETLENGTH_MAX 999
|
225
|
-
|
226
|
-
#define ZSTD_FRAMEHEADERSIZE_MAX 18 /* for static allocation */
|
227
|
-
static const size_t ZSTD_frameHeaderSize_min = 5;
|
228
|
-
static const size_t ZSTD_frameHeaderSize_max = ZSTD_FRAMEHEADERSIZE_MAX;
|
229
|
-
static const size_t ZSTD_skippableHeaderSize = 8; /* magic number + skippable frame length */
|
230
|
-
|
231
|
-
|
232
|
-
/*--- Types ---*/
|
233
|
-
typedef enum { ZSTD_fast, ZSTD_dfast, ZSTD_greedy, ZSTD_lazy, ZSTD_lazy2, ZSTD_btlazy2, ZSTD_btopt } ZSTD_strategy; /*< from faster to stronger */
|
234
|
-
|
235
|
-
typedef struct {
|
236
|
-
unsigned windowLog; /*< largest match distance : larger == more compression, more memory needed during decompression */
|
237
|
-
unsigned chainLog; /*< fully searched segment : larger == more compression, slower, more memory (useless for fast) */
|
238
|
-
unsigned hashLog; /*< dispatch table : larger == faster, more memory */
|
239
|
-
unsigned searchLog; /*< nb of searches : larger == more compression, slower */
|
240
|
-
unsigned searchLength; /*< match length searched : larger == faster decompression, sometimes less compression */
|
241
|
-
unsigned targetLength; /*< acceptable match size for optimal parser (only) : larger == more compression, slower */
|
242
|
-
ZSTD_strategy strategy;
|
243
|
-
} ZSTD_compressionParameters;
|
244
|
-
|
245
|
-
typedef struct {
|
246
|
-
unsigned contentSizeFlag; /*< 1: content size will be in frame header (if known). */
|
247
|
-
unsigned checksumFlag; /*< 1: will generate a 22-bits checksum at end of frame, to be used for error detection by decompressor */
|
248
|
-
unsigned noDictIDFlag; /*< 1: no dict ID will be saved into frame header (if dictionary compression) */
|
249
|
-
} ZSTD_frameParameters;
|
250
|
-
|
251
|
-
typedef struct {
|
252
|
-
ZSTD_compressionParameters cParams;
|
253
|
-
ZSTD_frameParameters fParams;
|
254
|
-
} ZSTD_parameters;
|
255
|
-
|
256
|
-
/* custom memory allocation functions */
|
257
|
-
typedef void* (*ZSTD_allocFunction) (void* opaque, size_t size);
|
258
|
-
typedef void (*ZSTD_freeFunction) (void* opaque, void* address);
|
259
|
-
typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void* opaque; } ZSTD_customMem;
|
260
|
-
|
261
|
-
|
262
|
-
/*-*************************************
|
263
|
-
* Advanced compression functions
|
264
|
-
***************************************/
|
265
|
-
/*! ZSTD_estimateCCtxSize() :
|
266
|
-
* Gives the amount of memory allocated for a ZSTD_CCtx given a set of compression parameters.
|
267
|
-
* `frameContentSize` is an optional parameter, provide `0` if unknown */
|
268
|
-
ZSTDLIB_API size_t ZSTD_estimateCCtxSize(ZSTD_compressionParameters cParams);
|
269
|
-
|
270
|
-
/*! ZSTD_createCCtx_advanced() :
|
271
|
-
* Create a ZSTD compression context using external alloc and free functions */
|
272
|
-
ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem);
|
273
|
-
|
274
|
-
/*! ZSTD_createCDict_advanced() :
|
275
|
-
* Create a ZSTD_CDict using external alloc and free, and customized compression parameters */
|
276
|
-
ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictSize,
|
277
|
-
ZSTD_parameters params, ZSTD_customMem customMem);
|
278
|
-
|
279
|
-
/*! ZSTD_sizeofCCtx() :
|
280
|
-
* Gives the amount of memory used by a given ZSTD_CCtx */
|
281
|
-
ZSTDLIB_API size_t ZSTD_sizeofCCtx(const ZSTD_CCtx* cctx);
|
282
|
-
|
283
|
-
ZSTDLIB_API unsigned ZSTD_maxCLevel (void);
|
284
|
-
|
285
|
-
/*! ZSTD_getParams() :
|
286
|
-
* same as ZSTD_getCParams(), but @return a full `ZSTD_parameters` object instead of a `ZSTD_compressionParameters`.
|
287
|
-
* All fields of `ZSTD_frameParameters` are set to default (0) */
|
288
|
-
ZSTD_parameters ZSTD_getParams(int compressionLevel, unsigned long long srcSize, size_t dictSize);
|
289
|
-
|
290
|
-
/*! ZSTD_getCParams() :
|
291
|
-
* @return ZSTD_compressionParameters structure for a selected compression level and srcSize.
|
292
|
-
* `srcSize` value is optional, select 0 if not known */
|
293
|
-
ZSTDLIB_API ZSTD_compressionParameters ZSTD_getCParams(int compressionLevel, unsigned long long srcSize, size_t dictSize);
|
294
|
-
|
295
|
-
/*! ZSTD_checkCParams() :
|
296
|
-
* Ensure param values remain within authorized range */
|
297
|
-
ZSTDLIB_API size_t ZSTD_checkCParams(ZSTD_compressionParameters params);
|
298
|
-
|
299
|
-
/*! ZSTD_adjustCParams() :
|
300
|
-
* optimize params for a given `srcSize` and `dictSize`.
|
301
|
-
* both values are optional, select `0` if unknown. */
|
302
|
-
ZSTDLIB_API ZSTD_compressionParameters ZSTD_adjustCParams(ZSTD_compressionParameters cPar, unsigned long long srcSize, size_t dictSize);
|
303
|
-
|
304
|
-
/*! ZSTD_compress_advanced() :
|
305
|
-
* Same as ZSTD_compress_usingDict(), with fine-tune control of each compression parameter */
|
306
|
-
ZSTDLIB_API size_t ZSTD_compress_advanced (ZSTD_CCtx* ctx,
|
307
|
-
void* dst, size_t dstCapacity,
|
308
|
-
const void* src, size_t srcSize,
|
309
|
-
const void* dict,size_t dictSize,
|
310
|
-
ZSTD_parameters params);
|
311
|
-
|
312
|
-
|
313
|
-
/*--- Advanced Decompression functions ---*/
|
314
|
-
|
315
|
-
/*! ZSTD_estimateDCtxSize() :
|
316
|
-
* Gives the potential amount of memory allocated to create a ZSTD_DCtx */
|
317
|
-
ZSTDLIB_API size_t ZSTD_estimateDCtxSize(void);
|
318
|
-
|
319
|
-
/*! ZSTD_createDCtx_advanced() :
|
320
|
-
* Create a ZSTD decompression context using external alloc and free functions */
|
321
|
-
ZSTDLIB_API ZSTD_DCtx* ZSTD_createDCtx_advanced(ZSTD_customMem customMem);
|
322
|
-
|
323
|
-
/*! ZSTD_sizeofDCtx() :
|
324
|
-
* Gives the amount of memory used by a given ZSTD_DCtx */
|
325
|
-
ZSTDLIB_API size_t ZSTD_sizeofDCtx(const ZSTD_DCtx* dctx);
|
326
|
-
|
327
|
-
|
328
|
-
/* ******************************************************************
|
329
|
-
* Streaming functions (direct mode - synchronous and buffer-less)
|
330
|
-
********************************************************************/
|
331
|
-
ZSTDLIB_API size_t ZSTD_compressBegin(ZSTD_CCtx* cctx, int compressionLevel);
|
332
|
-
ZSTDLIB_API size_t ZSTD_compressBegin_usingDict(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, int compressionLevel);
|
333
|
-
ZSTDLIB_API size_t ZSTD_compressBegin_advanced(ZSTD_CCtx* cctx, const void* dict, size_t dictSize, ZSTD_parameters params, unsigned long long pledgedSrcSize);
|
334
|
-
ZSTDLIB_API size_t ZSTD_copyCCtx(ZSTD_CCtx* cctx, const ZSTD_CCtx* preparedCCtx);
|
335
|
-
|
336
|
-
ZSTDLIB_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
337
|
-
ZSTDLIB_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity);
|
338
|
-
|
339
|
-
/*
|
340
|
-
A ZSTD_CCtx object is required to track streaming operations.
|
341
|
-
Use ZSTD_createCCtx() / ZSTD_freeCCtx() to manage resource.
|
342
|
-
ZSTD_CCtx object can be re-used multiple times within successive compression operations.
|
343
|
-
|
344
|
-
Start by initializing a context.
|
345
|
-
Use ZSTD_compressBegin(), or ZSTD_compressBegin_usingDict() for dictionary compression,
|
346
|
-
or ZSTD_compressBegin_advanced(), for finer parameter control.
|
347
|
-
It's also possible to duplicate a reference context which has already been initialized, using ZSTD_copyCCtx()
|
348
|
-
|
349
|
-
Then, consume your input using ZSTD_compressContinue().
|
350
|
-
There are some important considerations to keep in mind when using this advanced function :
|
351
|
-
- ZSTD_compressContinue() has no internal buffer. It uses externally provided buffer only.
|
352
|
-
- Interface is synchronous : input is consumed entirely and produce 1 (or more) compressed blocks.
|
353
|
-
- Caller must ensure there is enough space in `dst` to store compressed data under worst case scenario.
|
354
|
-
Worst case evaluation is provided by ZSTD_compressBound().
|
355
|
-
ZSTD_compressContinue() doesn't guarantee recover after a failed compression.
|
356
|
-
- ZSTD_compressContinue() presumes prior input ***is still accessible and unmodified*** (up to maximum distance size, see WindowLog).
|
357
|
-
It remembers all previous contiguous blocks, plus one separated memory segment (which can itself consists of multiple contiguous blocks)
|
358
|
-
- ZSTD_compressContinue() detects that prior input has been overwritten when `src` buffer overlaps.
|
359
|
-
In which case, it will "discard" the relevant memory section from its history.
|
360
|
-
|
361
|
-
|
362
|
-
Finish a frame with ZSTD_compressEnd(), which will write the epilogue.
|
363
|
-
Without epilogue, frames will be considered unfinished (broken) by decoders.
|
364
|
-
|
365
|
-
You can then reuse `ZSTD_CCtx` (ZSTD_compressBegin()) to compress some new frame.
|
366
|
-
*/
|
367
|
-
|
368
|
-
typedef struct {
|
369
|
-
unsigned long long frameContentSize;
|
370
|
-
unsigned windowSize;
|
371
|
-
unsigned dictID;
|
372
|
-
unsigned checksumFlag;
|
373
|
-
} ZSTD_frameParams;
|
374
|
-
|
375
|
-
ZSTDLIB_API size_t ZSTD_getFrameParams(ZSTD_frameParams* fparamsPtr, const void* src, size_t srcSize); /**< doesn't consume input */
|
376
|
-
|
377
|
-
ZSTDLIB_API size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx);
|
378
|
-
ZSTDLIB_API size_t ZSTD_decompressBegin_usingDict(ZSTD_DCtx* dctx, const void* dict, size_t dictSize);
|
379
|
-
ZSTDLIB_API void ZSTD_copyDCtx(ZSTD_DCtx* dctx, const ZSTD_DCtx* preparedDCtx);
|
380
|
-
|
381
|
-
ZSTDLIB_API size_t ZSTD_nextSrcSizeToDecompress(ZSTD_DCtx* dctx);
|
382
|
-
ZSTDLIB_API size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
383
|
-
|
384
|
-
/*
|
385
|
-
Streaming decompression, direct mode (bufferless)
|
386
|
-
|
387
|
-
A ZSTD_DCtx object is required to track streaming operations.
|
388
|
-
Use ZSTD_createDCtx() / ZSTD_freeDCtx() to manage it.
|
389
|
-
A ZSTD_DCtx object can be re-used multiple times.
|
390
|
-
|
391
|
-
First optional operation is to retrieve frame parameters, using ZSTD_getFrameParams(), which doesn't consume the input.
|
392
|
-
It can provide the minimum size of rolling buffer required to properly decompress data (`windowSize`),
|
393
|
-
and optionally the final size of uncompressed content.
|
394
|
-
(Note : content size is an optional info that may not be present. 0 means : content size unknown)
|
395
|
-
Frame parameters are extracted from the beginning of compressed frame.
|
396
|
-
The amount of data to read is variable, from ZSTD_frameHeaderSize_min to ZSTD_frameHeaderSize_max (so if `srcSize` >= ZSTD_frameHeaderSize_max, it will always work)
|
397
|
-
If `srcSize` is too small for operation to succeed, function will return the minimum size it requires to produce a result.
|
398
|
-
Result : 0 when successful, it means the ZSTD_frameParams structure has been filled.
|
399
|
-
>0 : means there is not enough data into `src`. Provides the expected size to successfully decode header.
|
400
|
-
errorCode, which can be tested using ZSTD_isError()
|
401
|
-
|
402
|
-
Start decompression, with ZSTD_decompressBegin() or ZSTD_decompressBegin_usingDict().
|
403
|
-
Alternatively, you can copy a prepared context, using ZSTD_copyDCtx().
|
404
|
-
|
405
|
-
Then use ZSTD_nextSrcSizeToDecompress() and ZSTD_decompressContinue() alternatively.
|
406
|
-
ZSTD_nextSrcSizeToDecompress() tells how much bytes to provide as 'srcSize' to ZSTD_decompressContinue().
|
407
|
-
ZSTD_decompressContinue() requires this exact amount of bytes, or it will fail.
|
408
|
-
|
409
|
-
@result of ZSTD_decompressContinue() is the number of bytes regenerated within 'dst' (necessarily <= dstCapacity).
|
410
|
-
It can be zero, which is not an error; it just means ZSTD_decompressContinue() has decoded some header.
|
411
|
-
|
412
|
-
ZSTD_decompressContinue() needs previous data blocks during decompression, up to `windowSize`.
|
413
|
-
They should preferably be located contiguously, prior to current block.
|
414
|
-
Alternatively, a round buffer of sufficient size is also possible. Sufficient size is determined by frame parameters.
|
415
|
-
ZSTD_decompressContinue() is very sensitive to contiguity,
|
416
|
-
if 2 blocks don't follow each other, make sure that either the compressor breaks contiguity at the same place,
|
417
|
-
or that previous contiguous segment is large enough to properly handle maximum back-reference.
|
418
|
-
|
419
|
-
A frame is fully decoded when ZSTD_nextSrcSizeToDecompress() returns zero.
|
420
|
-
Context can then be reset to start a new decompression.
|
421
|
-
|
422
|
-
|
423
|
-
== Special case : skippable frames ==
|
424
|
-
|
425
|
-
Skippable frames allow the integration of user-defined data into a flow of concatenated frames.
|
426
|
-
Skippable frames will be ignored (skipped) by a decompressor. The format of skippable frame is following:
|
427
|
-
a) Skippable frame ID - 4 Bytes, Little endian format, any value from 0x184D2A50 to 0x184D2A5F
|
428
|
-
b) Frame Size - 4 Bytes, Little endian format, unsigned 32-bits
|
429
|
-
c) Frame Content - any content (User Data) of length equal to Frame Size
|
430
|
-
For skippable frames ZSTD_decompressContinue() always returns 0.
|
431
|
-
For skippable frames ZSTD_getFrameParams() returns fparamsPtr->windowLog==0 what means that a frame is skippable.
|
432
|
-
It also returns Frame Size as fparamsPtr->frameContentSize.
|
433
|
-
*/
|
434
|
-
|
435
|
-
|
436
|
-
/* **************************************
|
437
|
-
* Block functions
|
438
|
-
****************************************/
|
439
|
-
/*! Block functions produce and decode raw zstd blocks, without frame metadata.
|
440
|
-
Frame metadata cost is typically ~18 bytes, which is non-negligible on very small blocks.
|
441
|
-
User will have to take in charge required information to regenerate data, such as compressed and content sizes.
|
442
|
-
|
443
|
-
A few rules to respect :
|
444
|
-
- Uncompressed block size must be <= MIN (128 KB, 1 << windowLog)
|
445
|
-
+ If you need to compress more, cut data into multiple blocks
|
446
|
-
+ Consider using the regular ZSTD_compress() instead, as frame metadata costs become negligible when source size is large.
|
447
|
-
- Compressing and decompressing require a context structure
|
448
|
-
+ Use ZSTD_createCCtx() and ZSTD_createDCtx()
|
449
|
-
- It is necessary to init context before starting
|
450
|
-
+ compression : ZSTD_compressBegin()
|
451
|
-
+ decompression : ZSTD_decompressBegin()
|
452
|
-
+ variants _usingDict() are also allowed
|
453
|
-
+ copyCCtx() and copyDCtx() work too
|
454
|
-
- When a block is considered not compressible enough, ZSTD_compressBlock() result will be zero.
|
455
|
-
In which case, nothing is produced into `dst`.
|
456
|
-
+ User must test for such outcome and deal directly with uncompressed data
|
457
|
-
+ ZSTD_decompressBlock() doesn't accept uncompressed data as input !!!
|
458
|
-
+ In case of multiple successive blocks, decoder must be informed of uncompressed block existence to follow proper history.
|
459
|
-
Use ZSTD_insertBlock() in such a case.
|
460
|
-
Insert block once it's copied into its final position.
|
461
|
-
*/
|
462
|
-
|
463
|
-
#define ZSTD_BLOCKSIZE_MAX (128 * 1024) /* define, for static allocation */
|
464
|
-
ZSTDLIB_API size_t ZSTD_compressBlock (ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
465
|
-
ZSTDLIB_API size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
|
466
|
-
ZSTDLIB_API size_t ZSTD_insertBlock(ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize); /**< insert block into `dctx` history. Useful to track uncompressed blocks */
|
467
|
-
|
468
|
-
|
469
|
-
#endif /* ZSTD_STATIC_LINKING_ONLY */
|
470
|
-
|
471
|
-
#if defined (__cplusplus)
|
472
|
-
}
|
473
|
-
#endif
|
474
|
-
|
475
|
-
#endif /* ZSTD_H_235446 */
|