zstd-ruby 1.4.4.0 → 1.5.1.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/.github/dependabot.yml +8 -0
- data/.github/workflows/ruby.yml +35 -0
- data/README.md +2 -2
- data/ext/zstdruby/extconf.rb +1 -0
- data/ext/zstdruby/libzstd/BUCK +5 -7
- data/ext/zstdruby/libzstd/Makefile +241 -173
- data/ext/zstdruby/libzstd/README.md +76 -18
- data/ext/zstdruby/libzstd/common/bitstream.h +75 -57
- data/ext/zstdruby/libzstd/common/compiler.h +196 -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 +208 -76
- data/ext/zstdruby/libzstd/common/error_private.c +3 -1
- data/ext/zstdruby/libzstd/common/error_private.h +87 -4
- data/ext/zstdruby/libzstd/common/fse.h +51 -42
- data/ext/zstdruby/libzstd/common/fse_decompress.c +149 -57
- data/ext/zstdruby/libzstd/common/huf.h +60 -54
- data/ext/zstdruby/libzstd/common/mem.h +87 -98
- data/ext/zstdruby/libzstd/common/pool.c +23 -17
- data/ext/zstdruby/libzstd/common/pool.h +3 -3
- data/ext/zstdruby/libzstd/common/portability_macros.h +131 -0
- data/ext/zstdruby/libzstd/common/threading.c +10 -8
- data/ext/zstdruby/libzstd/common/threading.h +4 -3
- 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 +10 -10
- data/ext/zstdruby/libzstd/common/zstd_deps.h +111 -0
- data/ext/zstdruby/libzstd/common/zstd_internal.h +252 -108
- 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 +105 -85
- 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 +831 -259
- data/ext/zstdruby/libzstd/compress/zstd_compress.c +3213 -1007
- data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +493 -71
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +21 -16
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.h +4 -2
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +51 -24
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +10 -3
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +573 -0
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.h +32 -0
- data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +208 -81
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +315 -137
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +2 -2
- data/ext/zstdruby/libzstd/compress/zstd_fast.c +319 -128
- data/ext/zstdruby/libzstd/compress/zstd_fast.h +2 -2
- data/ext/zstdruby/libzstd/compress/zstd_lazy.c +1156 -171
- data/ext/zstdruby/libzstd/compress/zstd_lazy.h +59 -1
- data/ext/zstdruby/libzstd/compress/zstd_ldm.c +331 -206
- 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 +403 -226
- data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +188 -453
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +32 -114
- data/ext/zstdruby/libzstd/decompress/huf_decompress.c +1065 -410
- data/ext/zstdruby/libzstd/decompress/huf_decompress_amd64.S +571 -0
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +20 -16
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +3 -3
- data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +691 -230
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +1072 -323
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +16 -7
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +71 -10
- data/ext/zstdruby/libzstd/deprecated/zbuff.h +3 -3
- data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +2 -2
- data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +24 -4
- data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +1 -1
- data/ext/zstdruby/libzstd/dictBuilder/cover.c +57 -40
- 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 +54 -35
- data/ext/zstdruby/libzstd/dictBuilder/zdict.c +151 -57
- data/ext/zstdruby/libzstd/dll/example/Makefile +2 -1
- data/ext/zstdruby/libzstd/dll/example/README.md +16 -22
- data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +4 -4
- data/ext/zstdruby/libzstd/legacy/zstd_v01.c +25 -19
- data/ext/zstdruby/libzstd/legacy/zstd_v01.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v02.c +18 -14
- data/ext/zstdruby/libzstd/legacy/zstd_v02.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v03.c +18 -14
- data/ext/zstdruby/libzstd/legacy/zstd_v03.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v04.c +22 -16
- data/ext/zstdruby/libzstd/legacy/zstd_v04.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v05.c +29 -25
- data/ext/zstdruby/libzstd/legacy/zstd_v05.h +2 -2
- data/ext/zstdruby/libzstd/legacy/zstd_v06.c +29 -25
- data/ext/zstdruby/libzstd/legacy/zstd_v06.h +1 -1
- data/ext/zstdruby/libzstd/legacy/zstd_v07.c +34 -26
- data/ext/zstdruby/libzstd/legacy/zstd_v07.h +1 -1
- data/ext/zstdruby/libzstd/libzstd.mk +185 -0
- data/ext/zstdruby/libzstd/libzstd.pc.in +4 -3
- data/ext/zstdruby/libzstd/modulemap/module.modulemap +4 -0
- data/ext/zstdruby/libzstd/{dictBuilder/zdict.h → zdict.h} +201 -31
- data/ext/zstdruby/libzstd/zstd.h +760 -234
- data/ext/zstdruby/libzstd/{common/zstd_errors.h → zstd_errors.h} +3 -1
- data/ext/zstdruby/zstdruby.c +2 -2
- data/lib/zstd-ruby/version.rb +1 -1
- metadata +20 -9
- data/.travis.yml +0 -14
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 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
|
|
@@ -15,9 +15,9 @@
|
|
|
15
15
|
/*-*******************************************************
|
|
16
16
|
* Dependencies
|
|
17
17
|
*********************************************************/
|
|
18
|
-
#include
|
|
19
|
-
#include "zstd.h" /* DCtx, and some public functions */
|
|
20
|
-
#include "zstd_internal.h" /* blockProperties_t, and some public functions */
|
|
18
|
+
#include "../common/zstd_deps.h" /* size_t */
|
|
19
|
+
#include "../zstd.h" /* DCtx, and some public functions */
|
|
20
|
+
#include "../common/zstd_internal.h" /* blockProperties_t, and some public functions */
|
|
21
21
|
#include "zstd_decompress_internal.h" /* ZSTD_seqSymbol */
|
|
22
22
|
|
|
23
23
|
|
|
@@ -33,6 +33,12 @@
|
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
35
|
|
|
36
|
+
/* Streaming state is used to inform allocation of the literal buffer */
|
|
37
|
+
typedef enum {
|
|
38
|
+
not_streaming = 0,
|
|
39
|
+
is_streaming = 1
|
|
40
|
+
} streaming_operation;
|
|
41
|
+
|
|
36
42
|
/* ZSTD_decompressBlock_internal() :
|
|
37
43
|
* decompress block, starting at `src`,
|
|
38
44
|
* into destination buffer `dst`.
|
|
@@ -41,19 +47,22 @@
|
|
|
41
47
|
*/
|
|
42
48
|
size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
|
|
43
49
|
void* dst, size_t dstCapacity,
|
|
44
|
-
const void* src, size_t srcSize, const int frame);
|
|
50
|
+
const void* src, size_t srcSize, const int frame, const streaming_operation streaming);
|
|
45
51
|
|
|
46
52
|
/* ZSTD_buildFSETable() :
|
|
47
53
|
* generate FSE decoding table for one symbol (ll, ml or off)
|
|
48
54
|
* this function must be called with valid parameters only
|
|
49
55
|
* (dt is large enough, normalizedCounter distribution total is a power of 2, max is within range, etc.)
|
|
50
56
|
* in which case it cannot fail.
|
|
57
|
+
* The workspace must be 4-byte aligned and at least ZSTD_BUILD_FSE_TABLE_WKSP_SIZE bytes, which is
|
|
58
|
+
* defined in zstd_decompress_internal.h.
|
|
51
59
|
* Internal use only.
|
|
52
60
|
*/
|
|
53
61
|
void ZSTD_buildFSETable(ZSTD_seqSymbol* dt,
|
|
54
62
|
const short* normalizedCounter, unsigned maxSymbolValue,
|
|
55
|
-
const U32* baseValue, const
|
|
56
|
-
unsigned tableLog
|
|
63
|
+
const U32* baseValue, const U8* nbAdditionalBits,
|
|
64
|
+
unsigned tableLog, void* wksp, size_t wkspSize,
|
|
65
|
+
int bmi2);
|
|
57
66
|
|
|
58
67
|
|
|
59
68
|
#endif /* ZSTD_DEC_BLOCK_H */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 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
|
|
@@ -19,34 +19,34 @@
|
|
|
19
19
|
/*-*******************************************************
|
|
20
20
|
* Dependencies
|
|
21
21
|
*********************************************************/
|
|
22
|
-
#include "mem.h" /* BYTE, U16, U32 */
|
|
23
|
-
#include "zstd_internal.h" /*
|
|
22
|
+
#include "../common/mem.h" /* BYTE, U16, U32 */
|
|
23
|
+
#include "../common/zstd_internal.h" /* constants : MaxLL, MaxML, MaxOff, LLFSELog, etc. */
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
/*-*******************************************************
|
|
28
28
|
* Constants
|
|
29
29
|
*********************************************************/
|
|
30
|
-
static const U32 LL_base[MaxLL+1] = {
|
|
30
|
+
static UNUSED_ATTR const U32 LL_base[MaxLL+1] = {
|
|
31
31
|
0, 1, 2, 3, 4, 5, 6, 7,
|
|
32
32
|
8, 9, 10, 11, 12, 13, 14, 15,
|
|
33
33
|
16, 18, 20, 22, 24, 28, 32, 40,
|
|
34
34
|
48, 64, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000,
|
|
35
35
|
0x2000, 0x4000, 0x8000, 0x10000 };
|
|
36
36
|
|
|
37
|
-
static const U32 OF_base[MaxOff+1] = {
|
|
37
|
+
static UNUSED_ATTR const U32 OF_base[MaxOff+1] = {
|
|
38
38
|
0, 1, 1, 5, 0xD, 0x1D, 0x3D, 0x7D,
|
|
39
39
|
0xFD, 0x1FD, 0x3FD, 0x7FD, 0xFFD, 0x1FFD, 0x3FFD, 0x7FFD,
|
|
40
40
|
0xFFFD, 0x1FFFD, 0x3FFFD, 0x7FFFD, 0xFFFFD, 0x1FFFFD, 0x3FFFFD, 0x7FFFFD,
|
|
41
41
|
0xFFFFFD, 0x1FFFFFD, 0x3FFFFFD, 0x7FFFFFD, 0xFFFFFFD, 0x1FFFFFFD, 0x3FFFFFFD, 0x7FFFFFFD };
|
|
42
42
|
|
|
43
|
-
static const
|
|
43
|
+
static UNUSED_ATTR const U8 OF_bits[MaxOff+1] = {
|
|
44
44
|
0, 1, 2, 3, 4, 5, 6, 7,
|
|
45
45
|
8, 9, 10, 11, 12, 13, 14, 15,
|
|
46
46
|
16, 17, 18, 19, 20, 21, 22, 23,
|
|
47
47
|
24, 25, 26, 27, 28, 29, 30, 31 };
|
|
48
48
|
|
|
49
|
-
static const U32 ML_base[MaxML+1] = {
|
|
49
|
+
static UNUSED_ATTR const U32 ML_base[MaxML+1] = {
|
|
50
50
|
3, 4, 5, 6, 7, 8, 9, 10,
|
|
51
51
|
11, 12, 13, 14, 15, 16, 17, 18,
|
|
52
52
|
19, 20, 21, 22, 23, 24, 25, 26,
|
|
@@ -73,12 +73,16 @@ static const U32 ML_base[MaxML+1] = {
|
|
|
73
73
|
|
|
74
74
|
#define SEQSYMBOL_TABLE_SIZE(log) (1 + (1 << (log)))
|
|
75
75
|
|
|
76
|
+
#define ZSTD_BUILD_FSE_TABLE_WKSP_SIZE (sizeof(S16) * (MaxSeq + 1) + (1u << MaxFSELog) + sizeof(U64))
|
|
77
|
+
#define ZSTD_BUILD_FSE_TABLE_WKSP_SIZE_U32 ((ZSTD_BUILD_FSE_TABLE_WKSP_SIZE + sizeof(U32) - 1) / sizeof(U32))
|
|
78
|
+
|
|
76
79
|
typedef struct {
|
|
77
80
|
ZSTD_seqSymbol LLTable[SEQSYMBOL_TABLE_SIZE(LLFSELog)]; /* Note : Space reserved for FSE Tables */
|
|
78
81
|
ZSTD_seqSymbol OFTable[SEQSYMBOL_TABLE_SIZE(OffFSELog)]; /* is also used as temporary workspace while building hufTable during DDict creation */
|
|
79
82
|
ZSTD_seqSymbol MLTable[SEQSYMBOL_TABLE_SIZE(MLFSELog)]; /* and therefore must be at least HUF_DECOMPRESS_WORKSPACE_SIZE large */
|
|
80
83
|
HUF_DTable hufTable[HUF_DTABLE_SIZE(HufLog)]; /* can accommodate HUF_decompress4X */
|
|
81
84
|
U32 rep[ZSTD_REP_NUM];
|
|
85
|
+
U32 workspace[ZSTD_BUILD_FSE_TABLE_WKSP_SIZE_U32];
|
|
82
86
|
} ZSTD_entropyDTables_t;
|
|
83
87
|
|
|
84
88
|
typedef enum { ZSTDds_getFrameHeaderSize, ZSTDds_decodeFrameHeader,
|
|
@@ -95,6 +99,29 @@ typedef enum {
|
|
|
95
99
|
ZSTD_use_once = 1 /* Use the dictionary once and set to ZSTD_dont_use */
|
|
96
100
|
} ZSTD_dictUses_e;
|
|
97
101
|
|
|
102
|
+
/* Hashset for storing references to multiple ZSTD_DDict within ZSTD_DCtx */
|
|
103
|
+
typedef struct {
|
|
104
|
+
const ZSTD_DDict** ddictPtrTable;
|
|
105
|
+
size_t ddictPtrTableSize;
|
|
106
|
+
size_t ddictPtrCount;
|
|
107
|
+
} ZSTD_DDictHashSet;
|
|
108
|
+
|
|
109
|
+
#ifndef ZSTD_DECODER_INTERNAL_BUFFER
|
|
110
|
+
# define ZSTD_DECODER_INTERNAL_BUFFER (1 << 16)
|
|
111
|
+
#endif
|
|
112
|
+
|
|
113
|
+
#define ZSTD_LBMIN 64
|
|
114
|
+
#define ZSTD_LBMAX (128 << 10)
|
|
115
|
+
|
|
116
|
+
/* extra buffer, compensates when dst is not large enough to store litBuffer */
|
|
117
|
+
#define ZSTD_LITBUFFEREXTRASIZE BOUNDED(ZSTD_LBMIN, ZSTD_DECODER_INTERNAL_BUFFER, ZSTD_LBMAX)
|
|
118
|
+
|
|
119
|
+
typedef enum {
|
|
120
|
+
ZSTD_not_in_dst = 0, /* Stored entirely within litExtraBuffer */
|
|
121
|
+
ZSTD_in_dst = 1, /* Stored entirely within dst (in memory after current output write) */
|
|
122
|
+
ZSTD_split = 2 /* Split between litExtraBuffer and dst */
|
|
123
|
+
} ZSTD_litLocation_e;
|
|
124
|
+
|
|
98
125
|
struct ZSTD_DCtx_s
|
|
99
126
|
{
|
|
100
127
|
const ZSTD_seqSymbol* LLTptr;
|
|
@@ -109,6 +136,7 @@ struct ZSTD_DCtx_s
|
|
|
109
136
|
const void* dictEnd; /* end of previous segment */
|
|
110
137
|
size_t expected;
|
|
111
138
|
ZSTD_frameHeader fParams;
|
|
139
|
+
U64 processedCSize;
|
|
112
140
|
U64 decodedSize;
|
|
113
141
|
blockType_e bType; /* used in ZSTD_decompressContinue(), store blockType between block header decoding and block decompression stages */
|
|
114
142
|
ZSTD_dStage stage;
|
|
@@ -117,12 +145,16 @@ struct ZSTD_DCtx_s
|
|
|
117
145
|
XXH64_state_t xxhState;
|
|
118
146
|
size_t headerSize;
|
|
119
147
|
ZSTD_format_e format;
|
|
148
|
+
ZSTD_forceIgnoreChecksum_e forceIgnoreChecksum; /* User specified: if == 1, will ignore checksums in compressed frame. Default == 0 */
|
|
149
|
+
U32 validateChecksum; /* if == 1, will validate checksum. Is == 1 if (fParams.checksumFlag == 1) and (forceIgnoreChecksum == 0). */
|
|
120
150
|
const BYTE* litPtr;
|
|
121
151
|
ZSTD_customMem customMem;
|
|
122
152
|
size_t litSize;
|
|
123
153
|
size_t rleSize;
|
|
124
154
|
size_t staticSize;
|
|
155
|
+
#if DYNAMIC_BMI2 != 0
|
|
125
156
|
int bmi2; /* == 1 if the CPU supports BMI2 and 0 otherwise. CPU support is determined dynamically once per context lifetime. */
|
|
157
|
+
#endif
|
|
126
158
|
|
|
127
159
|
/* dictionary */
|
|
128
160
|
ZSTD_DDict* ddictLocal;
|
|
@@ -130,6 +162,8 @@ struct ZSTD_DCtx_s
|
|
|
130
162
|
U32 dictID;
|
|
131
163
|
int ddictIsCold; /* if == 1 : dictionary is "new" for working context, and presumed "cold" (not in cpu cache) */
|
|
132
164
|
ZSTD_dictUses_e dictUses;
|
|
165
|
+
ZSTD_DDictHashSet* ddictSet; /* Hash set for multiple ddicts */
|
|
166
|
+
ZSTD_refMultipleDDicts_e refMultipleDDicts; /* User specified: if == 1, will allow references to multiple DDicts. Default == 0 (disabled) */
|
|
133
167
|
|
|
134
168
|
/* streaming */
|
|
135
169
|
ZSTD_dStreamStage streamStage;
|
|
@@ -142,17 +176,44 @@ struct ZSTD_DCtx_s
|
|
|
142
176
|
size_t outStart;
|
|
143
177
|
size_t outEnd;
|
|
144
178
|
size_t lhSize;
|
|
179
|
+
#if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
|
|
145
180
|
void* legacyContext;
|
|
146
181
|
U32 previousLegacyVersion;
|
|
147
182
|
U32 legacyVersion;
|
|
183
|
+
#endif
|
|
148
184
|
U32 hostageByte;
|
|
149
185
|
int noForwardProgress;
|
|
186
|
+
ZSTD_bufferMode_e outBufferMode;
|
|
187
|
+
ZSTD_outBuffer expectedOutBuffer;
|
|
150
188
|
|
|
151
189
|
/* workspace */
|
|
152
|
-
BYTE litBuffer
|
|
190
|
+
BYTE* litBuffer;
|
|
191
|
+
const BYTE* litBufferEnd;
|
|
192
|
+
ZSTD_litLocation_e litBufferLocation;
|
|
193
|
+
BYTE litExtraBuffer[ZSTD_LITBUFFEREXTRASIZE + WILDCOPY_OVERLENGTH]; /* literal buffer can be split between storage within dst and within this scratch buffer */
|
|
153
194
|
BYTE headerBuffer[ZSTD_FRAMEHEADERSIZE_MAX];
|
|
195
|
+
|
|
196
|
+
size_t oversizedDuration;
|
|
197
|
+
|
|
198
|
+
#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION
|
|
199
|
+
void const* dictContentBeginForFuzzing;
|
|
200
|
+
void const* dictContentEndForFuzzing;
|
|
201
|
+
#endif
|
|
202
|
+
|
|
203
|
+
/* Tracing */
|
|
204
|
+
#if ZSTD_TRACE
|
|
205
|
+
ZSTD_TraceCtx traceCtx;
|
|
206
|
+
#endif
|
|
154
207
|
}; /* typedef'd to ZSTD_DCtx within "zstd.h" */
|
|
155
208
|
|
|
209
|
+
MEM_STATIC int ZSTD_DCtx_get_bmi2(const struct ZSTD_DCtx_s *dctx) {
|
|
210
|
+
#if DYNAMIC_BMI2 != 0
|
|
211
|
+
return dctx->bmi2;
|
|
212
|
+
#else
|
|
213
|
+
(void)dctx;
|
|
214
|
+
return 0;
|
|
215
|
+
#endif
|
|
216
|
+
}
|
|
156
217
|
|
|
157
218
|
/*-*******************************************************
|
|
158
219
|
* Shared internal functions
|
|
@@ -160,7 +221,7 @@ struct ZSTD_DCtx_s
|
|
|
160
221
|
|
|
161
222
|
/*! ZSTD_loadDEntropy() :
|
|
162
223
|
* dict : must point at beginning of a valid zstd dictionary.
|
|
163
|
-
* @return : size of entropy tables
|
|
224
|
+
* @return : size of dictionary header (size of magic number + dict ID + entropy tables) */
|
|
164
225
|
size_t ZSTD_loadDEntropy(ZSTD_entropyDTables_t* entropy,
|
|
165
226
|
const void* const dict, size_t const dictSize);
|
|
166
227
|
|
|
@@ -169,7 +230,7 @@ size_t ZSTD_loadDEntropy(ZSTD_entropyDTables_t* entropy,
|
|
|
169
230
|
* If yes, do nothing (continue on current segment).
|
|
170
231
|
* If not, classify previous segment as "external dictionary", and start a new segment.
|
|
171
232
|
* This function cannot fail. */
|
|
172
|
-
void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst);
|
|
233
|
+
void ZSTD_checkContinuity(ZSTD_DCtx* dctx, const void* dst, size_t dstSize);
|
|
173
234
|
|
|
174
235
|
|
|
175
236
|
#endif /* ZSTD_DECOMPRESS_INTERNAL_H */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 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
|
|
@@ -28,7 +28,7 @@ extern "C" {
|
|
|
28
28
|
* Dependencies
|
|
29
29
|
***************************************/
|
|
30
30
|
#include <stddef.h> /* size_t */
|
|
31
|
-
#include "zstd.h" /* ZSTD_CStream, ZSTD_DStream, ZSTDLIB_API */
|
|
31
|
+
#include "../zstd.h" /* ZSTD_CStream, ZSTD_DStream, ZSTDLIB_API */
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
/* ***************************************************************
|
|
@@ -186,7 +186,7 @@ ZBUFF_DEPRECATED("use ZSTD_DStreamOutSize") size_t ZBUFF_recommendedDOutSize(voi
|
|
|
186
186
|
|
|
187
187
|
/*--- Dependency ---*/
|
|
188
188
|
#define ZSTD_STATIC_LINKING_ONLY /* ZSTD_parameters, ZSTD_customMem */
|
|
189
|
-
#include "zstd.h"
|
|
189
|
+
#include "../zstd.h"
|
|
190
190
|
|
|
191
191
|
|
|
192
192
|
/*--- Custom memory allocator ---*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 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
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
/*-*************************************
|
|
12
12
|
* Dependencies
|
|
13
13
|
***************************************/
|
|
14
|
-
#include "error_private.h"
|
|
14
|
+
#include "../common/error_private.h"
|
|
15
15
|
#include "zbuff.h"
|
|
16
16
|
|
|
17
17
|
/*-****************************************
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 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
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
***************************************/
|
|
16
16
|
#define ZBUFF_STATIC_LINKING_ONLY
|
|
17
17
|
#include "zbuff.h"
|
|
18
|
+
#include "../common/error_private.h"
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
/*-***********************************************************
|
|
@@ -73,13 +74,32 @@ size_t ZBUFF_compressInit_advanced(ZBUFF_CCtx* zbc,
|
|
|
73
74
|
ZSTD_parameters params, unsigned long long pledgedSrcSize)
|
|
74
75
|
{
|
|
75
76
|
if (pledgedSrcSize==0) pledgedSrcSize = ZSTD_CONTENTSIZE_UNKNOWN; /* preserve "0 == unknown" behavior */
|
|
76
|
-
|
|
77
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_reset(zbc, ZSTD_reset_session_only), "");
|
|
78
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setPledgedSrcSize(zbc, pledgedSrcSize), "");
|
|
79
|
+
|
|
80
|
+
FORWARD_IF_ERROR(ZSTD_checkCParams(params.cParams), "");
|
|
81
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_windowLog, params.cParams.windowLog), "");
|
|
82
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_hashLog, params.cParams.hashLog), "");
|
|
83
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_chainLog, params.cParams.chainLog), "");
|
|
84
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_searchLog, params.cParams.searchLog), "");
|
|
85
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_minMatch, params.cParams.minMatch), "");
|
|
86
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_targetLength, params.cParams.targetLength), "");
|
|
87
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_strategy, params.cParams.strategy), "");
|
|
88
|
+
|
|
89
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_contentSizeFlag, params.fParams.contentSizeFlag), "");
|
|
90
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_checksumFlag, params.fParams.checksumFlag), "");
|
|
91
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_dictIDFlag, params.fParams.noDictIDFlag), "");
|
|
92
|
+
|
|
93
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_loadDictionary(zbc, dict, dictSize), "");
|
|
94
|
+
return 0;
|
|
77
95
|
}
|
|
78
96
|
|
|
79
|
-
|
|
80
97
|
size_t ZBUFF_compressInitDictionary(ZBUFF_CCtx* zbc, const void* dict, size_t dictSize, int compressionLevel)
|
|
81
98
|
{
|
|
82
|
-
|
|
99
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_reset(zbc, ZSTD_reset_session_only), "");
|
|
100
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_setParameter(zbc, ZSTD_c_compressionLevel, compressionLevel), "");
|
|
101
|
+
FORWARD_IF_ERROR(ZSTD_CCtx_loadDictionary(zbc, dict, dictSize), "");
|
|
102
|
+
return 0;
|
|
83
103
|
}
|
|
84
104
|
|
|
85
105
|
size_t ZBUFF_compressInit(ZBUFF_CCtx* zbc, int compressionLevel)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) 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
|
|
@@ -26,47 +26,64 @@
|
|
|
26
26
|
#include <string.h> /* memset */
|
|
27
27
|
#include <time.h> /* clock */
|
|
28
28
|
|
|
29
|
-
#include "mem.h" /* read */
|
|
30
|
-
#include "pool.h"
|
|
31
|
-
#include "threading.h"
|
|
32
|
-
#include "cover.h"
|
|
33
|
-
#include "zstd_internal.h" /* includes zstd.h */
|
|
34
29
|
#ifndef ZDICT_STATIC_LINKING_ONLY
|
|
35
|
-
#define ZDICT_STATIC_LINKING_ONLY
|
|
30
|
+
# define ZDICT_STATIC_LINKING_ONLY
|
|
36
31
|
#endif
|
|
37
|
-
|
|
32
|
+
|
|
33
|
+
#include "../common/mem.h" /* read */
|
|
34
|
+
#include "../common/pool.h"
|
|
35
|
+
#include "../common/threading.h"
|
|
36
|
+
#include "../common/zstd_internal.h" /* includes zstd.h */
|
|
37
|
+
#include "../zdict.h"
|
|
38
|
+
#include "cover.h"
|
|
38
39
|
|
|
39
40
|
/*-*************************************
|
|
40
41
|
* Constants
|
|
41
42
|
***************************************/
|
|
43
|
+
/**
|
|
44
|
+
* There are 32bit indexes used to ref samples, so limit samples size to 4GB
|
|
45
|
+
* on 64bit builds.
|
|
46
|
+
* For 32bit builds we choose 1 GB.
|
|
47
|
+
* Most 32bit platforms have 2GB user-mode addressable space and we allocate a large
|
|
48
|
+
* contiguous buffer, so 1GB is already a high limit.
|
|
49
|
+
*/
|
|
42
50
|
#define COVER_MAX_SAMPLES_SIZE (sizeof(size_t) == 8 ? ((unsigned)-1) : ((unsigned)1 GB))
|
|
43
|
-
#define
|
|
51
|
+
#define COVER_DEFAULT_SPLITPOINT 1.0
|
|
44
52
|
|
|
45
53
|
/*-*************************************
|
|
46
54
|
* Console display
|
|
47
55
|
***************************************/
|
|
48
|
-
|
|
56
|
+
#ifndef LOCALDISPLAYLEVEL
|
|
57
|
+
static int g_displayLevel = 0;
|
|
58
|
+
#endif
|
|
59
|
+
#undef DISPLAY
|
|
49
60
|
#define DISPLAY(...) \
|
|
50
61
|
{ \
|
|
51
62
|
fprintf(stderr, __VA_ARGS__); \
|
|
52
63
|
fflush(stderr); \
|
|
53
64
|
}
|
|
65
|
+
#undef LOCALDISPLAYLEVEL
|
|
54
66
|
#define LOCALDISPLAYLEVEL(displayLevel, l, ...) \
|
|
55
67
|
if (displayLevel >= l) { \
|
|
56
68
|
DISPLAY(__VA_ARGS__); \
|
|
57
69
|
} /* 0 : no display; 1: errors; 2: default; 3: details; 4: debug */
|
|
70
|
+
#undef DISPLAYLEVEL
|
|
58
71
|
#define DISPLAYLEVEL(l, ...) LOCALDISPLAYLEVEL(g_displayLevel, l, __VA_ARGS__)
|
|
59
72
|
|
|
73
|
+
#ifndef LOCALDISPLAYUPDATE
|
|
74
|
+
static const clock_t g_refreshRate = CLOCKS_PER_SEC * 15 / 100;
|
|
75
|
+
static clock_t g_time = 0;
|
|
76
|
+
#endif
|
|
77
|
+
#undef LOCALDISPLAYUPDATE
|
|
60
78
|
#define LOCALDISPLAYUPDATE(displayLevel, l, ...) \
|
|
61
79
|
if (displayLevel >= l) { \
|
|
62
|
-
if ((clock() - g_time >
|
|
80
|
+
if ((clock() - g_time > g_refreshRate) || (displayLevel >= 4)) { \
|
|
63
81
|
g_time = clock(); \
|
|
64
82
|
DISPLAY(__VA_ARGS__); \
|
|
65
83
|
} \
|
|
66
84
|
}
|
|
85
|
+
#undef DISPLAYUPDATE
|
|
67
86
|
#define DISPLAYUPDATE(l, ...) LOCALDISPLAYUPDATE(g_displayLevel, l, __VA_ARGS__)
|
|
68
|
-
static const clock_t refreshRate = CLOCKS_PER_SEC * 15 / 100;
|
|
69
|
-
static clock_t g_time = 0;
|
|
70
87
|
|
|
71
88
|
/*-*************************************
|
|
72
89
|
* Hash table
|
|
@@ -120,9 +137,9 @@ static int COVER_map_init(COVER_map_t *map, U32 size) {
|
|
|
120
137
|
/**
|
|
121
138
|
* Internal hash function
|
|
122
139
|
*/
|
|
123
|
-
static const U32
|
|
140
|
+
static const U32 COVER_prime4bytes = 2654435761U;
|
|
124
141
|
static U32 COVER_map_hash(COVER_map_t *map, U32 key) {
|
|
125
|
-
return (key *
|
|
142
|
+
return (key * COVER_prime4bytes) >> (32 - map->sizeLog);
|
|
126
143
|
}
|
|
127
144
|
|
|
128
145
|
/**
|
|
@@ -215,7 +232,7 @@ typedef struct {
|
|
|
215
232
|
} COVER_ctx_t;
|
|
216
233
|
|
|
217
234
|
/* We need a global context for qsort... */
|
|
218
|
-
static COVER_ctx_t *
|
|
235
|
+
static COVER_ctx_t *g_coverCtx = NULL;
|
|
219
236
|
|
|
220
237
|
/*-*************************************
|
|
221
238
|
* Helper functions
|
|
@@ -258,11 +275,11 @@ static int COVER_cmp8(COVER_ctx_t *ctx, const void *lp, const void *rp) {
|
|
|
258
275
|
|
|
259
276
|
/**
|
|
260
277
|
* Same as COVER_cmp() except ties are broken by pointer value
|
|
261
|
-
* NOTE:
|
|
278
|
+
* NOTE: g_coverCtx must be set to call this function. A global is required because
|
|
262
279
|
* qsort doesn't take an opaque pointer.
|
|
263
280
|
*/
|
|
264
|
-
static int COVER_strict_cmp(const void *lp, const void *rp) {
|
|
265
|
-
int result = COVER_cmp(
|
|
281
|
+
static int WIN_CDECL COVER_strict_cmp(const void *lp, const void *rp) {
|
|
282
|
+
int result = COVER_cmp(g_coverCtx, lp, rp);
|
|
266
283
|
if (result == 0) {
|
|
267
284
|
result = lp < rp ? -1 : 1;
|
|
268
285
|
}
|
|
@@ -271,8 +288,8 @@ static int COVER_strict_cmp(const void *lp, const void *rp) {
|
|
|
271
288
|
/**
|
|
272
289
|
* Faster version for d <= 8.
|
|
273
290
|
*/
|
|
274
|
-
static int COVER_strict_cmp8(const void *lp, const void *rp) {
|
|
275
|
-
int result = COVER_cmp8(
|
|
291
|
+
static int WIN_CDECL COVER_strict_cmp8(const void *lp, const void *rp) {
|
|
292
|
+
int result = COVER_cmp8(g_coverCtx, lp, rp);
|
|
276
293
|
if (result == 0) {
|
|
277
294
|
result = lp < rp ? -1 : 1;
|
|
278
295
|
}
|
|
@@ -603,7 +620,7 @@ static size_t COVER_ctx_init(COVER_ctx_t *ctx, const void *samplesBuffer,
|
|
|
603
620
|
/* qsort doesn't take an opaque pointer, so pass as a global.
|
|
604
621
|
* On OpenBSD qsort() is not guaranteed to be stable, their mergesort() is.
|
|
605
622
|
*/
|
|
606
|
-
|
|
623
|
+
g_coverCtx = ctx;
|
|
607
624
|
#if defined(__OpenBSD__)
|
|
608
625
|
mergesort(ctx->suffix, ctx->suffixSize, sizeof(U32),
|
|
609
626
|
(ctx->d <= 8 ? &COVER_strict_cmp8 : &COVER_strict_cmp));
|
|
@@ -725,7 +742,7 @@ ZDICTLIB_API size_t ZDICT_trainFromBuffer_cover(
|
|
|
725
742
|
COVER_map_t activeDmers;
|
|
726
743
|
parameters.splitPoint = 1.0;
|
|
727
744
|
/* Initialize global data */
|
|
728
|
-
g_displayLevel = parameters.zParams.notificationLevel;
|
|
745
|
+
g_displayLevel = (int)parameters.zParams.notificationLevel;
|
|
729
746
|
/* Checks */
|
|
730
747
|
if (!COVER_checkParameters(parameters, dictBufferCapacity)) {
|
|
731
748
|
DISPLAYLEVEL(1, "Cover parameters incorrect\n");
|
|
@@ -946,7 +963,7 @@ void COVER_dictSelectionFree(COVER_dictSelection_t selection){
|
|
|
946
963
|
free(selection.dictContent);
|
|
947
964
|
}
|
|
948
965
|
|
|
949
|
-
COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent,
|
|
966
|
+
COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBufferCapacity,
|
|
950
967
|
size_t dictContentSize, const BYTE* samplesBuffer, const size_t* samplesSizes, unsigned nbFinalizeSamples,
|
|
951
968
|
size_t nbCheckSamples, size_t nbSamples, ZDICT_cover_params_t params, size_t* offsets, size_t totalCompressedSize) {
|
|
952
969
|
|
|
@@ -954,8 +971,8 @@ COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent,
|
|
|
954
971
|
size_t largestCompressed = 0;
|
|
955
972
|
BYTE* customDictContentEnd = customDictContent + dictContentSize;
|
|
956
973
|
|
|
957
|
-
BYTE * largestDictbuffer = (BYTE *)malloc(
|
|
958
|
-
BYTE * candidateDictBuffer = (BYTE *)malloc(
|
|
974
|
+
BYTE * largestDictbuffer = (BYTE *)malloc(dictBufferCapacity);
|
|
975
|
+
BYTE * candidateDictBuffer = (BYTE *)malloc(dictBufferCapacity);
|
|
959
976
|
double regressionTolerance = ((double)params.shrinkDictMaxRegression / 100.0) + 1.00;
|
|
960
977
|
|
|
961
978
|
if (!largestDictbuffer || !candidateDictBuffer) {
|
|
@@ -967,7 +984,7 @@ COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent,
|
|
|
967
984
|
/* Initial dictionary size and compressed size */
|
|
968
985
|
memcpy(largestDictbuffer, customDictContent, dictContentSize);
|
|
969
986
|
dictContentSize = ZDICT_finalizeDictionary(
|
|
970
|
-
largestDictbuffer,
|
|
987
|
+
largestDictbuffer, dictBufferCapacity, customDictContent, dictContentSize,
|
|
971
988
|
samplesBuffer, samplesSizes, nbFinalizeSamples, params.zParams);
|
|
972
989
|
|
|
973
990
|
if (ZDICT_isError(dictContentSize)) {
|
|
@@ -1001,7 +1018,7 @@ COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent,
|
|
|
1001
1018
|
while (dictContentSize < largestDict) {
|
|
1002
1019
|
memcpy(candidateDictBuffer, largestDictbuffer, largestDict);
|
|
1003
1020
|
dictContentSize = ZDICT_finalizeDictionary(
|
|
1004
|
-
candidateDictBuffer,
|
|
1021
|
+
candidateDictBuffer, dictBufferCapacity, customDictContentEnd - dictContentSize, dictContentSize,
|
|
1005
1022
|
samplesBuffer, samplesSizes, nbFinalizeSamples, params.zParams);
|
|
1006
1023
|
|
|
1007
1024
|
if (ZDICT_isError(dictContentSize)) {
|
|
@@ -1053,18 +1070,19 @@ typedef struct COVER_tryParameters_data_s {
|
|
|
1053
1070
|
* This function is thread safe if zstd is compiled with multithreaded support.
|
|
1054
1071
|
* It takes its parameters as an *OWNING* opaque pointer to support threading.
|
|
1055
1072
|
*/
|
|
1056
|
-
static void COVER_tryParameters(void *opaque)
|
|
1073
|
+
static void COVER_tryParameters(void *opaque)
|
|
1074
|
+
{
|
|
1057
1075
|
/* Save parameters as local variables */
|
|
1058
|
-
COVER_tryParameters_data_t *const data = (COVER_tryParameters_data_t
|
|
1076
|
+
COVER_tryParameters_data_t *const data = (COVER_tryParameters_data_t*)opaque;
|
|
1059
1077
|
const COVER_ctx_t *const ctx = data->ctx;
|
|
1060
1078
|
const ZDICT_cover_params_t parameters = data->parameters;
|
|
1061
1079
|
size_t dictBufferCapacity = data->dictBufferCapacity;
|
|
1062
1080
|
size_t totalCompressedSize = ERROR(GENERIC);
|
|
1063
1081
|
/* Allocate space for hash table, dict, and freqs */
|
|
1064
1082
|
COVER_map_t activeDmers;
|
|
1065
|
-
BYTE
|
|
1083
|
+
BYTE* const dict = (BYTE*)malloc(dictBufferCapacity);
|
|
1066
1084
|
COVER_dictSelection_t selection = COVER_dictSelectionError(ERROR(GENERIC));
|
|
1067
|
-
U32
|
|
1085
|
+
U32* const freqs = (U32*)malloc(ctx->suffixSize * sizeof(U32));
|
|
1068
1086
|
if (!COVER_map_init(&activeDmers, parameters.k - parameters.d + 1)) {
|
|
1069
1087
|
DISPLAYLEVEL(1, "Failed to allocate dmer map: out of memory\n");
|
|
1070
1088
|
goto _cleanup;
|
|
@@ -1079,7 +1097,7 @@ static void COVER_tryParameters(void *opaque) {
|
|
|
1079
1097
|
{
|
|
1080
1098
|
const size_t tail = COVER_buildDictionary(ctx, freqs, &activeDmers, dict,
|
|
1081
1099
|
dictBufferCapacity, parameters);
|
|
1082
|
-
selection = COVER_selectDict(dict + tail, dictBufferCapacity - tail,
|
|
1100
|
+
selection = COVER_selectDict(dict + tail, dictBufferCapacity, dictBufferCapacity - tail,
|
|
1083
1101
|
ctx->samples, ctx->samplesSizes, (unsigned)ctx->nbTrainSamples, ctx->nbTrainSamples, ctx->nbSamples, parameters, ctx->offsets,
|
|
1084
1102
|
totalCompressedSize);
|
|
1085
1103
|
|
|
@@ -1094,19 +1112,18 @@ _cleanup:
|
|
|
1094
1112
|
free(data);
|
|
1095
1113
|
COVER_map_destroy(&activeDmers);
|
|
1096
1114
|
COVER_dictSelectionFree(selection);
|
|
1097
|
-
|
|
1098
|
-
free(freqs);
|
|
1099
|
-
}
|
|
1115
|
+
free(freqs);
|
|
1100
1116
|
}
|
|
1101
1117
|
|
|
1102
1118
|
ZDICTLIB_API size_t ZDICT_optimizeTrainFromBuffer_cover(
|
|
1103
|
-
void
|
|
1104
|
-
const size_t
|
|
1105
|
-
ZDICT_cover_params_t
|
|
1119
|
+
void* dictBuffer, size_t dictBufferCapacity, const void* samplesBuffer,
|
|
1120
|
+
const size_t* samplesSizes, unsigned nbSamples,
|
|
1121
|
+
ZDICT_cover_params_t* parameters)
|
|
1122
|
+
{
|
|
1106
1123
|
/* constants */
|
|
1107
1124
|
const unsigned nbThreads = parameters->nbThreads;
|
|
1108
1125
|
const double splitPoint =
|
|
1109
|
-
parameters->splitPoint <= 0.0 ?
|
|
1126
|
+
parameters->splitPoint <= 0.0 ? COVER_DEFAULT_SPLITPOINT : parameters->splitPoint;
|
|
1110
1127
|
const unsigned kMinD = parameters->d == 0 ? 6 : parameters->d;
|
|
1111
1128
|
const unsigned kMaxD = parameters->d == 0 ? 8 : parameters->d;
|
|
1112
1129
|
const unsigned kMinK = parameters->k == 0 ? 50 : parameters->k;
|
|
@@ -1,15 +1,26 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 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
|
+
|
|
11
|
+
#ifndef ZDICT_STATIC_LINKING_ONLY
|
|
12
|
+
# define ZDICT_STATIC_LINKING_ONLY
|
|
13
|
+
#endif
|
|
14
|
+
|
|
1
15
|
#include <stdio.h> /* fprintf */
|
|
2
16
|
#include <stdlib.h> /* malloc, free, qsort */
|
|
3
17
|
#include <string.h> /* memset */
|
|
4
18
|
#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 */
|
|
9
|
-
#
|
|
10
|
-
#define ZDICT_STATIC_LINKING_ONLY
|
|
11
|
-
#endif
|
|
12
|
-
#include "zdict.h"
|
|
19
|
+
#include "../common/mem.h" /* read */
|
|
20
|
+
#include "../common/pool.h"
|
|
21
|
+
#include "../common/threading.h"
|
|
22
|
+
#include "../common/zstd_internal.h" /* includes zstd.h */
|
|
23
|
+
#include "../zdict.h"
|
|
13
24
|
|
|
14
25
|
/**
|
|
15
26
|
* COVER_best_t is used for two purposes:
|
|
@@ -142,6 +153,6 @@ void COVER_dictSelectionFree(COVER_dictSelection_t selection);
|
|
|
142
153
|
* smallest dictionary within a specified regression of the compressed size
|
|
143
154
|
* from the largest dictionary.
|
|
144
155
|
*/
|
|
145
|
-
COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent,
|
|
156
|
+
COVER_dictSelection_t COVER_selectDict(BYTE* customDictContent, size_t dictBufferCapacity,
|
|
146
157
|
size_t dictContentSize, const BYTE* samplesBuffer, const size_t* samplesSizes, unsigned nbFinalizeSamples,
|
|
147
158
|
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
|
|
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) {
|