zstd-ruby 1.4.0.0 → 1.4.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) 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 +274 -107
  5. data/ext/zstdruby/libzstd/README.md +75 -16
  6. data/ext/zstdruby/libzstd/common/bitstream.h +59 -51
  7. data/ext/zstdruby/libzstd/common/compiler.h +154 -5
  8. data/ext/zstdruby/libzstd/common/cpu.h +1 -3
  9. data/ext/zstdruby/libzstd/common/debug.c +11 -31
  10. data/ext/zstdruby/libzstd/common/debug.h +22 -49
  11. data/ext/zstdruby/libzstd/common/entropy_common.c +201 -75
  12. data/ext/zstdruby/libzstd/common/error_private.c +3 -1
  13. data/ext/zstdruby/libzstd/common/error_private.h +7 -3
  14. data/ext/zstdruby/libzstd/common/fse.h +50 -42
  15. data/ext/zstdruby/libzstd/common/fse_decompress.c +134 -50
  16. data/ext/zstdruby/libzstd/common/huf.h +41 -38
  17. data/ext/zstdruby/libzstd/common/mem.h +68 -22
  18. data/ext/zstdruby/libzstd/common/pool.c +30 -20
  19. data/ext/zstdruby/libzstd/common/pool.h +3 -3
  20. data/ext/zstdruby/libzstd/common/threading.c +51 -4
  21. data/ext/zstdruby/libzstd/common/threading.h +36 -4
  22. data/ext/zstdruby/libzstd/common/xxhash.c +39 -89
  23. data/ext/zstdruby/libzstd/common/xxhash.h +12 -32
  24. data/ext/zstdruby/libzstd/common/zstd_common.c +10 -10
  25. data/ext/zstdruby/libzstd/common/zstd_deps.h +111 -0
  26. data/ext/zstdruby/libzstd/common/zstd_errors.h +3 -1
  27. data/ext/zstdruby/libzstd/common/zstd_internal.h +231 -72
  28. data/ext/zstdruby/libzstd/common/zstd_trace.c +42 -0
  29. data/ext/zstdruby/libzstd/common/zstd_trace.h +152 -0
  30. data/ext/zstdruby/libzstd/compress/fse_compress.c +47 -63
  31. data/ext/zstdruby/libzstd/compress/hist.c +41 -63
  32. data/ext/zstdruby/libzstd/compress/hist.h +13 -33
  33. data/ext/zstdruby/libzstd/compress/huf_compress.c +288 -172
  34. data/ext/zstdruby/libzstd/compress/zstd_compress.c +2504 -1626
  35. data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +446 -85
  36. data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +158 -0
  37. data/ext/zstdruby/libzstd/compress/zstd_compress_literals.h +29 -0
  38. data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +433 -0
  39. data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +54 -0
  40. data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +849 -0
  41. data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.h +32 -0
  42. data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +561 -0
  43. data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +82 -60
  44. data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +2 -2
  45. data/ext/zstdruby/libzstd/compress/zstd_fast.c +106 -80
  46. data/ext/zstdruby/libzstd/compress/zstd_fast.h +2 -2
  47. data/ext/zstdruby/libzstd/compress/zstd_lazy.c +411 -105
  48. data/ext/zstdruby/libzstd/compress/zstd_lazy.h +21 -1
  49. data/ext/zstdruby/libzstd/compress/zstd_ldm.c +296 -207
  50. data/ext/zstdruby/libzstd/compress/zstd_ldm.h +14 -3
  51. data/ext/zstdruby/libzstd/compress/zstd_ldm_geartab.h +103 -0
  52. data/ext/zstdruby/libzstd/compress/zstd_opt.c +260 -148
  53. data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
  54. data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +153 -440
  55. data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +29 -110
  56. data/ext/zstdruby/libzstd/decompress/huf_decompress.c +356 -238
  57. data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +20 -16
  58. data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +3 -3
  59. data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +641 -238
  60. data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +600 -371
  61. data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +8 -5
  62. data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +40 -9
  63. data/ext/zstdruby/libzstd/deprecated/zbuff.h +9 -8
  64. data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +2 -2
  65. data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +1 -1
  66. data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +1 -1
  67. data/ext/zstdruby/libzstd/dictBuilder/cover.c +197 -78
  68. data/ext/zstdruby/libzstd/dictBuilder/cover.h +52 -7
  69. data/ext/zstdruby/libzstd/dictBuilder/divsufsort.c +1 -1
  70. data/ext/zstdruby/libzstd/dictBuilder/fastcover.c +84 -66
  71. data/ext/zstdruby/libzstd/dictBuilder/zdict.c +58 -36
  72. data/ext/zstdruby/libzstd/dictBuilder/zdict.h +60 -31
  73. data/ext/zstdruby/libzstd/dll/example/Makefile +2 -1
  74. data/ext/zstdruby/libzstd/dll/example/README.md +16 -22
  75. data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +8 -4
  76. data/ext/zstdruby/libzstd/legacy/zstd_v01.c +115 -111
  77. data/ext/zstdruby/libzstd/legacy/zstd_v01.h +1 -1
  78. data/ext/zstdruby/libzstd/legacy/zstd_v02.c +28 -14
  79. data/ext/zstdruby/libzstd/legacy/zstd_v02.h +1 -1
  80. data/ext/zstdruby/libzstd/legacy/zstd_v03.c +28 -14
  81. data/ext/zstdruby/libzstd/legacy/zstd_v03.h +1 -1
  82. data/ext/zstdruby/libzstd/legacy/zstd_v04.c +36 -19
  83. data/ext/zstdruby/libzstd/legacy/zstd_v04.h +1 -1
  84. data/ext/zstdruby/libzstd/legacy/zstd_v05.c +122 -107
  85. data/ext/zstdruby/libzstd/legacy/zstd_v05.h +2 -2
  86. data/ext/zstdruby/libzstd/legacy/zstd_v06.c +29 -23
  87. data/ext/zstdruby/libzstd/legacy/zstd_v06.h +1 -1
  88. data/ext/zstdruby/libzstd/legacy/zstd_v07.c +34 -24
  89. data/ext/zstdruby/libzstd/legacy/zstd_v07.h +1 -1
  90. data/ext/zstdruby/libzstd/libzstd.pc.in +2 -1
  91. data/ext/zstdruby/libzstd/zstd.h +655 -118
  92. data/lib/zstd-ruby/version.rb +1 -1
  93. data/zstd-ruby.gemspec +1 -1
  94. metadata +20 -10
  95. data/.travis.yml +0 -14
