zstdlib 0.14.0-x86-mingw32 → 0.15.0-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +5 -0
- data/ext/zstdlib_c/extconf.rb +1 -1
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/bits.h +92 -87
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/bitstream.h +26 -29
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/compiler.h +36 -22
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/cpu.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/debug.h +0 -9
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/error_private.c +1 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/error_private.h +0 -10
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/fse.h +2 -17
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/fse_decompress.c +2 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/huf.h +0 -9
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/mem.h +7 -11
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/pool.h +0 -9
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/portability_macros.h +22 -9
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/threading.h +0 -8
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/xxhash.h +93 -19
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/zstd_deps.h +12 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/zstd_internal.h +1 -69
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/zstd_trace.h +5 -12
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/hist.c +10 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/hist.h +7 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_compress.c +1057 -367
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_compress_internal.h +227 -125
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_compress_literals.c +1 -1
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_compress_sequences.c +7 -7
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_compress_sequences.h +7 -6
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_compress_superblock.c +17 -17
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_cwksp.h +41 -24
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_double_fast.c +58 -50
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_double_fast.h +4 -12
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_fast.c +91 -74
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_fast.h +4 -12
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_lazy.c +64 -64
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_lazy.h +30 -39
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_ldm.c +48 -33
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_ldm.h +6 -14
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_opt.c +55 -51
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_opt.h +8 -16
- data/ext/zstdlib_c/zstd-1.5.7/lib/compress/zstd_preSplit.c +238 -0
- data/ext/zstdlib_c/zstd-1.5.7/lib/compress/zstd_preSplit.h +33 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstdmt_compress.c +134 -93
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstdmt_compress.h +4 -15
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/decompress/huf_decompress_amd64.S +10 -3
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/decompress/zstd_decompress.c +14 -11
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/decompress/zstd_decompress_block.c +6 -12
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/decompress/zstd_decompress_internal.h +5 -5
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/zdict.h +15 -8
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/zstd.h +241 -132
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/zstd_errors.h +1 -8
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/zlibWrapper/gzwrite.c +2 -1
- data/lib/2.4/zstdlib_c.so +0 -0
- data/lib/2.5/zstdlib_c.so +0 -0
- data/lib/2.6/zstdlib_c.so +0 -0
- data/lib/2.7/zstdlib_c.so +0 -0
- data/lib/3.0/zstdlib_c.so +0 -0
- data/lib/3.1/zstdlib_c.so +0 -0
- data/lib/3.2/zstdlib_c.so +0 -0
- data/lib/3.3/zstdlib_c.so +0 -0
- data/lib/3.4/zstdlib_c.so +0 -0
- metadata +75 -73
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/allocations.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/debug.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/entropy_common.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/pool.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/threading.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/xxhash.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/common/zstd_common.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/clevels.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/fse_compress.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/huf_compress.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_compress_literals.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_compress_superblock.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/compress/zstd_ldm_geartab.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/decompress/huf_decompress.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/decompress/zstd_ddict.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/decompress/zstd_ddict.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/lib/decompress/zstd_decompress_block.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/zlibWrapper/gzclose.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/zlibWrapper/gzcompatibility.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/zlibWrapper/gzguts.h +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/zlibWrapper/gzlib.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/zlibWrapper/gzread.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/zlibWrapper/zstd_zlibwrapper.c +0 -0
- data/ext/zstdlib_c/{zstd-1.5.6 → zstd-1.5.7}/zlibWrapper/zstd_zlibwrapper.h +5 -5
@@ -7,17 +7,22 @@
|
|
7
7
|
* in the COPYING file in the root directory of this source tree).
|
8
8
|
* You may select, at your option, one of the above-listed licenses.
|
9
9
|
*/
|
10
|
-
#if defined (__cplusplus)
|
11
|
-
extern "C" {
|
12
|
-
#endif
|
13
10
|
|
14
11
|
#ifndef ZSTD_H_235446
|
15
12
|
#define ZSTD_H_235446
|
16
13
|
|
14
|
+
|
17
15
|
/* ====== Dependencies ======*/
|
18
|
-
#include <limits.h> /* INT_MAX */
|
19
16
|
#include <stddef.h> /* size_t */
|
20
17
|
|
18
|
+
#include "zstd_errors.h" /* list of errors */
|
19
|
+
#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY)
|
20
|
+
#include <limits.h> /* INT_MAX */
|
21
|
+
#endif /* ZSTD_STATIC_LINKING_ONLY */
|
22
|
+
|
23
|
+
#if defined (__cplusplus)
|
24
|
+
extern "C" {
|
25
|
+
#endif
|
21
26
|
|
22
27
|
/* ===== ZSTDLIB_API : control library symbols visibility ===== */
|
23
28
|
#ifndef ZSTDLIB_VISIBLE
|
@@ -57,7 +62,7 @@ extern "C" {
|
|
57
62
|
#else
|
58
63
|
# if defined (__cplusplus) && (__cplusplus >= 201402) /* C++14 or greater */
|
59
64
|
# define ZSTD_DEPRECATED(message) [[deprecated(message)]]
|
60
|
-
# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__)
|
65
|
+
# elif (defined(GNUC) && (GNUC > 4 || (GNUC == 4 && GNUC_MINOR >= 5))) || defined(__clang__) || defined(__IAR_SYSTEMS_ICC__)
|
61
66
|
# define ZSTD_DEPRECATED(message) __attribute__((deprecated(message)))
|
62
67
|
# elif defined(__GNUC__) && (__GNUC__ >= 3)
|
63
68
|
# define ZSTD_DEPRECATED(message) __attribute__((deprecated))
|
@@ -106,7 +111,7 @@ extern "C" {
|
|
106
111
|
/*------ Version ------*/
|
107
112
|
#define ZSTD_VERSION_MAJOR 1
|
108
113
|
#define ZSTD_VERSION_MINOR 5
|
109
|
-
#define ZSTD_VERSION_RELEASE
|
114
|
+
#define ZSTD_VERSION_RELEASE 7
|
110
115
|
#define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
|
111
116
|
|
112
117
|
/*! ZSTD_versionNumber() :
|
@@ -144,7 +149,7 @@ ZSTDLIB_API const char* ZSTD_versionString(void);
|
|
144
149
|
|
145
150
|
|
146
151
|
/***************************************
|
147
|
-
* Simple API
|
152
|
+
* Simple Core API
|
148
153
|
***************************************/
|
149
154
|
/*! ZSTD_compress() :
|
150
155
|
* Compresses `src` content as a single zstd compressed frame into already allocated `dst`.
|
@@ -157,68 +162,80 @@ ZSTDLIB_API size_t ZSTD_compress( void* dst, size_t dstCapacity,
|
|
157
162
|
int compressionLevel);
|
158
163
|
|
159
164
|
/*! ZSTD_decompress() :
|
160
|
-
*
|
161
|
-
*
|
162
|
-
*
|
163
|
-
*
|
164
|
-
*
|
165
|
+
* `compressedSize` : must be the _exact_ size of some number of compressed and/or skippable frames.
|
166
|
+
* Multiple compressed frames can be decompressed at once with this method.
|
167
|
+
* The result will be the concatenation of all decompressed frames, back to back.
|
168
|
+
* `dstCapacity` is an upper bound of originalSize to regenerate.
|
169
|
+
* First frame's decompressed size can be extracted using ZSTD_getFrameContentSize().
|
170
|
+
* If maximum upper bound isn't known, prefer using streaming mode to decompress data.
|
171
|
+
* @return : the number of bytes decompressed into `dst` (<= `dstCapacity`),
|
172
|
+
* or an errorCode if it fails (which can be tested using ZSTD_isError()). */
|
165
173
|
ZSTDLIB_API size_t ZSTD_decompress( void* dst, size_t dstCapacity,
|
166
174
|
const void* src, size_t compressedSize);
|
167
175
|
|
176
|
+
|
177
|
+
/*====== Decompression helper functions ======*/
|
178
|
+
|
168
179
|
/*! ZSTD_getFrameContentSize() : requires v1.3.0+
|
169
|
-
*
|
170
|
-
*
|
171
|
-
*
|
172
|
-
*
|
173
|
-
*
|
174
|
-
*
|
175
|
-
*
|
176
|
-
*
|
177
|
-
*
|
178
|
-
*
|
179
|
-
*
|
180
|
-
*
|
181
|
-
*
|
182
|
-
*
|
183
|
-
*
|
184
|
-
*
|
185
|
-
*
|
186
|
-
*
|
187
|
-
*
|
188
|
-
*
|
189
|
-
*
|
190
|
-
*
|
180
|
+
* `src` should point to the start of a ZSTD encoded frame.
|
181
|
+
* `srcSize` must be at least as large as the frame header.
|
182
|
+
* hint : any size >= `ZSTD_frameHeaderSize_max` is large enough.
|
183
|
+
* @return : - decompressed size of `src` frame content, if known
|
184
|
+
* - ZSTD_CONTENTSIZE_UNKNOWN if the size cannot be determined
|
185
|
+
* - ZSTD_CONTENTSIZE_ERROR if an error occurred (e.g. invalid magic number, srcSize too small)
|
186
|
+
* note 1 : a 0 return value means the frame is valid but "empty".
|
187
|
+
* When invoking this method on a skippable frame, it will return 0.
|
188
|
+
* note 2 : decompressed size is an optional field, it may not be present (typically in streaming mode).
|
189
|
+
* When `return==ZSTD_CONTENTSIZE_UNKNOWN`, data to decompress could be any size.
|
190
|
+
* In which case, it's necessary to use streaming mode to decompress data.
|
191
|
+
* Optionally, application can rely on some implicit limit,
|
192
|
+
* as ZSTD_decompress() only needs an upper bound of decompressed size.
|
193
|
+
* (For example, data could be necessarily cut into blocks <= 16 KB).
|
194
|
+
* note 3 : decompressed size is always present when compression is completed using single-pass functions,
|
195
|
+
* such as ZSTD_compress(), ZSTD_compressCCtx() ZSTD_compress_usingDict() or ZSTD_compress_usingCDict().
|
196
|
+
* note 4 : decompressed size can be very large (64-bits value),
|
197
|
+
* potentially larger than what local system can handle as a single memory segment.
|
198
|
+
* In which case, it's necessary to use streaming mode to decompress data.
|
199
|
+
* note 5 : If source is untrusted, decompressed size could be wrong or intentionally modified.
|
200
|
+
* Always ensure return value fits within application's authorized limits.
|
201
|
+
* Each application can set its own limits.
|
202
|
+
* note 6 : This function replaces ZSTD_getDecompressedSize() */
|
191
203
|
#define ZSTD_CONTENTSIZE_UNKNOWN (0ULL - 1)
|
192
204
|
#define ZSTD_CONTENTSIZE_ERROR (0ULL - 2)
|
193
205
|
ZSTDLIB_API unsigned long long ZSTD_getFrameContentSize(const void *src, size_t srcSize);
|
194
206
|
|
195
|
-
/*! ZSTD_getDecompressedSize() :
|
196
|
-
*
|
207
|
+
/*! ZSTD_getDecompressedSize() (obsolete):
|
208
|
+
* This function is now obsolete, in favor of ZSTD_getFrameContentSize().
|
197
209
|
* Both functions work the same way, but ZSTD_getDecompressedSize() blends
|
198
210
|
* "empty", "unknown" and "error" results to the same return value (0),
|
199
211
|
* while ZSTD_getFrameContentSize() gives them separate return values.
|
200
212
|
* @return : decompressed size of `src` frame content _if known and not empty_, 0 otherwise. */
|
201
213
|
ZSTD_DEPRECATED("Replaced by ZSTD_getFrameContentSize")
|
202
|
-
ZSTDLIB_API
|
203
|
-
unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize);
|
214
|
+
ZSTDLIB_API unsigned long long ZSTD_getDecompressedSize(const void* src, size_t srcSize);
|
204
215
|
|
205
216
|
/*! ZSTD_findFrameCompressedSize() : Requires v1.4.0+
|
206
217
|
* `src` should point to the start of a ZSTD frame or skippable frame.
|
207
218
|
* `srcSize` must be >= first frame size
|
208
219
|
* @return : the compressed size of the first frame starting at `src`,
|
209
220
|
* suitable to pass as `srcSize` to `ZSTD_decompress` or similar,
|
210
|
-
*
|
221
|
+
* or an error code if input is invalid
|
222
|
+
* Note 1: this method is called _find*() because it's not enough to read the header,
|
223
|
+
* it may have to scan through the frame's content, to reach its end.
|
224
|
+
* Note 2: this method also works with Skippable Frames. In which case,
|
225
|
+
* it returns the size of the complete skippable frame,
|
226
|
+
* which is always equal to its content size + 8 bytes for headers. */
|
211
227
|
ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize);
|
212
228
|
|
213
229
|
|
214
|
-
/*======
|
215
|
-
|
230
|
+
/*====== Compression helper functions ======*/
|
231
|
+
|
232
|
+
/*! ZSTD_compressBound() :
|
216
233
|
* maximum compressed size in worst case single-pass scenario.
|
217
|
-
* When invoking `ZSTD_compress()
|
234
|
+
* When invoking `ZSTD_compress()`, or any other one-pass compression function,
|
218
235
|
* it's recommended to provide @dstCapacity >= ZSTD_compressBound(srcSize)
|
219
236
|
* as it eliminates one potential failure scenario,
|
220
237
|
* aka not enough room in dst buffer to write the compressed frame.
|
221
|
-
* Note : ZSTD_compressBound() itself can fail, if @srcSize
|
238
|
+
* Note : ZSTD_compressBound() itself can fail, if @srcSize >= ZSTD_MAX_INPUT_SIZE .
|
222
239
|
* In which case, ZSTD_compressBound() will return an error code
|
223
240
|
* which can be tested using ZSTD_isError().
|
224
241
|
*
|
@@ -226,21 +243,25 @@ ZSTDLIB_API size_t ZSTD_findFrameCompressedSize(const void* src, size_t srcSize)
|
|
226
243
|
* same as ZSTD_compressBound(), but as a macro.
|
227
244
|
* It can be used to produce constants, which can be useful for static allocation,
|
228
245
|
* for example to size a static array on stack.
|
229
|
-
* Will produce constant value 0 if srcSize too large.
|
246
|
+
* Will produce constant value 0 if srcSize is too large.
|
230
247
|
*/
|
231
248
|
#define ZSTD_MAX_INPUT_SIZE ((sizeof(size_t)==8) ? 0xFF00FF00FF00FF00ULL : 0xFF00FF00U)
|
232
249
|
#define ZSTD_COMPRESSBOUND(srcSize) (((size_t)(srcSize) >= ZSTD_MAX_INPUT_SIZE) ? 0 : (srcSize) + ((srcSize)>>8) + (((srcSize) < (128<<10)) ? (((128<<10) - (srcSize)) >> 11) /* margin, from 64 to 0 */ : 0)) /* this formula ensures that bound(A) + bound(B) <= bound(A+B) as long as A and B >= 128 KB */
|
233
250
|
ZSTDLIB_API size_t ZSTD_compressBound(size_t srcSize); /*!< maximum compressed size in worst case single-pass scenario */
|
251
|
+
|
252
|
+
|
253
|
+
/*====== Error helper functions ======*/
|
234
254
|
/* ZSTD_isError() :
|
235
255
|
* Most ZSTD_* functions returning a size_t value can be tested for error,
|
236
256
|
* using ZSTD_isError().
|
237
257
|
* @return 1 if error, 0 otherwise
|
238
258
|
*/
|
239
|
-
ZSTDLIB_API unsigned
|
240
|
-
ZSTDLIB_API
|
241
|
-
ZSTDLIB_API
|
242
|
-
ZSTDLIB_API int
|
243
|
-
ZSTDLIB_API int
|
259
|
+
ZSTDLIB_API unsigned ZSTD_isError(size_t result); /*!< tells if a `size_t` function result is an error code */
|
260
|
+
ZSTDLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult); /* convert a result into an error code, which can be compared to error enum list */
|
261
|
+
ZSTDLIB_API const char* ZSTD_getErrorName(size_t result); /*!< provides readable string from a function result */
|
262
|
+
ZSTDLIB_API int ZSTD_minCLevel(void); /*!< minimum negative compression level allowed, requires v1.4.0+ */
|
263
|
+
ZSTDLIB_API int ZSTD_maxCLevel(void); /*!< maximum compression level available */
|
264
|
+
ZSTDLIB_API int ZSTD_defaultCLevel(void); /*!< default compression level, specified by ZSTD_CLEVEL_DEFAULT, requires v1.5.0+ */
|
244
265
|
|
245
266
|
|
246
267
|
/***************************************
|
@@ -248,17 +269,17 @@ ZSTDLIB_API int ZSTD_defaultCLevel(void); /*!< default compres
|
|
248
269
|
***************************************/
|
249
270
|
/*= Compression context
|
250
271
|
* When compressing many times,
|
251
|
-
* it is recommended to allocate a context just once,
|
272
|
+
* it is recommended to allocate a compression context just once,
|
252
273
|
* and reuse it for each successive compression operation.
|
253
|
-
* This will make workload
|
274
|
+
* This will make the workload easier for system's memory.
|
254
275
|
* Note : re-using context is just a speed / resource optimization.
|
255
276
|
* It doesn't change the compression ratio, which remains identical.
|
256
|
-
* Note 2
|
257
|
-
* use one different context per thread
|
277
|
+
* Note 2: For parallel execution in multi-threaded environments,
|
278
|
+
* use one different context per thread .
|
258
279
|
*/
|
259
280
|
typedef struct ZSTD_CCtx_s ZSTD_CCtx;
|
260
281
|
ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx(void);
|
261
|
-
ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /*
|
282
|
+
ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* compatible with NULL pointer */
|
262
283
|
|
263
284
|
/*! ZSTD_compressCCtx() :
|
264
285
|
* Same as ZSTD_compress(), using an explicit ZSTD_CCtx.
|
@@ -266,7 +287,7 @@ ZSTDLIB_API size_t ZSTD_freeCCtx(ZSTD_CCtx* cctx); /* accept NULL pointer *
|
|
266
287
|
* this function compresses at the requested compression level,
|
267
288
|
* __ignoring any other advanced parameter__ .
|
268
289
|
* If any advanced parameter was set using the advanced API,
|
269
|
-
* they will all be reset. Only
|
290
|
+
* they will all be reset. Only @compressionLevel remains.
|
270
291
|
*/
|
271
292
|
ZSTDLIB_API size_t ZSTD_compressCCtx(ZSTD_CCtx* cctx,
|
272
293
|
void* dst, size_t dstCapacity,
|
@@ -392,7 +413,7 @@ typedef enum {
|
|
392
413
|
* Special: value 0 means "use default strategy". */
|
393
414
|
|
394
415
|
ZSTD_c_targetCBlockSize=130, /* v1.5.6+
|
395
|
-
* Attempts to fit compressed block size into
|
416
|
+
* Attempts to fit compressed block size into approximately targetCBlockSize.
|
396
417
|
* Bound by ZSTD_TARGETCBLOCKSIZE_MIN and ZSTD_TARGETCBLOCKSIZE_MAX.
|
397
418
|
* Note that it's not a guarantee, just a convergence target (default:0).
|
398
419
|
* No target when targetCBlockSize == 0.
|
@@ -488,7 +509,8 @@ typedef enum {
|
|
488
509
|
* ZSTD_c_stableOutBuffer
|
489
510
|
* ZSTD_c_blockDelimiters
|
490
511
|
* ZSTD_c_validateSequences
|
491
|
-
*
|
512
|
+
* ZSTD_c_blockSplitterLevel
|
513
|
+
* ZSTD_c_splitAfterSequences
|
492
514
|
* ZSTD_c_useRowMatchFinder
|
493
515
|
* ZSTD_c_prefetchCDictTables
|
494
516
|
* ZSTD_c_enableSeqProducerFallback
|
@@ -515,7 +537,8 @@ typedef enum {
|
|
515
537
|
ZSTD_c_experimentalParam16=1013,
|
516
538
|
ZSTD_c_experimentalParam17=1014,
|
517
539
|
ZSTD_c_experimentalParam18=1015,
|
518
|
-
ZSTD_c_experimentalParam19=1016
|
540
|
+
ZSTD_c_experimentalParam19=1016,
|
541
|
+
ZSTD_c_experimentalParam20=1017
|
519
542
|
} ZSTD_cParameter;
|
520
543
|
|
521
544
|
typedef struct {
|
@@ -855,7 +878,7 @@ ZSTDLIB_API size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output);
|
|
855
878
|
*
|
856
879
|
* A ZSTD_DStream object is required to track streaming operations.
|
857
880
|
* Use ZSTD_createDStream() and ZSTD_freeDStream() to create/release resources.
|
858
|
-
* ZSTD_DStream objects can be
|
881
|
+
* ZSTD_DStream objects can be re-employed multiple times.
|
859
882
|
*
|
860
883
|
* Use ZSTD_initDStream() to start a new decompression operation.
|
861
884
|
* @return : recommended first input size
|
@@ -865,16 +888,21 @@ ZSTDLIB_API size_t ZSTD_endStream(ZSTD_CStream* zcs, ZSTD_outBuffer* output);
|
|
865
888
|
* The function will update both `pos` fields.
|
866
889
|
* If `input.pos < input.size`, some input has not been consumed.
|
867
890
|
* It's up to the caller to present again remaining data.
|
891
|
+
*
|
868
892
|
* The function tries to flush all data decoded immediately, respecting output buffer size.
|
869
893
|
* If `output.pos < output.size`, decoder has flushed everything it could.
|
870
|
-
*
|
894
|
+
*
|
895
|
+
* However, when `output.pos == output.size`, it's more difficult to know.
|
896
|
+
* If @return > 0, the frame is not complete, meaning
|
897
|
+
* either there is still some data left to flush within internal buffers,
|
898
|
+
* or there is more input to read to complete the frame (or both).
|
871
899
|
* In which case, call ZSTD_decompressStream() again to flush whatever remains in the buffer.
|
872
900
|
* Note : with no additional input provided, amount of data flushed is necessarily <= ZSTD_BLOCKSIZE_MAX.
|
873
901
|
* @return : 0 when a frame is completely decoded and fully flushed,
|
874
902
|
* or an error code, which can be tested using ZSTD_isError(),
|
875
903
|
* or any other value > 0, which means there is still some decoding or flushing to do to complete current frame :
|
876
904
|
* the return value is a suggested next input size (just a hint for better latency)
|
877
|
-
* that will never request more than the remaining frame
|
905
|
+
* that will never request more than the remaining content of the compressed frame.
|
878
906
|
* *******************************************************************************/
|
879
907
|
|
880
908
|
typedef ZSTD_DCtx ZSTD_DStream; /**< DCtx and DStream are now effectively same object (>= v1.3.0) */
|
@@ -901,9 +929,10 @@ ZSTDLIB_API size_t ZSTD_initDStream(ZSTD_DStream* zds);
|
|
901
929
|
* Function will update both input and output `pos` fields exposing current state via these fields:
|
902
930
|
* - `input.pos < input.size`, some input remaining and caller should provide remaining input
|
903
931
|
* on the next call.
|
904
|
-
* - `output.pos < output.size`, decoder
|
905
|
-
* - `output.pos == output.size`,
|
906
|
-
*
|
932
|
+
* - `output.pos < output.size`, decoder flushed internal output buffer.
|
933
|
+
* - `output.pos == output.size`, unflushed data potentially present in the internal buffers,
|
934
|
+
* check ZSTD_decompressStream() @return value,
|
935
|
+
* if > 0, invoke it again to flush remaining data to output.
|
907
936
|
* Note : with no additional input, amount of data flushed <= ZSTD_BLOCKSIZE_MAX.
|
908
937
|
*
|
909
938
|
* @return : 0 when a frame is completely decoded and fully flushed,
|
@@ -1181,6 +1210,10 @@ ZSTDLIB_API size_t ZSTD_sizeof_DStream(const ZSTD_DStream* zds);
|
|
1181
1210
|
ZSTDLIB_API size_t ZSTD_sizeof_CDict(const ZSTD_CDict* cdict);
|
1182
1211
|
ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
|
1183
1212
|
|
1213
|
+
#if defined (__cplusplus)
|
1214
|
+
}
|
1215
|
+
#endif
|
1216
|
+
|
1184
1217
|
#endif /* ZSTD_H_235446 */
|
1185
1218
|
|
1186
1219
|
|
@@ -1196,6 +1229,10 @@ ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
|
|
1196
1229
|
#if defined(ZSTD_STATIC_LINKING_ONLY) && !defined(ZSTD_H_ZSTD_STATIC_LINKING_ONLY)
|
1197
1230
|
#define ZSTD_H_ZSTD_STATIC_LINKING_ONLY
|
1198
1231
|
|
1232
|
+
#if defined (__cplusplus)
|
1233
|
+
extern "C" {
|
1234
|
+
#endif
|
1235
|
+
|
1199
1236
|
/* This can be overridden externally to hide static symbols. */
|
1200
1237
|
#ifndef ZSTDLIB_STATIC_API
|
1201
1238
|
# if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
@@ -1307,7 +1344,7 @@ typedef struct {
|
|
1307
1344
|
*
|
1308
1345
|
* Note: This field is optional. ZSTD_generateSequences() will calculate the value of
|
1309
1346
|
* 'rep', but repeat offsets do not necessarily need to be calculated from an external
|
1310
|
-
* sequence provider
|
1347
|
+
* sequence provider perspective. For example, ZSTD_compressSequences() does not
|
1311
1348
|
* use this 'rep' field at all (as of now).
|
1312
1349
|
*/
|
1313
1350
|
} ZSTD_Sequence;
|
@@ -1412,14 +1449,15 @@ typedef enum {
|
|
1412
1449
|
} ZSTD_literalCompressionMode_e;
|
1413
1450
|
|
1414
1451
|
typedef enum {
|
1415
|
-
/* Note: This enum controls features which are conditionally beneficial.
|
1416
|
-
* decision on whether or not to enable the feature (ZSTD_ps_auto),
|
1417
|
-
*
|
1452
|
+
/* Note: This enum controls features which are conditionally beneficial.
|
1453
|
+
* Zstd can take a decision on whether or not to enable the feature (ZSTD_ps_auto),
|
1454
|
+
* but setting the switch to ZSTD_ps_enable or ZSTD_ps_disable force enable/disable the feature.
|
1418
1455
|
*/
|
1419
1456
|
ZSTD_ps_auto = 0, /* Let the library automatically determine whether the feature shall be enabled */
|
1420
1457
|
ZSTD_ps_enable = 1, /* Force-enable the feature */
|
1421
1458
|
ZSTD_ps_disable = 2 /* Do not use the feature */
|
1422
|
-
}
|
1459
|
+
} ZSTD_ParamSwitch_e;
|
1460
|
+
#define ZSTD_paramSwitch_e ZSTD_ParamSwitch_e /* old name */
|
1423
1461
|
|
1424
1462
|
/***************************************
|
1425
1463
|
* Frame header and size functions
|
@@ -1464,34 +1502,36 @@ ZSTDLIB_STATIC_API unsigned long long ZSTD_findDecompressedSize(const void* src,
|
|
1464
1502
|
ZSTDLIB_STATIC_API unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize);
|
1465
1503
|
|
1466
1504
|
/*! ZSTD_frameHeaderSize() :
|
1467
|
-
* srcSize must be >= ZSTD_FRAMEHEADERSIZE_PREFIX.
|
1505
|
+
* srcSize must be large enough, aka >= ZSTD_FRAMEHEADERSIZE_PREFIX.
|
1468
1506
|
* @return : size of the Frame Header,
|
1469
1507
|
* or an error code (if srcSize is too small) */
|
1470
1508
|
ZSTDLIB_STATIC_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize);
|
1471
1509
|
|
1472
|
-
typedef enum { ZSTD_frame, ZSTD_skippableFrame }
|
1510
|
+
typedef enum { ZSTD_frame, ZSTD_skippableFrame } ZSTD_FrameType_e;
|
1511
|
+
#define ZSTD_frameType_e ZSTD_FrameType_e /* old name */
|
1473
1512
|
typedef struct {
|
1474
1513
|
unsigned long long frameContentSize; /* if == ZSTD_CONTENTSIZE_UNKNOWN, it means this field is not available. 0 means "empty" */
|
1475
1514
|
unsigned long long windowSize; /* can be very large, up to <= frameContentSize */
|
1476
1515
|
unsigned blockSizeMax;
|
1477
|
-
|
1516
|
+
ZSTD_FrameType_e frameType; /* if == ZSTD_skippableFrame, frameContentSize is the size of skippable content */
|
1478
1517
|
unsigned headerSize;
|
1479
|
-
unsigned dictID;
|
1518
|
+
unsigned dictID; /* for ZSTD_skippableFrame, contains the skippable magic variant [0-15] */
|
1480
1519
|
unsigned checksumFlag;
|
1481
1520
|
unsigned _reserved1;
|
1482
1521
|
unsigned _reserved2;
|
1483
|
-
}
|
1522
|
+
} ZSTD_FrameHeader;
|
1523
|
+
#define ZSTD_frameHeader ZSTD_FrameHeader /* old name */
|
1484
1524
|
|
1485
1525
|
/*! ZSTD_getFrameHeader() :
|
1486
|
-
* decode Frame Header
|
1487
|
-
* @return : 0, `zfhPtr` is correctly filled,
|
1488
|
-
* >0
|
1526
|
+
* decode Frame Header into `zfhPtr`, or requires larger `srcSize`.
|
1527
|
+
* @return : 0 => header is complete, `zfhPtr` is correctly filled,
|
1528
|
+
* >0 => `srcSize` is too small, @return value is the wanted `srcSize` amount, `zfhPtr` is not filled,
|
1489
1529
|
* or an error code, which can be tested using ZSTD_isError() */
|
1490
|
-
ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader(
|
1530
|
+
ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize);
|
1491
1531
|
/*! ZSTD_getFrameHeader_advanced() :
|
1492
1532
|
* same as ZSTD_getFrameHeader(),
|
1493
1533
|
* with added capability to select a format (like ZSTD_f_zstd1_magicless) */
|
1494
|
-
ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader_advanced(
|
1534
|
+
ZSTDLIB_STATIC_API size_t ZSTD_getFrameHeader_advanced(ZSTD_FrameHeader* zfhPtr, const void* src, size_t srcSize, ZSTD_format_e format);
|
1495
1535
|
|
1496
1536
|
/*! ZSTD_decompressionMargin() :
|
1497
1537
|
* Zstd supports in-place decompression, where the input and output buffers overlap.
|
@@ -1539,9 +1579,10 @@ ZSTDLIB_STATIC_API size_t ZSTD_decompressionMargin(const void* src, size_t srcSi
|
|
1539
1579
|
))
|
1540
1580
|
|
1541
1581
|
typedef enum {
|
1542
|
-
ZSTD_sf_noBlockDelimiters = 0, /*
|
1543
|
-
ZSTD_sf_explicitBlockDelimiters = 1 /*
|
1544
|
-
}
|
1582
|
+
ZSTD_sf_noBlockDelimiters = 0, /* ZSTD_Sequence[] has no block delimiters, just sequences */
|
1583
|
+
ZSTD_sf_explicitBlockDelimiters = 1 /* ZSTD_Sequence[] contains explicit block delimiters */
|
1584
|
+
} ZSTD_SequenceFormat_e;
|
1585
|
+
#define ZSTD_sequenceFormat_e ZSTD_SequenceFormat_e /* old name */
|
1545
1586
|
|
1546
1587
|
/*! ZSTD_sequenceBound() :
|
1547
1588
|
* `srcSize` : size of the input buffer
|
@@ -1565,7 +1606,7 @@ ZSTDLIB_STATIC_API size_t ZSTD_sequenceBound(size_t srcSize);
|
|
1565
1606
|
* @param zc The compression context to be used for ZSTD_compress2(). Set any
|
1566
1607
|
* compression parameters you need on this context.
|
1567
1608
|
* @param outSeqs The output sequences buffer of size @p outSeqsSize
|
1568
|
-
* @param
|
1609
|
+
* @param outSeqsCapacity The size of the output sequences buffer.
|
1569
1610
|
* ZSTD_sequenceBound(srcSize) is an upper bound on the number
|
1570
1611
|
* of sequences that can be generated.
|
1571
1612
|
* @param src The source buffer to generate sequences from of size @p srcSize.
|
@@ -1583,7 +1624,7 @@ ZSTDLIB_STATIC_API size_t ZSTD_sequenceBound(size_t srcSize);
|
|
1583
1624
|
ZSTD_DEPRECATED("For debugging only, will be replaced by ZSTD_extractSequences()")
|
1584
1625
|
ZSTDLIB_STATIC_API size_t
|
1585
1626
|
ZSTD_generateSequences(ZSTD_CCtx* zc,
|
1586
|
-
ZSTD_Sequence* outSeqs, size_t
|
1627
|
+
ZSTD_Sequence* outSeqs, size_t outSeqsCapacity,
|
1587
1628
|
const void* src, size_t srcSize);
|
1588
1629
|
|
1589
1630
|
/*! ZSTD_mergeBlockDelimiters() :
|
@@ -1603,7 +1644,7 @@ ZSTDLIB_STATIC_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, si
|
|
1603
1644
|
* Compress an array of ZSTD_Sequence, associated with @src buffer, into dst.
|
1604
1645
|
* @src contains the entire input (not just the literals).
|
1605
1646
|
* If @srcSize > sum(sequence.length), the remaining bytes are considered all literals
|
1606
|
-
* If a dictionary is included, then the cctx should reference the dict
|
1647
|
+
* If a dictionary is included, then the cctx should reference the dict (see: ZSTD_CCtx_refCDict(), ZSTD_CCtx_loadDictionary(), etc.).
|
1607
1648
|
* The entire source is compressed into a single frame.
|
1608
1649
|
*
|
1609
1650
|
* The compression behavior changes based on cctx params. In particular:
|
@@ -1612,11 +1653,17 @@ ZSTDLIB_STATIC_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, si
|
|
1612
1653
|
* the block size derived from the cctx, and sequences may be split. This is the default setting.
|
1613
1654
|
*
|
1614
1655
|
* If ZSTD_c_blockDelimiters == ZSTD_sf_explicitBlockDelimiters, the array of ZSTD_Sequence is expected to contain
|
1615
|
-
* block delimiters (defined in ZSTD_Sequence). Behavior is undefined if no block delimiters are provided.
|
1656
|
+
* valid block delimiters (defined in ZSTD_Sequence). Behavior is undefined if no block delimiters are provided.
|
1616
1657
|
*
|
1617
|
-
*
|
1618
|
-
*
|
1619
|
-
*
|
1658
|
+
* When ZSTD_c_blockDelimiters == ZSTD_sf_explicitBlockDelimiters, it's possible to decide generating repcodes
|
1659
|
+
* using the advanced parameter ZSTD_c_repcodeResolution. Repcodes will improve compression ratio, though the benefit
|
1660
|
+
* can vary greatly depending on Sequences. On the other hand, repcode resolution is an expensive operation.
|
1661
|
+
* By default, it's disabled at low (<10) compression levels, and enabled above the threshold (>=10).
|
1662
|
+
* ZSTD_c_repcodeResolution makes it possible to directly manage this processing in either direction.
|
1663
|
+
*
|
1664
|
+
* If ZSTD_c_validateSequences == 0, this function blindly accepts the Sequences provided. Invalid Sequences cause undefined
|
1665
|
+
* behavior. If ZSTD_c_validateSequences == 1, then the function will detect invalid Sequences (see doc/zstd_compression_format.md for
|
1666
|
+
* specifics regarding offset/matchlength requirements) and then bail out and return an error.
|
1620
1667
|
*
|
1621
1668
|
* In addition to the two adjustable experimental params, there are other important cctx params.
|
1622
1669
|
* - ZSTD_c_minMatch MUST be set as less than or equal to the smallest match generated by the match finder. It has a minimum value of ZSTD_MINMATCH_MIN.
|
@@ -1624,15 +1671,42 @@ ZSTDLIB_STATIC_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, si
|
|
1624
1671
|
* - ZSTD_c_windowLog affects offset validation: this function will return an error at higher debug levels if a provided offset
|
1625
1672
|
* is larger than what the spec allows for a given window log and dictionary (if present). See: doc/zstd_compression_format.md
|
1626
1673
|
*
|
1627
|
-
* Note: Repcodes are, as of now, always re-calculated within this function,
|
1628
|
-
* Note
|
1629
|
-
* and cannot emit an RLE block that disagrees with the repcode history
|
1674
|
+
* Note: Repcodes are, as of now, always re-calculated within this function, ZSTD_Sequence.rep is effectively unused.
|
1675
|
+
* Dev Note: Once ability to ingest repcodes become available, the explicit block delims mode must respect those repcodes exactly,
|
1676
|
+
* and cannot emit an RLE block that disagrees with the repcode history.
|
1677
|
+
* @return : final compressed size, or a ZSTD error code.
|
1678
|
+
*/
|
1679
|
+
ZSTDLIB_STATIC_API size_t
|
1680
|
+
ZSTD_compressSequences(ZSTD_CCtx* cctx,
|
1681
|
+
void* dst, size_t dstCapacity,
|
1682
|
+
const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
|
1683
|
+
const void* src, size_t srcSize);
|
1684
|
+
|
1685
|
+
|
1686
|
+
/*! ZSTD_compressSequencesAndLiterals() :
|
1687
|
+
* This is a variant of ZSTD_compressSequences() which,
|
1688
|
+
* instead of receiving (src,srcSize) as input parameter, receives (literals,litSize),
|
1689
|
+
* aka all the literals, already extracted and laid out into a single continuous buffer.
|
1690
|
+
* This can be useful if the process generating the sequences also happens to generate the buffer of literals,
|
1691
|
+
* thus skipping an extraction + caching stage.
|
1692
|
+
* It's a speed optimization, useful when the right conditions are met,
|
1693
|
+
* but it also features the following limitations:
|
1694
|
+
* - Only supports explicit delimiter mode
|
1695
|
+
* - Currently does not support Sequences validation (so input Sequences are trusted)
|
1696
|
+
* - Not compatible with frame checksum, which must be disabled
|
1697
|
+
* - If any block is incompressible, will fail and return an error
|
1698
|
+
* - @litSize must be == sum of all @.litLength fields in @inSeqs. Any discrepancy will generate an error.
|
1699
|
+
* - @litBufCapacity is the size of the underlying buffer into which literals are written, starting at address @literals.
|
1700
|
+
* @litBufCapacity must be at least 8 bytes larger than @litSize.
|
1701
|
+
* - @decompressedSize must be correct, and correspond to the sum of all Sequences. Any discrepancy will generate an error.
|
1630
1702
|
* @return : final compressed size, or a ZSTD error code.
|
1631
1703
|
*/
|
1632
1704
|
ZSTDLIB_STATIC_API size_t
|
1633
|
-
|
1634
|
-
|
1635
|
-
|
1705
|
+
ZSTD_compressSequencesAndLiterals(ZSTD_CCtx* cctx,
|
1706
|
+
void* dst, size_t dstCapacity,
|
1707
|
+
const ZSTD_Sequence* inSeqs, size_t nbSequences,
|
1708
|
+
const void* literals, size_t litSize, size_t litBufCapacity,
|
1709
|
+
size_t decompressedSize);
|
1636
1710
|
|
1637
1711
|
|
1638
1712
|
/*! ZSTD_writeSkippableFrame() :
|
@@ -1640,8 +1714,8 @@ ZSTD_compressSequences( ZSTD_CCtx* cctx, void* dst, size_t dstSize,
|
|
1640
1714
|
*
|
1641
1715
|
* Skippable frames begin with a 4-byte magic number. There are 16 possible choices of magic number,
|
1642
1716
|
* ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15.
|
1643
|
-
* As such, the parameter magicVariant controls the exact skippable frame magic number variant used,
|
1644
|
-
* the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant.
|
1717
|
+
* As such, the parameter magicVariant controls the exact skippable frame magic number variant used,
|
1718
|
+
* so the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant.
|
1645
1719
|
*
|
1646
1720
|
* Returns an error if destination buffer is not large enough, if the source size is not representable
|
1647
1721
|
* with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid).
|
@@ -1649,26 +1723,28 @@ ZSTD_compressSequences( ZSTD_CCtx* cctx, void* dst, size_t dstSize,
|
|
1649
1723
|
* @return : number of bytes written or a ZSTD error.
|
1650
1724
|
*/
|
1651
1725
|
ZSTDLIB_STATIC_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
|
1652
|
-
|
1726
|
+
const void* src, size_t srcSize,
|
1727
|
+
unsigned magicVariant);
|
1653
1728
|
|
1654
1729
|
/*! ZSTD_readSkippableFrame() :
|
1655
|
-
* Retrieves a zstd skippable frame
|
1730
|
+
* Retrieves the content of a zstd skippable frame starting at @src, and writes it to @dst buffer.
|
1656
1731
|
*
|
1657
|
-
* The parameter magicVariant will receive the magicVariant that was supplied when the frame was written,
|
1658
|
-
* i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START.
|
1659
|
-
* in the magicVariant.
|
1732
|
+
* The parameter @magicVariant will receive the magicVariant that was supplied when the frame was written,
|
1733
|
+
* i.e. magicNumber - ZSTD_MAGIC_SKIPPABLE_START.
|
1734
|
+
* This can be NULL if the caller is not interested in the magicVariant.
|
1660
1735
|
*
|
1661
1736
|
* Returns an error if destination buffer is not large enough, or if the frame is not skippable.
|
1662
1737
|
*
|
1663
1738
|
* @return : number of bytes written or a ZSTD error.
|
1664
1739
|
*/
|
1665
|
-
|
1666
|
-
|
1740
|
+
ZSTDLIB_STATIC_API size_t ZSTD_readSkippableFrame(void* dst, size_t dstCapacity,
|
1741
|
+
unsigned* magicVariant,
|
1742
|
+
const void* src, size_t srcSize);
|
1667
1743
|
|
1668
1744
|
/*! ZSTD_isSkippableFrame() :
|
1669
1745
|
* Tells if the content of `buffer` starts with a valid Frame Identifier for a skippable frame.
|
1670
1746
|
*/
|
1671
|
-
|
1747
|
+
ZSTDLIB_STATIC_API unsigned ZSTD_isSkippableFrame(const void* buffer, size_t size);
|
1672
1748
|
|
1673
1749
|
|
1674
1750
|
|
@@ -1796,7 +1872,15 @@ static
|
|
1796
1872
|
#ifdef __GNUC__
|
1797
1873
|
__attribute__((__unused__))
|
1798
1874
|
#endif
|
1875
|
+
|
1876
|
+
#if defined(__clang__) && __clang_major__ >= 5
|
1877
|
+
#pragma clang diagnostic push
|
1878
|
+
#pragma clang diagnostic ignored "-Wzero-as-null-pointer-constant"
|
1879
|
+
#endif
|
1799
1880
|
ZSTD_customMem const ZSTD_defaultCMem = { NULL, NULL, NULL }; /**< this constant defers to stdlib's functions */
|
1881
|
+
#if defined(__clang__) && __clang_major__ >= 5
|
1882
|
+
#pragma clang diagnostic pop
|
1883
|
+
#endif
|
1800
1884
|
|
1801
1885
|
ZSTDLIB_STATIC_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem);
|
1802
1886
|
ZSTDLIB_STATIC_API ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem);
|
@@ -1976,7 +2060,7 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const vo
|
|
1976
2060
|
* See the comments on that enum for an explanation of the feature. */
|
1977
2061
|
#define ZSTD_c_forceAttachDict ZSTD_c_experimentalParam4
|
1978
2062
|
|
1979
|
-
/* Controlled with
|
2063
|
+
/* Controlled with ZSTD_ParamSwitch_e enum.
|
1980
2064
|
* Default is ZSTD_ps_auto.
|
1981
2065
|
* Set to ZSTD_ps_disable to never compress literals.
|
1982
2066
|
* Set to ZSTD_ps_enable to always compress literals. (Note: uncompressed literals
|
@@ -2117,22 +2201,46 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const vo
|
|
2117
2201
|
/* ZSTD_c_validateSequences
|
2118
2202
|
* Default is 0 == disabled. Set to 1 to enable sequence validation.
|
2119
2203
|
*
|
2120
|
-
* For use with sequence compression API: ZSTD_compressSequences().
|
2121
|
-
* Designates whether or not
|
2204
|
+
* For use with sequence compression API: ZSTD_compressSequences*().
|
2205
|
+
* Designates whether or not provided sequences are validated within ZSTD_compressSequences*()
|
2122
2206
|
* during function execution.
|
2123
2207
|
*
|
2124
|
-
*
|
2125
|
-
*
|
2208
|
+
* When Sequence validation is disabled (default), Sequences are compressed as-is,
|
2209
|
+
* so they must correct, otherwise it would result in a corruption error.
|
2126
2210
|
*
|
2127
|
-
*
|
2211
|
+
* Sequence validation adds some protection, by ensuring that all values respect boundary conditions.
|
2212
|
+
* If a Sequence is detected invalid (see doc/zstd_compression_format.md for
|
2128
2213
|
* specifics regarding offset/matchlength requirements) then the function will bail out and
|
2129
2214
|
* return an error.
|
2130
|
-
*
|
2131
2215
|
*/
|
2132
2216
|
#define ZSTD_c_validateSequences ZSTD_c_experimentalParam12
|
2133
2217
|
|
2134
|
-
/*
|
2135
|
-
*
|
2218
|
+
/* ZSTD_c_blockSplitterLevel
|
2219
|
+
* note: this parameter only influences the first splitter stage,
|
2220
|
+
* which is active before producing the sequences.
|
2221
|
+
* ZSTD_c_splitAfterSequences controls the next splitter stage,
|
2222
|
+
* which is active after sequence production.
|
2223
|
+
* Note that both can be combined.
|
2224
|
+
* Allowed values are between 0 and ZSTD_BLOCKSPLITTER_LEVEL_MAX included.
|
2225
|
+
* 0 means "auto", which will select a value depending on current ZSTD_c_strategy.
|
2226
|
+
* 1 means no splitting.
|
2227
|
+
* Then, values from 2 to 6 are sorted in increasing cpu load order.
|
2228
|
+
*
|
2229
|
+
* Note that currently the first block is never split,
|
2230
|
+
* to ensure expansion guarantees in presence of incompressible data.
|
2231
|
+
*/
|
2232
|
+
#define ZSTD_BLOCKSPLITTER_LEVEL_MAX 6
|
2233
|
+
#define ZSTD_c_blockSplitterLevel ZSTD_c_experimentalParam20
|
2234
|
+
|
2235
|
+
/* ZSTD_c_splitAfterSequences
|
2236
|
+
* This is a stronger splitter algorithm,
|
2237
|
+
* based on actual sequences previously produced by the selected parser.
|
2238
|
+
* It's also slower, and as a consequence, mostly used for high compression levels.
|
2239
|
+
* While the post-splitter does overlap with the pre-splitter,
|
2240
|
+
* both can nonetheless be combined,
|
2241
|
+
* notably with ZSTD_c_blockSplitterLevel at ZSTD_BLOCKSPLITTER_LEVEL_MAX,
|
2242
|
+
* resulting in higher compression ratio than just one of them.
|
2243
|
+
*
|
2136
2244
|
* Default is ZSTD_ps_auto.
|
2137
2245
|
* Set to ZSTD_ps_disable to never use block splitter.
|
2138
2246
|
* Set to ZSTD_ps_enable to always use block splitter.
|
@@ -2140,10 +2248,10 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const vo
|
|
2140
2248
|
* By default, in ZSTD_ps_auto, the library will decide at runtime whether to use
|
2141
2249
|
* block splitting based on the compression parameters.
|
2142
2250
|
*/
|
2143
|
-
#define
|
2251
|
+
#define ZSTD_c_splitAfterSequences ZSTD_c_experimentalParam13
|
2144
2252
|
|
2145
2253
|
/* ZSTD_c_useRowMatchFinder
|
2146
|
-
* Controlled with
|
2254
|
+
* Controlled with ZSTD_ParamSwitch_e enum.
|
2147
2255
|
* Default is ZSTD_ps_auto.
|
2148
2256
|
* Set to ZSTD_ps_disable to never use row-based matchfinder.
|
2149
2257
|
* Set to ZSTD_ps_enable to force usage of row-based matchfinder.
|
@@ -2175,7 +2283,7 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const vo
|
|
2175
2283
|
#define ZSTD_c_deterministicRefPrefix ZSTD_c_experimentalParam15
|
2176
2284
|
|
2177
2285
|
/* ZSTD_c_prefetchCDictTables
|
2178
|
-
* Controlled with
|
2286
|
+
* Controlled with ZSTD_ParamSwitch_e enum. Default is ZSTD_ps_auto.
|
2179
2287
|
*
|
2180
2288
|
* In some situations, zstd uses CDict tables in-place rather than copying them
|
2181
2289
|
* into the working context. (See docs on ZSTD_dictAttachPref_e above for details).
|
@@ -2219,19 +2327,21 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const vo
|
|
2219
2327
|
* that overrides the default ZSTD_BLOCKSIZE_MAX. It cannot be used to set upper
|
2220
2328
|
* bounds greater than ZSTD_BLOCKSIZE_MAX or bounds lower than 1KB (will make
|
2221
2329
|
* compressBound() inaccurate). Only currently meant to be used for testing.
|
2222
|
-
*
|
2223
2330
|
*/
|
2224
2331
|
#define ZSTD_c_maxBlockSize ZSTD_c_experimentalParam18
|
2225
2332
|
|
2226
|
-
/*
|
2227
|
-
* This parameter
|
2228
|
-
*
|
2229
|
-
*
|
2333
|
+
/* ZSTD_c_repcodeResolution
|
2334
|
+
* This parameter only has an effect if ZSTD_c_blockDelimiters is
|
2335
|
+
* set to ZSTD_sf_explicitBlockDelimiters (may change in the future).
|
2336
|
+
*
|
2337
|
+
* This parameter affects how zstd parses external sequences,
|
2338
|
+
* provided via the ZSTD_compressSequences*() API
|
2339
|
+
* or from an external block-level sequence producer.
|
2230
2340
|
*
|
2231
|
-
* If set to ZSTD_ps_enable, the library will check for repeated offsets
|
2341
|
+
* If set to ZSTD_ps_enable, the library will check for repeated offsets within
|
2232
2342
|
* external sequences, even if those repcodes are not explicitly indicated in
|
2233
2343
|
* the "rep" field. Note that this is the only way to exploit repcode matches
|
2234
|
-
* while using compressSequences() or an external sequence producer, since zstd
|
2344
|
+
* while using compressSequences*() or an external sequence producer, since zstd
|
2235
2345
|
* currently ignores the "rep" field of external sequences.
|
2236
2346
|
*
|
2237
2347
|
* If set to ZSTD_ps_disable, the library will not exploit repeated offsets in
|
@@ -2240,12 +2350,11 @@ ZSTDLIB_STATIC_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const vo
|
|
2240
2350
|
* compression ratio.
|
2241
2351
|
*
|
2242
2352
|
* The default value is ZSTD_ps_auto, for which the library will enable/disable
|
2243
|
-
* based on compression level.
|
2244
|
-
*
|
2245
|
-
* Note: for now, this param only has an effect if ZSTD_c_blockDelimiters is
|
2246
|
-
* set to ZSTD_sf_explicitBlockDelimiters. That may change in the future.
|
2353
|
+
* based on compression level (currently: level<10 disables, level>=10 enables).
|
2247
2354
|
*/
|
2248
|
-
#define
|
2355
|
+
#define ZSTD_c_repcodeResolution ZSTD_c_experimentalParam19
|
2356
|
+
#define ZSTD_c_searchForExternalRepcodes ZSTD_c_experimentalParam19 /* older name */
|
2357
|
+
|
2249
2358
|
|
2250
2359
|
/*! ZSTD_CCtx_getParameter() :
|
2251
2360
|
* Get the requested compression parameter value, selected by enum ZSTD_cParameter,
|
@@ -2952,7 +3061,7 @@ size_t ZSTD_compressBegin_usingCDict_advanced(ZSTD_CCtx* const cctx, const ZSTD_
|
|
2952
3061
|
>0 : `srcSize` is too small, please provide at least result bytes on next attempt.
|
2953
3062
|
errorCode, which can be tested using ZSTD_isError().
|
2954
3063
|
|
2955
|
-
It fills a
|
3064
|
+
It fills a ZSTD_FrameHeader structure with important information to correctly decode the frame,
|
2956
3065
|
such as the dictionary ID, content size, or maximum back-reference distance (`windowSize`).
|
2957
3066
|
Note that these values could be wrong, either because of data corruption, or because a 3rd party deliberately spoofs false information.
|
2958
3067
|
As a consequence, check that values remain within valid application range.
|
@@ -3082,8 +3191,8 @@ ZSTDLIB_STATIC_API size_t ZSTD_decompressBlock(ZSTD_DCtx* dctx, void* dst, size_
|
|
3082
3191
|
ZSTD_DEPRECATED("The block API is deprecated in favor of the normal compression API. See docs.")
|
3083
3192
|
ZSTDLIB_STATIC_API size_t ZSTD_insertBlock (ZSTD_DCtx* dctx, const void* blockStart, size_t blockSize); /**< insert uncompressed block into `dctx` history. Useful for multi-blocks decompression. */
|
3084
3193
|
|
3085
|
-
#endif /* ZSTD_H_ZSTD_STATIC_LINKING_ONLY */
|
3086
|
-
|
3087
3194
|
#if defined (__cplusplus)
|
3088
3195
|
}
|
3089
3196
|
#endif
|
3197
|
+
|
3198
|
+
#endif /* ZSTD_H_ZSTD_STATIC_LINKING_ONLY */
|