zstd-ruby 1.5.1.1 → 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 +1 -1
- 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 +19 -60
- data/ext/zstdruby/libzstd/common/compiler.h +26 -3
- data/ext/zstdruby/libzstd/common/cpu.h +1 -1
- data/ext/zstdruby/libzstd/common/debug.c +1 -1
- data/ext/zstdruby/libzstd/common/debug.h +1 -1
- data/ext/zstdruby/libzstd/common/entropy_common.c +12 -40
- data/ext/zstdruby/libzstd/common/error_private.c +9 -2
- data/ext/zstdruby/libzstd/common/error_private.h +1 -1
- data/ext/zstdruby/libzstd/common/fse.h +5 -83
- data/ext/zstdruby/libzstd/common/fse_decompress.c +7 -99
- data/ext/zstdruby/libzstd/common/huf.h +65 -156
- data/ext/zstdruby/libzstd/common/mem.h +39 -46
- data/ext/zstdruby/libzstd/common/pool.c +37 -16
- data/ext/zstdruby/libzstd/common/pool.h +9 -3
- data/ext/zstdruby/libzstd/common/portability_macros.h +28 -3
- data/ext/zstdruby/libzstd/common/threading.c +68 -14
- data/ext/zstdruby/libzstd/common/threading.h +5 -10
- data/ext/zstdruby/libzstd/common/xxhash.c +2 -2
- data/ext/zstdruby/libzstd/common/xxhash.h +8 -8
- data/ext/zstdruby/libzstd/common/zstd_common.c +1 -36
- data/ext/zstdruby/libzstd/common/zstd_deps.h +1 -1
- data/ext/zstdruby/libzstd/common/zstd_internal.h +20 -122
- data/ext/zstdruby/libzstd/common/zstd_trace.h +3 -3
- data/ext/zstdruby/libzstd/compress/clevels.h +1 -1
- data/ext/zstdruby/libzstd/compress/fse_compress.c +7 -124
- data/ext/zstdruby/libzstd/compress/hist.c +1 -1
- data/ext/zstdruby/libzstd/compress/hist.h +1 -1
- data/ext/zstdruby/libzstd/compress/huf_compress.c +234 -169
- data/ext/zstdruby/libzstd/compress/zstd_compress.c +1317 -594
- data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +272 -165
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +115 -39
- data/ext/zstdruby/libzstd/compress/zstd_compress_literals.h +16 -8
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +13 -13
- data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +25 -21
- data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +162 -82
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +95 -33
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +3 -2
- data/ext/zstdruby/libzstd/compress/zstd_fast.c +434 -149
- data/ext/zstdruby/libzstd/compress/zstd_fast.h +3 -2
- data/ext/zstdruby/libzstd/compress/zstd_lazy.c +405 -348
- data/ext/zstdruby/libzstd/compress/zstd_lazy.h +4 -2
- data/ext/zstdruby/libzstd/compress/zstd_ldm.c +9 -7
- data/ext/zstdruby/libzstd/compress/zstd_ldm.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstd_ldm_geartab.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstd_opt.c +149 -100
- data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +32 -16
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +5 -2
- data/ext/zstdruby/libzstd/decompress/huf_decompress.c +434 -441
- data/ext/zstdruby/libzstd/decompress/huf_decompress_amd64.S +42 -37
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.c +4 -4
- data/ext/zstdruby/libzstd/decompress/zstd_ddict.h +1 -1
- data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +205 -80
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +201 -81
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.h +6 -1
- data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +4 -2
- data/ext/zstdruby/libzstd/dictBuilder/cover.c +19 -15
- data/ext/zstdruby/libzstd/dictBuilder/cover.h +1 -1
- data/ext/zstdruby/libzstd/dictBuilder/fastcover.c +2 -2
- data/ext/zstdruby/libzstd/dictBuilder/zdict.c +13 -91
- data/ext/zstdruby/libzstd/zdict.h +53 -31
- data/ext/zstdruby/libzstd/zstd.h +580 -135
- data/ext/zstdruby/libzstd/zstd_errors.h +27 -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 +113 -31
- data/lib/zstd-ruby/version.rb +1 -1
- data/lib/zstd-ruby.rb +0 -1
- data/zstd-ruby.gemspec +1 -1
- metadata +11 -37
- data/.github/dependabot.yml +0 -8
- data/.github/workflows/ruby.yml +0 -35
- data/ext/zstdruby/libzstd/.gitignore +0 -3
- data/ext/zstdruby/libzstd/BUCK +0 -232
- data/ext/zstdruby/libzstd/Makefile +0 -357
- data/ext/zstdruby/libzstd/README.md +0 -217
- 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 -167
- data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +0 -75
- data/ext/zstdruby/libzstd/dll/example/Makefile +0 -48
- data/ext/zstdruby/libzstd/dll/example/README.md +0 -63
- 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 -2158
- data/ext/zstdruby/libzstd/legacy/zstd_v01.h +0 -94
- data/ext/zstdruby/libzstd/legacy/zstd_v02.c +0 -3518
- data/ext/zstdruby/libzstd/legacy/zstd_v02.h +0 -93
- data/ext/zstdruby/libzstd/legacy/zstd_v03.c +0 -3160
- data/ext/zstdruby/libzstd/legacy/zstd_v03.h +0 -93
- data/ext/zstdruby/libzstd/legacy/zstd_v04.c +0 -3647
- data/ext/zstdruby/libzstd/legacy/zstd_v04.h +0 -142
- data/ext/zstdruby/libzstd/legacy/zstd_v05.c +0 -4050
- data/ext/zstdruby/libzstd/legacy/zstd_v05.h +0 -162
- data/ext/zstdruby/libzstd/legacy/zstd_v06.c +0 -4154
- data/ext/zstdruby/libzstd/legacy/zstd_v06.h +0 -172
- data/ext/zstdruby/libzstd/legacy/zstd_v07.c +0 -4541
- data/ext/zstdruby/libzstd/legacy/zstd_v07.h +0 -187
- data/ext/zstdruby/libzstd/libzstd.mk +0 -185
- data/ext/zstdruby/libzstd/libzstd.pc.in +0 -16
- data/ext/zstdruby/libzstd/modulemap/module.modulemap +0 -4
- data/ext/zstdruby/zstdruby.h +0 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
/* ====== Dependencies ====== */
|
|
23
|
+
#include "../common/allocations.h" /* ZSTD_customMalloc, ZSTD_customCalloc, ZSTD_customFree */
|
|
23
24
|
#include "../common/zstd_deps.h" /* ZSTD_memcpy, ZSTD_memset, INT_MAX, UINT_MAX */
|
|
24
25
|
#include "../common/mem.h" /* MEM_STATIC */
|
|
25
26
|
#include "../common/pool.h" /* threadpool */
|
|
@@ -102,9 +103,8 @@ typedef struct ZSTDMT_bufferPool_s {
|
|
|
102
103
|
buffer_t bTable[1]; /* variable size */
|
|
103
104
|
} ZSTDMT_bufferPool;
|
|
104
105
|
|
|
105
|
-
static ZSTDMT_bufferPool* ZSTDMT_createBufferPool(unsigned
|
|
106
|
+
static ZSTDMT_bufferPool* ZSTDMT_createBufferPool(unsigned maxNbBuffers, ZSTD_customMem cMem)
|
|
106
107
|
{
|
|
107
|
-
unsigned const maxNbBuffers = 2*nbWorkers + 3;
|
|
108
108
|
ZSTDMT_bufferPool* const bufPool = (ZSTDMT_bufferPool*)ZSTD_customCalloc(
|
|
109
109
|
sizeof(ZSTDMT_bufferPool) + (maxNbBuffers-1) * sizeof(buffer_t), cMem);
|
|
110
110
|
if (bufPool==NULL) return NULL;
|
|
@@ -160,9 +160,8 @@ static void ZSTDMT_setBufferSize(ZSTDMT_bufferPool* const bufPool, size_t const
|
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
|
|
163
|
-
static ZSTDMT_bufferPool* ZSTDMT_expandBufferPool(ZSTDMT_bufferPool* srcBufPool,
|
|
163
|
+
static ZSTDMT_bufferPool* ZSTDMT_expandBufferPool(ZSTDMT_bufferPool* srcBufPool, unsigned maxNbBuffers)
|
|
164
164
|
{
|
|
165
|
-
unsigned const maxNbBuffers = 2*nbWorkers + 3;
|
|
166
165
|
if (srcBufPool==NULL) return NULL;
|
|
167
166
|
if (srcBufPool->totalBuffers >= maxNbBuffers) /* good enough */
|
|
168
167
|
return srcBufPool;
|
|
@@ -171,7 +170,7 @@ static ZSTDMT_bufferPool* ZSTDMT_expandBufferPool(ZSTDMT_bufferPool* srcBufPool,
|
|
|
171
170
|
size_t const bSize = srcBufPool->bufferSize; /* forward parameters */
|
|
172
171
|
ZSTDMT_bufferPool* newBufPool;
|
|
173
172
|
ZSTDMT_freeBufferPool(srcBufPool);
|
|
174
|
-
newBufPool = ZSTDMT_createBufferPool(
|
|
173
|
+
newBufPool = ZSTDMT_createBufferPool(maxNbBuffers, cMem);
|
|
175
174
|
if (newBufPool==NULL) return newBufPool;
|
|
176
175
|
ZSTDMT_setBufferSize(newBufPool, bSize);
|
|
177
176
|
return newBufPool;
|
|
@@ -263,6 +262,16 @@ static void ZSTDMT_releaseBuffer(ZSTDMT_bufferPool* bufPool, buffer_t buf)
|
|
|
263
262
|
ZSTD_customFree(buf.start, bufPool->cMem);
|
|
264
263
|
}
|
|
265
264
|
|
|
265
|
+
/* We need 2 output buffers per worker since each dstBuff must be flushed after it is released.
|
|
266
|
+
* The 3 additional buffers are as follows:
|
|
267
|
+
* 1 buffer for input loading
|
|
268
|
+
* 1 buffer for "next input" when submitting current one
|
|
269
|
+
* 1 buffer stuck in queue */
|
|
270
|
+
#define BUF_POOL_MAX_NB_BUFFERS(nbWorkers) (2*(nbWorkers) + 3)
|
|
271
|
+
|
|
272
|
+
/* After a worker releases its rawSeqStore, it is immediately ready for reuse.
|
|
273
|
+
* So we only need one seq buffer per worker. */
|
|
274
|
+
#define SEQ_POOL_MAX_NB_BUFFERS(nbWorkers) (nbWorkers)
|
|
266
275
|
|
|
267
276
|
/* ===== Seq Pool Wrapper ====== */
|
|
268
277
|
|
|
@@ -316,7 +325,7 @@ static void ZSTDMT_setNbSeq(ZSTDMT_seqPool* const seqPool, size_t const nbSeq)
|
|
|
316
325
|
|
|
317
326
|
static ZSTDMT_seqPool* ZSTDMT_createSeqPool(unsigned nbWorkers, ZSTD_customMem cMem)
|
|
318
327
|
{
|
|
319
|
-
ZSTDMT_seqPool* const seqPool = ZSTDMT_createBufferPool(nbWorkers, cMem);
|
|
328
|
+
ZSTDMT_seqPool* const seqPool = ZSTDMT_createBufferPool(SEQ_POOL_MAX_NB_BUFFERS(nbWorkers), cMem);
|
|
320
329
|
if (seqPool == NULL) return NULL;
|
|
321
330
|
ZSTDMT_setNbSeq(seqPool, 0);
|
|
322
331
|
return seqPool;
|
|
@@ -329,7 +338,7 @@ static void ZSTDMT_freeSeqPool(ZSTDMT_seqPool* seqPool)
|
|
|
329
338
|
|
|
330
339
|
static ZSTDMT_seqPool* ZSTDMT_expandSeqPool(ZSTDMT_seqPool* pool, U32 nbWorkers)
|
|
331
340
|
{
|
|
332
|
-
return ZSTDMT_expandBufferPool(pool, nbWorkers);
|
|
341
|
+
return ZSTDMT_expandBufferPool(pool, SEQ_POOL_MAX_NB_BUFFERS(nbWorkers));
|
|
333
342
|
}
|
|
334
343
|
|
|
335
344
|
|
|
@@ -711,7 +720,7 @@ static void ZSTDMT_compressionJob(void* jobDescription)
|
|
|
711
720
|
ZSTDMT_serialState_update(job->serial, cctx, rawSeqStore, job->src, job->jobID);
|
|
712
721
|
|
|
713
722
|
if (!job->firstJob) { /* flush and overwrite frame header when it's not first job */
|
|
714
|
-
size_t const hSize =
|
|
723
|
+
size_t const hSize = ZSTD_compressContinue_public(cctx, dstBuff.start, dstBuff.capacity, job->src.start, 0);
|
|
715
724
|
if (ZSTD_isError(hSize)) JOB_ERROR(hSize);
|
|
716
725
|
DEBUGLOG(5, "ZSTDMT_compressionJob: flush and overwrite %u bytes of frame header (not first job)", (U32)hSize);
|
|
717
726
|
ZSTD_invalidateRepCodes(cctx);
|
|
@@ -729,7 +738,7 @@ static void ZSTDMT_compressionJob(void* jobDescription)
|
|
|
729
738
|
DEBUGLOG(5, "ZSTDMT_compressionJob: compress %u bytes in %i blocks", (U32)job->src.size, nbChunks);
|
|
730
739
|
assert(job->cSize == 0);
|
|
731
740
|
for (chunkNb = 1; chunkNb < nbChunks; chunkNb++) {
|
|
732
|
-
size_t const cSize =
|
|
741
|
+
size_t const cSize = ZSTD_compressContinue_public(cctx, op, oend-op, ip, chunkSize);
|
|
733
742
|
if (ZSTD_isError(cSize)) JOB_ERROR(cSize);
|
|
734
743
|
ip += chunkSize;
|
|
735
744
|
op += cSize; assert(op < oend);
|
|
@@ -749,8 +758,8 @@ static void ZSTDMT_compressionJob(void* jobDescription)
|
|
|
749
758
|
size_t const lastBlockSize1 = job->src.size & (chunkSize-1);
|
|
750
759
|
size_t const lastBlockSize = ((lastBlockSize1==0) & (job->src.size>=chunkSize)) ? chunkSize : lastBlockSize1;
|
|
751
760
|
size_t const cSize = (job->lastJob) ?
|
|
752
|
-
|
|
753
|
-
|
|
761
|
+
ZSTD_compressEnd_public(cctx, op, oend-op, ip, lastBlockSize) :
|
|
762
|
+
ZSTD_compressContinue_public(cctx, op, oend-op, ip, lastBlockSize);
|
|
754
763
|
if (ZSTD_isError(cSize)) JOB_ERROR(cSize);
|
|
755
764
|
lastCBlockSize = cSize;
|
|
756
765
|
} }
|
|
@@ -936,7 +945,7 @@ MEM_STATIC ZSTDMT_CCtx* ZSTDMT_createCCtx_advanced_internal(unsigned nbWorkers,
|
|
|
936
945
|
mtctx->jobs = ZSTDMT_createJobsTable(&nbJobs, cMem);
|
|
937
946
|
assert(nbJobs > 0); assert((nbJobs & (nbJobs - 1)) == 0); /* ensure nbJobs is a power of 2 */
|
|
938
947
|
mtctx->jobIDMask = nbJobs - 1;
|
|
939
|
-
mtctx->bufPool = ZSTDMT_createBufferPool(nbWorkers, cMem);
|
|
948
|
+
mtctx->bufPool = ZSTDMT_createBufferPool(BUF_POOL_MAX_NB_BUFFERS(nbWorkers), cMem);
|
|
940
949
|
mtctx->cctxPool = ZSTDMT_createCCtxPool(nbWorkers, cMem);
|
|
941
950
|
mtctx->seqPool = ZSTDMT_createSeqPool(nbWorkers, cMem);
|
|
942
951
|
initError = ZSTDMT_serialState_init(&mtctx->serial);
|
|
@@ -1039,7 +1048,7 @@ static size_t ZSTDMT_resize(ZSTDMT_CCtx* mtctx, unsigned nbWorkers)
|
|
|
1039
1048
|
{
|
|
1040
1049
|
if (POOL_resize(mtctx->factory, nbWorkers)) return ERROR(memory_allocation);
|
|
1041
1050
|
FORWARD_IF_ERROR( ZSTDMT_expandJobsTable(mtctx, nbWorkers) , "");
|
|
1042
|
-
mtctx->bufPool = ZSTDMT_expandBufferPool(mtctx->bufPool, nbWorkers);
|
|
1051
|
+
mtctx->bufPool = ZSTDMT_expandBufferPool(mtctx->bufPool, BUF_POOL_MAX_NB_BUFFERS(nbWorkers));
|
|
1043
1052
|
if (mtctx->bufPool == NULL) return ERROR(memory_allocation);
|
|
1044
1053
|
mtctx->cctxPool = ZSTDMT_expandCCtxPool(mtctx->cctxPool, nbWorkers);
|
|
1045
1054
|
if (mtctx->cctxPool == NULL) return ERROR(memory_allocation);
|
|
@@ -1726,7 +1735,7 @@ findSynchronizationPoint(ZSTDMT_CCtx const* mtctx, ZSTD_inBuffer const input)
|
|
|
1726
1735
|
}
|
|
1727
1736
|
} else {
|
|
1728
1737
|
/* We have enough bytes buffered to initialize the hash,
|
|
1729
|
-
* and
|
|
1738
|
+
* and have processed enough bytes to find a sync point.
|
|
1730
1739
|
* Start scanning at the beginning of the input.
|
|
1731
1740
|
*/
|
|
1732
1741
|
assert(mtctx->inBuff.filled >= RSYNC_MIN_BLOCK_SIZE);
|
|
@@ -1753,17 +1762,24 @@ findSynchronizationPoint(ZSTDMT_CCtx const* mtctx, ZSTD_inBuffer const input)
|
|
|
1753
1762
|
* then a block will be emitted anyways, but this is okay, since if we
|
|
1754
1763
|
* are already synchronized we will remain synchronized.
|
|
1755
1764
|
*/
|
|
1765
|
+
assert(pos < RSYNC_LENGTH || ZSTD_rollingHash_compute(istart + pos - RSYNC_LENGTH, RSYNC_LENGTH) == hash);
|
|
1756
1766
|
for (; pos < syncPoint.toLoad; ++pos) {
|
|
1757
1767
|
BYTE const toRemove = pos < RSYNC_LENGTH ? prev[pos] : istart[pos - RSYNC_LENGTH];
|
|
1758
|
-
|
|
1768
|
+
/* This assert is very expensive, and Debian compiles with asserts enabled.
|
|
1769
|
+
* So disable it for now. We can get similar coverage by checking it at the
|
|
1770
|
+
* beginning & end of the loop.
|
|
1771
|
+
* assert(pos < RSYNC_LENGTH || ZSTD_rollingHash_compute(istart + pos - RSYNC_LENGTH, RSYNC_LENGTH) == hash);
|
|
1772
|
+
*/
|
|
1759
1773
|
hash = ZSTD_rollingHash_rotate(hash, toRemove, istart[pos], primePower);
|
|
1760
1774
|
assert(mtctx->inBuff.filled + pos >= RSYNC_MIN_BLOCK_SIZE);
|
|
1761
1775
|
if ((hash & hitMask) == hitMask) {
|
|
1762
1776
|
syncPoint.toLoad = pos + 1;
|
|
1763
1777
|
syncPoint.flush = 1;
|
|
1778
|
+
++pos; /* for assert */
|
|
1764
1779
|
break;
|
|
1765
1780
|
}
|
|
1766
1781
|
}
|
|
1782
|
+
assert(pos < RSYNC_LENGTH || ZSTD_rollingHash_compute(istart + pos - RSYNC_LENGTH, RSYNC_LENGTH) == hash);
|
|
1767
1783
|
return syncPoint;
|
|
1768
1784
|
}
|
|
1769
1785
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -65,8 +65,11 @@ size_t ZSTDMT_nextInputSizeHint(const ZSTDMT_CCtx* mtctx);
|
|
|
65
65
|
* Private use only. Init streaming operation.
|
|
66
66
|
* expects params to be valid.
|
|
67
67
|
* must receive dict, or cdict, or none, but not both.
|
|
68
|
+
* mtctx can be freshly constructed or reused from a prior compression.
|
|
69
|
+
* If mtctx is reused, memory allocations from the prior compression may not be freed,
|
|
70
|
+
* even if they are not needed for the current compression.
|
|
68
71
|
* @return : 0, or an error code */
|
|
69
|
-
size_t ZSTDMT_initCStream_internal(ZSTDMT_CCtx*
|
|
72
|
+
size_t ZSTDMT_initCStream_internal(ZSTDMT_CCtx* mtctx,
|
|
70
73
|
const void* dict, size_t dictSize, ZSTD_dictContentType_e dictContentType,
|
|
71
74
|
const ZSTD_CDict* cdict,
|
|
72
75
|
ZSTD_CCtx_params params, unsigned long long pledgedSrcSize);
|