@@ -1,11 +1,21 @@
1
+ /*
2
+ * Copyright (c) 2017-2021, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under both the BSD-style license (found in the
6
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7
+ * in the COPYING file in the root directory of this source tree).
8
+ * You may select, at your option, one of the above-listed licenses.
9
+ */
10
+
1
11
  #include <stdio.h> /* fprintf */
2
12
  #include <stdlib.h> /* malloc, free, qsort */
3
13
  #include <string.h> /* memset */
4
14
  #include <time.h> /* clock */
5
- #include "mem.h" /* read */
6
- #include "pool.h"
7
- #include "threading.h"
8
- #include "zstd_internal.h" /* includes zstd.h */
15
+ #include "../common/mem.h" /* read */
16
+ #include "../common/pool.h"
17
+ #include "../common/threading.h"
18
+ #include "../common/zstd_internal.h" /* includes zstd.h */
9
19
  #ifndef ZDICT_STATIC_LINKING_ONLY
10
20
  #define ZDICT_STATIC_LINKING_ONLY
11
21
  #endif
@@ -46,6 +56,15 @@ typedef struct {
46
56
  U32 size;
47
57
  } COVER_epoch_info_t;
48
58
 
59
+ /**
60
+ * Struct used for the dictionary selection function.
61
+ */
62
+ typedef struct COVER_dictSelection {
63
+ BYTE* dictContent;
64
+ size_t dictSize;
65
+ size_t totalCompressedSize;
66
+ } COVER_dictSelection_t;
67
+
49
68
  /**
50
69
  * Computes the number of epochs and the size of each epoch.
51
70
  * We will make sure that each epoch gets at least 10 * k bytes.
@@ -107,6 +126,32 @@ void COVER_best_start(COVER_best_t *best);
107
126
  * Decrements liveJobs and signals any waiting threads if liveJobs == 0.
108
127
  * If this dictionary is the best so far save it and its parameters.
109
128
  */
110
- void COVER_best_finish(COVER_best_t *best, size_t compressedSize,
111
- ZDICT_cover_params_t parameters, void *dict,
112
- size_t dictSize);
129
+ void COVER_best_finish(COVER_best_t *best, ZDICT_cover_params_t parameters,
130
+ COVER_dictSelection_t selection);
131
+ /**
132
+ * Error function for COVER_selectDict function. Checks if the return
133
+ * value is an error.
134
+ */
135
+ unsigned COVER_dictSelectionIsError(COVER_dictSelection_t selection);
136
+
137
+ /**
138
+ * Error function for COVER_selectDict function. Returns a struct where
139
+ * return.totalCompressedSize is a ZSTD error.
140
+ */
141
+ COVER_dictSelection_t COVER_dictSelectionError(size_t error);
142
+
143
+ /**
144
+ * Always call after selectDict is called to free up used memory from
145
+ * newly created dictionary.
146
+ */
147
+ void COVER_dictSelectionFree(COVER_dictSelection_t selection);
148
+
149
+ /**
150
+ * Called to finalize the dictionary and select one based on whether or not
151
+ * the shrink-dict flag was enabled. If enabled the dictionary used is the
152
+ * smallest dictionary within a specified regression of the compressed size
153
+ * from the largest dictionary.
154
+ */
155
+ COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBufferCapacity,
156
+ size_t dictContentSize, const BYTE* samplesBuffer, const size_t* samplesSizes, unsigned nbFinalizeSamples,
157
+ size_t nbCheckSamples, size_t nbSamples, ZDICT_cover_params_t params, size_t* offsets, size_t totalCompressedSize);
@@ -1576,7 +1576,7 @@ note:
1576
1576
  /* Construct the inverse suffix array of type B* suffixes using trsort. */
1577
1577
  trsort(ISAb, SA, m, 1);
1578
1578
 
