extzstd 0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (86) hide show
  1. checksums.yaml +4 -4
  2. data/HISTORY.ja +5 -0
  3. data/README.md +5 -5
  4. data/contrib/zstd/CONTRIBUTING.md +42 -0
  5. data/contrib/zstd/LICENSE-examples +11 -0
  6. data/contrib/zstd/Makefile +315 -0
  7. data/contrib/zstd/NEWS +261 -0
  8. data/contrib/zstd/PATENTS +33 -0
  9. data/contrib/zstd/README.md +121 -41
  10. data/contrib/zstd/TESTING.md +44 -0
  11. data/contrib/zstd/appveyor.yml +178 -0
  12. data/contrib/zstd/circle.yml +75 -0
  13. data/contrib/zstd/lib/BUCK +186 -0
  14. data/contrib/zstd/lib/Makefile +163 -0
  15. data/contrib/zstd/lib/README.md +77 -0
  16. data/contrib/zstd/{common → lib/common}/bitstream.h +7 -4
  17. data/contrib/zstd/{common → lib/common}/entropy_common.c +19 -23
  18. data/contrib/zstd/{common → lib/common}/error_private.c +0 -0
  19. data/contrib/zstd/{common → lib/common}/error_private.h +0 -0
  20. data/contrib/zstd/{common → lib/common}/fse.h +94 -34
  21. data/contrib/zstd/{common → lib/common}/fse_decompress.c +18 -19
  22. data/contrib/zstd/{common → lib/common}/huf.h +52 -20
  23. data/contrib/zstd/{common → lib/common}/mem.h +17 -13
  24. data/contrib/zstd/lib/common/pool.c +194 -0
  25. data/contrib/zstd/lib/common/pool.h +56 -0
  26. data/contrib/zstd/lib/common/threading.c +80 -0
  27. data/contrib/zstd/lib/common/threading.h +104 -0
  28. data/contrib/zstd/{common → lib/common}/xxhash.c +3 -1
  29. data/contrib/zstd/{common → lib/common}/xxhash.h +11 -15
  30. data/contrib/zstd/{common → lib/common}/zstd_common.c +1 -11
  31. data/contrib/zstd/{common → lib/common}/zstd_errors.h +16 -2
  32. data/contrib/zstd/{common → lib/common}/zstd_internal.h +17 -1
  33. data/contrib/zstd/{compress → lib/compress}/fse_compress.c +138 -91
  34. data/contrib/zstd/{compress → lib/compress}/huf_compress.c +218 -67
  35. data/contrib/zstd/{compress → lib/compress}/zstd_compress.c +231 -108
  36. data/contrib/zstd/{compress → lib/compress}/zstd_opt.h +44 -25
  37. data/contrib/zstd/lib/compress/zstdmt_compress.c +739 -0
  38. data/contrib/zstd/lib/compress/zstdmt_compress.h +78 -0
  39. data/contrib/zstd/{decompress → lib/decompress}/huf_decompress.c +28 -23
  40. data/contrib/zstd/{decompress → lib/decompress}/zstd_decompress.c +814 -176
  41. data/contrib/zstd/{common → lib/deprecated}/zbuff.h +60 -39
  42. data/contrib/zstd/lib/deprecated/zbuff_common.c +26 -0
  43. data/contrib/zstd/lib/deprecated/zbuff_compress.c +145 -0
  44. data/contrib/zstd/lib/deprecated/zbuff_decompress.c +74 -0
  45. data/contrib/zstd/lib/dictBuilder/cover.c +1029 -0
  46. data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.c +0 -0
  47. data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.h +0 -0
  48. data/contrib/zstd/{dictBuilder → lib/dictBuilder}/zdict.c +68 -18
  49. data/contrib/zstd/lib/dictBuilder/zdict.h +201 -0
  50. data/contrib/zstd/{legacy → lib/legacy}/zstd_legacy.h +122 -7
  51. data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.c +34 -3
  52. data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.h +8 -0
  53. data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.c +45 -12
  54. data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.h +8 -0
  55. data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.c +45 -12
  56. data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.h +8 -0
  57. data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.c +56 -33
  58. data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.h +8 -0
  59. data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.c +45 -18
  60. data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.h +7 -0
  61. data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.c +43 -16
  62. data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.h +7 -0
  63. data/contrib/zstd/{legacy → lib/legacy}/zstd_v07.c +57 -23
  64. data/contrib/zstd/{legacy → lib/legacy}/zstd_v07.h +8 -0
  65. data/contrib/zstd/lib/libzstd.pc.in +14 -0
  66. data/contrib/zstd/{zstd.h → lib/zstd.h} +206 -71
  67. data/ext/depend +2 -0
  68. data/ext/extconf.rb +4 -4
  69. data/ext/extzstd.c +1 -1
  70. data/ext/zstd_common.c +5 -5
  71. data/ext/zstd_compress.c +3 -3
  72. data/ext/zstd_decompress.c +2 -2
  73. data/ext/zstd_dictbuilder.c +2 -2
  74. data/ext/zstd_legacy_v01.c +1 -1
  75. data/ext/zstd_legacy_v02.c +1 -1
  76. data/ext/zstd_legacy_v03.c +1 -1
  77. data/ext/zstd_legacy_v04.c +1 -1
  78. data/ext/zstd_legacy_v05.c +1 -1
  79. data/ext/zstd_legacy_v06.c +1 -1
  80. data/ext/zstd_legacy_v07.c +1 -1
  81. data/gemstub.rb +9 -5
  82. data/lib/extzstd/version.rb +1 -1
  83. metadata +73 -51
  84. data/contrib/zstd/compress/zbuff_compress.c +0 -319
  85. data/contrib/zstd/decompress/zbuff_decompress.c +0 -252
  86. data/contrib/zstd/dictBuilder/zdict.h +0 -111
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ */
9
+
10
+ #ifndef ZSTDMT_COMPRESS_H
11
+ #define ZSTDMT_COMPRESS_H
12
+
13
+ #if defined (__cplusplus)
14
+ extern "C" {
15
+ #endif
16
+
17
+
18
+ /* Note : All prototypes defined in this file shall be considered experimental.
19
+ * There is no guarantee of API continuity (yet) on any of these prototypes */
20
+
21
+ /* === Dependencies === */
22
+ #include <stddef.h> /* size_t */
23
+ #define ZSTD_STATIC_LINKING_ONLY /* ZSTD_parameters */
24
+ #include "zstd.h" /* ZSTD_inBuffer, ZSTD_outBuffer, ZSTDLIB_API */
25
+
26
+
27
+ /* === Simple one-pass functions === */
28
+
29
+ typedef struct ZSTDMT_CCtx_s ZSTDMT_CCtx;
30
+ ZSTDLIB_API ZSTDMT_CCtx* ZSTDMT_createCCtx(unsigned nbThreads);
31
+ ZSTDLIB_API size_t ZSTDMT_freeCCtx(ZSTDMT_CCtx* cctx);
32
+
33
+ ZSTDLIB_API size_t ZSTDMT_compressCCtx(ZSTDMT_CCtx* cctx,
34
+ void* dst, size_t dstCapacity,
35
+ const void* src, size_t srcSize,
36
+ int compressionLevel);
37
+
38
+
39
+ /* === Streaming functions === */
40
+
41
+ ZSTDLIB_API size_t ZSTDMT_initCStream(ZSTDMT_CCtx* mtctx, int compressionLevel);
42
+ ZSTDLIB_API size_t ZSTDMT_resetCStream(ZSTDMT_CCtx* mtctx, unsigned long long pledgedSrcSize); /**< pledgedSrcSize is optional and can be zero == unknown */
43
+
44
+ ZSTDLIB_API size_t ZSTDMT_compressStream(ZSTDMT_CCtx* mtctx, ZSTD_outBuffer* output, ZSTD_inBuffer* input);
45
+
46
+ ZSTDLIB_API size_t ZSTDMT_flushStream(ZSTDMT_CCtx* mtctx, ZSTD_outBuffer* output); /**< @return : 0 == all flushed; >0 : still some data to be flushed; or an error code (ZSTD_isError()) */
47
+ ZSTDLIB_API size_t ZSTDMT_endStream(ZSTDMT_CCtx* mtctx, ZSTD_outBuffer* output); /**< @return : 0 == all flushed; >0 : still some data to be flushed; or an error code (ZSTD_isError()) */
48
+
49
+
50
+ /* === Advanced functions and parameters === */
51
+
52
+ #ifndef ZSTDMT_SECTION_SIZE_MIN
53
+ # define ZSTDMT_SECTION_SIZE_MIN (1U << 20) /* 1 MB - Minimum size of each compression job */
54
+ #endif
55
+
56
+ ZSTDLIB_API size_t ZSTDMT_initCStream_advanced(ZSTDMT_CCtx* mtctx, const void* dict, size_t dictSize, /**< dict can be released after init, a local copy is preserved within zcs */
57
+ ZSTD_parameters params, unsigned long long pledgedSrcSize); /**< pledgedSrcSize is optional and can be zero == unknown */
58
+
59
+ /* ZSDTMT_parameter :
60
+ * List of parameters that can be set using ZSTDMT_setMTCtxParameter() */
61
+ typedef enum {
62
+ ZSTDMT_p_sectionSize, /* size of input "section". Each section is compressed in parallel. 0 means default, which is dynamically determined within compression functions */
63
+ ZSTDMT_p_overlapSectionLog /* Log of overlapped section; 0 == no overlap, 6(default) == use 1/8th of window, >=9 == use full window */
64
+ } ZSDTMT_parameter;
65
+
66
+ /* ZSTDMT_setMTCtxParameter() :
67
+ * allow setting individual parameters, one at a time, among a list of enums defined in ZSTDMT_parameter.
68
+ * The function must be called typically after ZSTD_createCCtx().
69
+ * Parameters not explicitly reset by ZSTDMT_init*() remain the same in consecutive compression sessions.
70
+ * @return : 0, or an error code (which can be tested using ZSTD_isError()) */
71
+ ZSTDLIB_API size_t ZSTDMT_setMTCtxParameter(ZSTDMT_CCtx* mtctx, ZSDTMT_parameter parameter, unsigned value);
72
+
73
+
74
+ #if defined (__cplusplus)
75
+ }
76
+ #endif
77
+
78
+ #endif /* ZSTDMT_COMPRESS_H */
@@ -35,16 +35,19 @@
35
35
  /* **************************************************************
36
36
  * Compiler specifics
37
37
  ****************************************************************/
