extzstd 0.0.3.CONCEPT-x86-mingw32 → 0.1-x86-mingw32
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/HISTORY.ja +5 -0
- data/LICENSE +6 -6
- data/README.md +35 -22
- data/contrib/zstd/LICENSE +13 -9
- data/contrib/zstd/README.md +37 -44
- data/contrib/zstd/common/entropy_common.c +33 -39
- data/contrib/zstd/common/error_private.c +43 -0
- data/contrib/zstd/common/error_private.h +11 -60
- data/contrib/zstd/common/fse.h +11 -5
- data/contrib/zstd/common/fse_decompress.c +14 -16
- data/contrib/zstd/common/huf.h +1 -1
- data/contrib/zstd/common/mem.h +36 -43
- data/contrib/zstd/common/xxhash.c +31 -18
- data/contrib/zstd/common/xxhash.h +71 -35
- data/contrib/zstd/common/zbuff.h +29 -35
- data/contrib/zstd/common/zstd_common.c +24 -32
- data/contrib/zstd/common/zstd_errors.h +60 -0
- data/contrib/zstd/common/zstd_internal.h +109 -80
- data/contrib/zstd/compress/fse_compress.c +9 -6
- data/contrib/zstd/compress/huf_compress.c +30 -74
- data/contrib/zstd/compress/zbuff_compress.c +43 -51
- data/contrib/zstd/compress/zstd_compress.c +953 -763
- data/contrib/zstd/compress/zstd_opt.h +115 -261
- data/contrib/zstd/decompress/huf_decompress.c +29 -40
- data/contrib/zstd/decompress/zbuff_decompress.c +36 -78
- data/contrib/zstd/decompress/zstd_decompress.c +976 -496
- data/contrib/zstd/dictBuilder/divsufsort.h +5 -5
- data/contrib/zstd/dictBuilder/zdict.c +194 -229
- data/contrib/zstd/dictBuilder/zdict.h +66 -68
- data/contrib/zstd/legacy/zstd_legacy.h +168 -49
- data/contrib/zstd/legacy/zstd_v01.c +95 -178
- data/contrib/zstd/legacy/zstd_v01.h +12 -32
- data/contrib/zstd/legacy/zstd_v02.c +48 -274
- data/contrib/zstd/legacy/zstd_v02.h +12 -32
- data/contrib/zstd/legacy/zstd_v03.c +48 -274
- data/contrib/zstd/legacy/zstd_v03.h +12 -32
- data/contrib/zstd/legacy/zstd_v04.c +63 -320
- data/contrib/zstd/legacy/zstd_v04.h +13 -33
- data/contrib/zstd/legacy/zstd_v05.c +80 -345
- data/contrib/zstd/legacy/zstd_v05.h +9 -31
- data/contrib/zstd/legacy/zstd_v06.c +48 -458
- data/contrib/zstd/legacy/zstd_v06.h +41 -67
- data/contrib/zstd/legacy/zstd_v07.c +4544 -0
- data/contrib/zstd/legacy/zstd_v07.h +173 -0
- data/contrib/zstd/zstd.h +640 -0
- data/ext/extconf.rb +7 -3
- data/ext/extzstd.c +263 -106
- data/ext/extzstd.h +8 -6
- data/ext/extzstd_nogvls.h +0 -117
- data/ext/extzstd_stream.c +347 -0
- data/ext/zstd_common.c +8 -0
- data/ext/zstd_compress.c +6 -0
- data/ext/zstd_decompress.c +5 -0
- data/ext/zstd_dictbuilder.c +5 -0
- data/ext/zstd_legacy_v07.c +1 -0
- data/gemstub.rb +18 -16
- data/lib/2.1/extzstd.so +0 -0
- data/lib/2.2/extzstd.so +0 -0
- data/lib/2.3/extzstd.so +0 -0
- data/lib/extzstd/version.rb +1 -1
- data/lib/extzstd.rb +77 -43
- data/test/test_basic.rb +11 -6
- metadata +23 -11
- data/contrib/zstd/common/error_public.h +0 -77
- data/contrib/zstd/common/zstd.h +0 -475
- data/ext/extzstd_buffered.c +0 -265
- data/ext/zstd_amalgam.c +0 -18
- data/lib/2.0/extzstd.so +0 -0
@@ -1,90 +1,26 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
met:
|
10
|
-
|
11
|
-
* Redistributions of source code must retain the above copyright
|
12
|
-
notice, this list of conditions and the following disclaimer.
|
13
|
-
* Redistributions in binary form must reproduce the above
|
14
|
-
copyright notice, this list of conditions and the following disclaimer
|
15
|
-
in the documentation and/or other materials provided with the
|
16
|
-
distribution.
|
17
|
-
|
18
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
19
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
20
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
21
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
22
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
23
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
24
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
25
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
26
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
27
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
28
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
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
|
+
*/
|
29
9
|
|
30
|
-
You can contact the author at :
|
31
|
-
- Source repository : https://github.com/Cyan4973/FiniteStateEntropy
|
32
|
-
- Public forum : https://groups.google.com/forum/#!forum/lz4c
|
33
|
-
****************************************************************** */
|
34
|
-
#ifndef ERROR_H_MODULE
|
35
|
-
#define ERROR_H_MODULE
|
36
|
-
|
37
|
-
#if defined (__cplusplus)
|
38
|
-
extern "C" {
|
39
|
-
#endif
|
40
10
|
|
41
11
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
42
12
|
#include "zstd_v02.h"
|
43
|
-
|
44
|
-
/******************************************
|
45
|
-
* Compiler-specific
|
46
|
-
******************************************/
|
47
|
-
#if defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
48
|
-
# define ERR_STATIC static inline
|
49
|
-
#elif defined(_MSC_VER)
|
50
|
-
# define ERR_STATIC static __inline
|
51
|
-
#elif defined(__GNUC__)
|
52
|
-
# define ERR_STATIC static __attribute__((unused))
|
53
|
-
#else
|
54
|
-
# define ERR_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
55
|
-
#endif
|
13
|
+
#include "error_private.h"
|
56
14
|
|
57
15
|
|
58
16
|
/******************************************
|
59
|
-
*
|
17
|
+
* Compiler-specific
|
60
18
|
******************************************/
|
61
|
-
#
|
62
|
-
|
63
|
-
#
|
64
|
-
|
65
|
-
#define ERROR_LIST(ITEM) \
|
66
|
-
ITEM(PREFIX(No_Error)) ITEM(PREFIX(GENERIC)) \
|
67
|
-
ITEM(PREFIX(memory_allocation)) \
|
68
|
-
ITEM(PREFIX(dstSize_tooSmall)) ITEM(PREFIX(srcSize_wrong)) \
|
69
|
-
ITEM(PREFIX(prefix_unknown)) ITEM(PREFIX(corruption_detected)) \
|
70
|
-
ITEM(PREFIX(tableLog_tooLarge)) ITEM(PREFIX(maxSymbolValue_tooLarge)) ITEM(PREFIX(maxSymbolValue_tooSmall)) \
|
71
|
-
ITEM(PREFIX(maxCode))
|
72
|
-
|
73
|
-
#define ERROR_GENERATE_ENUM(ENUM) ENUM,
|
74
|
-
typedef enum { ERROR_LIST(ERROR_GENERATE_ENUM) } ERR_codes; /* enum is exposed, to detect & handle specific errors; compare function result to -enum value */
|
75
|
-
|
76
|
-
#define ERROR_CONVERTTOSTRING(STRING) #STRING,
|
77
|
-
#define ERROR_GENERATE_STRING(EXPR) ERROR_CONVERTTOSTRING(EXPR)
|
78
|
-
|
79
|
-
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
|
80
|
-
|
81
|
-
|
82
|
-
#if defined (__cplusplus)
|
83
|
-
}
|
19
|
+
#if defined(_MSC_VER) /* Visual Studio */
|
20
|
+
# include <stdlib.h> /* _byteswap_ulong */
|
21
|
+
# include <intrin.h> /* _byteswap_* */
|
84
22
|
#endif
|
85
23
|
|
86
|
-
#endif /* ERROR_H_MODULE */
|
87
|
-
|
88
24
|
|
89
25
|
/* ******************************************************************
|
90
26
|
mem.h
|
@@ -190,7 +126,7 @@ extern "C" {
|
|
190
126
|
#ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
|
191
127
|
# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
|
192
128
|
# define MEM_FORCE_MEMORY_ACCESS 2
|
193
|
-
# elif defined(__INTEL_COMPILER) || \
|
129
|
+
# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
|
194
130
|
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) ))
|
195
131
|
# define MEM_FORCE_MEMORY_ACCESS 1
|
196
132
|
# endif
|
@@ -214,8 +150,6 @@ MEM_STATIC U32 MEM_read32(const void* memPtr) { return *(const U32*) memPtr; }
|
|
214
150
|
MEM_STATIC U64 MEM_read64(const void* memPtr) { return *(const U64*) memPtr; }
|
215
151
|
|
216
152
|
MEM_STATIC void MEM_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; }
|
217
|
-
MEM_STATIC void MEM_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; }
|
218
|
-
MEM_STATIC void MEM_write64(void* memPtr, U64 value) { *(U64*)memPtr = value; }
|
219
153
|
|
220
154
|
#elif defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==1)
|
221
155
|
|
@@ -228,8 +162,6 @@ MEM_STATIC U32 MEM_read32(const void* ptr) { return ((const unalign*)ptr)->u32;
|
|
228
162
|
MEM_STATIC U64 MEM_read64(const void* ptr) { return ((const unalign*)ptr)->u64; }
|
229
163
|
|
230
164
|
MEM_STATIC void MEM_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; }
|
231
|
-
MEM_STATIC void MEM_write32(void* memPtr, U32 value) { ((unalign*)memPtr)->u32 = value; }
|
232
|
-
MEM_STATIC void MEM_write64(void* memPtr, U64 value) { ((unalign*)memPtr)->u64 = value; }
|
233
165
|
|
234
166
|
#else
|
235
167
|
|
@@ -256,16 +188,6 @@ MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
|
256
188
|
memcpy(memPtr, &value, sizeof(value));
|
257
189
|
}
|
258
190
|
|
259
|
-
MEM_STATIC void MEM_write32(void* memPtr, U32 value)
|
260
|
-
{
|
261
|
-
memcpy(memPtr, &value, sizeof(value));
|
262
|
-
}
|
263
|
-
|
264
|
-
MEM_STATIC void MEM_write64(void* memPtr, U64 value)
|
265
|
-
{
|
266
|
-
memcpy(memPtr, &value, sizeof(value));
|
267
|
-
}
|
268
|
-
|
269
191
|
#endif // MEM_FORCE_MEMORY_ACCESS
|
270
192
|
|
271
193
|
|
@@ -305,21 +227,6 @@ MEM_STATIC U32 MEM_readLE32(const void* memPtr)
|
|
305
227
|
}
|
306
228
|
}
|
307
229
|
|
308
|
-
MEM_STATIC void MEM_writeLE32(void* memPtr, U32 val32)
|
309
|
-
{
|
310
|
-
if (MEM_isLittleEndian())
|
311
|
-
{
|
312
|
-
MEM_write32(memPtr, val32);
|
313
|
-
}
|
314
|
-
else
|
315
|
-
{
|
316
|
-
BYTE* p = (BYTE*)memPtr;
|
317
|
-
p[0] = (BYTE)val32;
|
318
|
-
p[1] = (BYTE)(val32>>8);
|
319
|
-
p[2] = (BYTE)(val32>>16);
|
320
|
-
p[3] = (BYTE)(val32>>24);
|
321
|
-
}
|
322
|
-
}
|
323
230
|
|
324
231
|
MEM_STATIC U64 MEM_readLE64(const void* memPtr)
|
325
232
|
{
|
@@ -333,25 +240,6 @@ MEM_STATIC U64 MEM_readLE64(const void* memPtr)
|
|
333
240
|
}
|
334
241
|
}
|
335
242
|
|
336
|
-
MEM_STATIC void MEM_writeLE64(void* memPtr, U64 val64)
|
337
|
-
{
|
338
|
-
if (MEM_isLittleEndian())
|
339
|
-
{
|
340
|
-
MEM_write64(memPtr, val64);
|
341
|
-
}
|
342
|
-
else
|
343
|
-
{
|
344
|
-
BYTE* p = (BYTE*)memPtr;
|
345
|
-
p[0] = (BYTE)val64;
|
346
|
-
p[1] = (BYTE)(val64>>8);
|
347
|
-
p[2] = (BYTE)(val64>>16);
|
348
|
-
p[3] = (BYTE)(val64>>24);
|
349
|
-
p[4] = (BYTE)(val64>>32);
|
350
|
-
p[5] = (BYTE)(val64>>40);
|
351
|
-
p[6] = (BYTE)(val64>>48);
|
352
|
-
p[7] = (BYTE)(val64>>56);
|
353
|
-
}
|
354
|
-
}
|
355
243
|
|
356
244
|
MEM_STATIC size_t MEM_readLEST(const void* memPtr)
|
357
245
|
{
|
@@ -361,14 +249,6 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr)
|
|
361
249
|
return (size_t)MEM_readLE64(memPtr);
|
362
250
|
}
|
363
251
|
|
364
|
-
MEM_STATIC void MEM_writeLEST(void* memPtr, size_t val)
|
365
|
-
{
|
366
|
-
if (MEM_32bits())
|
367
|
-
MEM_writeLE32(memPtr, (U32)val);
|
368
|
-
else
|
369
|
-
MEM_writeLE64(memPtr, (U64)val);
|
370
|
-
}
|
371
|
-
|
372
252
|
#if defined (__cplusplus)
|
373
253
|
}
|
374
254
|
#endif
|
@@ -1198,12 +1078,15 @@ typedef struct ZSTD_DCtx_s ZSTD_DCtx;
|
|
1198
1078
|
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
1199
1079
|
# pragma warning(disable : 4214) /* disable: C4214: non-int bitfields */
|
1200
1080
|
#else
|
1201
|
-
#
|
1202
|
-
#
|
1203
|
-
#
|
1081
|
+
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
1082
|
+
# ifdef __GNUC__
|
1083
|
+
# define FORCE_INLINE static inline __attribute__((always_inline))
|
1084
|
+
# else
|
1085
|
+
# define FORCE_INLINE static inline
|
1086
|
+
# endif
|
1204
1087
|
# else
|
1205
|
-
# define FORCE_INLINE static
|
1206
|
-
# endif
|
1088
|
+
# define FORCE_INLINE static
|
1089
|
+
# endif /* __STDC_VERSION__ */
|
1207
1090
|
#endif
|
1208
1091
|
|
1209
1092
|
|
@@ -1350,7 +1233,7 @@ static unsigned FSE_isError(size_t code) { return ERR_isError(code); }
|
|
1350
1233
|
****************************************************************/
|
1351
1234
|
static short FSE_abs(short a)
|
1352
1235
|
{
|
1353
|
-
return a<0 ? -a : a;
|
1236
|
+
return (short)(a<0 ? -a : a);
|
1354
1237
|
}
|
1355
1238
|
|
1356
1239
|
static size_t FSE_readNCount (short* normalizedCounter, unsigned* maxSVPtr, unsigned* tableLogPtr,
|
@@ -1671,15 +1554,7 @@ static size_t FSE_decompress(void* dst, size_t maxDstSize, const void* cSrc, siz
|
|
1671
1554
|
|
1672
1555
|
|
1673
1556
|
#ifdef _MSC_VER /* Visual Studio */
|
1674
|
-
# define FORCE_INLINE static __forceinline
|
1675
1557
|
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
1676
|
-
#else
|
1677
|
-
# ifdef __GNUC__
|
1678
|
-
# define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
|
1679
|
-
# define FORCE_INLINE static inline __attribute__((always_inline))
|
1680
|
-
# else
|
1681
|
-
# define FORCE_INLINE static inline
|
1682
|
-
# endif
|
1683
1558
|
#endif
|
1684
1559
|
|
1685
1560
|
|
@@ -1732,10 +1607,12 @@ static size_t HUF_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats,
|
|
1732
1607
|
U32 weightTotal;
|
1733
1608
|
U32 tableLog;
|
1734
1609
|
const BYTE* ip = (const BYTE*) src;
|
1735
|
-
size_t iSize
|
1610
|
+
size_t iSize;
|
1736
1611
|
size_t oSize;
|
1737
1612
|
U32 n;
|
1738
1613
|
|
1614
|
+
if (!srcSize) return ERROR(srcSize_wrong);
|
1615
|
+
iSize = ip[0];
|
1739
1616
|
//memset(huffWeight, 0, hwSize); /* is not necessary, even though some analyzer complain ... */
|
1740
1617
|
|
1741
1618
|
if (iSize >= 128) /* special header */
|
@@ -1777,6 +1654,7 @@ static size_t HUF_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats,
|
|
1777
1654
|
rankStats[huffWeight[n]]++;
|
1778
1655
|
weightTotal += (1 << huffWeight[n]) >> 1;
|
1779
1656
|
}
|
1657
|
+
if (weightTotal == 0) return ERROR(corruption_detected);
|
1780
1658
|
|
1781
1659
|
/* get last non-null symbol weight (implied, total must be 2^n) */
|
1782
1660
|
tableLog = BIT_highbit32(weightTotal) + 1;
|
@@ -2866,17 +2744,9 @@ static size_t HUF_decompress (void* dst, size_t dstSize, const void* cSrc, size_
|
|
2866
2744
|
#endif
|
2867
2745
|
|
2868
2746
|
#ifdef _MSC_VER /* Visual Studio */
|
2869
|
-
# define FORCE_INLINE static __forceinline
|
2870
2747
|
# include <intrin.h> /* For Visual 2005 */
|
2871
2748
|
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
2872
2749
|
# pragma warning(disable : 4324) /* disable: C4324: padded structure */
|
2873
|
-
#else
|
2874
|
-
# define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
|
2875
|
-
# ifdef __GNUC__
|
2876
|
-
# define FORCE_INLINE static inline __attribute__((always_inline))
|
2877
|
-
# else
|
2878
|
-
# define FORCE_INLINE static inline
|
2879
|
-
# endif
|
2880
2750
|
#endif
|
2881
2751
|
|
2882
2752
|
|
@@ -2983,98 +2853,6 @@ typedef struct {
|
|
2983
2853
|
static unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
|
2984
2854
|
|
2985
2855
|
|
2986
|
-
/* *************************************
|
2987
|
-
* Function body to include
|
2988
|
-
***************************************/
|
2989
|
-
static size_t ZSTD_read_ARCH(const void* p) { size_t r; memcpy(&r, p, sizeof(r)); return r; }
|
2990
|
-
|
2991
|
-
MEM_STATIC unsigned ZSTD_NbCommonBytes (register size_t val)
|
2992
|
-
{
|
2993
|
-
if (MEM_isLittleEndian())
|
2994
|
-
{
|
2995
|
-
if (MEM_64bits())
|
2996
|
-
{
|
2997
|
-
# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT)
|
2998
|
-
unsigned long r = 0;
|
2999
|
-
_BitScanForward64( &r, (U64)val );
|
3000
|
-
return (int)(r>>3);
|
3001
|
-
# elif defined(__GNUC__) && (__GNUC__ >= 3) && !defined(LZ4_FORCE_SW_BITCOUNT)
|
3002
|
-
return (__builtin_ctzll((U64)val) >> 3);
|
3003
|
-
# else
|
3004
|
-
static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 };
|
3005
|
-
return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58];
|
3006
|
-
# endif
|
3007
|
-
}
|
3008
|
-
else /* 32 bits */
|
3009
|
-
{
|
3010
|
-
# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
|
3011
|
-
unsigned long r;
|
3012
|
-
_BitScanForward( &r, (U32)val );
|
3013
|
-
return (int)(r>>3);
|
3014
|
-
# elif defined(__GNUC__) && (__GNUC__ >= 3) && !defined(LZ4_FORCE_SW_BITCOUNT)
|
3015
|
-
return (__builtin_ctz((U32)val) >> 3);
|
3016
|
-
# else
|
3017
|
-
static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 };
|
3018
|
-
return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
|
3019
|
-
# endif
|
3020
|
-
}
|
3021
|
-
}
|
3022
|
-
else /* Big Endian CPU */
|
3023
|
-
{
|
3024
|
-
if (MEM_32bits())
|
3025
|
-
{
|
3026
|
-
# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT)
|
3027
|
-
unsigned long r = 0;
|
3028
|
-
_BitScanReverse64( &r, val );
|
3029
|
-
return (unsigned)(r>>3);
|
3030
|
-
# elif defined(__GNUC__) && (__GNUC__ >= 3) && !defined(LZ4_FORCE_SW_BITCOUNT)
|
3031
|
-
return (__builtin_clzll(val) >> 3);
|
3032
|
-
# else
|
3033
|
-
unsigned r;
|
3034
|
-
const unsigned n32 = sizeof(size_t)*4; /* calculate this way due to compiler complaining in 32-bits mode */
|
3035
|
-
if (!(val>>n32)) { r=4; } else { r=0; val>>=n32; }
|
3036
|
-
if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; }
|
3037
|
-
r += (!val);
|
3038
|
-
return r;
|
3039
|
-
# endif
|
3040
|
-
}
|
3041
|
-
else /* 32 bits */
|
3042
|
-
{
|
3043
|
-
# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
|
3044
|
-
unsigned long r = 0;
|
3045
|
-
_BitScanReverse( &r, (unsigned long)val );
|
3046
|
-
return (unsigned)(r>>3);
|
3047
|
-
# elif defined(__GNUC__) && (__GNUC__ >= 3) && !defined(LZ4_FORCE_SW_BITCOUNT)
|
3048
|
-
return (__builtin_clz((U32)val) >> 3);
|
3049
|
-
# else
|
3050
|
-
unsigned r;
|
3051
|
-
if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; }
|
3052
|
-
r += (!val);
|
3053
|
-
return r;
|
3054
|
-
# endif
|
3055
|
-
}
|
3056
|
-
}
|
3057
|
-
}
|
3058
|
-
|
3059
|
-
|
3060
|
-
MEM_STATIC size_t ZSTD_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit)
|
3061
|
-
{
|
3062
|
-
const BYTE* const pStart = pIn;
|
3063
|
-
|
3064
|
-
while ((pIn<pInLimit-(sizeof(size_t)-1)))
|
3065
|
-
{
|
3066
|
-
size_t diff = ZSTD_read_ARCH(pMatch) ^ ZSTD_read_ARCH(pIn);
|
3067
|
-
if (!diff) { pIn+=sizeof(size_t); pMatch+=sizeof(size_t); continue; }
|
3068
|
-
pIn += ZSTD_NbCommonBytes(diff);
|
3069
|
-
return (size_t)(pIn - pStart);
|
3070
|
-
}
|
3071
|
-
|
3072
|
-
if (MEM_32bits()) if ((pIn<(pInLimit-3)) && (MEM_read32(pMatch) == MEM_read32(pIn))) { pIn+=4; pMatch+=4; }
|
3073
|
-
if ((pIn<(pInLimit-1)) && (MEM_read16(pMatch) == MEM_read16(pIn))) { pIn+=2; pMatch+=2; }
|
3074
|
-
if ((pIn<pInLimit) && (*pMatch == *pIn)) pIn++;
|
3075
|
-
return (size_t)(pIn - pStart);
|
3076
|
-
}
|
3077
|
-
|
3078
2856
|
|
3079
2857
|
/* *************************************************************
|
3080
2858
|
* Decompression section
|
@@ -3244,7 +3022,6 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d
|
|
3244
3022
|
/* Build DTables */
|
3245
3023
|
switch(LLtype)
|
3246
3024
|
{
|
3247
|
-
U32 max;
|
3248
3025
|
case bt_rle :
|
3249
3026
|
LLlog = 0;
|
3250
3027
|
FSE_buildDTable_rle(DTableLL, *ip++); break;
|
@@ -3252,17 +3029,16 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d
|
|
3252
3029
|
LLlog = LLbits;
|
3253
3030
|
FSE_buildDTable_raw(DTableLL, LLbits); break;
|
3254
3031
|
default :
|
3255
|
-
max = MaxLL;
|
3256
|
-
|
3257
|
-
|
3258
|
-
|
3259
|
-
|
3260
|
-
|
3261
|
-
}
|
3032
|
+
{ U32 max = MaxLL;
|
3033
|
+
headerSize = FSE_readNCount(norm, &max, &LLlog, ip, iend-ip);
|
3034
|
+
if (FSE_isError(headerSize)) return ERROR(GENERIC);
|
3035
|
+
if (LLlog > LLFSELog) return ERROR(corruption_detected);
|
3036
|
+
ip += headerSize;
|
3037
|
+
FSE_buildDTable(DTableLL, norm, max, LLlog);
|
3038
|
+
} }
|
3262
3039
|
|
3263
3040
|
switch(Offtype)
|
3264
3041
|
{
|
3265
|
-
U32 max;
|
3266
3042
|
case bt_rle :
|
3267
3043
|
Offlog = 0;
|
3268
3044
|
if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */
|
@@ -3272,17 +3048,16 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d
|
|
3272
3048
|
Offlog = Offbits;
|
3273
3049
|
FSE_buildDTable_raw(DTableOffb, Offbits); break;
|
3274
3050
|
default :
|
3275
|
-
max = MaxOff;
|
3276
|
-
|
3277
|
-
|
3278
|
-
|
3279
|
-
|
3280
|
-
|
3281
|
-
}
|
3051
|
+
{ U32 max = MaxOff;
|
3052
|
+
headerSize = FSE_readNCount(norm, &max, &Offlog, ip, iend-ip);
|
3053
|
+
if (FSE_isError(headerSize)) return ERROR(GENERIC);
|
3054
|
+
if (Offlog > OffFSELog) return ERROR(corruption_detected);
|
3055
|
+
ip += headerSize;
|
3056
|
+
FSE_buildDTable(DTableOffb, norm, max, Offlog);
|
3057
|
+
} }
|
3282
3058
|
|
3283
3059
|
switch(MLtype)
|
3284
3060
|
{
|
3285
|
-
U32 max;
|
3286
3061
|
case bt_rle :
|
3287
3062
|
MLlog = 0;
|
3288
3063
|
if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */
|
@@ -3291,14 +3066,13 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d
|
|
3291
3066
|
MLlog = MLbits;
|
3292
3067
|
FSE_buildDTable_raw(DTableML, MLbits); break;
|
3293
3068
|
default :
|
3294
|
-
max = MaxML;
|
3295
|
-
|
3296
|
-
|
3297
|
-
|
3298
|
-
|
3299
|
-
|
3300
|
-
|
3301
|
-
}
|
3069
|
+
{ U32 max = MaxML;
|
3070
|
+
headerSize = FSE_readNCount(norm, &max, &MLlog, ip, iend-ip);
|
3071
|
+
if (FSE_isError(headerSize)) return ERROR(GENERIC);
|
3072
|
+
if (MLlog > MLFSELog) return ERROR(corruption_detected);
|
3073
|
+
ip += headerSize;
|
3074
|
+
FSE_buildDTable(DTableML, norm, max, MLlog);
|
3075
|
+
} } }
|
3302
3076
|
|
3303
3077
|
return ip-istart;
|
3304
3078
|
}
|
@@ -1,36 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
+
*/
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
met:
|
11
|
-
* Redistributions of source code must retain the above copyright
|
12
|
-
notice, this list of conditions and the following disclaimer.
|
13
|
-
* Redistributions in binary form must reproduce the above
|
14
|
-
copyright notice, this list of conditions and the following disclaimer
|
15
|
-
in the documentation and/or other materials provided with the
|
16
|
-
distribution.
|
17
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
18
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
19
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
20
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
21
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
24
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
25
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
29
|
-
You can contact the author at :
|
30
|
-
- zstd source repository : https://github.com/Cyan4973/zstd
|
31
|
-
- ztsd public forum : https://groups.google.com/forum/#!forum/lz4c
|
32
|
-
*/
|
33
|
-
#pragma once
|
10
|
+
#ifndef ZSTD_V02_H_4174539423
|
11
|
+
#define ZSTD_V02_H_4174539423
|
34
12
|
|
35
13
|
#if defined (__cplusplus)
|
36
14
|
extern "C" {
|
@@ -97,3 +75,5 @@ size_t ZSTDv02_decompressContinue(ZSTDv02_Dctx* dctx, void* dst, size_t maxDstSi
|
|
97
75
|
#if defined (__cplusplus)
|
98
76
|
}
|
99
77
|
#endif
|
78
|
+
|
79
|
+
#endif /* ZSTD_V02_H_4174539423 */
|