1579
- /* Set the sorted order of tyoe B* suffixes. */
1579
+ /* Set the sorted order of type B* suffixes. */
1580
1580
  for(i = n - 1, j = m, c0 = T[n - 1]; 0 <= i;) {
1581
1581
  for(--i, c1 = c0; (0 <= i) && ((c0 = T[i]) >= c1); --i, c1 = c0) { }
1582
1582
  if(0 <= i) {
@@ -1,3 +1,13 @@
1
+ /*
2
+ * Copyright (c) 2018-2021, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under both the BSD-style license (found in the
6
+ * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7
+ * in the COPYING file in the root directory of this source tree).
8
+ * You may select, at your option, one of the above-listed licenses.
9
+ */
10
+
1
11
  /*-*************************************
2
12
  * Dependencies
3
13
  ***************************************/
@@ -6,11 +16,12 @@
6
16
  #include <string.h> /* memset */
7
17
  #include <time.h> /* clock */
8
18
 
9
- #include "mem.h" /* read */
10
- #include "pool.h"
11
- #include "threading.h"
19
+ #include "../common/mem.h" /* read */
20
+ #include "../common/pool.h"
21
+ #include "../common/threading.h"
12
22
  #include "cover.h"
13
- #include "zstd_internal.h" /* includes zstd.h */
23
+ #include "../common/zstd_internal.h" /* includes zstd.h */
24
+ #include "../compress/zstd_compress_internal.h" /* ZSTD_hash*() */
14
25
  #ifndef ZDICT_STATIC_LINKING_ONLY
15
26
  #define ZDICT_STATIC_LINKING_ONLY
16
27
  #endif
@@ -23,7 +34,7 @@
23
34
  #define FASTCOVER_MAX_SAMPLES_SIZE (sizeof(size_t) == 8 ? ((unsigned)-1) : ((unsigned)1 GB))
24
35
  #define FASTCOVER_MAX_F 31
25
36
  #define FASTCOVER_MAX_ACCEL 10
26
- #define DEFAULT_SPLITPOINT 0.75
37
+ #define FASTCOVER_DEFAULT_SPLITPOINT 0.75
27
38
  #define DEFAULT_F 20
28
39
  #define DEFAULT_ACCEL 1
29
40
 
@@ -31,50 +42,50 @@
31
42
  /*-*************************************
32
43
  * Console display
33
44
  ***************************************/
45
+ #ifndef LOCALDISPLAYLEVEL
34
46
  static int g_displayLevel = 2;
47
+ #endif
48
+ #undef DISPLAY
35
49
  #define DISPLAY(...) \
36
50
  { \
37
51
  fprintf(stderr, __VA_ARGS__); \
38
52
  fflush(stderr); \
39
53
  }
54
+ #undef LOCALDISPLAYLEVEL
40
55
  #define LOCALDISPLAYLEVEL(displayLevel, l, ...) \
41
56
  if (displayLevel >= l) { \
42
57
  DISPLAY(__VA_ARGS__); \
43
58
  } /* 0 : no display; 1: errors; 2: default; 3: details; 4: debug */
59
+ #undef DISPLAYLEVEL
44
60
  #define DISPLAYLEVEL(l, ...) LOCALDISPLAYLEVEL(g_displayLevel, l, __VA_ARGS__)
45
61
 
62
+ #ifndef LOCALDISPLAYUPDATE
63
+ static const clock_t g_refreshRate = CLOCKS_PER_SEC * 15 / 100;
64
+ static clock_t g_time = 0;
65
+ #endif
66
+ #undef LOCALDISPLAYUPDATE
46
67
  #define LOCALDISPLAYUPDATE(displayLevel, l, ...) \
47
68
  if (displayLevel >= l) { \
48
- if ((clock() - g_time > refreshRate) || (displayLevel >= 4)) { \
69
+ if ((clock() - g_time > g_refreshRate) || (displayLevel >= 4)) { \
49
70
  g_time = clock(); \
50
71
  DISPLAY(__VA_ARGS__); \
51
72
  } \
52
73
  }
74
+ #undef DISPLAYUPDATE
53
75
  #define DISPLAYUPDATE(l, ...) LOCALDISPLAYUPDATE(g_displayLevel, l, __VA_ARGS__)
54
- static const clock_t refreshRate = CLOCKS_PER_SEC * 15 / 100;
55
- static clock_t g_time = 0;
56
76
 
57
77
 
58
78
  /*-*************************************
59
79
  * Hash Functions
60
80
  ***************************************/
61
- static const U64 prime6bytes = 227718039650203ULL;
62
- static size_t ZSTD_hash6(U64 u, U32 h) { return (size_t)(((u << (64-48)) * prime6bytes) >> (64-h)) ; }
63
- static size_t ZSTD_hash6Ptr(const void* p, U32 h) { return ZSTD_hash6(MEM_readLE64(p), h); }
64
-
65
- static const U64 prime8bytes = 0xCF1BBCDCB7A56463ULL;
66
- static size_t ZSTD_hash8(U64 u, U32 h) { return (size_t)(((u) * prime8bytes) >> (64-h)) ; }
67
- static size_t ZSTD_hash8Ptr(const void* p, U32 h) { return ZSTD_hash8(MEM_readLE64(p), h); }
68
-
69
-
70
81
  /**
71
- * Hash the d-byte value pointed to by p and mod 2^f
82
+ * Hash the d-byte value pointed to by p and mod 2^f into the frequency vector
72
83
  */
73
- static size_t FASTCOVER_hashPtrToIndex(const void* p, U32 h, unsigned d) {
84
+ static size_t FASTCOVER_hashPtrToIndex(const void* p, U32 f, unsigned d) {
74
85
  if (d == 6) {
75
- return ZSTD_hash6Ptr(p, h) & ((1 << h) - 1);
86
+ return ZSTD_hash6Ptr(p, f);
76
87
  }
77
- return ZSTD_hash8Ptr(p, h) & ((1 << h) - 1);
88
+ return ZSTD_hash8Ptr(p, f);
78
89
  }
79
90
 
80
91
 
@@ -287,10 +298,10 @@ FASTCOVER_computeFrequency(U32* freqs, const FASTCOVER_ctx_t* ctx)
287
298
  * Prepare a context for dictionary building.
288
299
  * The context is only dependent on the parameter `d` and can used multiple
289
300
  * times.
290
- * Returns 1 on success or zero on error.
301
+ * Returns 0 on success or error code on error.
291
302
  * The context must be destroyed with `FASTCOVER_ctx_destroy()`.
292
303
  */
293
- static int
304
+ static size_t
294
305
  FASTCOVER_ctx_init(FASTCOVER_ctx_t* ctx,
295
306
  const void* samplesBuffer,
296
307
  const size_t* samplesSizes, unsigned nbSamples,
@@ -310,19 +321,19 @@ FASTCOVER_ctx_init(FASTCOVER_ctx_t* ctx,
310
321
  totalSamplesSize >= (size_t)FASTCOVER_MAX_SAMPLES_SIZE) {
311
322
  DISPLAYLEVEL(1, "Total samples size is too large (%u MB), maximum size is %u MB\n",
312
323
  (unsigned)(totalSamplesSize >> 20), (FASTCOVER_MAX_SAMPLES_SIZE >> 20));
313
- return 0;
324
+ return ERROR(srcSize_wrong);
314
325
  }
315
326
 
316
327
  /* Check if there are at least 5 training samples */
317
328
  if (nbTrainSamples < 5) {
318
329
  DISPLAYLEVEL(1, "Total number of training samples is %u and is invalid\n", nbTrainSamples);
319
- return 0;
330
+ return ERROR(srcSize_wrong);
320
331
  }
321
332
 
322
333
  /* Check if there's testing sample */
323
334
  if (nbTestSamples < 1) {
324
335
  DISPLAYLEVEL(1, "Total number of testing samples is %u and is invalid.\n", nbTestSamples);
325
- return 0;
336
+ return ERROR(srcSize_wrong);
326
337
  }
327
338
 
328
339
  /* Zero the context */
@@ -347,7 +358,7 @@ FASTCOVER_ctx_init(FASTCOVER_ctx_t* ctx,
347
358
  if (ctx->offsets == NULL) {
348
359
  DISPLAYLEVEL(1, "Failed to allocate scratch buffers \n");
349
360
  FASTCOVER_ctx_destroy(ctx);
350
- return 0;
361
+ return ERROR(memory_allocation);
351
362
  }
352
363
 
353
364
  /* Fill offsets from the samplesSizes */
@@ -364,13 +375,13 @@ FASTCOVER_ctx_init(FASTCOVER_ctx_t* ctx,
364
375
  if (ctx->freqs == NULL) {
365
376
  DISPLAYLEVEL(1, "Failed to allocate frequency table \n");
366
377
  FASTCOVER_ctx_destroy(ctx);
367
- return 0;
378
+ return ERROR(memory_allocation);
368
379
  }
369
380
 
370
381
  DISPLAYLEVEL(2, "Computing frequencies\n");
371
382
  FASTCOVER_computeFrequency(ctx->freqs, ctx);
372
383
 
373
- return 1;
384
+ return 0;
374
385
  }
375
386
 
376
387
 
@@ -435,7 +446,6 @@ FASTCOVER_buildDictionary(const FASTCOVER_ctx_t* ctx,
435
446
  return tail;
436
447
  }
437
448
 
438
-
439
449
  /**
440
450
  * Parameters for FASTCOVER_tryParameters().
441
451
  */
@@ -452,19 +462,20 @@ typedef struct FASTCOVER_tryParameters_data_s {
452
462
  * This function is thread safe if zstd is compiled with multithreaded support.
453
463
  * It takes its parameters as an *OWNING* opaque pointer to support threading.
454
464
  */
455
- static void FASTCOVER_tryParameters(void *opaque)
465
+ static void FASTCOVER_tryParameters(void* opaque)
456
466
  {
457
467
  /* Save parameters as local variables */
458
- FASTCOVER_tryParameters_data_t *const data = (FASTCOVER_tryParameters_data_t *)opaque;
468
+ FASTCOVER_tryParameters_data_t *const data = (FASTCOVER_tryParameters_data_t*)opaque;
459
469
  const FASTCOVER_ctx_t *const ctx = data->ctx;
460
470
  const ZDICT_cover_params_t parameters = data->parameters;
461
471
  size_t dictBufferCapacity = data->dictBufferCapacity;
462
472
  size_t totalCompressedSize = ERROR(GENERIC);
463
473
  /* Initialize array to keep track of frequency of dmer within activeSegment */
464
- U16* segmentFreqs = (U16 *)calloc(((U64)1 << ctx->f), sizeof(U16));
474
+ U16* segmentFreqs = (U16*)calloc(((U64)1 << ctx->f), sizeof(U16));
465
475
  /* Allocate space for hash table, dict, and freqs */
466
- BYTE *const dict = (BYTE * const)malloc(dictBufferCapacity);
467
- U32 *freqs = (U32*) malloc(((U64)1 << ctx->f) * sizeof(U32));
476
+ BYTE *const dict = (BYTE*)malloc(dictBufferCapacity);
477
+ COVER_dictSelection_t selection = COVER_dictSelectionError(ERROR(GENERIC));
478
+ U32* freqs = (U32*) malloc(((U64)1 << ctx->f) * sizeof(U32));
468
479
  if (!segmentFreqs || !dict || !freqs) {
469
480
  DISPLAYLEVEL(1, "Failed to allocate buffers: out of memory\n");
470
481
  goto _cleanup;
@@ -473,27 +484,24 @@ static void FASTCOVER_tryParameters(void *opaque)
473
484
  memcpy(freqs, ctx->freqs, ((U64)1 << ctx->f) * sizeof(U32));
474
485
  /* Build the dictionary */
475
486
  { const size_t tail = FASTCOVER_buildDictionary(ctx, freqs, dict, dictBufferCapacity,
476
- parameters, segmentFreqs);
487
+ parameters, segmentFreqs);
488
+
477
489
  const unsigned nbFinalizeSamples = (unsigned)(ctx->nbTrainSamples * ctx->accelParams.finalize / 100);
478
- dictBufferCapacity = ZDICT_finalizeDictionary(
479
- dict, dictBufferCapacity, dict + tail, dictBufferCapacity - tail,
480
- ctx->samples, ctx->samplesSizes, nbFinalizeSamples, parameters.zParams);
481
- if (ZDICT_isError(dictBufferCapacity)) {
482
- DISPLAYLEVEL(1, "Failed to finalize dictionary\n");
490
+ selection = COVER_selectDict(dict + tail, dictBufferCapacity, dictBufferCapacity - tail,
491
+ ctx->samples, ctx->samplesSizes, nbFinalizeSamples, ctx->nbTrainSamples, ctx->nbSamples, parameters, ctx->offsets,
492
+ totalCompressedSize);
493
+
494
+ if (COVER_dictSelectionIsError(selection)) {
495
+ DISPLAYLEVEL(1, "Failed to select dictionary\n");
483
496
  goto _cleanup;
484
497
  }
485
498
  }
486
- /* Check total compressed size */
487
- totalCompressedSize = COVER_checkTotalCompressedSize(parameters, ctx->samplesSizes,
488
- ctx->samples, ctx->offsets,
489
- ctx->nbTrainSamples, ctx->nbSamples,
490
- dict, dictBufferCapacity);
491
499
  _cleanup:
492
- COVER_best_finish(data->best, totalCompressedSize, parameters, dict,
493
- dictBufferCapacity);
500
+ free(dict);
501
+ COVER_best_finish(data->best, parameters, selection);
494
502
  free(data);
495
503
  free(segmentFreqs);
496
- free(dict);
504
+ COVER_dictSelectionFree(selection);
497
505
  free(freqs);
498
506
  }
499
507
 
@@ -508,6 +516,7 @@ FASTCOVER_convertToCoverParams(ZDICT_fastCover_params_t fastCoverParams,
508
516
  coverParams->nbThreads = fastCoverParams.nbThreads;
509
517
  coverParams->splitPoint = fastCoverParams.splitPoint;
510
518
  coverParams->zParams = fastCoverParams.zParams;
519
+ coverParams->shrinkDict = fastCoverParams.shrinkDict;
511
520
  }
512
521
 
513
522
 
@@ -524,6 +533,7 @@ FASTCOVER_convertToFastCoverParams(ZDICT_cover_params_t coverParams,
524
533
  fastCoverParams->f = f;
525
534
  fastCoverParams->accel = accel;
526
535
  fastCoverParams->zParams = coverParams.zParams;
536
+ fastCoverParams->shrinkDict = coverParams.shrinkDict;
527
537
  }
528
538
 
529
539
 
@@ -550,11 +560,11 @@ ZDICT_trainFromBuffer_fastCover(void* dictBuffer, size_t dictBufferCapacity,
550
560
  if (!FASTCOVER_checkParameters(coverParams, dictBufferCapacity, parameters.f,
551
561
  parameters.accel)) {
552
562
  DISPLAYLEVEL(1, "FASTCOVER parameters incorrect\n");
553
- return ERROR(GENERIC);
563
+ return ERROR(parameter_outOfBound);
554
564
  }
555
565
  if (nbSamples == 0) {
556
566
  DISPLAYLEVEL(1, "FASTCOVER must have at least one input file\n");
557
- return ERROR(GENERIC);
567
+ return ERROR(srcSize_wrong);
558
568
  }
559
569
  if (dictBufferCapacity < ZDICT_DICTSIZE_MIN) {
560
570
  DISPLAYLEVEL(1, "dictBufferCapacity must be at least %u\n",
@@ -564,11 +574,14 @@ ZDICT_trainFromBuffer_fastCover(void* dictBuffer, size_t dictBufferCapacity,
564
574
  /* Assign corresponding FASTCOVER_accel_t to accelParams*/
565
575
  accelParams = FASTCOVER_defaultAccelParameters[parameters.accel];
566
576
  /* Initialize context */
567
- if (!FASTCOVER_ctx_init(&ctx, samplesBuffer, samplesSizes, nbSamples,
577
+ {
578
+ size_t const initVal = FASTCOVER_ctx_init(&ctx, samplesBuffer, samplesSizes, nbSamples,
568
579
  coverParams.d, parameters.splitPoint, parameters.f,
569
- accelParams)) {
570
- DISPLAYLEVEL(1, "Failed to initialize context\n");
571
- return ERROR(GENERIC);
580
+ accelParams);
581
+ if (ZSTD_isError(initVal)) {
582
+ DISPLAYLEVEL(1, "Failed to initialize context\n");
583
+ return initVal;
584
+ }
572
585
  }
573
586
  COVER_warnOnSmallCorpus(dictBufferCapacity, ctx.nbDmers, g_displayLevel);
574
587
  /* Build the dictionary */
@@ -605,7 +618,7 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
605
618
  /* constants */
606
619
  const unsigned nbThreads = parameters->nbThreads;
607
620
  const double splitPoint =
608
- parameters->splitPoint <= 0.0 ? DEFAULT_SPLITPOINT : parameters->splitPoint;
621
+ parameters->splitPoint <= 0.0 ? FASTCOVER_DEFAULT_SPLITPOINT : parameters->splitPoint;
609
622
  const unsigned kMinD = parameters->d == 0 ? 6 : parameters->d;
610
623
  const unsigned kMaxD = parameters->d == 0 ? 8 : parameters->d;
611
624
  const unsigned kMinK = parameters->k == 0 ? 50 : parameters->k;
@@ -616,6 +629,7 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
616
629
  (1 + (kMaxD - kMinD) / 2) * (1 + (kMaxK - kMinK) / kStepSize);
617
630
  const unsigned f = parameters->f == 0 ? DEFAULT_F : parameters->f;
618
631
  const unsigned accel = parameters->accel == 0 ? DEFAULT_ACCEL : parameters->accel;
632
+ const unsigned shrinkDict = 0;
619
633
  /* Local variables */
620
634
  const int displayLevel = parameters->zParams.notificationLevel;
621
635
  unsigned iteration = 1;
@@ -627,19 +641,19 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
627
641
  /* Checks */
628
642
  if (splitPoint <= 0 || splitPoint > 1) {
629
643
  LOCALDISPLAYLEVEL(displayLevel, 1, "Incorrect splitPoint\n");
630
- return ERROR(GENERIC);
644
+ return ERROR(parameter_outOfBound);
631
645
  }
632
646
  if (accel == 0 || accel > FASTCOVER_MAX_ACCEL) {
633
647
  LOCALDISPLAYLEVEL(displayLevel, 1, "Incorrect accel\n");
634
- return ERROR(GENERIC);
648
+ return ERROR(parameter_outOfBound);
635
649
  }
636
650
  if (kMinK < kMaxD || kMaxK < kMinK) {
637
651
  LOCALDISPLAYLEVEL(displayLevel, 1, "Incorrect k\n");
638
- return ERROR(GENERIC);
652
+ return ERROR(parameter_outOfBound);
639
653
  }
640
654
  if (nbSamples == 0) {
641
655
  LOCALDISPLAYLEVEL(displayLevel, 1, "FASTCOVER must have at least one input file\n");
642
- return ERROR(GENERIC);
656
+ return ERROR(srcSize_wrong);
643
657
  }
644
658
  if (dictBufferCapacity < ZDICT_DICTSIZE_MIN) {
645
659
  LOCALDISPLAYLEVEL(displayLevel, 1, "dictBufferCapacity must be at least %u\n",
@@ -666,11 +680,14 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
666
680
  /* Initialize the context for this value of d */
667
681
  FASTCOVER_ctx_t ctx;
668
682
  LOCALDISPLAYLEVEL(displayLevel, 3, "d=%u\n", d);
669
- if (!FASTCOVER_ctx_init(&ctx, samplesBuffer, samplesSizes, nbSamples, d, splitPoint, f, accelParams)) {
670
- LOCALDISPLAYLEVEL(displayLevel, 1, "Failed to initialize context\n");
671
- COVER_best_destroy(&best);
672
- POOL_free(pool);
673
- return ERROR(GENERIC);
683
+ {
684
+ size_t const initVal = FASTCOVER_ctx_init(&ctx, samplesBuffer, samplesSizes, nbSamples, d, splitPoint, f, accelParams);
685
+ if (ZSTD_isError(initVal)) {
686
+ LOCALDISPLAYLEVEL(displayLevel, 1, "Failed to initialize context\n");
687
+ COVER_best_destroy(&best);
688
+ POOL_free(pool);
689
+ return initVal;
690
+ }
674
691
  }
675
692
  if (!warned) {
676
693
  COVER_warnOnSmallCorpus(dictBufferCapacity, ctx.nbDmers, displayLevel);
@@ -687,7 +704,7 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
687
704
  COVER_best_destroy(&best);
688
705
  FASTCOVER_ctx_destroy(&ctx);
689
706
  POOL_free(pool);
690
- return ERROR(GENERIC);
707
+ return ERROR(memory_allocation);
691
708
  }
692
709
  data->ctx = &ctx;
693
710
  data->best = &best;
@@ -697,6 +714,7 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
697
714
  data->parameters.d = d;
698
715
  data->parameters.splitPoint = splitPoint;
699
716
  data->parameters.steps = kSteps;
717
+ data->parameters.shrinkDict = shrinkDict;
700
718
  data->parameters.zParams.notificationLevel = g_displayLevel;
701
719
  /* Check the parameters */
702
720
  if (!FASTCOVER_checkParameters(data->parameters, dictBufferCapacity,
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright (c) 2016-present, 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
@@ -23,9 +23,13 @@
23
23
  /* Unix Large Files support (>4GB) */
24
24
  #define _FILE_OFFSET_BITS 64
25
25
  #if (defined(__sun__) && (!defined(__LP64__))) /* Sun Solaris 32-bits requires specific definitions */
26
+ # ifndef _LARGEFILE_SOURCE
26
27
  # define _LARGEFILE_SOURCE
28
+ # endif
27
29
  #elif ! defined(__LP64__) /* No point defining Large file for 64 bit */
30
+ # ifndef _LARGEFILE64_SOURCE
28
31
  # define _LARGEFILE64_SOURCE
32
+ # endif
29
33
  #endif
30
34
 
31
35
 
@@ -37,17 +41,18 @@
37
41
  #include <stdio.h> /* fprintf, fopen, ftello64 */
38
42
  #include <time.h> /* clock */
39
43
 
40
- #include "mem.h" /* read */
41
- #include "fse.h" /* FSE_normalizeCount, FSE_writeNCount */
44
+ #include "../common/mem.h" /* read */
45
+ #include "../common/fse.h" /* FSE_normalizeCount, FSE_writeNCount */
42
46
  #define HUF_STATIC_LINKING_ONLY
43
- #include "huf.h" /* HUF_buildCTable, HUF_writeCTable */
44
- #include "zstd_internal.h" /* includes zstd.h */
45
- #include "xxhash.h" /* XXH64 */
47
+ #include "../common/huf.h" /* HUF_buildCTable, HUF_writeCTable */
48
+ #include "../common/zstd_internal.h" /* includes zstd.h */
49
+ #include "../common/xxhash.h" /* XXH64 */
46
50
  #include "divsufsort.h"
47
51
  #ifndef ZDICT_STATIC_LINKING_ONLY
48
52
  # define ZDICT_STATIC_LINKING_ONLY
49
53
  #endif
50
54
  #include "zdict.h"
55
+ #include "../compress/zstd_compress_internal.h" /* ZSTD_loadCEntropy() */
51
56
 
52
57
 
53
58
  /*-*************************************
@@ -61,14 +66,15 @@
61
66
 
62
67
  #define NOISELENGTH 32
63
68
 
64
- static const int g_compressionLevel_default = 3;
65
69
  static const U32 g_selectivity_default = 9;
66
70
 
67
71
 
68
72
  /*-*************************************
69
73
  * Console display
70
74
  ***************************************/
75
+ #undef DISPLAY
71
76
  #define DISPLAY(...) { fprintf(stderr, __VA_ARGS__); fflush( stderr ); }
77
+ #undef DISPLAYLEVEL
72
78
  #define DISPLAYLEVEL(l, ...) if (notificationLevel>=l) { DISPLAY(__VA_ARGS__); } /* 0 : no display; 1: errors; 2: default; 3: details; 4: debug */
73
79
 
74
80
  static clock_t ZDICT_clockSpan(clock_t nPrevious) { return clock() - nPrevious; }
@@ -99,6 +105,26 @@ unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize)
99
105
  return MEM_readLE32((const char*)dictBuffer + 4);
100
106
  }
101
107
 
108
+ size_t ZDICT_getDictHeaderSize(const void* dictBuffer, size_t dictSize)
109
+ {
110
+ size_t headerSize;
111
+ if (dictSize <= 8 || MEM_readLE32(dictBuffer) != ZSTD_MAGIC_DICTIONARY) return ERROR(dictionary_corrupted);
112
+
113
+ { ZSTD_compressedBlockState_t* bs = (ZSTD_compressedBlockState_t*)malloc(sizeof(ZSTD_compressedBlockState_t));
114
+ U32* wksp = (U32*)malloc(HUF_WORKSPACE_SIZE);
115
+ if (!bs || !wksp) {
116
+ headerSize = ERROR(memory_allocation);
117
+ } else {
118
+ ZSTD_reset_compressedBlockState(bs);
119
+ headerSize = ZSTD_loadCEntropy(bs, wksp, dictBuffer, dictSize);
120
+ }
121
+
122
+ free(bs);
123
+ free(wksp);
124
+ }
125
+
126
+ return headerSize;
127
+ }
102
128
 
103
129
  /*-********************************************************
104
130
  * Dictionary training functions
@@ -508,6 +534,7 @@ static size_t ZDICT_trainBuffer_legacy(dictItem* dictList, U32 dictListSize,
508
534
  clock_t displayClock = 0;
509
535
  clock_t const refreshRate = CLOCKS_PER_SEC * 3 / 10;
510
536
 
537
+ # undef DISPLAYUPDATE
511
538
  # define DISPLAYUPDATE(l, ...) if (notificationLevel>=l) { \
512
539
  if (ZDICT_clockSpan(displayClock) > refreshRate) \
513
540
  { displayClock = clock(); DISPLAY(__VA_ARGS__); \
@@ -571,7 +598,7 @@ static void ZDICT_fillNoise(void* buffer, size_t length)
571
598
  unsigned const prime1 = 2654435761U;
572
599
  unsigned const prime2 = 2246822519U;
573
600
  unsigned acc = prime1;
574
- size_t p=0;;
601
+ size_t p=0;
575
602
  for (p=0; p<length; p++) {
576
603
  acc *= prime2;
577
604
  ((unsigned char*)buffer)[p] = (unsigned char)(acc >> 21);
@@ -588,12 +615,12 @@ typedef struct
588
615
 
589
616
  #define MAXREPOFFSET 1024
590
617
 
591
- static void ZDICT_countEStats(EStats_ress_t esr, ZSTD_parameters params,
618
+ static void ZDICT_countEStats(EStats_ress_t esr, const ZSTD_parameters* params,
592
619
  unsigned* countLit, unsigned* offsetcodeCount, unsigned* matchlengthCount, unsigned* litlengthCount, U32* repOffsets,
593
620
  const void* src, size_t srcSize,
594
621
  U32 notificationLevel)
595
622
  {
596
- size_t const blockSizeMax = MIN (ZSTD_BLOCKSIZE_MAX, 1 << params.cParams.windowLog);
623
+ size_t const blockSizeMax = MIN (ZSTD_BLOCKSIZE_MAX, 1 << params->cParams.windowLog);
597
624
  size_t cSize;
598
625
 
599
626
  if (srcSize > blockSizeMax) srcSize = blockSizeMax; /* protection vs large samples */
@@ -682,7 +709,7 @@ static void ZDICT_flatLit(unsigned* countLit)
682
709
 
683
710
  #define OFFCODE_MAX 30 /* only applicable to first block */
684
711
  static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
685
- unsigned compressionLevel,
712
+ int compressionLevel,
686
713
  const void* srcBuffer, const size_t* fileSizes, unsigned nbFiles,
687
714
  const void* dictBuffer, size_t dictBufferSize,
688
715
  unsigned notificationLevel)
@@ -717,7 +744,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
717
744
  memset(repOffset, 0, sizeof(repOffset));
718
745
  repOffset[1] = repOffset[4] = repOffset[8] = 1;
719
746
  memset(bestRepOffset, 0, sizeof(bestRepOffset));
720
- if (compressionLevel==0) compressionLevel = g_compressionLevel_default;
747
+ if (compressionLevel==0) compressionLevel = ZSTD_CLEVEL_DEFAULT;
721
748
  params = ZSTD_getParams(compressionLevel, averageSampleSize, dictBufferSize);
722
749
 
723
750
  esr.dict = ZSTD_createCDict_advanced(dictBuffer, dictBufferSize, ZSTD_dlm_byRef, ZSTD_dct_rawContent, params.cParams, ZSTD_defaultCMem);
@@ -731,7 +758,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
731
758
 
732
759
  /* collect stats on all samples */
733
760
  for (u=0; u<nbFiles; u++) {
734
- ZDICT_countEStats(esr, params,
761
+ ZDICT_countEStats(esr, &params,
735
762
  countLit, offcodeCount, matchLengthCount, litLengthCount, repOffset,
736
763
  (const char*)srcBuffer + pos, fileSizes[u],
737
764
  notificationLevel);
@@ -741,7 +768,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
741
768
  /* analyze, build stats, starting with literals */
742
769
  { size_t maxNbBits = HUF_buildCTable (hufTable, countLit, 255, huffLog);
743
770
  if (HUF_isError(maxNbBits)) {
744
- eSize = ERROR(GENERIC);
771
+ eSize = maxNbBits;
745
772
  DISPLAYLEVEL(1, " HUF_buildCTable error \n");
746
773
  goto _cleanup;
747
774
  }
@@ -762,27 +789,27 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
762
789
  /* note : the result of this phase should be used to better appreciate the impact on statistics */
763
790
 
764
791
  total=0; for (u=0; u<=offcodeMax; u++) total+=offcodeCount[u];
765
- errorCode = FSE_normalizeCount(offcodeNCount, Offlog, offcodeCount, total, offcodeMax);
792
+ errorCode = FSE_normalizeCount(offcodeNCount, Offlog, offcodeCount, total, offcodeMax, /* useLowProbCount */ 1);
766
793
  if (FSE_isError(errorCode)) {
767
- eSize = ERROR(GENERIC);
794
+ eSize = errorCode;
768
795
  DISPLAYLEVEL(1, "FSE_normalizeCount error with offcodeCount \n");
769
796
  goto _cleanup;
770
797
  }
771
798
  Offlog = (U32)errorCode;
772
799
 
773
800
  total=0; for (u=0; u<=MaxML; u++) total+=matchLengthCount[u];
774
- errorCode = FSE_normalizeCount(matchLengthNCount, mlLog, matchLengthCount, total, MaxML);
801
+ errorCode = FSE_normalizeCount(matchLengthNCount, mlLog, matchLengthCount, total, MaxML, /* useLowProbCount */ 1);
775
802
  if (FSE_isError(errorCode)) {
776
- eSize = ERROR(GENERIC);
803
+ eSize = errorCode;
777
804
  DISPLAYLEVEL(1, "FSE_normalizeCount error with matchLengthCount \n");
778
805
  goto _cleanup;
779
806
  }
780
807
  mlLog = (U32)errorCode;
781
808
 
782
809
  total=0; for (u=0; u<=MaxLL; u++) total+=litLengthCount[u];
783
- errorCode = FSE_normalizeCount(litLengthNCount, llLog, litLengthCount, total, MaxLL);
810
+ errorCode = FSE_normalizeCount(litLengthNCount, llLog, litLengthCount, total, MaxLL, /* useLowProbCount */ 1);
784
811
  if (FSE_isError(errorCode)) {
785
- eSize = ERROR(GENERIC);
812
+ eSize = errorCode;
786
813
  DISPLAYLEVEL(1, "FSE_normalizeCount error with litLengthCount \n");
787
814
  goto _cleanup;
788
815
  }
@@ -791,7 +818,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
791
818
  /* write result to buffer */
792
819
  { size_t const hhSize = HUF_writeCTable(dstPtr, maxDstSize, hufTable, 255, huffLog);
793
820
  if (HUF_isError(hhSize)) {
794
- eSize = ERROR(GENERIC);
821
+ eSize = hhSize;
795
822
  DISPLAYLEVEL(1, "HUF_writeCTable error \n");
796
823
  goto _cleanup;
797
824
  }
@@ -802,7 +829,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
802
829
 
803
830
  { size_t const ohSize = FSE_writeNCount(dstPtr, maxDstSize, offcodeNCount, OFFCODE_MAX, Offlog);
804
831
  if (FSE_isError(ohSize)) {
805
- eSize = ERROR(GENERIC);
832
+ eSize = ohSize;
806
833
  DISPLAYLEVEL(1, "FSE_writeNCount error with offcodeNCount \n");
807
834
  goto _cleanup;
808
835
  }
@@ -813,7 +840,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
813
840
 
814
841
  { size_t const mhSize = FSE_writeNCount(dstPtr, maxDstSize, matchLengthNCount, MaxML, mlLog);
815
842
  if (FSE_isError(mhSize)) {
816
- eSize = ERROR(GENERIC);
843
+ eSize = mhSize;
817
844
  DISPLAYLEVEL(1, "FSE_writeNCount error with matchLengthNCount \n");
818
845
  goto _cleanup;
819
846
  }
@@ -824,7 +851,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
824
851
 
825
852
  { size_t const lhSize = FSE_writeNCount(dstPtr, maxDstSize, litLengthNCount, MaxLL, llLog);
826
853
  if (FSE_isError(lhSize)) {
827
- eSize = ERROR(GENERIC);
854
+ eSize = lhSize;
828
855
  DISPLAYLEVEL(1, "FSE_writeNCount error with litlengthNCount \n");
829
856
  goto _cleanup;
830
857
  }
@@ -834,7 +861,7 @@ static size_t ZDICT_analyzeEntropy(void* dstBuffer, size_t maxDstSize,
834
861
  }
835
862
 
836
863
  if (maxDstSize<12) {
837
- eSize = ERROR(GENERIC);
864
+ eSize = ERROR(dstSize_tooSmall);
838
865
  DISPLAYLEVEL(1, "not enough space to write RepOffsets \n");
839
866
  goto _cleanup;
840
867
  }
@@ -869,7 +896,7 @@ size_t ZDICT_finalizeDictionary(void* dictBuffer, size_t dictBufferCapacity,
869
896
  size_t hSize;
870
897
  #define HBUFFSIZE 256 /* should prove large enough for all entropy headers */
871
898
  BYTE header[HBUFFSIZE];
872
- int const compressionLevel = (params.compressionLevel == 0) ? g_compressionLevel_default : params.compressionLevel;
899
+ int const compressionLevel = (params.compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT : params.compressionLevel;
873
900
  U32 const notificationLevel = params.notificationLevel;
874
901
 
875
902
  /* check conditions */
@@ -915,7 +942,7 @@ static size_t ZDICT_addEntropyTablesFromBuffer_advanced(
915
942
  const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples,
916
943
  ZDICT_params_t params)
917
944
  {
918
- int const compressionLevel = (params.compressionLevel == 0) ? g_compressionLevel_default : params.compressionLevel;
945
+ int const compressionLevel = (params.compressionLevel == 0) ? ZSTD_CLEVEL_DEFAULT : params.compressionLevel;
919
946
  U32 const notificationLevel = params.notificationLevel;
920
947
  size_t hSize = 8;
921
948
 
@@ -944,16 +971,11 @@ static size_t ZDICT_addEntropyTablesFromBuffer_advanced(
944
971
  return MIN(dictBufferCapacity, hSize+dictContentSize);
945
972
  }
946
973
 
947
- /* Hidden declaration for dbio.c */
948
- size_t ZDICT_trainFromBuffer_unsafe_legacy(
949
- void* dictBuffer, size_t maxDictSize,
950
- const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples,
951
- ZDICT_legacy_params_t params);
952
974
  /*! ZDICT_trainFromBuffer_unsafe_legacy() :
953
- * Warning : `samplesBuffer` must be followed by noisy guard band.
975
+ * Warning : `samplesBuffer` must be followed by noisy guard band !!!
954
976
  * @return : size of dictionary, or an error code which can be tested with ZDICT_isError()
955
977
  */
956
- size_t ZDICT_trainFromBuffer_unsafe_legacy(
978
+ static size_t ZDICT_trainFromBuffer_unsafe_legacy(
957
979
  void* dictBuffer, size_t maxDictSize,
958
980
  const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples,
959
981
  ZDICT_legacy_params_t params)
@@ -1090,8 +1112,8 @@ size_t ZDICT_trainFromBuffer(void* dictBuffer, size_t dictBufferCapacity,
1090
1112
  memset(&params, 0, sizeof(params));
1091
1113
  params.d = 8;
1092
1114
  params.steps = 4;
1093
- /* Default to level 6 since no compression level information is available */
1094
- params.zParams.compressionLevel = 3;
1115
+ /* Use default level since no compression level information is available */
1116
+ params.zParams.compressionLevel = ZSTD_CLEVEL_DEFAULT;
1095
1117
  #if defined(DEBUGLEVEL) && (DEBUGLEVEL>=1)
1096
1118
  params.zParams.notificationLevel = DEBUGLEVEL;
1097
1119
  #endif