38
- #if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
39
- /* inline is defined */
40
- #elif defined(_MSC_VER) || defined(__GNUC__)
41
- # define inline __inline
42
- #else
43
- # define inline /* disable inline */
44
- #endif
45
-
46
38
  #ifdef _MSC_VER /* Visual Studio */
39
+ # define FORCE_INLINE static __forceinline
47
40
  # pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
41
+ #else
42
+ # if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
43
+ # ifdef __GNUC__
44
+ # define FORCE_INLINE static inline __attribute__((always_inline))
45
+ # else
46
+ # define FORCE_INLINE static inline
47
+ # endif
48
+ # else
49
+ # define FORCE_INLINE static
50
+ # endif /* __STDC_VERSION__ */
48
51
  #endif
49
52
 
50
53
 
@@ -102,16 +105,16 @@ size_t HUF_readDTableX2 (HUF_DTable* DTable, const void* src, size_t srcSize)
102
105
 
103
106
  /* Table header */
104
107
  { DTableDesc dtd = HUF_getDTableDesc(DTable);
105
- if (tableLog > (U32)(dtd.maxTableLog+1)) return ERROR(tableLog_tooLarge); /* DTable too small, huffman tree cannot fit in */
108
+ if (tableLog > (U32)(dtd.maxTableLog+1)) return ERROR(tableLog_tooLarge); /* DTable too small, Huffman tree cannot fit in */
106
109
  dtd.tableType = 0;
107
110
  dtd.tableLog = (BYTE)tableLog;
108
111
  memcpy(DTable, &dtd, sizeof(dtd));
109
112
  }
