zstd-ruby 1.4.4.0 → 1.5.5.0
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/.gitignore +2 -0
- data/README.md +78 -5
- data/Rakefile +8 -2
- data/ext/zstdruby/common.h +15 -0
- data/ext/zstdruby/extconf.rb +3 -2
- data/ext/zstdruby/libzstd/common/allocations.h +55 -0
- data/ext/zstdruby/libzstd/common/bits.h +200 -0
- data/ext/zstdruby/libzstd/common/bitstream.h +74 -97
- data/ext/zstdruby/libzstd/common/compiler.h +219 -20
- data/ext/zstdruby/libzstd/common/cpu.h +1 -3
- data/ext/zstdruby/libzstd/common/debug.c +11 -31
- data/ext/zstdruby/libzstd/common/debug.h +22 -49
- data/ext/zstdruby/libzstd/common/entropy_common.c +184 -80
- data/ext/zstdruby/libzstd/common/error_private.c +11 -2
- data/ext/zstdruby/libzstd/common/error_private.h +87 -4
- data/ext/zstdruby/libzstd/common/fse.h +47 -116
- data/ext/zstdruby/libzstd/common/fse_decompress.c +127 -127
- data/ext/zstdruby/libzstd/common/huf.h +112 -197
- data/ext/zstdruby/libzstd/common/mem.h +124 -142
- data/ext/zstdruby/libzstd/common/pool.c +54 -27
- data/ext/zstdruby/libzstd/common/pool.h +11 -5
- data/ext/zstdruby/libzstd/common/portability_macros.h +156 -0
- data/ext/zstdruby/libzstd/common/threading.c +78 -22
- data/ext/zstdruby/libzstd/common/threading.h +9 -13
- data/ext/zstdruby/libzstd/common/xxhash.c +15 -873
- data/ext/zstdruby/libzstd/common/xxhash.h +5572 -191
- data/ext/zstdruby/libzstd/common/zstd_common.c +2 -37
- data/ext/zstdruby/libzstd/common/zstd_deps.h +111 -0
- data/ext/zstdruby/libzstd/common/zstd_internal.h +186 -144
- data/ext/zstdruby/libzstd/common/zstd_trace.h +163 -0
- data/ext/zstdruby/libzstd/compress/clevels.h +134 -0
- data/ext/zstdruby/libzstd/compress/fse_compress.c +99 -196
- data/ext/zstdruby/libzstd/compress/hist.c +41 -63
- data/ext/zstdruby/libzstd/compress/hist.h +13 -33
- data/ext/zstdruby/libzstd/compress/huf_compress.c +968 -331
- data/ext/zstdruby/libzstd/compress/zstd_compress.c +4120 -1191
- data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +688 -159
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +121 -40
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.h +16 -6
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +62 -35
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +10 -3
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +577 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.h +32 -0
- data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +322 -115
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +394 -154
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +4 -3
- data/ext/zstdruby/libzstd/compress/zstd_fast.c +729 -253
- data/ext/zstdruby/libzstd/compress/zstd_fast.h +4 -3
- data/ext/zstdruby/libzstd/compress/zstd_lazy.c +1289 -247
- data/ext/zstdruby/libzstd/compress/zstd_lazy.h +61 -1
- data/ext/zstdruby/libzstd/compress/zstd_ldm.c +339 -212
- data/ext/zstdruby/libzstd/compress/zstd_ldm.h +15 -3
- data/ext/zstdruby/libzstd/compress/zstd_ldm_geartab.h +106 -0
- data/ext/zstdruby/libzstd/compress/zstd_opt.c +508 -282
- data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +217 -466
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +35 -114
- data/ext/zstdruby/libzstd/decompress/huf_decompress.c +1220 -572
- data/ext/zstdruby/libzstd/decompress/huf_decompress_amd64.S +576 -0
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +23 -19
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +3 -3
- data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +859 -273
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +1244 -375
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +21 -7
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +74 -11
- data/ext/zstdruby/libzstd/dictBuilder/cover.c +75 -54
- data/ext/zstdruby/libzstd/dictBuilder/cover.h +20 -9
- data/ext/zstdruby/libzstd/dictBuilder/divsufsort.c +1 -1
- data/ext/zstdruby/libzstd/dictBuilder/fastcover.c +55 -36
- data/ext/zstdruby/libzstd/dictBuilder/zdict.c +126 -110
- data/ext/zstdruby/libzstd/{dictBuilder/zdict.h → zdict.h} +248 -56
- data/ext/zstdruby/libzstd/zstd.h +1277 -306
- data/ext/zstdruby/libzstd/{common/zstd_errors.h → zstd_errors.h} +29 -8
- data/ext/zstdruby/main.c +20 -0
- data/ext/zstdruby/skippable_frame.c +63 -0
- data/ext/zstdruby/streaming_compress.c +177 -0
- data/ext/zstdruby/streaming_compress.h +5 -0
- data/ext/zstdruby/streaming_decompress.c +123 -0
- data/ext/zstdruby/zstdruby.c +114 -32
- data/lib/zstd-ruby/version.rb +1 -1
- data/lib/zstd-ruby.rb +0 -1
- data/zstd-ruby.gemspec +1 -1
- metadata +24 -39
- data/.travis.yml +0 -14
- data/ext/zstdruby/libzstd/.gitignore +0 -3
- data/ext/zstdruby/libzstd/BUCK +0 -234
- data/ext/zstdruby/libzstd/Makefile +0 -289
- data/ext/zstdruby/libzstd/README.md +0 -159
- data/ext/zstdruby/libzstd/deprecated/zbuff.h +0 -214
- data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +0 -26
- data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +0 -147
- data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +0 -75
- data/ext/zstdruby/libzstd/dll/example/Makefile +0 -47
- data/ext/zstdruby/libzstd/dll/example/README.md +0 -69
- data/ext/zstdruby/libzstd/dll/example/build_package.bat +0 -20
- data/ext/zstdruby/libzstd/dll/example/fullbench-dll.sln +0 -25
- data/ext/zstdruby/libzstd/dll/example/fullbench-dll.vcxproj +0 -181
- data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +0 -415
- data/ext/zstdruby/libzstd/legacy/zstd_v01.c +0 -2152
- data/ext/zstdruby/libzstd/legacy/zstd_v01.h +0 -94
- data/ext/zstdruby/libzstd/legacy/zstd_v02.c +0 -3514
- data/ext/zstdruby/libzstd/legacy/zstd_v02.h +0 -93
- data/ext/zstdruby/libzstd/legacy/zstd_v03.c +0 -3156
- data/ext/zstdruby/libzstd/legacy/zstd_v03.h +0 -93
- data/ext/zstdruby/libzstd/legacy/zstd_v04.c +0 -3641
- data/ext/zstdruby/libzstd/legacy/zstd_v04.h +0 -142
- data/ext/zstdruby/libzstd/legacy/zstd_v05.c +0 -4046
- data/ext/zstdruby/libzstd/legacy/zstd_v05.h +0 -162
- data/ext/zstdruby/libzstd/legacy/zstd_v06.c +0 -4150
- data/ext/zstdruby/libzstd/legacy/zstd_v06.h +0 -172
- data/ext/zstdruby/libzstd/legacy/zstd_v07.c +0 -4533
- data/ext/zstdruby/libzstd/legacy/zstd_v07.h +0 -187
- data/ext/zstdruby/libzstd/libzstd.pc.in +0 -15
- data/ext/zstdruby/zstdruby.h +0 -6
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
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,24 +16,33 @@
|
|
|
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"
|
|
12
|
-
#include "cover.h"
|
|
13
|
-
#include "zstd_internal.h" /* includes zstd.h */
|
|
14
19
|
#ifndef ZDICT_STATIC_LINKING_ONLY
|
|
15
|
-
#define ZDICT_STATIC_LINKING_ONLY
|
|
20
|
+
# define ZDICT_STATIC_LINKING_ONLY
|
|
16
21
|
#endif
|
|
17
|
-
|
|
22
|
+
|
|
23
|
+
#include "../common/mem.h" /* read */
|
|
24
|
+
#include "../common/pool.h"
|
|
25
|
+
#include "../common/threading.h"
|
|
26
|
+
#include "../common/zstd_internal.h" /* includes zstd.h */
|
|
27
|
+
#include "../compress/zstd_compress_internal.h" /* ZSTD_hash*() */
|
|
28
|
+
#include "../zdict.h"
|
|
29
|
+
#include "cover.h"
|
|
18
30
|
|
|
19
31
|
|
|
20
32
|
/*-*************************************
|
|
21
33
|
* Constants
|
|
22
34
|
***************************************/
|
|
35
|
+
/**
|
|
36
|
+
* There are 32bit indexes used to ref samples, so limit samples size to 4GB
|
|
37
|
+
* on 64bit builds.
|
|
38
|
+
* For 32bit builds we choose 1 GB.
|
|
39
|
+
* Most 32bit platforms have 2GB user-mode addressable space and we allocate a large
|
|
40
|
+
* contiguous buffer, so 1GB is already a high limit.
|
|
41
|
+
*/
|
|
23
42
|
#define FASTCOVER_MAX_SAMPLES_SIZE (sizeof(size_t) == 8 ? ((unsigned)-1) : ((unsigned)1 GB))
|
|
24
43
|
#define FASTCOVER_MAX_F 31
|
|
25
44
|
#define FASTCOVER_MAX_ACCEL 10
|
|
26
|
-
#define
|
|
45
|
+
#define FASTCOVER_DEFAULT_SPLITPOINT 0.75
|
|
27
46
|
#define DEFAULT_F 20
|
|
28
47
|
#define DEFAULT_ACCEL 1
|
|
29
48
|
|
|
@@ -31,50 +50,50 @@
|
|
|
31
50
|
/*-*************************************
|
|
32
51
|
* Console display
|
|
33
52
|
***************************************/
|
|
34
|
-
|
|
53
|
+
#ifndef LOCALDISPLAYLEVEL
|
|
54
|
+
static int g_displayLevel = 0;
|
|
55
|
+
#endif
|
|
56
|
+
#undef DISPLAY
|
|
35
57
|
#define DISPLAY(...) \
|
|
36
58
|
{ \
|
|
37
59
|
fprintf(stderr, __VA_ARGS__); \
|
|
38
60
|
fflush(stderr); \
|
|
39
61
|
}
|
|
62
|
+
#undef LOCALDISPLAYLEVEL
|
|
40
63
|
#define LOCALDISPLAYLEVEL(displayLevel, l, ...) \
|
|
41
64
|
if (displayLevel >= l) { \
|
|
42
65
|
DISPLAY(__VA_ARGS__); \
|
|
43
66
|
} /* 0 : no display; 1: errors; 2: default; 3: details; 4: debug */
|
|
67
|
+
#undef DISPLAYLEVEL
|
|
44
68
|
#define DISPLAYLEVEL(l, ...) LOCALDISPLAYLEVEL(g_displayLevel, l, __VA_ARGS__)
|
|
45
69
|
|
|
70
|
+
#ifndef LOCALDISPLAYUPDATE
|
|
71
|
+
static const clock_t g_refreshRate = CLOCKS_PER_SEC * 15 / 100;
|
|
72
|
+
static clock_t g_time = 0;
|
|
73
|
+
#endif
|
|
74
|
+
#undef LOCALDISPLAYUPDATE
|
|
46
75
|
#define LOCALDISPLAYUPDATE(displayLevel, l, ...) \
|
|
47
76
|
if (displayLevel >= l) { \
|
|
48
|
-
if ((clock() - g_time >
|
|
77
|
+
if ((clock() - g_time > g_refreshRate) || (displayLevel >= 4)) { \
|
|
49
78
|
g_time = clock(); \
|
|
50
79
|
DISPLAY(__VA_ARGS__); \
|
|
51
80
|
} \
|
|
52
81
|
}
|
|
82
|
+
#undef DISPLAYUPDATE
|
|
53
83
|
#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
84
|
|
|
57
85
|
|
|
58
86
|
/*-*************************************
|
|
59
87
|
* Hash Functions
|
|
60
88
|
***************************************/
|
|
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
89
|
/**
|
|
71
|
-
* Hash the d-byte value pointed to by p and mod 2^f
|
|
90
|
+
* Hash the d-byte value pointed to by p and mod 2^f into the frequency vector
|
|
72
91
|
*/
|
|
73
|
-
static size_t FASTCOVER_hashPtrToIndex(const void* p, U32
|
|
92
|
+
static size_t FASTCOVER_hashPtrToIndex(const void* p, U32 f, unsigned d) {
|
|
74
93
|
if (d == 6) {
|
|
75
|
-
return ZSTD_hash6Ptr(p,
|
|
94
|
+
return ZSTD_hash6Ptr(p, f);
|
|
76
95
|
}
|
|
77
|
-
return ZSTD_hash8Ptr(p,
|
|
96
|
+
return ZSTD_hash8Ptr(p, f);
|
|
78
97
|
}
|
|
79
98
|
|
|
80
99
|
|
|
@@ -285,7 +304,7 @@ FASTCOVER_computeFrequency(U32* freqs, const FASTCOVER_ctx_t* ctx)
|
|
|
285
304
|
|
|
286
305
|
/**
|
|
287
306
|
* Prepare a context for dictionary building.
|
|
288
|
-
* The context is only dependent on the parameter `d` and can used multiple
|
|
307
|
+
* The context is only dependent on the parameter `d` and can be used multiple
|
|
289
308
|
* times.
|
|
290
309
|
* Returns 0 on success or error code on error.
|
|
291
310
|
* The context must be destroyed with `FASTCOVER_ctx_destroy()`.
|
|
@@ -451,20 +470,20 @@ typedef struct FASTCOVER_tryParameters_data_s {
|
|
|
451
470
|
* This function is thread safe if zstd is compiled with multithreaded support.
|
|
452
471
|
* It takes its parameters as an *OWNING* opaque pointer to support threading.
|
|
453
472
|
*/
|
|
454
|
-
static void FASTCOVER_tryParameters(void
|
|
473
|
+
static void FASTCOVER_tryParameters(void* opaque)
|
|
455
474
|
{
|
|
456
475
|
/* Save parameters as local variables */
|
|
457
|
-
FASTCOVER_tryParameters_data_t *const data = (FASTCOVER_tryParameters_data_t
|
|
476
|
+
FASTCOVER_tryParameters_data_t *const data = (FASTCOVER_tryParameters_data_t*)opaque;
|
|
458
477
|
const FASTCOVER_ctx_t *const ctx = data->ctx;
|
|
459
478
|
const ZDICT_cover_params_t parameters = data->parameters;
|
|
460
479
|
size_t dictBufferCapacity = data->dictBufferCapacity;
|
|
461
480
|
size_t totalCompressedSize = ERROR(GENERIC);
|
|
462
481
|
/* Initialize array to keep track of frequency of dmer within activeSegment */
|
|
463
|
-
U16* segmentFreqs = (U16
|
|
482
|
+
U16* segmentFreqs = (U16*)calloc(((U64)1 << ctx->f), sizeof(U16));
|
|
464
483
|
/* Allocate space for hash table, dict, and freqs */
|
|
465
|
-
BYTE *const dict = (BYTE
|
|
484
|
+
BYTE *const dict = (BYTE*)malloc(dictBufferCapacity);
|
|
466
485
|
COVER_dictSelection_t selection = COVER_dictSelectionError(ERROR(GENERIC));
|
|
467
|
-
U32
|
|
486
|
+
U32* freqs = (U32*) malloc(((U64)1 << ctx->f) * sizeof(U32));
|
|
468
487
|
if (!segmentFreqs || !dict || !freqs) {
|
|
469
488
|
DISPLAYLEVEL(1, "Failed to allocate buffers: out of memory\n");
|
|
470
489
|
goto _cleanup;
|
|
@@ -476,7 +495,7 @@ static void FASTCOVER_tryParameters(void *opaque)
|
|
|
476
495
|
parameters, segmentFreqs);
|
|
477
496
|
|
|
478
497
|
const unsigned nbFinalizeSamples = (unsigned)(ctx->nbTrainSamples * ctx->accelParams.finalize / 100);
|
|
479
|
-
selection = COVER_selectDict(dict + tail, dictBufferCapacity - tail,
|
|
498
|
+
selection = COVER_selectDict(dict + tail, dictBufferCapacity, dictBufferCapacity - tail,
|
|
480
499
|
ctx->samples, ctx->samplesSizes, nbFinalizeSamples, ctx->nbTrainSamples, ctx->nbSamples, parameters, ctx->offsets,
|
|
481
500
|
totalCompressedSize);
|
|
482
501
|
|
|
@@ -537,7 +556,7 @@ ZDICT_trainFromBuffer_fastCover(void* dictBuffer, size_t dictBufferCapacity,
|
|
|
537
556
|
ZDICT_cover_params_t coverParams;
|
|
538
557
|
FASTCOVER_accel_t accelParams;
|
|
539
558
|
/* Initialize global data */
|
|
540
|
-
g_displayLevel = parameters.zParams.notificationLevel;
|
|
559
|
+
g_displayLevel = (int)parameters.zParams.notificationLevel;
|
|
541
560
|
/* Assign splitPoint and f if not provided */
|
|
542
561
|
parameters.splitPoint = 1.0;
|
|
543
562
|
parameters.f = parameters.f == 0 ? DEFAULT_F : parameters.f;
|
|
@@ -607,7 +626,7 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
|
|
|
607
626
|
/* constants */
|
|
608
627
|
const unsigned nbThreads = parameters->nbThreads;
|
|
609
628
|
const double splitPoint =
|
|
610
|
-
parameters->splitPoint <= 0.0 ?
|
|
629
|
+
parameters->splitPoint <= 0.0 ? FASTCOVER_DEFAULT_SPLITPOINT : parameters->splitPoint;
|
|
611
630
|
const unsigned kMinD = parameters->d == 0 ? 6 : parameters->d;
|
|
612
631
|
const unsigned kMaxD = parameters->d == 0 ? 8 : parameters->d;
|
|
613
632
|
const unsigned kMinK = parameters->k == 0 ? 50 : parameters->k;
|
|
@@ -620,7 +639,7 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
|
|
|
620
639
|
const unsigned accel = parameters->accel == 0 ? DEFAULT_ACCEL : parameters->accel;
|
|
621
640
|
const unsigned shrinkDict = 0;
|
|
622
641
|
/* Local variables */
|
|
623
|
-
const int displayLevel = parameters->zParams.notificationLevel;
|
|
642
|
+
const int displayLevel = (int)parameters->zParams.notificationLevel;
|
|
624
643
|
unsigned iteration = 1;
|
|
625
644
|
unsigned d;
|
|
626
645
|
unsigned k;
|
|
@@ -704,7 +723,7 @@ ZDICT_optimizeTrainFromBuffer_fastCover(
|
|
|
704
723
|
data->parameters.splitPoint = splitPoint;
|
|
705
724
|
data->parameters.steps = kSteps;
|
|
706
725
|
data->parameters.shrinkDict = shrinkDict;
|
|
707
|
-
data->parameters.zParams.notificationLevel = g_displayLevel;
|
|
726
|
+
data->parameters.zParams.notificationLevel = (unsigned)g_displayLevel;
|
|
708
727
|
/* Check the parameters */
|
|
709
728
|
if (!FASTCOVER_checkParameters(data->parameters, dictBufferCapacity,
|
|
710
729
|
data->ctx->f, accel)) {
|