zstd-ruby 1.4.5.0 → 1.4.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (93) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +35 -0
  3. data/README.md +2 -2
  4. data/ext/zstdruby/libzstd/Makefile +237 -138
  5. data/ext/zstdruby/libzstd/README.md +28 -0
  6. data/ext/zstdruby/libzstd/common/bitstream.h +25 -16
  7. data/ext/zstdruby/libzstd/common/compiler.h +118 -4
  8. data/ext/zstdruby/libzstd/common/cpu.h +1 -3
  9. data/ext/zstdruby/libzstd/common/debug.c +1 -1
  10. data/ext/zstdruby/libzstd/common/debug.h +12 -19
  11. data/ext/zstdruby/libzstd/common/entropy_common.c +189 -43
  12. data/ext/zstdruby/libzstd/common/error_private.c +2 -1
  13. data/ext/zstdruby/libzstd/common/error_private.h +2 -2
  14. data/ext/zstdruby/libzstd/common/fse.h +40 -12
  15. data/ext/zstdruby/libzstd/common/fse_decompress.c +124 -17
  16. data/ext/zstdruby/libzstd/common/huf.h +27 -6
  17. data/ext/zstdruby/libzstd/common/mem.h +67 -94
  18. data/ext/zstdruby/libzstd/common/pool.c +23 -17
  19. data/ext/zstdruby/libzstd/common/pool.h +2 -2
  20. data/ext/zstdruby/libzstd/common/threading.c +6 -5
  21. data/ext/zstdruby/libzstd/common/xxhash.c +19 -57
  22. data/ext/zstdruby/libzstd/common/xxhash.h +2 -2
  23. data/ext/zstdruby/libzstd/common/zstd_common.c +10 -10
  24. data/ext/zstdruby/libzstd/common/zstd_deps.h +111 -0
  25. data/ext/zstdruby/libzstd/common/zstd_errors.h +2 -1
  26. data/ext/zstdruby/libzstd/common/zstd_internal.h +90 -59
  27. data/ext/zstdruby/libzstd/common/zstd_trace.c +42 -0
  28. data/ext/zstdruby/libzstd/common/zstd_trace.h +152 -0
  29. data/ext/zstdruby/libzstd/compress/fse_compress.c +31 -24
  30. data/ext/zstdruby/libzstd/compress/hist.c +27 -29
  31. data/ext/zstdruby/libzstd/compress/hist.h +2 -2
  32. data/ext/zstdruby/libzstd/compress/huf_compress.c +217 -101
  33. data/ext/zstdruby/libzstd/compress/zstd_compress.c +1495 -478
  34. data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +143 -44
  35. data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +7 -7
  36. data/ext/zstdruby/libzstd/compress/zstd_compress_literals.h +1 -1
  37. data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +18 -4
  38. data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +1 -1
  39. data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +25 -21
  40. data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.h +1 -1
  41. data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +62 -26
  42. data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +23 -23
  43. data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +1 -1
  44. data/ext/zstdruby/libzstd/compress/zstd_fast.c +21 -21
  45. data/ext/zstdruby/libzstd/compress/zstd_fast.h +1 -1
  46. data/ext/zstdruby/libzstd/compress/zstd_lazy.c +352 -78
  47. data/ext/zstdruby/libzstd/compress/zstd_lazy.h +21 -1
  48. data/ext/zstdruby/libzstd/compress/zstd_ldm.c +276 -209
  49. data/ext/zstdruby/libzstd/compress/zstd_ldm.h +8 -2
  50. data/ext/zstdruby/libzstd/compress/zstd_ldm_geartab.h +103 -0
  51. data/ext/zstdruby/libzstd/compress/zstd_opt.c +191 -46
  52. data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
  53. data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +79 -410
  54. data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +27 -109
  55. data/ext/zstdruby/libzstd/decompress/huf_decompress.c +303 -201
  56. data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +9 -9
  57. data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +2 -2
  58. data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +370 -87
  59. data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +153 -45
  60. data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +6 -3
  61. data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +28 -11
  62. data/ext/zstdruby/libzstd/deprecated/zbuff.h +1 -1
  63. data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +1 -1
  64. data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +1 -1
  65. data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +1 -1
  66. data/ext/zstdruby/libzstd/dictBuilder/cover.c +40 -31
  67. data/ext/zstdruby/libzstd/dictBuilder/cover.h +2 -2
  68. data/ext/zstdruby/libzstd/dictBuilder/divsufsort.c +1 -1
  69. data/ext/zstdruby/libzstd/dictBuilder/fastcover.c +26 -25
  70. data/ext/zstdruby/libzstd/dictBuilder/zdict.c +22 -24
  71. data/ext/zstdruby/libzstd/dictBuilder/zdict.h +5 -4
  72. data/ext/zstdruby/libzstd/dll/example/Makefile +1 -1
  73. data/ext/zstdruby/libzstd/dll/example/README.md +16 -22
  74. data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +1 -1
  75. data/ext/zstdruby/libzstd/legacy/zstd_v01.c +6 -2
  76. data/ext/zstdruby/libzstd/legacy/zstd_v01.h +1 -1
  77. data/ext/zstdruby/libzstd/legacy/zstd_v02.c +6 -2
  78. data/ext/zstdruby/libzstd/legacy/zstd_v02.h +1 -1
  79. data/ext/zstdruby/libzstd/legacy/zstd_v03.c +6 -2
  80. data/ext/zstdruby/libzstd/legacy/zstd_v03.h +1 -1
  81. data/ext/zstdruby/libzstd/legacy/zstd_v04.c +7 -3
  82. data/ext/zstdruby/libzstd/legacy/zstd_v04.h +1 -1
  83. data/ext/zstdruby/libzstd/legacy/zstd_v05.c +10 -6
  84. data/ext/zstdruby/libzstd/legacy/zstd_v05.h +1 -1
  85. data/ext/zstdruby/libzstd/legacy/zstd_v06.c +10 -6
  86. data/ext/zstdruby/libzstd/legacy/zstd_v06.h +1 -1
  87. data/ext/zstdruby/libzstd/legacy/zstd_v07.c +10 -6
  88. data/ext/zstdruby/libzstd/legacy/zstd_v07.h +1 -1
  89. data/ext/zstdruby/libzstd/libzstd.pc.in +3 -3
  90. data/ext/zstdruby/libzstd/zstd.h +414 -54
  91. data/lib/zstd-ruby/version.rb +1 -1
  92. metadata +7 -3
  93. data/.travis.yml +0 -14
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
2
+ * Copyright (c) 2016-2021, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
5
  * This source code is licensed under both the BSD-style license (found in the
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
2
+ * Copyright (c) 2016-2021, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
5
  * This source code is licensed under both the BSD-style license (found in the
@@ -82,7 +82,11 @@ extern "C" {
82
82
  * Basic Types
83
83
  *****************************************************************/
84
84
  #if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
85
- # include <stdint.h>
85
+ # if defined(_AIX)
86
+ # include <inttypes.h>
87
+ # else
88
+ # include <stdint.h> /* intptr_t */
89
+ # endif
86
90
  typedef uint8_t BYTE;
87
91
  typedef uint16_t U16;
88
92
  typedef int16_t S16;
@@ -3025,7 +3029,7 @@ typedef struct
3025
3029
  * Provides the size of compressed block from block header `src` */
3026
3030
  static size_t ZSTDv06_getcBlockSize(const void* src, size_t srcSize, blockProperties_t* bpPtr)
3027
3031
  {
3028
- const BYTE* const in = (const BYTE* const)src;
3032
+ const BYTE* const in = (const BYTE*)src;
3029
3033
  U32 cSize;
3030
3034
 
3031
3035
  if (srcSize < ZSTDv06_blockHeaderSize) return ERROR(srcSize_wrong);
@@ -3219,7 +3223,7 @@ static size_t ZSTDv06_decodeSeqHeaders(int* nbSeqPtr,
3219
3223
  FSEv06_DTable* DTableLL, FSEv06_DTable* DTableML, FSEv06_DTable* DTableOffb, U32 flagRepeatTable,
3220
3224
  const void* src, size_t srcSize)
3221
3225
  {
3222
- const BYTE* const istart = (const BYTE* const)src;
3226
+ const BYTE* const istart = (const BYTE*)src;
3223
3227
  const BYTE* const iend = istart + srcSize;
3224
3228
  const BYTE* ip = istart;
3225
3229
 
@@ -3441,7 +3445,7 @@ static size_t ZSTDv06_decompressSequences(
3441
3445
  {
3442
3446
  const BYTE* ip = (const BYTE*)seqStart;
3443
3447
  const BYTE* const iend = ip + seqSize;
3444
- BYTE* const ostart = (BYTE* const)dst;
3448
+ BYTE* const ostart = (BYTE*)dst;
3445
3449
  BYTE* const oend = ostart + maxDstSize;
3446
3450
  BYTE* op = ostart;
3447
3451
  const BYTE* litPtr = dctx->litPtr;
@@ -3557,7 +3561,7 @@ static size_t ZSTDv06_decompressFrame(ZSTDv06_DCtx* dctx,
3557
3561
  {
3558
3562
  const BYTE* ip = (const BYTE*)src;
3559
3563
  const BYTE* const iend = ip + srcSize;
3560
- BYTE* const ostart = (BYTE* const)dst;
3564
+ BYTE* const ostart = (BYTE*)dst;
3561
3565
  BYTE* op = ostart;
3562
3566
  BYTE* const oend = ostart + dstCapacity;
3563
3567
  size_t remainingSize = srcSize;
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
2
+ * Copyright (c) 2016-2021, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
5
  * This source code is licensed under both the BSD-style license (found in the
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
2
+ * Copyright (c) 2016-2021, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
5
  * This source code is licensed under both the BSD-style license (found in the
@@ -242,7 +242,11 @@ extern "C" {
242
242
  * Basic Types
243
243
  *****************************************************************/
244
244
  #if !defined (__VMS) && (defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) )
245
- # include <stdint.h>
245
+ # if defined(_AIX)
246
+ # include <inttypes.h>
247
+ # else
248
+ # include <stdint.h> /* intptr_t */
249
+ # endif
246
250
  typedef uint8_t BYTE;
247
251
  typedef uint16_t U16;
248
252
  typedef int16_t S16;
@@ -3254,7 +3258,7 @@ typedef struct
3254
3258
  * Provides the size of compressed block from block header `src` */
3255
3259
  static size_t ZSTDv07_getcBlockSize(const void* src, size_t srcSize, blockProperties_t* bpPtr)
3256
3260
  {
3257
- const BYTE* const in = (const BYTE* const)src;
3261
+ const BYTE* const in = (const BYTE*)src;
3258
3262
  U32 cSize;
3259
3263
 
3260
3264
  if (srcSize < ZSTDv07_blockHeaderSize) return ERROR(srcSize_wrong);
@@ -3449,7 +3453,7 @@ static size_t ZSTDv07_decodeSeqHeaders(int* nbSeqPtr,
3449
3453
  FSEv07_DTable* DTableLL, FSEv07_DTable* DTableML, FSEv07_DTable* DTableOffb, U32 flagRepeatTable,
3450
3454
  const void* src, size_t srcSize)
3451
3455
  {
3452
- const BYTE* const istart = (const BYTE* const)src;
3456
+ const BYTE* const istart = (const BYTE*)src;
3453
3457
  const BYTE* const iend = istart + srcSize;
3454
3458
  const BYTE* ip = istart;
3455
3459
 
@@ -3668,7 +3672,7 @@ static size_t ZSTDv07_decompressSequences(
3668
3672
  {
3669
3673
  const BYTE* ip = (const BYTE*)seqStart;
3670
3674
  const BYTE* const iend = ip + seqSize;
3671
- BYTE* const ostart = (BYTE* const)dst;
3675
+ BYTE* const ostart = (BYTE*)dst;
3672
3676
  BYTE* const oend = ostart + maxDstSize;
3673
3677
  BYTE* op = ostart;
3674
3678
  const BYTE* litPtr = dctx->litPtr;
@@ -3795,7 +3799,7 @@ static size_t ZSTDv07_decompressFrame(ZSTDv07_DCtx* dctx,
3795
3799
  {
3796
3800
  const BYTE* ip = (const BYTE*)src;
3797
3801
  const BYTE* const iend = ip + srcSize;
3798
- BYTE* const ostart = (BYTE* const)dst;
3802
+ BYTE* const ostart = (BYTE*)dst;
3799
3803
  BYTE* const oend = ostart + dstCapacity;
3800
3804
  BYTE* op = ostart;
3801
3805
  size_t remainingSize = srcSize;
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
2
+ * Copyright (c) 2016-2021, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
5
  * This source code is licensed under both the BSD-style license (found in the
@@ -3,9 +3,9 @@
3
3
  # BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
4
4
 
5
5
  prefix=@PREFIX@
6
- exec_prefix=${prefix}
7
- includedir=${prefix}/@INCLUDEDIR@
8
- libdir=${exec_prefix}/@LIBDIR@
6
+ exec_prefix=@EXEC_PREFIX@
7
+ includedir=@INCLUDEDIR@
8
+ libdir=@LIBDIR@
9
9
 
10
10
  Name: zstd
11
11
  Description: fast lossless compression algorithm library
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
2
+ * Copyright (c) 2016-2021, Yann Collet, Facebook, Inc.
3
3
  * All rights reserved.
4
4
  *
5
5
  * This source code is licensed under both the BSD-style license (found in the
@@ -72,16 +72,21 @@ extern "C" {
72
72
  /*------ Version ------*/
73
73
  #define ZSTD_VERSION_MAJOR 1
74
74
  #define ZSTD_VERSION_MINOR 4
75
- #define ZSTD_VERSION_RELEASE 5
76
-
75
+ #define ZSTD_VERSION_RELEASE 9
77
76
  #define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
78
- ZSTDLIB_API unsigned ZSTD_versionNumber(void); /**< to check runtime library version */
77
+
78
+ /*! ZSTD_versionNumber() :
79
+ * Return runtime library version, the value is (MAJOR*100*100 + MINOR*100 + RELEASE). */
80
+ ZSTDLIB_API unsigned ZSTD_versionNumber(void);
79
81
 
80
82
  #define ZSTD_LIB_VERSION ZSTD_VERSION_MAJOR.ZSTD_VERSION_MINOR.ZSTD_VERSION_RELEASE
81
83
  #define ZSTD_QUOTE(str) #str
82
84
  #define ZSTD_EXPAND_AND_QUOTE(str) ZSTD_QUOTE(str)
83
85
  #define ZSTD_VERSION_STRING ZSTD_EXPAND_AND_QUOTE(ZSTD_LIB_VERSION)
84
- ZSTDLIB_API const char* ZSTD_versionString(void); /* requires v1.3.0+ */
86
+
87
+ /*! ZSTD_versionString() :
88
+ * Return runtime library version, like "1.4.5". Requires v1.3.0+. */
89
+ ZSTDLIB_API const char* ZSTD_versionString(void);
85
90
 
86
91
  /* *************************************
87
92
  * Default constant
@@ -334,7 +339,9 @@ typedef enum {
334
339
  * for large inputs, by finding large matches at long distance.
335
340
  * It increases memory usage and window size.
336
341
  * Note: enabling this parameter increases default ZSTD_c_windowLog to 128 MB
337
- * except when expressly set to a different value. */
342
+ * except when expressly set to a different value.
343
+ * Note: will be enabled by default if ZSTD_c_windowLog >= 128 MB and
344
+ * compression strategy >= ZSTD_btopt (== compression level 16+) */
338
345
  ZSTD_c_ldmHashLog=161, /* Size of the table for long distance matching, as a power of 2.
339
346
  * Larger values increase memory usage and compression ratio,
340
347
  * but decrease compression speed.
@@ -365,16 +372,20 @@ typedef enum {
365
372
  ZSTD_c_dictIDFlag=202, /* When applicable, dictionary's ID is written into frame header (default:1) */
366
373
 
367
374
  /* multi-threading parameters */
368
- /* These parameters are only useful if multi-threading is enabled (compiled with build macro ZSTD_MULTITHREAD).
369
- * They return an error otherwise. */
375
+ /* These parameters are only active if multi-threading is enabled (compiled with build macro ZSTD_MULTITHREAD).
376
+ * Otherwise, trying to set any other value than default (0) will be a no-op and return an error.
377
+ * In a situation where it's unknown if the linked library supports multi-threading or not,
378
+ * setting ZSTD_c_nbWorkers to any value >= 1 and consulting the return value provides a quick way to check this property.
379
+ */
370
380
  ZSTD_c_nbWorkers=400, /* Select how many threads will be spawned to compress in parallel.
371
- * When nbWorkers >= 1, triggers asynchronous mode when used with ZSTD_compressStream*() :
381
+ * When nbWorkers >= 1, triggers asynchronous mode when invoking ZSTD_compressStream*() :
372
382
  * ZSTD_compressStream*() consumes input and flush output if possible, but immediately gives back control to caller,
373
- * while compression work is performed in parallel, within worker threads.
383
+ * while compression is performed in parallel, within worker thread(s).
374
384
  * (note : a strong exception to this rule is when first invocation of ZSTD_compressStream2() sets ZSTD_e_end :
375
385
  * in which case, ZSTD_compressStream2() delegates to ZSTD_compress2(), which is always a blocking call).
376
386
  * More workers improve speed, but also increase memory usage.
377
- * Default value is `0`, aka "single-threaded mode" : no worker is spawned, compression is performed inside Caller's thread, all invocations are blocking */
387
+ * Default value is `0`, aka "single-threaded mode" : no worker is spawned,
388
+ * compression is performed inside Caller's thread, and all invocations are blocking */
378
389
  ZSTD_c_jobSize=401, /* Size of a compression job. This value is enforced only when nbWorkers >= 1.
379
390
  * Each compression job is completed in parallel, so this value can indirectly impact the nb of active threads.
380
391
  * 0 means default, which is dynamically determined based on compression parameters.
@@ -403,6 +414,11 @@ typedef enum {
403
414
  * ZSTD_c_literalCompressionMode
404
415
  * ZSTD_c_targetCBlockSize
405
416
  * ZSTD_c_srcSizeHint
417
+ * ZSTD_c_enableDedicatedDictSearch
418
+ * ZSTD_c_stableInBuffer
419
+ * ZSTD_c_stableOutBuffer
420
+ * ZSTD_c_blockDelimiters
421
+ * ZSTD_c_validateSequences
406
422
  * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
407
423
  * note : never ever use experimentalParam? names directly;
408
424
  * also, the enums values themselves are unstable and can still change.
@@ -413,7 +429,12 @@ typedef enum {
413
429
  ZSTD_c_experimentalParam4=1001,
414
430
  ZSTD_c_experimentalParam5=1002,
415
431
  ZSTD_c_experimentalParam6=1003,
416
- ZSTD_c_experimentalParam7=1004
432
+ ZSTD_c_experimentalParam7=1004,
433
+ ZSTD_c_experimentalParam8=1005,
434
+ ZSTD_c_experimentalParam9=1006,
435
+ ZSTD_c_experimentalParam10=1007,
436
+ ZSTD_c_experimentalParam11=1008,
437
+ ZSTD_c_experimentalParam12=1009
417
438
  } ZSTD_cParameter;
418
439
 
419
440
  typedef struct {
@@ -524,11 +545,15 @@ typedef enum {
524
545
  * At the time of this writing, they include :
525
546
  * ZSTD_d_format
526
547
  * ZSTD_d_stableOutBuffer
548
+ * ZSTD_d_forceIgnoreChecksum
549
+ * ZSTD_d_refMultipleDDicts
527
550
  * Because they are not stable, it's necessary to define ZSTD_STATIC_LINKING_ONLY to access them.
528
551
  * note : never ever use experimentalParam? names directly
529
552
  */
530
553
  ZSTD_d_experimentalParam1=1000,
531
- ZSTD_d_experimentalParam2=1001
554
+ ZSTD_d_experimentalParam2=1001,
555
+ ZSTD_d_experimentalParam3=1002,
556
+ ZSTD_d_experimentalParam4=1003
532
557
 
533
558
  } ZSTD_dParameter;
534
559
 
@@ -664,8 +689,9 @@ typedef enum {
664
689
  * - Compression parameters cannot be changed once compression is started (save a list of exceptions in multi-threading mode)
665
690
  * - output->pos must be <= dstCapacity, input->pos must be <= srcSize
666
691
  * - output->pos and input->pos will be updated. They are guaranteed to remain below their respective limit.
692
+ * - endOp must be a valid directive
667
693
  * - When nbWorkers==0 (default), function is blocking : it completes its job before returning to caller.
668
- * - When nbWorkers>=1, function is non-blocking : it just acquires a copy of input, and distributes jobs to internal worker threads, flush whatever is available,
694
+ * - When nbWorkers>=1, function is non-blocking : it copies a portion of input, distributes jobs to internal worker threads, flush to output whatever is available,
669
695
  * and then immediately returns, just indicating that there is some data remaining to be flushed.
670
696
  * The function nonetheless guarantees forward progress : it will return only after it reads or write at least 1+ byte.
671
697
  * - Exception : if the first call requests a ZSTD_e_end directive and provides enough dstCapacity, the function delegates to ZSTD_compress2() which is always blocking.
@@ -924,7 +950,7 @@ ZSTDLIB_API size_t ZSTD_CCtx_loadDictionary(ZSTD_CCtx* cctx, const void* dict, s
924
950
  * Reference a prepared dictionary, to be used for all next compressed frames.
925
951
  * Note that compression parameters are enforced from within CDict,
926
952
  * and supersede any compression parameter previously set within CCtx.
927
- * The parameters ignored are labled as "superseded-by-cdict" in the ZSTD_cParameter enum docs.
953
+ * The parameters ignored are labelled as "superseded-by-cdict" in the ZSTD_cParameter enum docs.
928
954
  * The ignored parameters will be used again if the CCtx is returned to no-dictionary mode.
929
955
  * The dictionary will remain valid for future compressed frames using same CCtx.
930
956
  * @result : 0, or an error code (which can be tested with ZSTD_isError()).
@@ -975,6 +1001,13 @@ ZSTDLIB_API size_t ZSTD_DCtx_loadDictionary(ZSTD_DCtx* dctx, const void* dict, s
975
1001
  /*! ZSTD_DCtx_refDDict() :
976
1002
  * Reference a prepared dictionary, to be used to decompress next frames.
977
1003
  * The dictionary remains active for decompression of future frames using same DCtx.
1004
+ *
1005
+ * If called with ZSTD_d_refMultipleDDicts enabled, repeated calls of this function
1006
+ * will store the DDict references in a table, and the DDict used for decompression
1007
+ * will be determined at decompression time, as per the dict ID in the frame.
1008
+ * The memory for the table is allocated on the first call to refDDict, and can be
1009
+ * freed with ZSTD_freeDCtx().
1010
+ *
978
1011
  * @result : 0, or an error code (which can be tested with ZSTD_isError()).
979
1012
  * Note 1 : Currently, only one dictionary can be managed.
980
1013
  * Referencing a new dictionary effectively "discards" any previous one.
@@ -1100,21 +1133,40 @@ ZSTDLIB_API size_t ZSTD_sizeof_DDict(const ZSTD_DDict* ddict);
1100
1133
  typedef struct ZSTD_CCtx_params_s ZSTD_CCtx_params;
1101
1134
 
1102
1135
  typedef struct {
1103
- unsigned int matchPos; /* Match pos in dst */
1104
- /* If seqDef.offset > 3, then this is seqDef.offset - 3
1105
- * If seqDef.offset < 3, then this is the corresponding repeat offset
1106
- * But if seqDef.offset < 3 and litLength == 0, this is the
1107
- * repeat offset before the corresponding repeat offset
1108
- * And if seqDef.offset == 3 and litLength == 0, this is the
1109
- * most recent repeat offset - 1
1110
- */
1111
- unsigned int offset;
1112
- unsigned int litLength; /* Literal length */
1113
- unsigned int matchLength; /* Match length */
1114
- /* 0 when seq not rep and seqDef.offset otherwise
1115
- * when litLength == 0 this will be <= 4, otherwise <= 3 like normal
1116
- */
1117
- unsigned int rep;
1136
+ unsigned int offset; /* The offset of the match. (NOT the same as the offset code)
1137
+ * If offset == 0 and matchLength == 0, this sequence represents the last
1138
+ * literals in the block of litLength size.
1139
+ */
1140
+
1141
+ unsigned int litLength; /* Literal length of the sequence. */
1142
+ unsigned int matchLength; /* Match length of the sequence. */
1143
+
1144
+ /* Note: Users of this API may provide a sequence with matchLength == litLength == offset == 0.
1145
+ * In this case, we will treat the sequence as a marker for a block boundary.
1146
+ */
1147
+
1148
+ unsigned int rep; /* Represents which repeat offset is represented by the field 'offset'.
1149
+ * Ranges from [0, 3].
1150
+ *
1151
+ * Repeat offsets are essentially previous offsets from previous sequences sorted in
1152
+ * recency order. For more detail, see doc/zstd_compression_format.md
1153
+ *
1154
+ * If rep == 0, then 'offset' does not contain a repeat offset.
1155
+ * If rep > 0:
1156
+ * If litLength != 0:
1157
+ * rep == 1 --> offset == repeat_offset_1
1158
+ * rep == 2 --> offset == repeat_offset_2
1159
+ * rep == 3 --> offset == repeat_offset_3
1160
+ * If litLength == 0:
1161
+ * rep == 1 --> offset == repeat_offset_2
1162
+ * rep == 2 --> offset == repeat_offset_3
1163
+ * rep == 3 --> offset == repeat_offset_1 - 1
1164
+ *
1165
+ * Note: This field is optional. ZSTD_generateSequences() will calculate the value of
1166
+ * 'rep', but repeat offsets do not necessarily need to be calculated from an external
1167
+ * sequence provider's perspective. For example, ZSTD_compressSequences() does not
1168
+ * use this 'rep' field at all (as of now).
1169
+ */
1118
1170
  } ZSTD_Sequence;
1119
1171
 
1120
1172
  typedef struct {
@@ -1156,6 +1208,18 @@ typedef enum {
1156
1208
  * Decoder cannot recognise automatically this format, requiring this instruction. */
1157
1209
  } ZSTD_format_e;
1158
1210
 
1211
+ typedef enum {
1212
+ /* Note: this enum controls ZSTD_d_forceIgnoreChecksum */
1213
+ ZSTD_d_validateChecksum = 0,
1214
+ ZSTD_d_ignoreChecksum = 1
1215
+ } ZSTD_forceIgnoreChecksum_e;
1216
+
1217
+ typedef enum {
1218
+ /* Note: this enum controls ZSTD_d_refMultipleDDicts */
1219
+ ZSTD_rmd_refSingleDDict = 0,
1220
+ ZSTD_rmd_refMultipleDDicts = 1
1221
+ } ZSTD_refMultipleDDicts_e;
1222
+
1159
1223
  typedef enum {
1160
1224
  /* Note: this enum and the behavior it controls are effectively internal
1161
1225
  * implementation details of the compressor. They are expected to continue
@@ -1237,7 +1301,7 @@ ZSTDLIB_API unsigned long long ZSTD_findDecompressedSize(const void* src, size_t
1237
1301
  * `srcSize` must be the _exact_ size of this series
1238
1302
  * (i.e. there should be a frame boundary at `src + srcSize`)
1239
1303
  * @return : - upper-bound for the decompressed size of all data in all successive frames
1240
- * - if an error occured: ZSTD_CONTENTSIZE_ERROR
1304
+ * - if an error occurred: ZSTD_CONTENTSIZE_ERROR
1241
1305
  *
1242
1306
  * note 1 : an error can occur if `src` contains an invalid or incorrectly formatted frame.
1243
1307
  * note 2 : the upper-bound is exact when the decompressed size field is available in every ZSTD encoded frame of `src`.
@@ -1253,14 +1317,91 @@ ZSTDLIB_API unsigned long long ZSTD_decompressBound(const void* src, size_t srcS
1253
1317
  * or an error code (if srcSize is too small) */
1254
1318
  ZSTDLIB_API size_t ZSTD_frameHeaderSize(const void* src, size_t srcSize);
1255
1319
 
1256
- /*! ZSTD_getSequences() :
1257
- * Extract sequences from the sequence store
1320
+ typedef enum {
1321
+ ZSTD_sf_noBlockDelimiters = 0, /* Representation of ZSTD_Sequence has no block delimiters, sequences only */
1322
+ ZSTD_sf_explicitBlockDelimiters = 1 /* Representation of ZSTD_Sequence contains explicit block delimiters */
1323
+ } ZSTD_sequenceFormat_e;
1324
+
1325
+ /*! ZSTD_generateSequences() :
1326
+ * Generate sequences using ZSTD_compress2, given a source buffer.
1327
+ *
1328
+ * Each block will end with a dummy sequence
1329
+ * with offset == 0, matchLength == 0, and litLength == length of last literals.
1330
+ * litLength may be == 0, and if so, then the sequence of (of: 0 ml: 0 ll: 0)
1331
+ * simply acts as a block delimiter.
1332
+ *
1258
1333
  * zc can be used to insert custom compression params.
1259
1334
  * This function invokes ZSTD_compress2
1260
- * @return : number of sequences extracted
1335
+ *
1336
+ * The output of this function can be fed into ZSTD_compressSequences() with CCtx
1337
+ * setting of ZSTD_c_blockDelimiters as ZSTD_sf_explicitBlockDelimiters
1338
+ * @return : number of sequences generated
1339
+ */
1340
+
1341
+ ZSTDLIB_API size_t ZSTD_generateSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
1342
+ size_t outSeqsSize, const void* src, size_t srcSize);
1343
+
1344
+ /*! ZSTD_mergeBlockDelimiters() :
1345
+ * Given an array of ZSTD_Sequence, remove all sequences that represent block delimiters/last literals
1346
+ * by merging them into into the literals of the next sequence.
1347
+ *
1348
+ * As such, the final generated result has no explicit representation of block boundaries,
1349
+ * and the final last literals segment is not represented in the sequences.
1350
+ *
1351
+ * The output of this function can be fed into ZSTD_compressSequences() with CCtx
1352
+ * setting of ZSTD_c_blockDelimiters as ZSTD_sf_noBlockDelimiters
1353
+ * @return : number of sequences left after merging
1354
+ */
1355
+ ZSTDLIB_API size_t ZSTD_mergeBlockDelimiters(ZSTD_Sequence* sequences, size_t seqsSize);
1356
+
1357
+ /*! ZSTD_compressSequences() :
1358
+ * Compress an array of ZSTD_Sequence, generated from the original source buffer, into dst.
1359
+ * If a dictionary is included, then the cctx should reference the dict. (see: ZSTD_CCtx_refCDict(), ZSTD_CCtx_loadDictionary(), etc.)
1360
+ * The entire source is compressed into a single frame.
1361
+ *
1362
+ * The compression behavior changes based on cctx params. In particular:
1363
+ * If ZSTD_c_blockDelimiters == ZSTD_sf_noBlockDelimiters, the array of ZSTD_Sequence is expected to contain
1364
+ * no block delimiters (defined in ZSTD_Sequence). Block boundaries are roughly determined based on
1365
+ * the block size derived from the cctx, and sequences may be split. This is the default setting.
1366
+ *
1367
+ * If ZSTD_c_blockDelimiters == ZSTD_sf_explicitBlockDelimiters, the array of ZSTD_Sequence is expected to contain
1368
+ * block delimiters (defined in ZSTD_Sequence). Behavior is undefined if no block delimiters are provided.
1369
+ *
1370
+ * If ZSTD_c_validateSequences == 0, this function will blindly accept the sequences provided. Invalid sequences cause undefined
1371
+ * behavior. If ZSTD_c_validateSequences == 1, then if sequence is invalid (see doc/zstd_compression_format.md for
1372
+ * specifics regarding offset/matchlength requirements) then the function will bail out and return an error.
1373
+ *
1374
+ * In addition to the two adjustable experimental params, there are other important cctx params.
1375
+ * - 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.
1376
+ * - ZSTD_c_compressionLevel accordingly adjusts the strength of the entropy coder, as it would in typical compression.
1377
+ * - ZSTD_c_windowLog affects offset validation: this function will return an error at higher debug levels if a provided offset
1378
+ * is larger than what the spec allows for a given window log and dictionary (if present). See: doc/zstd_compression_format.md
1379
+ *
1380
+ * Note: Repcodes are, as of now, always re-calculated within this function, so ZSTD_Sequence::rep is unused.
1381
+ * Note 2: Once we integrate ability to ingest repcodes, the explicit block delims mode must respect those repcodes exactly,
1382
+ * and cannot emit an RLE block that disagrees with the repcode history
1383
+ * @return : final compressed size or a ZSTD error.
1261
1384
  */
1262
- ZSTDLIB_API size_t ZSTD_getSequences(ZSTD_CCtx* zc, ZSTD_Sequence* outSeqs,
1263
- size_t outSeqsSize, const void* src, size_t srcSize);
1385
+ ZSTDLIB_API size_t ZSTD_compressSequences(ZSTD_CCtx* const cctx, void* dst, size_t dstSize,
1386
+ const ZSTD_Sequence* inSeqs, size_t inSeqsSize,
1387
+ const void* src, size_t srcSize);
1388
+
1389
+
1390
+ /*! ZSTD_writeSkippableFrame() :
1391
+ * Generates a zstd skippable frame containing data given by src, and writes it to dst buffer.
1392
+ *
1393
+ * Skippable frames begin with a a 4-byte magic number. There are 16 possible choices of magic number,
1394
+ * ranging from ZSTD_MAGIC_SKIPPABLE_START to ZSTD_MAGIC_SKIPPABLE_START+15.
1395
+ * As such, the parameter magicVariant controls the exact skippable frame magic number variant used, so
1396
+ * the magic number used will be ZSTD_MAGIC_SKIPPABLE_START + magicVariant.
1397
+ *
1398
+ * Returns an error if destination buffer is not large enough, if the source size is not representable
1399
+ * with a 4-byte unsigned int, or if the parameter magicVariant is greater than 15 (and therefore invalid).
1400
+ *
1401
+ * @return : number of bytes written or a ZSTD error.
1402
+ */
1403
+ ZSTDLIB_API size_t ZSTD_writeSkippableFrame(void* dst, size_t dstCapacity,
1404
+ const void* src, size_t srcSize, unsigned magicVariant);
1264
1405
 
1265
1406
 
1266
1407
  /***************************************
@@ -1372,7 +1513,11 @@ ZSTDLIB_API const ZSTD_DDict* ZSTD_initStaticDDict(
1372
1513
  typedef void* (*ZSTD_allocFunction) (void* opaque, size_t size);
1373
1514
  typedef void (*ZSTD_freeFunction) (void* opaque, void* address);
1374
1515
  typedef struct { ZSTD_allocFunction customAlloc; ZSTD_freeFunction customFree; void* opaque; } ZSTD_customMem;
1375
- static ZSTD_customMem const ZSTD_defaultCMem = { NULL, NULL, NULL }; /**< this constant defers to stdlib's functions */
1516
+ static
1517
+ #ifdef __GNUC__
1518
+ __attribute__((__unused__))
1519
+ #endif
1520
+ ZSTD_customMem const ZSTD_defaultCMem = { NULL, NULL, NULL }; /**< this constant defers to stdlib's functions */
1376
1521
 
1377
1522
  ZSTDLIB_API ZSTD_CCtx* ZSTD_createCCtx_advanced(ZSTD_customMem customMem);
1378
1523
  ZSTDLIB_API ZSTD_CStream* ZSTD_createCStream_advanced(ZSTD_customMem customMem);
@@ -1385,11 +1530,37 @@ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced(const void* dict, size_t dictS
1385
1530
  ZSTD_compressionParameters cParams,
1386
1531
  ZSTD_customMem customMem);
1387
1532
 
1388
- ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictSize,
1389
- ZSTD_dictLoadMethod_e dictLoadMethod,
1390
- ZSTD_dictContentType_e dictContentType,
1391
- ZSTD_customMem customMem);
1533
+ /* ! Thread pool :
1534
+ * These prototypes make it possible to share a thread pool among multiple compression contexts.
1535
+ * This can limit resources for applications with multiple threads where each one uses
1536
+ * a threaded compression mode (via ZSTD_c_nbWorkers parameter).
1537
+ * ZSTD_createThreadPool creates a new thread pool with a given number of threads.
1538
+ * Note that the lifetime of such pool must exist while being used.
1539
+ * ZSTD_CCtx_refThreadPool assigns a thread pool to a context (use NULL argument value
1540
+ * to use an internal thread pool).
1541
+ * ZSTD_freeThreadPool frees a thread pool.
1542
+ */
1543
+ typedef struct POOL_ctx_s ZSTD_threadPool;
1544
+ ZSTDLIB_API ZSTD_threadPool* ZSTD_createThreadPool(size_t numThreads);
1545
+ ZSTDLIB_API void ZSTD_freeThreadPool (ZSTD_threadPool* pool);
1546
+ ZSTDLIB_API size_t ZSTD_CCtx_refThreadPool(ZSTD_CCtx* cctx, ZSTD_threadPool* pool);
1547
+
1548
+
1549
+ /*
1550
+ * This API is temporary and is expected to change or disappear in the future!
1551
+ */
1552
+ ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_advanced2(
1553
+ const void* dict, size_t dictSize,
1554
+ ZSTD_dictLoadMethod_e dictLoadMethod,
1555
+ ZSTD_dictContentType_e dictContentType,
1556
+ const ZSTD_CCtx_params* cctxParams,
1557
+ ZSTD_customMem customMem);
1392
1558
 
1559
+ ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(
1560
+ const void* dict, size_t dictSize,
1561
+ ZSTD_dictLoadMethod_e dictLoadMethod,
1562
+ ZSTD_dictContentType_e dictContentType,
1563
+ ZSTD_customMem customMem);
1393
1564
 
1394
1565
 
1395
1566
  /***************************************
@@ -1404,6 +1575,12 @@ ZSTDLIB_API ZSTD_DDict* ZSTD_createDDict_advanced(const void* dict, size_t dictS
1404
1575
  * note: equivalent to ZSTD_createCDict_advanced(), with dictLoadMethod==ZSTD_dlm_byRef */
1405
1576
  ZSTDLIB_API ZSTD_CDict* ZSTD_createCDict_byReference(const void* dictBuffer, size_t dictSize, int compressionLevel);
1406
1577
 
1578
+ /*! ZSTD_getDictID_fromCDict() :
1579
+ * Provides the dictID of the dictionary loaded into `cdict`.
1580
+ * If @return == 0, the dictionary is not conformant to Zstandard specification, or empty.
1581
+ * Non-conformant dictionaries can still be loaded, but as content-only dictionaries. */
1582
+ ZSTDLIB_API unsigned ZSTD_getDictID_fromCDict(const ZSTD_CDict* cdict);
1583
+
1407
1584
  /*! ZSTD_getCParams() :
1408
1585
  * @return ZSTD_compressionParameters structure for a selected compression level and estimated srcSize.
1409
1586
  * `estimatedSrcSize` value is optional, select 0 if not known */
@@ -1518,12 +1695,149 @@ ZSTDLIB_API size_t ZSTD_CCtx_refPrefix_advanced(ZSTD_CCtx* cctx, const void* pre
1518
1695
  * but compression ratio may regress significantly if guess considerably underestimates */
1519
1696
  #define ZSTD_c_srcSizeHint ZSTD_c_experimentalParam7
1520
1697
 
1698
+ /* Controls whether the new and experimental "dedicated dictionary search
1699
+ * structure" can be used. This feature is still rough around the edges, be
1700
+ * prepared for surprising behavior!
1701
+ *
1702
+ * How to use it:
1703
+ *
1704
+ * When using a CDict, whether to use this feature or not is controlled at
1705
+ * CDict creation, and it must be set in a CCtxParams set passed into that
1706
+ * construction (via ZSTD_createCDict_advanced2()). A compression will then
1707
+ * use the feature or not based on how the CDict was constructed; the value of
1708
+ * this param, set in the CCtx, will have no effect.
1709
+ *
1710
+ * However, when a dictionary buffer is passed into a CCtx, such as via
1711
+ * ZSTD_CCtx_loadDictionary(), this param can be set on the CCtx to control
1712
+ * whether the CDict that is created internally can use the feature or not.
1713
+ *
1714
+ * What it does:
1715
+ *
1716
+ * Normally, the internal data structures of the CDict are analogous to what
1717
+ * would be stored in a CCtx after compressing the contents of a dictionary.
1718
+ * To an approximation, a compression using a dictionary can then use those
1719
+ * data structures to simply continue what is effectively a streaming
1720
+ * compression where the simulated compression of the dictionary left off.
1721
+ * Which is to say, the search structures in the CDict are normally the same
1722
+ * format as in the CCtx.
1723
+ *
1724
+ * It is possible to do better, since the CDict is not like a CCtx: the search
1725
+ * structures are written once during CDict creation, and then are only read
1726
+ * after that, while the search structures in the CCtx are both read and
1727
+ * written as the compression goes along. This means we can choose a search
1728
+ * structure for the dictionary that is read-optimized.
1729
+ *
1730
+ * This feature enables the use of that different structure.
1731
+ *
1732
+ * Note that some of the members of the ZSTD_compressionParameters struct have
1733
+ * different semantics and constraints in the dedicated search structure. It is
1734
+ * highly recommended that you simply set a compression level in the CCtxParams
1735
+ * you pass into the CDict creation call, and avoid messing with the cParams
1736
+ * directly.
1737
+ *
1738
+ * Effects:
1739
+ *
1740
+ * This will only have any effect when the selected ZSTD_strategy
1741
+ * implementation supports this feature. Currently, that's limited to
1742
+ * ZSTD_greedy, ZSTD_lazy, and ZSTD_lazy2.
1743
+ *
1744
+ * Note that this means that the CDict tables can no longer be copied into the
1745
+ * CCtx, so the dict attachment mode ZSTD_dictForceCopy will no longer be
1746
+ * useable. The dictionary can only be attached or reloaded.
1747
+ *
1748
+ * In general, you should expect compression to be faster--sometimes very much
1749
+ * so--and CDict creation to be slightly slower. Eventually, we will probably
1750
+ * make this mode the default.
1751
+ */
1752
+ #define ZSTD_c_enableDedicatedDictSearch ZSTD_c_experimentalParam8
1753
+
1754
+ /* ZSTD_c_stableInBuffer
1755
+ * Experimental parameter.
1756
+ * Default is 0 == disabled. Set to 1 to enable.
1757
+ *
1758
+ * Tells the compressor that the ZSTD_inBuffer will ALWAYS be the same
1759
+ * between calls, except for the modifications that zstd makes to pos (the
1760
+ * caller must not modify pos). This is checked by the compressor, and
1761
+ * compression will fail if it ever changes. This means the only flush
1762
+ * mode that makes sense is ZSTD_e_end, so zstd will error if ZSTD_e_end
1763
+ * is not used. The data in the ZSTD_inBuffer in the range [src, src + pos)
1764
+ * MUST not be modified during compression or you will get data corruption.
1765
+ *
1766
+ * When this flag is enabled zstd won't allocate an input window buffer,
1767
+ * because the user guarantees it can reference the ZSTD_inBuffer until
1768
+ * the frame is complete. But, it will still allocate an output buffer
1769
+ * large enough to fit a block (see ZSTD_c_stableOutBuffer). This will also
1770
+ * avoid the memcpy() from the input buffer to the input window buffer.
1771
+ *
1772
+ * NOTE: ZSTD_compressStream2() will error if ZSTD_e_end is not used.
1773
+ * That means this flag cannot be used with ZSTD_compressStream().
1774
+ *
1775
+ * NOTE: So long as the ZSTD_inBuffer always points to valid memory, using
1776
+ * this flag is ALWAYS memory safe, and will never access out-of-bounds
1777
+ * memory. However, compression WILL fail if you violate the preconditions.
1778
+ *
1779
+ * WARNING: The data in the ZSTD_inBuffer in the range [dst, dst + pos) MUST
1780
+ * not be modified during compression or you will get data corruption. This
1781
+ * is because zstd needs to reference data in the ZSTD_inBuffer to find
1782
+ * matches. Normally zstd maintains its own window buffer for this purpose,
1783
+ * but passing this flag tells zstd to use the user provided buffer.
1784
+ */
1785
+ #define ZSTD_c_stableInBuffer ZSTD_c_experimentalParam9
1786
+
1787
+ /* ZSTD_c_stableOutBuffer
1788
+ * Experimental parameter.
1789
+ * Default is 0 == disabled. Set to 1 to enable.
1790
+ *
1791
+ * Tells he compressor that the ZSTD_outBuffer will not be resized between
1792
+ * calls. Specifically: (out.size - out.pos) will never grow. This gives the
1793
+ * compressor the freedom to say: If the compressed data doesn't fit in the
1794
+ * output buffer then return ZSTD_error_dstSizeTooSmall. This allows us to
1795
+ * always decompress directly into the output buffer, instead of decompressing
1796
+ * into an internal buffer and copying to the output buffer.
1797
+ *
1798
+ * When this flag is enabled zstd won't allocate an output buffer, because
1799
+ * it can write directly to the ZSTD_outBuffer. It will still allocate the
1800
+ * input window buffer (see ZSTD_c_stableInBuffer).
1801
+ *
1802
+ * Zstd will check that (out.size - out.pos) never grows and return an error
1803
+ * if it does. While not strictly necessary, this should prevent surprises.
1804
+ */
1805
+ #define ZSTD_c_stableOutBuffer ZSTD_c_experimentalParam10
1806
+
1807
+ /* ZSTD_c_blockDelimiters
1808
+ * Default is 0 == ZSTD_sf_noBlockDelimiters.
1809
+ *
1810
+ * For use with sequence compression API: ZSTD_compressSequences().
1811
+ *
1812
+ * Designates whether or not the given array of ZSTD_Sequence contains block delimiters
1813
+ * and last literals, which are defined as sequences with offset == 0 and matchLength == 0.
1814
+ * See the definition of ZSTD_Sequence for more specifics.
1815
+ */
1816
+ #define ZSTD_c_blockDelimiters ZSTD_c_experimentalParam11
1817
+
1818
+ /* ZSTD_c_validateSequences
1819
+ * Default is 0 == disabled. Set to 1 to enable sequence validation.
1820
+ *
1821
+ * For use with sequence compression API: ZSTD_compressSequences().
1822
+ * Designates whether or not we validate sequences provided to ZSTD_compressSequences()
1823
+ * during function execution.
1824
+ *
1825
+ * Without validation, providing a sequence that does not conform to the zstd spec will cause
1826
+ * undefined behavior, and may produce a corrupted block.
1827
+ *
1828
+ * With validation enabled, a if sequence is invalid (see doc/zstd_compression_format.md for
1829
+ * specifics regarding offset/matchlength requirements) then the function will bail out and
1830
+ * return an error.
1831
+ *
1832
+ */
1833
+ #define ZSTD_c_validateSequences ZSTD_c_experimentalParam12
1834
+
1521
1835
  /*! ZSTD_CCtx_getParameter() :
1522
1836
  * Get the requested compression parameter value, selected by enum ZSTD_cParameter,
1523
1837
  * and store it into int* value.
1524
1838
  * @return : 0, or an error code (which can be tested with ZSTD_isError()).
1525
1839
  */
1526
- ZSTDLIB_API size_t ZSTD_CCtx_getParameter(ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value);
1840
+ ZSTDLIB_API size_t ZSTD_CCtx_getParameter(const ZSTD_CCtx* cctx, ZSTD_cParameter param, int* value);
1527
1841
 
1528
1842
 
1529
1843
  /*! ZSTD_CCtx_params :
@@ -1566,8 +1880,10 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_init_advanced(ZSTD_CCtx_params* cctxParams, Z
1566
1880
  /*! ZSTD_CCtxParams_setParameter() :
1567
1881
  * Similar to ZSTD_CCtx_setParameter.
1568
1882
  * Set one compression parameter, selected by enum ZSTD_cParameter.
1569
- * Parameters must be applied to a ZSTD_CCtx using ZSTD_CCtx_setParametersUsingCCtxParams().
1570
- * @result : 0, or an error code (which can be tested with ZSTD_isError()).
1883
+ * Parameters must be applied to a ZSTD_CCtx using
1884
+ * ZSTD_CCtx_setParametersUsingCCtxParams().
1885
+ * @result : a code representing success or failure (which can be tested with
1886
+ * ZSTD_isError()).
1571
1887
  */
1572
1888
  ZSTDLIB_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int value);
1573
1889
 
@@ -1576,7 +1892,7 @@ ZSTDLIB_API size_t ZSTD_CCtxParams_setParameter(ZSTD_CCtx_params* params, ZSTD_c
1576
1892
  * Get the requested value of one compression parameter, selected by enum ZSTD_cParameter.
1577
1893
  * @result : 0, or an error code (which can be tested with ZSTD_isError()).
1578
1894
  */
1579
- ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value);
1895
+ ZSTDLIB_API size_t ZSTD_CCtxParams_getParameter(const ZSTD_CCtx_params* params, ZSTD_cParameter param, int* value);
1580
1896
 
1581
1897
  /*! ZSTD_CCtx_setParametersUsingCCtxParams() :
1582
1898
  * Apply a set of ZSTD_CCtx_params to the compression context.
@@ -1647,6 +1963,13 @@ ZSTDLIB_API size_t ZSTD_DCtx_refPrefix_advanced(ZSTD_DCtx* dctx, const void* pre
1647
1963
  */
1648
1964
  ZSTDLIB_API size_t ZSTD_DCtx_setMaxWindowSize(ZSTD_DCtx* dctx, size_t maxWindowSize);
1649
1965
 
1966
+ /*! ZSTD_DCtx_getParameter() :
1967
+ * Get the requested decompression parameter value, selected by enum ZSTD_dParameter,
1968
+ * and store it into int* value.
1969
+ * @return : 0, or an error code (which can be tested with ZSTD_isError()).
1970
+ */
1971
+ ZSTDLIB_API size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value);
1972
+
1650
1973
  /* ZSTD_d_format
1651
1974
  * experimental parameter,
1652
1975
  * allowing selection between ZSTD_format_e input compression formats
@@ -1684,6 +2007,41 @@ ZSTDLIB_API size_t ZSTD_DCtx_setMaxWindowSize(ZSTD_DCtx* dctx, size_t maxWindowS
1684
2007
  */
1685
2008
  #define ZSTD_d_stableOutBuffer ZSTD_d_experimentalParam2
1686
2009
 
2010
+ /* ZSTD_d_forceIgnoreChecksum
2011
+ * Experimental parameter.
2012
+ * Default is 0 == disabled. Set to 1 to enable
2013
+ *
2014
+ * Tells the decompressor to skip checksum validation during decompression, regardless
2015
+ * of whether checksumming was specified during compression. This offers some
2016
+ * slight performance benefits, and may be useful for debugging.
2017
+ * Param has values of type ZSTD_forceIgnoreChecksum_e
2018
+ */
2019
+ #define ZSTD_d_forceIgnoreChecksum ZSTD_d_experimentalParam3
2020
+
2021
+ /* ZSTD_d_refMultipleDDicts
2022
+ * Experimental parameter.
2023
+ * Default is 0 == disabled. Set to 1 to enable
2024
+ *
2025
+ * If enabled and dctx is allocated on the heap, then additional memory will be allocated
2026
+ * to store references to multiple ZSTD_DDict. That is, multiple calls of ZSTD_refDDict()
2027
+ * using a given ZSTD_DCtx, rather than overwriting the previous DDict reference, will instead
2028
+ * store all references. At decompression time, the appropriate dictID is selected
2029
+ * from the set of DDicts based on the dictID in the frame.
2030
+ *
2031
+ * Usage is simply calling ZSTD_refDDict() on multiple dict buffers.
2032
+ *
2033
+ * Param has values of byte ZSTD_refMultipleDDicts_e
2034
+ *
2035
+ * WARNING: Enabling this parameter and calling ZSTD_DCtx_refDDict(), will trigger memory
2036
+ * allocation for the hash table. ZSTD_freeDCtx() also frees this memory.
2037
+ * Memory is allocated as per ZSTD_DCtx::customMem.
2038
+ *
2039
+ * Although this function allocates memory for the table, the user is still responsible for
2040
+ * memory management of the underlying ZSTD_DDict* themselves.
2041
+ */
2042
+ #define ZSTD_d_refMultipleDDicts ZSTD_d_experimentalParam4
2043
+
2044
+
1687
2045
  /*! ZSTD_DCtx_setFormat() :
1688
2046
  * Instruct the decoder context about what kind of data to decode next.
1689
2047
  * This instruction is mandatory to decode data without a fully-formed header,
@@ -1711,7 +2069,8 @@ ZSTDLIB_API size_t ZSTD_decompressStream_simpleArgs (
1711
2069
  ********************************************************************/
1712
2070
 
1713
2071
  /*===== Advanced Streaming compression functions =====*/
1714
- /**! ZSTD_initCStream_srcSize() :
2072
+
2073
+ /*! ZSTD_initCStream_srcSize() :
1715
2074
  * This function is deprecated, and equivalent to:
1716
2075
  * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
1717
2076
  * ZSTD_CCtx_refCDict(zcs, NULL); // clear the dictionary (if any)
@@ -1728,7 +2087,7 @@ ZSTD_initCStream_srcSize(ZSTD_CStream* zcs,
1728
2087
  int compressionLevel,
1729
2088
  unsigned long long pledgedSrcSize);
1730
2089
 
1731
- /**! ZSTD_initCStream_usingDict() :
2090
+ /*! ZSTD_initCStream_usingDict() :
1732
2091
  * This function is deprecated, and is equivalent to:
1733
2092
  * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
1734
2093
  * ZSTD_CCtx_setParameter(zcs, ZSTD_c_compressionLevel, compressionLevel);
@@ -1745,7 +2104,7 @@ ZSTD_initCStream_usingDict(ZSTD_CStream* zcs,
1745
2104
  const void* dict, size_t dictSize,
1746
2105
  int compressionLevel);
1747
2106
 
1748
- /**! ZSTD_initCStream_advanced() :
2107
+ /*! ZSTD_initCStream_advanced() :
1749
2108
  * This function is deprecated, and is approximately equivalent to:
1750
2109
  * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
1751
2110
  * // Pseudocode: Set each zstd parameter and leave the rest as-is.
@@ -1766,7 +2125,7 @@ ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
1766
2125
  ZSTD_parameters params,
1767
2126
  unsigned long long pledgedSrcSize);
1768
2127
 
1769
- /**! ZSTD_initCStream_usingCDict() :
2128
+ /*! ZSTD_initCStream_usingCDict() :
1770
2129
  * This function is deprecated, and equivalent to:
1771
2130
  * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
1772
2131
  * ZSTD_CCtx_refCDict(zcs, cdict);
@@ -1776,7 +2135,7 @@ ZSTD_initCStream_advanced(ZSTD_CStream* zcs,
1776
2135
  */
1777
2136
  ZSTDLIB_API size_t ZSTD_initCStream_usingCDict(ZSTD_CStream* zcs, const ZSTD_CDict* cdict);
1778
2137
 
1779
- /**! ZSTD_initCStream_usingCDict_advanced() :
2138
+ /*! ZSTD_initCStream_usingCDict_advanced() :
1780
2139
  * This function is DEPRECATED, and is approximately equivalent to:
1781
2140
  * ZSTD_CCtx_reset(zcs, ZSTD_reset_session_only);
1782
2141
  * // Pseudocode: Set each zstd frame parameter and leave the rest as-is.
@@ -1849,7 +2208,8 @@ ZSTDLIB_API size_t ZSTD_toFlushNow(ZSTD_CCtx* cctx);
1849
2208
 
1850
2209
 
1851
2210
  /*===== Advanced Streaming decompression functions =====*/
1852
- /**
2211
+
2212
+ /*!
1853
2213
  * This function is deprecated, and is equivalent to:
1854
2214
  *
1855
2215
  * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only);
@@ -1860,7 +2220,7 @@ ZSTDLIB_API size_t ZSTD_toFlushNow(ZSTD_CCtx* cctx);
1860
2220
  */
1861
2221
  ZSTDLIB_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dict, size_t dictSize);
1862
2222
 
1863
- /**
2223
+ /*!
1864
2224
  * This function is deprecated, and is equivalent to:
1865
2225
  *
1866
2226
  * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only);
@@ -1871,7 +2231,7 @@ ZSTDLIB_API size_t ZSTD_initDStream_usingDict(ZSTD_DStream* zds, const void* dic
1871
2231
  */
1872
2232
  ZSTDLIB_API size_t ZSTD_initDStream_usingDDict(ZSTD_DStream* zds, const ZSTD_DDict* ddict);
1873
2233
 
1874
- /**
2234
+ /*!
1875
2235
  * This function is deprecated, and is equivalent to:
1876
2236
  *
1877
2237
  * ZSTD_DCtx_reset(zds, ZSTD_reset_session_only);
@@ -1933,7 +2293,7 @@ ZSTDLIB_API size_t ZSTD_compressContinue(ZSTD_CCtx* cctx, void* dst, size_t dstC
1933
2293
  ZSTDLIB_API size_t ZSTD_compressEnd(ZSTD_CCtx* cctx, void* dst, size_t dstCapacity, const void* src, size_t srcSize);
1934
2294
 
1935
2295
 
1936
- /*-
2296
+ /**
1937
2297
  Buffer-less streaming decompression (synchronous mode)
1938
2298
 
1939
2299
  A ZSTD_DCtx object is required to track streaming operations.