zstd-ruby 1.5.2.3 → 1.5.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -5
- 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 +26 -10
- data/ext/zstdruby/libzstd/common/pool.h +7 -1
- data/ext/zstdruby/libzstd/common/portability_macros.h +22 -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 +17 -118
- 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 +1243 -538
- data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +225 -151
- 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 +3 -3
- 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 +128 -62
- 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 +433 -148
- data/ext/zstdruby/libzstd/compress/zstd_fast.h +3 -2
- data/ext/zstdruby/libzstd/compress/zstd_lazy.c +398 -345
- data/ext/zstdruby/libzstd/compress/zstd_lazy.h +4 -2
- data/ext/zstdruby/libzstd/compress/zstd_ldm.c +5 -5
- 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 +106 -80
- data/ext/zstdruby/libzstd/compress/zstd_opt.h +1 -1
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +17 -9
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +1 -1
- data/ext/zstdruby/libzstd/decompress/huf_decompress.c +434 -441
- data/ext/zstdruby/libzstd/decompress/huf_decompress_amd64.S +30 -39
- 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 +11 -89
- 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 +6 -0
- data/ext/zstdruby/skippable_frame.c +63 -0
- data/lib/zstd-ruby/version.rb +1 -1
- metadata +9 -6
@@ -1,6 +1,6 @@
|
|
1
1
|
/* ******************************************************************
|
2
2
|
* FSE : Finite State Entropy encoder
|
3
|
-
* Copyright (c)
|
3
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
4
4
|
*
|
5
5
|
* You can contact the author at :
|
6
6
|
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
|
@@ -26,6 +26,7 @@
|
|
26
26
|
#define ZSTD_DEPS_NEED_MALLOC
|
27
27
|
#define ZSTD_DEPS_NEED_MATH64
|
28
28
|
#include "../common/zstd_deps.h" /* ZSTD_malloc, ZSTD_free, ZSTD_memcpy, ZSTD_memset */
|
29
|
+
#include "../common/bits.h" /* ZSTD_highbit32 */
|
29
30
|
|
30
31
|
|
31
32
|
/* **************************************************************
|
@@ -90,7 +91,7 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
|
|
90
91
|
assert(tableLog < 16); /* required for threshold strategy to work */
|
91
92
|
|
92
93
|
/* For explanations on how to distribute symbol values over the table :
|
93
|
-
*
|
94
|
+
* https://fastcompression.blogspot.fr/2014/02/fse-distributing-symbol-values.html */
|
94
95
|
|
95
96
|
#ifdef __clang_analyzer__
|
96
97
|
ZSTD_memset(tableSymbol, 0, sizeof(*tableSymbol) * tableSize); /* useless initialization, just to keep scan-build happy */
|
@@ -191,7 +192,7 @@ size_t FSE_buildCTable_wksp(FSE_CTable* ct,
|
|
191
192
|
break;
|
192
193
|
default :
|
193
194
|
assert(normalizedCounter[s] > 1);
|
194
|
-
{ U32 const maxBitsOut = tableLog -
|
195
|
+
{ U32 const maxBitsOut = tableLog - ZSTD_highbit32 ((U32)normalizedCounter[s]-1);
|
195
196
|
U32 const minStatePlus = (U32)normalizedCounter[s] << maxBitsOut;
|
196
197
|
symbolTT[s].deltaNbBits = (maxBitsOut << 16) - minStatePlus;
|
197
198
|
symbolTT[s].deltaFindState = (int)(total - (unsigned)normalizedCounter[s]);
|
@@ -342,21 +343,11 @@ size_t FSE_writeNCount (void* buffer, size_t bufferSize,
|
|
342
343
|
* FSE Compression Code
|
343
344
|
****************************************************************/
|
344
345
|
|
345
|
-
FSE_CTable* FSE_createCTable (unsigned maxSymbolValue, unsigned tableLog)
|
346
|
-
{
|
347
|
-
size_t size;
|
348
|
-
if (tableLog > FSE_TABLELOG_ABSOLUTE_MAX) tableLog = FSE_TABLELOG_ABSOLUTE_MAX;
|
349
|
-
size = FSE_CTABLE_SIZE_U32 (tableLog, maxSymbolValue) * sizeof(U32);
|
350
|
-
return (FSE_CTable*)ZSTD_malloc(size);
|
351
|
-
}
|
352
|
-
|
353
|
-
void FSE_freeCTable (FSE_CTable* ct) { ZSTD_free(ct); }
|
354
|
-
|
355
346
|
/* provides the minimum logSize to safely represent a distribution */
|
356
347
|
static unsigned FSE_minTableLog(size_t srcSize, unsigned maxSymbolValue)
|
357
348
|
{
|
358
|
-
U32 minBitsSrc =
|
359
|
-
U32 minBitsSymbols =
|
349
|
+
U32 minBitsSrc = ZSTD_highbit32((U32)(srcSize)) + 1;
|
350
|
+
U32 minBitsSymbols = ZSTD_highbit32(maxSymbolValue) + 2;
|
360
351
|
U32 minBits = minBitsSrc < minBitsSymbols ? minBitsSrc : minBitsSymbols;
|
361
352
|
assert(srcSize > 1); /* Not supported, RLE should be used instead */
|
362
353
|
return minBits;
|
@@ -364,7 +355,7 @@ static unsigned FSE_minTableLog(size_t srcSize, unsigned maxSymbolValue)
|
|
364
355
|
|
365
356
|
unsigned FSE_optimalTableLog_internal(unsigned maxTableLog, size_t srcSize, unsigned maxSymbolValue, unsigned minus)
|
366
357
|
{
|
367
|
-
U32 maxBitsSrc =
|
358
|
+
U32 maxBitsSrc = ZSTD_highbit32((U32)(srcSize - 1)) - minus;
|
368
359
|
U32 tableLog = maxTableLog;
|
369
360
|
U32 minBits = FSE_minTableLog(srcSize, maxSymbolValue);
|
370
361
|
assert(srcSize > 1); /* Not supported, RLE should be used instead */
|
@@ -532,40 +523,6 @@ size_t FSE_normalizeCount (short* normalizedCounter, unsigned tableLog,
|
|
532
523
|
return tableLog;
|
533
524
|
}
|
534
525
|
|
535
|
-
|
536
|
-
/* fake FSE_CTable, for raw (uncompressed) input */
|
537
|
-
size_t FSE_buildCTable_raw (FSE_CTable* ct, unsigned nbBits)
|
538
|
-
{
|
539
|
-
const unsigned tableSize = 1 << nbBits;
|
540
|
-
const unsigned tableMask = tableSize - 1;
|
541
|
-
const unsigned maxSymbolValue = tableMask;
|
542
|
-
void* const ptr = ct;
|
543
|
-
U16* const tableU16 = ( (U16*) ptr) + 2;
|
544
|
-
void* const FSCT = ((U32*)ptr) + 1 /* header */ + (tableSize>>1); /* assumption : tableLog >= 1 */
|
545
|
-
FSE_symbolCompressionTransform* const symbolTT = (FSE_symbolCompressionTransform*) (FSCT);
|
546
|
-
unsigned s;
|
547
|
-
|
548
|
-
/* Sanity checks */
|
549
|
-
if (nbBits < 1) return ERROR(GENERIC); /* min size */
|
550
|
-
|
551
|
-
/* header */
|
552
|
-
tableU16[-2] = (U16) nbBits;
|
553
|
-
tableU16[-1] = (U16) maxSymbolValue;
|
554
|
-
|
555
|
-
/* Build table */
|
556
|
-
for (s=0; s<tableSize; s++)
|
557
|
-
tableU16[s] = (U16)(tableSize + s);
|
558
|
-
|
559
|
-
/* Build Symbol Transformation Table */
|
560
|
-
{ const U32 deltaNbBits = (nbBits << 16) - (1 << nbBits);
|
561
|
-
for (s=0; s<=maxSymbolValue; s++) {
|
562
|
-
symbolTT[s].deltaNbBits = deltaNbBits;
|
563
|
-
symbolTT[s].deltaFindState = s-1;
|
564
|
-
} }
|
565
|
-
|
566
|
-
return 0;
|
567
|
-
}
|
568
|
-
|
569
526
|
/* fake FSE_CTable, for rle input (always same symbol) */
|
570
527
|
size_t FSE_buildCTable_rle (FSE_CTable* ct, BYTE symbolValue)
|
571
528
|
{
|
@@ -664,78 +621,4 @@ size_t FSE_compress_usingCTable (void* dst, size_t dstSize,
|
|
664
621
|
|
665
622
|
size_t FSE_compressBound(size_t size) { return FSE_COMPRESSBOUND(size); }
|
666
623
|
|
667
|
-
#ifndef ZSTD_NO_UNUSED_FUNCTIONS
|
668
|
-
/* FSE_compress_wksp() :
|
669
|
-
* Same as FSE_compress2(), but using an externally allocated scratch buffer (`workSpace`).
|
670
|
-
* `wkspSize` size must be `(1<<tableLog)`.
|
671
|
-
*/
|
672
|
-
size_t FSE_compress_wksp (void* dst, size_t dstSize, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog, void* workSpace, size_t wkspSize)
|
673
|
-
{
|
674
|
-
BYTE* const ostart = (BYTE*) dst;
|
675
|
-
BYTE* op = ostart;
|
676
|
-
BYTE* const oend = ostart + dstSize;
|
677
|
-
|
678
|
-
unsigned count[FSE_MAX_SYMBOL_VALUE+1];
|
679
|
-
S16 norm[FSE_MAX_SYMBOL_VALUE+1];
|
680
|
-
FSE_CTable* CTable = (FSE_CTable*)workSpace;
|
681
|
-
size_t const CTableSize = FSE_CTABLE_SIZE_U32(tableLog, maxSymbolValue);
|
682
|
-
void* scratchBuffer = (void*)(CTable + CTableSize);
|
683
|
-
size_t const scratchBufferSize = wkspSize - (CTableSize * sizeof(FSE_CTable));
|
684
|
-
|
685
|
-
/* init conditions */
|
686
|
-
if (wkspSize < FSE_COMPRESS_WKSP_SIZE_U32(tableLog, maxSymbolValue)) return ERROR(tableLog_tooLarge);
|
687
|
-
if (srcSize <= 1) return 0; /* Not compressible */
|
688
|
-
if (!maxSymbolValue) maxSymbolValue = FSE_MAX_SYMBOL_VALUE;
|
689
|
-
if (!tableLog) tableLog = FSE_DEFAULT_TABLELOG;
|
690
|
-
|
691
|
-
/* Scan input and build symbol stats */
|
692
|
-
{ CHECK_V_F(maxCount, HIST_count_wksp(count, &maxSymbolValue, src, srcSize, scratchBuffer, scratchBufferSize) );
|
693
|
-
if (maxCount == srcSize) return 1; /* only a single symbol in src : rle */
|
694
|
-
if (maxCount == 1) return 0; /* each symbol present maximum once => not compressible */
|
695
|
-
if (maxCount < (srcSize >> 7)) return 0; /* Heuristic : not compressible enough */
|
696
|
-
}
|
697
|
-
|
698
|
-
tableLog = FSE_optimalTableLog(tableLog, srcSize, maxSymbolValue);
|
699
|
-
CHECK_F( FSE_normalizeCount(norm, tableLog, count, srcSize, maxSymbolValue, /* useLowProbCount */ srcSize >= 2048) );
|
700
|
-
|
701
|
-
/* Write table description header */
|
702
|
-
{ CHECK_V_F(nc_err, FSE_writeNCount(op, oend-op, norm, maxSymbolValue, tableLog) );
|
703
|
-
op += nc_err;
|
704
|
-
}
|
705
|
-
|
706
|
-
/* Compress */
|
707
|
-
CHECK_F( FSE_buildCTable_wksp(CTable, norm, maxSymbolValue, tableLog, scratchBuffer, scratchBufferSize) );
|
708
|
-
{ CHECK_V_F(cSize, FSE_compress_usingCTable(op, oend - op, src, srcSize, CTable) );
|
709
|
-
if (cSize == 0) return 0; /* not enough space for compressed data */
|
710
|
-
op += cSize;
|
711
|
-
}
|
712
|
-
|
713
|
-
/* check compressibility */
|
714
|
-
if ( (size_t)(op-ostart) >= srcSize-1 ) return 0;
|
715
|
-
|
716
|
-
return op-ostart;
|
717
|
-
}
|
718
|
-
|
719
|
-
typedef struct {
|
720
|
-
FSE_CTable CTable_max[FSE_CTABLE_SIZE_U32(FSE_MAX_TABLELOG, FSE_MAX_SYMBOL_VALUE)];
|
721
|
-
union {
|
722
|
-
U32 hist_wksp[HIST_WKSP_SIZE_U32];
|
723
|
-
BYTE scratchBuffer[1 << FSE_MAX_TABLELOG];
|
724
|
-
} workspace;
|
725
|
-
} fseWkspMax_t;
|
726
|
-
|
727
|
-
size_t FSE_compress2 (void* dst, size_t dstCapacity, const void* src, size_t srcSize, unsigned maxSymbolValue, unsigned tableLog)
|
728
|
-
{
|
729
|
-
fseWkspMax_t scratchBuffer;
|
730
|
-
DEBUG_STATIC_ASSERT(sizeof(scratchBuffer) >= FSE_COMPRESS_WKSP_SIZE_U32(FSE_MAX_TABLELOG, FSE_MAX_SYMBOL_VALUE)); /* compilation failures here means scratchBuffer is not large enough */
|
731
|
-
if (tableLog > FSE_MAX_TABLELOG) return ERROR(tableLog_tooLarge);
|
732
|
-
return FSE_compress_wksp(dst, dstCapacity, src, srcSize, maxSymbolValue, tableLog, &scratchBuffer, sizeof(scratchBuffer));
|
733
|
-
}
|
734
|
-
|
735
|
-
size_t FSE_compress (void* dst, size_t dstCapacity, const void* src, size_t srcSize)
|
736
|
-
{
|
737
|
-
return FSE_compress2(dst, dstCapacity, src, srcSize, FSE_MAX_SYMBOL_VALUE, FSE_DEFAULT_TABLELOG);
|
738
|
-
}
|
739
|
-
#endif
|
740
|
-
|
741
624
|
#endif /* FSE_COMMONDEFS_ONLY */
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* ******************************************************************
|
2
2
|
* hist : Histogram functions
|
3
3
|
* part of Finite State Entropy project
|
4
|
-
* Copyright (c)
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
5
5
|
*
|
6
6
|
* You can contact the author at :
|
7
7
|
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* ******************************************************************
|
2
2
|
* hist : Histogram functions
|
3
3
|
* part of Finite State Entropy project
|
4
|
-
* Copyright (c)
|
4
|
+
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
5
5
|
*
|
6
6
|
* You can contact the author at :
|
7
7
|
* - FSE source repository : https://github.com/Cyan4973/FiniteStateEntropy
|