110
113
 
111
- /* Prepare ranks */
114
+ /* Calculate starting value for each rank */
112
115
  { U32 n, nextRankStart = 0;
113
116
  for (n=1; n<tableLog+1; n++) {
114
- U32 current = nextRankStart;
117
+ U32 const current = nextRankStart;
115
118
  nextRankStart += (rankVal[n] << (n-1));
116
119
  rankVal[n] = current;
117
120
  } }
@@ -121,11 +124,11 @@ size_t HUF_readDTableX2 (HUF_DTable* DTable, const void* src, size_t srcSize)
121
124
  for (n=0; n<nbSymbols; n++) {
122
125
  U32 const w = huffWeight[n];
123
126
  U32 const length = (1 << w) >> 1;
124
- U32 i;
127
+ U32 u;
125
128
  HUF_DEltX2 D;
126
129
  D.byte = (BYTE)n; D.nbBits = (BYTE)(tableLog + 1 - w);
127
- for (i = rankVal[w]; i < rankVal[w] + length; i++)
128
- dt[i] = D;
130
+ for (u = rankVal[w]; u < rankVal[w] + length; u++)
131
+ dt[u] = D;
129
132
  rankVal[w] += length;
130
133
  } }
131
134
 
@@ -152,7 +155,7 @@ static BYTE HUF_decodeSymbolX2(BIT_DStream_t* Dstream, const HUF_DEltX2* dt, con
152
155
  if (MEM_64bits()) \
153
156
  HUF_DECODE_SYMBOLX2_0(ptr, DStreamPtr)
154
157
 
155
- static inline size_t HUF_decodeStreamX2(BYTE* p, BIT_DStream_t* const bitDPtr, BYTE* const pEnd, const HUF_DEltX2* const dt, const U32 dtLog)
158
+ FORCE_INLINE size_t HUF_decodeStreamX2(BYTE* p, BIT_DStream_t* const bitDPtr, BYTE* const pEnd, const HUF_DEltX2* const dt, const U32 dtLog)
156
159
  {
157
160
  BYTE* const pStart = p;
158
161
 
@@ -358,13 +361,15 @@ typedef struct { U16 sequence; BYTE nbBits; BYTE length; } HUF_DEltX4; /* doubl
358
361
 
359
362
  typedef struct { BYTE symbol; BYTE weight; } sortedSymbol_t;
360
363
 
364
+ /* HUF_fillDTableX4Level2() :
365
+ * `rankValOrigin` must be a table of at least (HUF_TABLELOG_MAX + 1) U32 */
361
366
  static void HUF_fillDTableX4Level2(HUF_DEltX4* DTable, U32 sizeLog, const U32 consumed,
362
367
  const U32* rankValOrigin, const int minWeight,
363
368
  const sortedSymbol_t* sortedSymbols, const U32 sortedListSize,
364
369
  U32 nbBitsBaseline, U16 baseSeq)
365
370
  {
366
371
  HUF_DEltX4 DElt;
367
- U32 rankVal[HUF_TABLELOG_ABSOLUTEMAX + 1];
372
+ U32 rankVal[HUF_TABLELOG_MAX + 1];
368
373
 
369
374
  /* get pre-calculated rankVal */
370
375
  memcpy(rankVal, rankValOrigin, sizeof(rankVal));
@@ -398,14 +403,14 @@ static void HUF_fillDTableX4Level2(HUF_DEltX4* DTable, U32 sizeLog, const U32 co
398
403
  } }
399
404
  }
400
405
 
401
- typedef U32 rankVal_t[HUF_TABLELOG_ABSOLUTEMAX][HUF_TABLELOG_ABSOLUTEMAX + 1];
406
+ typedef U32 rankVal_t[HUF_TABLELOG_MAX][HUF_TABLELOG_MAX + 1];
402
407
 
403
408
  static void HUF_fillDTableX4(HUF_DEltX4* DTable, const U32 targetLog,
404
409
  const sortedSymbol_t* sortedList, const U32 sortedListSize,
405
410
  const U32* rankStart, rankVal_t rankValOrigin, const U32 maxWeight,
406
411
  const U32 nbBitsBaseline)
407
412
  {
408
- U32 rankVal[HUF_TABLELOG_ABSOLUTEMAX + 1];
413
+ U32 rankVal[HUF_TABLELOG_MAX + 1];
409
414
  const int scaleLog = nbBitsBaseline - targetLog; /* note : targetLog >= srcLog, hence scaleLog <= 1 */
410
415
  const U32 minBits = nbBitsBaseline - maxWeight;
411
416
  U32 s;
@@ -446,8 +451,8 @@ size_t HUF_readDTableX4 (HUF_DTable* DTable, const void* src, size_t srcSize)
446
451
  {
447
452
  BYTE weightList[HUF_SYMBOLVALUE_MAX + 1];
448
453
  sortedSymbol_t sortedSymbol[HUF_SYMBOLVALUE_MAX + 1];
449
- U32 rankStats[HUF_TABLELOG_ABSOLUTEMAX + 1] = { 0 };
450
- U32 rankStart0[HUF_TABLELOG_ABSOLUTEMAX + 2] = { 0 };
454
+ U32 rankStats[HUF_TABLELOG_MAX + 1] = { 0 };
455
+ U32 rankStart0[HUF_TABLELOG_MAX + 2] = { 0 };
451
456
  U32* const rankStart = rankStart0+1;
452
457
  rankVal_t rankVal;
453
458
  U32 tableLog, maxW, sizeOfSort, nbSymbols;
@@ -457,8 +462,8 @@ size_t HUF_readDTableX4 (HUF_DTable* DTable, const void* src, size_t srcSize)
457
462
  void* dtPtr = DTable+1; /* force compiler to avoid strict-aliasing */
458
463
  HUF_DEltX4* const dt = (HUF_DEltX4*)dtPtr;
459
464
 
460
- HUF_STATIC_ASSERT(sizeof(HUF_DEltX4) == sizeof(HUF_DTable)); /* if compilation fails here, assertion is false */
461
- if (maxTableLog > HUF_TABLELOG_ABSOLUTEMAX) return ERROR(tableLog_tooLarge);
465
+ HUF_STATIC_ASSERT(sizeof(HUF_DEltX4) == sizeof(HUF_DTable)); /* if compiler fails here, assertion is wrong */
466
+ if (maxTableLog > HUF_TABLELOG_MAX) return ERROR(tableLog_tooLarge);
462
467
  /* memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
463
468
 
464
469
  iSize = HUF_readStats(weightList, HUF_SYMBOLVALUE_MAX + 1, rankStats, &nbSymbols, &tableLog, src, srcSize);
@@ -557,7 +562,7 @@ static U32 HUF_decodeLastSymbolX4(void* op, BIT_DStream_t* DStream, const HUF_DE
557
562
  if (MEM_64bits()) \
558
563
  ptr += HUF_decodeSymbolX4(ptr, DStreamPtr, dt, dtLog)
559
564
 
560
- static inline size_t HUF_decodeStreamX4(BYTE* p, BIT_DStream_t* bitDPtr, BYTE* const pEnd, const HUF_DEltX4* const dt, const U32 dtLog)
565
+ FORCE_INLINE size_t HUF_decodeStreamX4(BYTE* p, BIT_DStream_t* bitDPtr, BYTE* const pEnd, const HUF_DEltX4* const dt, const U32 dtLog)
561
566
  {
562
567
  BYTE* const pStart = p;
563
568