extzstd 0.1.1 → 0.2
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 +5 -5
- data/HISTORY.ja.md +18 -0
- data/README.md +15 -50
- data/contrib/zstd/CONTRIBUTING.md +1 -1
- data/contrib/zstd/COPYING +339 -0
- data/contrib/zstd/Makefile +82 -51
- data/contrib/zstd/NEWS +92 -5
- data/contrib/zstd/README.md +50 -41
- data/contrib/zstd/appveyor.yml +164 -102
- data/contrib/zstd/circle.yml +10 -22
- data/contrib/zstd/lib/BUCK +31 -10
- data/contrib/zstd/lib/Makefile +57 -31
- data/contrib/zstd/lib/README.md +68 -37
- data/contrib/zstd/lib/common/bitstream.h +130 -76
- data/contrib/zstd/lib/common/compiler.h +86 -0
- data/contrib/zstd/lib/common/error_private.c +15 -11
- data/contrib/zstd/lib/common/error_private.h +8 -8
- data/contrib/zstd/lib/common/fse.h +19 -9
- data/contrib/zstd/lib/common/fse_decompress.c +3 -22
- data/contrib/zstd/lib/common/huf.h +68 -26
- data/contrib/zstd/lib/common/mem.h +23 -35
- data/contrib/zstd/lib/common/pool.c +123 -63
- data/contrib/zstd/lib/common/pool.h +19 -10
- data/contrib/zstd/lib/common/threading.c +11 -16
- data/contrib/zstd/lib/common/threading.h +52 -33
- data/contrib/zstd/lib/common/xxhash.c +28 -22
- data/contrib/zstd/lib/common/zstd_common.c +40 -27
- data/contrib/zstd/lib/common/zstd_errors.h +43 -34
- data/contrib/zstd/lib/common/zstd_internal.h +131 -123
- data/contrib/zstd/lib/compress/fse_compress.c +17 -33
- data/contrib/zstd/lib/compress/huf_compress.c +15 -9
- data/contrib/zstd/lib/compress/zstd_compress.c +2096 -2363
- data/contrib/zstd/lib/compress/zstd_compress_internal.h +462 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.c +309 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.h +29 -0
- data/contrib/zstd/lib/compress/zstd_fast.c +243 -0
- data/contrib/zstd/lib/compress/zstd_fast.h +31 -0
- data/contrib/zstd/lib/compress/zstd_lazy.c +765 -0
- data/contrib/zstd/lib/compress/zstd_lazy.h +39 -0
- data/contrib/zstd/lib/compress/zstd_ldm.c +707 -0
- data/contrib/zstd/lib/compress/zstd_ldm.h +68 -0
- data/contrib/zstd/lib/compress/zstd_opt.c +785 -0
- data/contrib/zstd/lib/compress/zstd_opt.h +19 -908
- data/contrib/zstd/lib/compress/zstdmt_compress.c +737 -327
- data/contrib/zstd/lib/compress/zstdmt_compress.h +88 -26
- data/contrib/zstd/lib/decompress/huf_decompress.c +158 -50
- data/contrib/zstd/lib/decompress/zstd_decompress.c +884 -699
- data/contrib/zstd/lib/deprecated/zbuff.h +5 -4
- data/contrib/zstd/lib/deprecated/zbuff_common.c +5 -5
- data/contrib/zstd/lib/deprecated/zbuff_compress.c +6 -4
- data/contrib/zstd/lib/deprecated/zbuff_decompress.c +5 -4
- data/contrib/zstd/lib/dictBuilder/cover.c +93 -77
- data/contrib/zstd/lib/dictBuilder/zdict.c +107 -92
- data/contrib/zstd/lib/dictBuilder/zdict.h +112 -102
- data/contrib/zstd/lib/legacy/zstd_legacy.h +9 -4
- data/contrib/zstd/lib/legacy/zstd_v01.c +7 -6
- data/contrib/zstd/lib/legacy/zstd_v01.h +5 -4
- data/contrib/zstd/lib/legacy/zstd_v02.c +27 -99
- data/contrib/zstd/lib/legacy/zstd_v02.h +5 -4
- data/contrib/zstd/lib/legacy/zstd_v03.c +26 -98
- data/contrib/zstd/lib/legacy/zstd_v03.h +5 -4
- data/contrib/zstd/lib/legacy/zstd_v04.c +22 -91
- data/contrib/zstd/lib/legacy/zstd_v04.h +5 -4
- data/contrib/zstd/lib/legacy/zstd_v05.c +23 -99
- data/contrib/zstd/lib/legacy/zstd_v05.h +5 -4
- data/contrib/zstd/lib/legacy/zstd_v06.c +22 -96
- data/contrib/zstd/lib/legacy/zstd_v06.h +5 -4
- data/contrib/zstd/lib/legacy/zstd_v07.c +19 -95
- data/contrib/zstd/lib/legacy/zstd_v07.h +5 -4
- data/contrib/zstd/lib/zstd.h +895 -271
- data/ext/extconf.rb +11 -2
- data/ext/extzstd.c +45 -128
- data/ext/extzstd.h +74 -31
- data/ext/extzstd_stream.c +401 -142
- data/ext/zstd_common.c +5 -0
- data/ext/zstd_compress.c +8 -0
- data/ext/zstd_decompress.c +1 -0
- data/ext/zstd_dictbuilder.c +2 -0
- data/lib/extzstd/version.rb +1 -1
- data/lib/extzstd.rb +48 -1
- data/test/test_basic.rb +9 -1
- metadata +17 -7
- data/HISTORY.ja +0 -10
- data/contrib/zstd/LICENSE-examples +0 -11
- data/contrib/zstd/PATENTS +0 -33
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
2
|
* Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
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
|
|
7
|
-
*
|
|
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.
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
11
|
|
|
@@ -12,62 +13,74 @@
|
|
|
12
13
|
/*-*************************************
|
|
13
14
|
* Dependencies
|
|
14
15
|
***************************************/
|
|
15
|
-
#include <stdlib.h>
|
|
16
|
+
#include <stdlib.h> /* malloc, calloc, free */
|
|
17
|
+
#include <string.h> /* memset */
|
|
16
18
|
#include "error_private.h"
|
|
17
|
-
#
|
|
18
|
-
#include "zstd.h" /* declaration of ZSTD_isError, ZSTD_getErrorName, ZSTD_getErrorCode, ZSTD_getErrorString, ZSTD_versionNumber */
|
|
19
|
+
#include "zstd_internal.h"
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
/*-****************************************
|
|
22
23
|
* Version
|
|
23
24
|
******************************************/
|
|
24
|
-
unsigned ZSTD_versionNumber
|
|
25
|
+
unsigned ZSTD_versionNumber(void) { return ZSTD_VERSION_NUMBER; }
|
|
26
|
+
|
|
27
|
+
const char* ZSTD_versionString(void) { return ZSTD_VERSION_STRING; }
|
|
25
28
|
|
|
26
29
|
|
|
27
30
|
/*-****************************************
|
|
28
31
|
* ZSTD Error Management
|
|
29
32
|
******************************************/
|
|
30
33
|
/*! ZSTD_isError() :
|
|
31
|
-
*
|
|
34
|
+
* tells if a return value is an error code */
|
|
32
35
|
unsigned ZSTD_isError(size_t code) { return ERR_isError(code); }
|
|
33
36
|
|
|
34
37
|
/*! ZSTD_getErrorName() :
|
|
35
|
-
*
|
|
38
|
+
* provides error code string from function result (useful for debugging) */
|
|
36
39
|
const char* ZSTD_getErrorName(size_t code) { return ERR_getErrorName(code); }
|
|
37
40
|
|
|
38
41
|
/*! ZSTD_getError() :
|
|
39
|
-
*
|
|
42
|
+
* convert a `size_t` function result into a proper ZSTD_errorCode enum */
|
|
40
43
|
ZSTD_ErrorCode ZSTD_getErrorCode(size_t code) { return ERR_getErrorCode(code); }
|
|
41
44
|
|
|
42
45
|
/*! ZSTD_getErrorString() :
|
|
43
|
-
*
|
|
46
|
+
* provides error code string from enum */
|
|
44
47
|
const char* ZSTD_getErrorString(ZSTD_ErrorCode code) { return ERR_getErrorString(code); }
|
|
45
48
|
|
|
49
|
+
/*! g_debuglog_enable :
|
|
50
|
+
* turn on/off debug traces (global switch) */
|
|
51
|
+
#if defined(ZSTD_DEBUG) && (ZSTD_DEBUG >= 2)
|
|
52
|
+
int g_debuglog_enable = 1;
|
|
53
|
+
#endif
|
|
54
|
+
|
|
46
55
|
|
|
47
56
|
/*=**************************************************************
|
|
48
57
|
* Custom allocator
|
|
49
58
|
****************************************************************/
|
|
50
|
-
|
|
51
|
-
void* ZSTD_defaultAllocFunction(void* opaque, size_t size)
|
|
52
|
-
{
|
|
53
|
-
void* address = malloc(size);
|
|
54
|
-
(void)opaque;
|
|
55
|
-
return address;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
void ZSTD_defaultFreeFunction(void* opaque, void* address)
|
|
59
|
+
void* ZSTD_malloc(size_t size, ZSTD_customMem customMem)
|
|
59
60
|
{
|
|
60
|
-
(
|
|
61
|
-
|
|
61
|
+
if (customMem.customAlloc)
|
|
62
|
+
return customMem.customAlloc(customMem.opaque, size);
|
|
63
|
+
return malloc(size);
|
|
62
64
|
}
|
|
63
65
|
|
|
64
|
-
void*
|
|
66
|
+
void* ZSTD_calloc(size_t size, ZSTD_customMem customMem)
|
|
65
67
|
{
|
|
66
|
-
|
|
68
|
+
if (customMem.customAlloc) {
|
|
69
|
+
/* calloc implemented as malloc+memset;
|
|
70
|
+
* not as efficient as calloc, but next best guess for custom malloc */
|
|
71
|
+
void* const ptr = customMem.customAlloc(customMem.opaque, size);
|
|
72
|
+
memset(ptr, 0, size);
|
|
73
|
+
return ptr;
|
|
74
|
+
}
|
|
75
|
+
return calloc(1, size);
|
|
67
76
|
}
|
|
68
77
|
|
|
69
78
|
void ZSTD_free(void* ptr, ZSTD_customMem customMem)
|
|
70
79
|
{
|
|
71
|
-
if (ptr!=NULL)
|
|
72
|
-
customMem.customFree
|
|
80
|
+
if (ptr!=NULL) {
|
|
81
|
+
if (customMem.customFree)
|
|
82
|
+
customMem.customFree(customMem.opaque, ptr);
|
|
83
|
+
else
|
|
84
|
+
free(ptr);
|
|
85
|
+
}
|
|
73
86
|
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
2
|
* Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
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
|
|
7
|
-
*
|
|
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.
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
11
|
#ifndef ZSTD_ERRORS_H_398273423
|
|
@@ -19,10 +20,12 @@ extern "C" {
|
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
/* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */
|
|
22
|
-
#
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
#
|
|
23
|
+
#ifndef ZSTDERRORLIB_VISIBILITY
|
|
24
|
+
# if defined(__GNUC__) && (__GNUC__ >= 4)
|
|
25
|
+
# define ZSTDERRORLIB_VISIBILITY __attribute__ ((visibility ("default")))
|
|
26
|
+
# else
|
|
27
|
+
# define ZSTDERRORLIB_VISIBILITY
|
|
28
|
+
# endif
|
|
26
29
|
#endif
|
|
27
30
|
#if defined(ZSTD_DLL_EXPORT) && (ZSTD_DLL_EXPORT==1)
|
|
28
31
|
# define ZSTDERRORLIB_API __declspec(dllexport) ZSTDERRORLIB_VISIBILITY
|
|
@@ -33,38 +36,44 @@ extern "C" {
|
|
|
33
36
|
#endif
|
|
34
37
|
|
|
35
38
|
/*-****************************************
|
|
36
|
-
* error codes list
|
|
37
|
-
|
|
39
|
+
* error codes list
|
|
40
|
+
* note : this API is still considered unstable
|
|
41
|
+
* and shall not be used with a dynamic library.
|
|
42
|
+
* only static linking is allowed
|
|
43
|
+
******************************************/
|
|
38
44
|
typedef enum {
|
|
39
|
-
ZSTD_error_no_error,
|
|
40
|
-
ZSTD_error_GENERIC,
|
|
41
|
-
ZSTD_error_prefix_unknown,
|
|
42
|
-
ZSTD_error_version_unsupported,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
45
|
+
ZSTD_error_no_error = 0,
|
|
46
|
+
ZSTD_error_GENERIC = 1,
|
|
47
|
+
ZSTD_error_prefix_unknown = 10,
|
|
48
|
+
ZSTD_error_version_unsupported = 12,
|
|
49
|
+
ZSTD_error_frameParameter_unsupported = 14,
|
|
50
|
+
ZSTD_error_frameParameter_windowTooLarge = 16,
|
|
51
|
+
ZSTD_error_corruption_detected = 20,
|
|
52
|
+
ZSTD_error_checksum_wrong = 22,
|
|
53
|
+
ZSTD_error_dictionary_corrupted = 30,
|
|
54
|
+
ZSTD_error_dictionary_wrong = 32,
|
|
55
|
+
ZSTD_error_dictionaryCreation_failed = 34,
|
|
56
|
+
ZSTD_error_parameter_unsupported = 40,
|
|
57
|
+
ZSTD_error_parameter_outOfBound = 42,
|
|
58
|
+
ZSTD_error_tableLog_tooLarge = 44,
|
|
59
|
+
ZSTD_error_maxSymbolValue_tooLarge = 46,
|
|
60
|
+
ZSTD_error_maxSymbolValue_tooSmall = 48,
|
|
61
|
+
ZSTD_error_stage_wrong = 60,
|
|
62
|
+
ZSTD_error_init_missing = 62,
|
|
63
|
+
ZSTD_error_memory_allocation = 64,
|
|
64
|
+
ZSTD_error_dstSize_tooSmall = 70,
|
|
65
|
+
ZSTD_error_srcSize_wrong = 72,
|
|
66
|
+
/* following error codes are not stable and may be removed or changed in a future version */
|
|
67
|
+
ZSTD_error_frameIndex_tooLarge = 100,
|
|
68
|
+
ZSTD_error_seekableIO = 102,
|
|
69
|
+
ZSTD_error_maxCode = 120 /* never EVER use this value directly, it can change in future versions! Use ZSTD_isError() instead */
|
|
61
70
|
} ZSTD_ErrorCode;
|
|
62
71
|
|
|
63
72
|
/*! ZSTD_getErrorCode() :
|
|
64
73
|
convert a `size_t` function result into a `ZSTD_ErrorCode` enum type,
|
|
65
|
-
which can be used to compare
|
|
74
|
+
which can be used to compare with enum list published above */
|
|
66
75
|
ZSTDERRORLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult);
|
|
67
|
-
ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code);
|
|
76
|
+
ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code); /**< Same as ZSTD_getErrorName, but using a `ZSTD_ErrorCode` enum argument */
|
|
68
77
|
|
|
69
78
|
|
|
70
79
|
#if defined (__cplusplus)
|
|
@@ -1,63 +1,87 @@
|
|
|
1
|
-
|
|
1
|
+
/*
|
|
2
2
|
* Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
|
|
3
3
|
* All rights reserved.
|
|
4
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
|
|
7
|
-
*
|
|
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.
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
11
|
#ifndef ZSTD_CCOMMON_H_MODULE
|
|
11
12
|
#define ZSTD_CCOMMON_H_MODULE
|
|
12
13
|
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# define FORCE_INLINE static __forceinline
|
|
18
|
-
# include <intrin.h> /* For Visual 2005 */
|
|
19
|
-
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
|
20
|
-
# pragma warning(disable : 4324) /* disable: C4324: padded structure */
|
|
21
|
-
# pragma warning(disable : 4100) /* disable: C4100: unreferenced formal parameter */
|
|
22
|
-
#else
|
|
23
|
-
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
|
24
|
-
# ifdef __GNUC__
|
|
25
|
-
# define FORCE_INLINE static inline __attribute__((always_inline))
|
|
26
|
-
# else
|
|
27
|
-
# define FORCE_INLINE static inline
|
|
28
|
-
# endif
|
|
29
|
-
# else
|
|
30
|
-
# define FORCE_INLINE static
|
|
31
|
-
# endif /* __STDC_VERSION__ */
|
|
32
|
-
#endif
|
|
33
|
-
|
|
34
|
-
#ifdef _MSC_VER
|
|
35
|
-
# define FORCE_NOINLINE static __declspec(noinline)
|
|
36
|
-
#else
|
|
37
|
-
# ifdef __GNUC__
|
|
38
|
-
# define FORCE_NOINLINE static __attribute__((__noinline__))
|
|
39
|
-
# else
|
|
40
|
-
# define FORCE_NOINLINE static
|
|
41
|
-
# endif
|
|
42
|
-
#endif
|
|
43
|
-
|
|
14
|
+
/* this module contains definitions which must be identical
|
|
15
|
+
* across compression, decompression and dictBuilder.
|
|
16
|
+
* It also contains a few functions useful to at least 2 of them
|
|
17
|
+
* and which benefit from being inlined */
|
|
44
18
|
|
|
45
19
|
/*-*************************************
|
|
46
20
|
* Dependencies
|
|
47
21
|
***************************************/
|
|
22
|
+
#include "compiler.h"
|
|
48
23
|
#include "mem.h"
|
|
49
24
|
#include "error_private.h"
|
|
50
25
|
#define ZSTD_STATIC_LINKING_ONLY
|
|
51
26
|
#include "zstd.h"
|
|
27
|
+
#define FSE_STATIC_LINKING_ONLY
|
|
28
|
+
#include "fse.h"
|
|
29
|
+
#define HUF_STATIC_LINKING_ONLY
|
|
30
|
+
#include "huf.h"
|
|
52
31
|
#ifndef XXH_STATIC_LINKING_ONLY
|
|
53
|
-
# define XXH_STATIC_LINKING_ONLY
|
|
32
|
+
# define XXH_STATIC_LINKING_ONLY /* XXH64_state_t */
|
|
33
|
+
#endif
|
|
34
|
+
#include "xxhash.h" /* XXH_reset, update, digest */
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
#if defined (__cplusplus)
|
|
38
|
+
extern "C" {
|
|
39
|
+
#endif
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
/*-*************************************
|
|
43
|
+
* Debug
|
|
44
|
+
***************************************/
|
|
45
|
+
#if defined(ZSTD_DEBUG) && (ZSTD_DEBUG>=1)
|
|
46
|
+
# include <assert.h>
|
|
47
|
+
#else
|
|
48
|
+
# ifndef assert
|
|
49
|
+
# define assert(condition) ((void)0)
|
|
50
|
+
# endif
|
|
51
|
+
#endif
|
|
52
|
+
|
|
53
|
+
#define ZSTD_STATIC_ASSERT(c) { enum { ZSTD_static_assert = 1/(int)(!!(c)) }; }
|
|
54
|
+
|
|
55
|
+
#if defined(ZSTD_DEBUG) && (ZSTD_DEBUG>=2)
|
|
56
|
+
# include <stdio.h>
|
|
57
|
+
extern int g_debuglog_enable;
|
|
58
|
+
/* recommended values for ZSTD_DEBUG display levels :
|
|
59
|
+
* 1 : no display, enables assert() only
|
|
60
|
+
* 2 : reserved for currently active debug path
|
|
61
|
+
* 3 : events once per object lifetime (CCtx, CDict, etc.)
|
|
62
|
+
* 4 : events once per frame
|
|
63
|
+
* 5 : events once per block
|
|
64
|
+
* 6 : events once per sequence (*very* verbose) */
|
|
65
|
+
# define RAWLOG(l, ...) { \
|
|
66
|
+
if ((g_debuglog_enable) & (l<=ZSTD_DEBUG)) { \
|
|
67
|
+
fprintf(stderr, __VA_ARGS__); \
|
|
68
|
+
} }
|
|
69
|
+
# define DEBUGLOG(l, ...) { \
|
|
70
|
+
if ((g_debuglog_enable) & (l<=ZSTD_DEBUG)) { \
|
|
71
|
+
fprintf(stderr, __FILE__ ": " __VA_ARGS__); \
|
|
72
|
+
fprintf(stderr, " \n"); \
|
|
73
|
+
} }
|
|
74
|
+
#else
|
|
75
|
+
# define RAWLOG(l, ...) {} /* disabled */
|
|
76
|
+
# define DEBUGLOG(l, ...) {} /* disabled */
|
|
54
77
|
#endif
|
|
55
|
-
#include "xxhash.h" /* XXH_reset, update, digest */
|
|
56
78
|
|
|
57
79
|
|
|
58
80
|
/*-*************************************
|
|
59
81
|
* shared macros
|
|
60
82
|
***************************************/
|
|
83
|
+
#undef MIN
|
|
84
|
+
#undef MAX
|
|
61
85
|
#define MIN(a,b) ((a)<(b) ? (a) : (b))
|
|
62
86
|
#define MAX(a,b) ((a)>(b) ? (a) : (b))
|
|
63
87
|
#define CHECK_F(f) { size_t const errcod = f; if (ERR_isError(errcod)) return errcod; } /* check and Forward error code */
|
|
@@ -68,12 +92,9 @@
|
|
|
68
92
|
* Common constants
|
|
69
93
|
***************************************/
|
|
70
94
|
#define ZSTD_OPT_NUM (1<<12)
|
|
71
|
-
#define ZSTD_DICT_MAGIC 0xEC30A437 /* v0.7+ */
|
|
72
95
|
|
|
73
96
|
#define ZSTD_REP_NUM 3 /* number of repcodes */
|
|
74
|
-
#define ZSTD_REP_CHECK (ZSTD_REP_NUM) /* number of repcodes to check by the optimal parser */
|
|
75
97
|
#define ZSTD_REP_MOVE (ZSTD_REP_NUM-1)
|
|
76
|
-
#define ZSTD_REP_MOVE_OPT (ZSTD_REP_NUM)
|
|
77
98
|
static const U32 repStartValue[ZSTD_REP_NUM] = { 1, 4, 8 };
|
|
78
99
|
|
|
79
100
|
#define KB *(1 <<10)
|
|
@@ -88,9 +109,13 @@ static const U32 repStartValue[ZSTD_REP_NUM] = { 1, 4, 8 };
|
|
|
88
109
|
#define BIT0 1
|
|
89
110
|
|
|
90
111
|
#define ZSTD_WINDOWLOG_ABSOLUTEMIN 10
|
|
112
|
+
#define ZSTD_WINDOWLOG_DEFAULTMAX 27 /* Default maximum allowed window log */
|
|
91
113
|
static const size_t ZSTD_fcs_fieldSize[4] = { 0, 2, 4, 8 };
|
|
92
114
|
static const size_t ZSTD_did_fieldSize[4] = { 0, 1, 2, 4 };
|
|
93
115
|
|
|
116
|
+
#define ZSTD_FRAMEIDSIZE 4
|
|
117
|
+
static const size_t ZSTD_frameIdSize = ZSTD_FRAMEIDSIZE; /* magic number size */
|
|
118
|
+
|
|
94
119
|
#define ZSTD_BLOCKHEADERSIZE 3 /* C standard doesn't allow `static const` variable to be init using another `static const` variable */
|
|
95
120
|
static const size_t ZSTD_blockHeaderSize = ZSTD_BLOCKHEADERSIZE;
|
|
96
121
|
typedef enum { bt_raw, bt_rle, bt_compressed, bt_reserved } blockType_e;
|
|
@@ -104,40 +129,52 @@ typedef enum { set_basic, set_rle, set_compressed, set_repeat } symbolEncodingTy
|
|
|
104
129
|
#define LONGNBSEQ 0x7F00
|
|
105
130
|
|
|
106
131
|
#define MINMATCH 3
|
|
107
|
-
#define EQUAL_READ32 4
|
|
108
132
|
|
|
109
133
|
#define Litbits 8
|
|
110
134
|
#define MaxLit ((1<<Litbits) - 1)
|
|
111
135
|
#define MaxML 52
|
|
112
136
|
#define MaxLL 35
|
|
113
|
-
#define
|
|
137
|
+
#define DefaultMaxOff 28
|
|
138
|
+
#define MaxOff 31
|
|
114
139
|
#define MaxSeq MAX(MaxLL, MaxML) /* Assumption : MaxOff < MaxLL,MaxML */
|
|
115
140
|
#define MLFSELog 9
|
|
116
141
|
#define LLFSELog 9
|
|
117
142
|
#define OffFSELog 8
|
|
118
143
|
|
|
119
|
-
static const U32 LL_bits[MaxLL+1] = { 0, 0, 0, 0, 0, 0, 0, 0,
|
|
120
|
-
|
|
144
|
+
static const U32 LL_bits[MaxLL+1] = { 0, 0, 0, 0, 0, 0, 0, 0,
|
|
145
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
|
146
|
+
1, 1, 1, 1, 2, 2, 3, 3,
|
|
147
|
+
4, 6, 7, 8, 9,10,11,12,
|
|
121
148
|
13,14,15,16 };
|
|
122
|
-
static const S16 LL_defaultNorm[MaxLL+1] = { 4, 3, 2, 2, 2, 2, 2, 2,
|
|
123
|
-
2, 2, 2, 2, 2,
|
|
149
|
+
static const S16 LL_defaultNorm[MaxLL+1] = { 4, 3, 2, 2, 2, 2, 2, 2,
|
|
150
|
+
2, 2, 2, 2, 2, 1, 1, 1,
|
|
151
|
+
2, 2, 2, 2, 2, 2, 2, 2,
|
|
152
|
+
2, 3, 2, 1, 1, 1, 1, 1,
|
|
124
153
|
-1,-1,-1,-1 };
|
|
125
154
|
#define LL_DEFAULTNORMLOG 6 /* for static allocation */
|
|
126
155
|
static const U32 LL_defaultNormLog = LL_DEFAULTNORMLOG;
|
|
127
156
|
|
|
128
|
-
static const U32 ML_bits[MaxML+1] = { 0, 0, 0, 0, 0, 0, 0, 0,
|
|
129
|
-
0, 0, 0, 0, 0, 0, 0, 0,
|
|
130
|
-
|
|
157
|
+
static const U32 ML_bits[MaxML+1] = { 0, 0, 0, 0, 0, 0, 0, 0,
|
|
158
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
|
159
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
|
160
|
+
0, 0, 0, 0, 0, 0, 0, 0,
|
|
161
|
+
1, 1, 1, 1, 2, 2, 3, 3,
|
|
162
|
+
4, 4, 5, 7, 8, 9,10,11,
|
|
131
163
|
12,13,14,15,16 };
|
|
132
|
-
static const S16 ML_defaultNorm[MaxML+1] = { 1, 4, 3, 2, 2, 2, 2, 2,
|
|
133
|
-
|
|
134
|
-
1, 1, 1, 1, 1, 1, 1, 1,
|
|
164
|
+
static const S16 ML_defaultNorm[MaxML+1] = { 1, 4, 3, 2, 2, 2, 2, 2,
|
|
165
|
+
2, 1, 1, 1, 1, 1, 1, 1,
|
|
166
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
|
167
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
|
168
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
|
169
|
+
1, 1, 1, 1, 1, 1,-1,-1,
|
|
135
170
|
-1,-1,-1,-1,-1 };
|
|
136
171
|
#define ML_DEFAULTNORMLOG 6 /* for static allocation */
|
|
137
172
|
static const U32 ML_defaultNormLog = ML_DEFAULTNORMLOG;
|
|
138
173
|
|
|
139
|
-
static const S16 OF_defaultNorm[
|
|
140
|
-
|
|
174
|
+
static const S16 OF_defaultNorm[DefaultMaxOff+1] = { 1, 1, 1, 1, 1, 1, 2, 2,
|
|
175
|
+
2, 1, 1, 1, 1, 1, 1, 1,
|
|
176
|
+
1, 1, 1, 1, 1, 1, 1, 1,
|
|
177
|
+
-1,-1,-1,-1,-1 };
|
|
141
178
|
#define OF_DEFAULTNORMLOG 5 /* for static allocation */
|
|
142
179
|
static const U32 OF_defaultNormLog = OF_DEFAULTNORMLOG;
|
|
143
180
|
|
|
@@ -149,7 +186,7 @@ static void ZSTD_copy8(void* dst, const void* src) { memcpy(dst, src, 8); }
|
|
|
149
186
|
#define COPY8(d,s) { ZSTD_copy8(d,s); d+=8; s+=8; }
|
|
150
187
|
|
|
151
188
|
/*! ZSTD_wildcopy() :
|
|
152
|
-
*
|
|
189
|
+
* custom version of memcpy(), can overwrite up to WILDCOPY_OVERLENGTH bytes (if length==0) */
|
|
153
190
|
#define WILDCOPY_OVERLENGTH 8
|
|
154
191
|
MEM_STATIC void ZSTD_wildcopy(void* dst, const void* src, ptrdiff_t length)
|
|
155
192
|
{
|
|
@@ -173,31 +210,14 @@ MEM_STATIC void ZSTD_wildcopy_e(void* dst, const void* src, void* dstEnd) /* s
|
|
|
173
210
|
|
|
174
211
|
|
|
175
212
|
/*-*******************************************
|
|
176
|
-
* Private
|
|
213
|
+
* Private declarations
|
|
177
214
|
*********************************************/
|
|
178
|
-
typedef struct ZSTD_stats_s ZSTD_stats_t;
|
|
179
|
-
|
|
180
|
-
typedef struct {
|
|
181
|
-
U32 off;
|
|
182
|
-
U32 len;
|
|
183
|
-
} ZSTD_match_t;
|
|
184
|
-
|
|
185
|
-
typedef struct {
|
|
186
|
-
U32 price;
|
|
187
|
-
U32 off;
|
|
188
|
-
U32 mlen;
|
|
189
|
-
U32 litlen;
|
|
190
|
-
U32 rep[ZSTD_REP_NUM];
|
|
191
|
-
} ZSTD_optimal_t;
|
|
192
|
-
|
|
193
|
-
|
|
194
215
|
typedef struct seqDef_s {
|
|
195
216
|
U32 offset;
|
|
196
217
|
U16 litLength;
|
|
197
218
|
U16 matchLength;
|
|
198
219
|
} seqDef;
|
|
199
220
|
|
|
200
|
-
|
|
201
221
|
typedef struct {
|
|
202
222
|
seqDef* sequencesStart;
|
|
203
223
|
seqDef* sequences;
|
|
@@ -208,76 +228,64 @@ typedef struct {
|
|
|
208
228
|
BYTE* ofCode;
|
|
209
229
|
U32 longLengthID; /* 0 == no longLength; 1 == Lit.longLength; 2 == Match.longLength; */
|
|
210
230
|
U32 longLengthPos;
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
ZSTD_match_t* matchTable;
|
|
214
|
-
U32* matchLengthFreq;
|
|
215
|
-
U32* litLengthFreq;
|
|
216
|
-
U32* litFreq;
|
|
217
|
-
U32* offCodeFreq;
|
|
218
|
-
U32 matchLengthSum;
|
|
219
|
-
U32 matchSum;
|
|
220
|
-
U32 litLengthSum;
|
|
221
|
-
U32 litSum;
|
|
222
|
-
U32 offCodeSum;
|
|
223
|
-
U32 log2matchLengthSum;
|
|
224
|
-
U32 log2matchSum;
|
|
225
|
-
U32 log2litLengthSum;
|
|
226
|
-
U32 log2litSum;
|
|
227
|
-
U32 log2offCodeSum;
|
|
228
|
-
U32 factor;
|
|
229
|
-
U32 staticPrices;
|
|
230
|
-
U32 cachedPrice;
|
|
231
|
-
U32 cachedLitLength;
|
|
232
|
-
const BYTE* cachedLiterals;
|
|
231
|
+
U32 rep[ZSTD_REP_NUM];
|
|
232
|
+
U32 repToConfirm[ZSTD_REP_NUM];
|
|
233
233
|
} seqStore_t;
|
|
234
234
|
|
|
235
|
-
const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx);
|
|
236
|
-
void ZSTD_seqToCodes(const seqStore_t* seqStorePtr);
|
|
237
|
-
int ZSTD_isSkipFrame(ZSTD_DCtx* dctx);
|
|
235
|
+
const seqStore_t* ZSTD_getSeqStore(const ZSTD_CCtx* ctx); /* compress & dictBuilder */
|
|
236
|
+
void ZSTD_seqToCodes(const seqStore_t* seqStorePtr); /* compress, dictBuilder, decodeCorpus (shouldn't get its definition from here) */
|
|
238
237
|
|
|
239
238
|
/* custom memory allocation functions */
|
|
240
|
-
void* ZSTD_defaultAllocFunction(void* opaque, size_t size);
|
|
241
|
-
void ZSTD_defaultFreeFunction(void* opaque, void* address);
|
|
242
|
-
#ifndef ZSTD_DLL_IMPORT
|
|
243
|
-
static const ZSTD_customMem defaultCustomMem = { ZSTD_defaultAllocFunction, ZSTD_defaultFreeFunction, NULL };
|
|
244
|
-
#endif
|
|
245
239
|
void* ZSTD_malloc(size_t size, ZSTD_customMem customMem);
|
|
240
|
+
void* ZSTD_calloc(size_t size, ZSTD_customMem customMem);
|
|
246
241
|
void ZSTD_free(void* ptr, ZSTD_customMem customMem);
|
|
247
242
|
|
|
248
243
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
MEM_STATIC U32 ZSTD_highbit32(U32 val)
|
|
244
|
+
MEM_STATIC U32 ZSTD_highbit32(U32 val) /* compress, dictBuilder, decodeCorpus */
|
|
252
245
|
{
|
|
246
|
+
assert(val != 0);
|
|
247
|
+
{
|
|
253
248
|
# if defined(_MSC_VER) /* Visual */
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
249
|
+
unsigned long r=0;
|
|
250
|
+
_BitScanReverse(&r, val);
|
|
251
|
+
return (unsigned)r;
|
|
257
252
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* GCC Intrinsic */
|
|
258
|
-
|
|
253
|
+
return 31 - __builtin_clz(val);
|
|
259
254
|
# else /* Software version */
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
r = DeBruijnClz[(U32)(v * 0x07C4ACDDU) >> 27];
|
|
269
|
-
return r;
|
|
255
|
+
static const U32 DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
|
256
|
+
U32 v = val;
|
|
257
|
+
v |= v >> 1;
|
|
258
|
+
v |= v >> 2;
|
|
259
|
+
v |= v >> 4;
|
|
260
|
+
v |= v >> 8;
|
|
261
|
+
v |= v >> 16;
|
|
262
|
+
return DeBruijnClz[(v * 0x07C4ACDDU) >> 27];
|
|
270
263
|
# endif
|
|
264
|
+
}
|
|
271
265
|
}
|
|
272
266
|
|
|
273
267
|
|
|
274
|
-
/* hidden functions */
|
|
275
|
-
|
|
276
268
|
/* ZSTD_invalidateRepCodes() :
|
|
277
269
|
* ensures next compression will not use repcodes from previous block.
|
|
278
270
|
* Note : only works with regular variant;
|
|
279
271
|
* do not use with extDict variant ! */
|
|
280
|
-
void ZSTD_invalidateRepCodes(ZSTD_CCtx* cctx);
|
|
272
|
+
void ZSTD_invalidateRepCodes(ZSTD_CCtx* cctx); /* zstdmt, adaptive_compression (shouldn't get this definition from here) */
|
|
281
273
|
|
|
282
274
|
|
|
275
|
+
typedef struct {
|
|
276
|
+
blockType_e blockType;
|
|
277
|
+
U32 lastBlock;
|
|
278
|
+
U32 origSize;
|
|
279
|
+
} blockProperties_t;
|
|
280
|
+
|
|
281
|
+
/*! ZSTD_getcBlockSize() :
|
|
282
|
+
* Provides the size of compressed block from block header `src` */
|
|
283
|
+
/* Used by: decompress, fullbench (does not get its definition from here) */
|
|
284
|
+
size_t ZSTD_getcBlockSize(const void* src, size_t srcSize,
|
|
285
|
+
blockProperties_t* bpPtr);
|
|
286
|
+
|
|
287
|
+
#if defined (__cplusplus)
|
|
288
|
+
}
|
|
289
|
+
#endif
|
|
290
|
+
|
|
283
291
|
#endif /* ZSTD_CCOMMON_H_MODULE */
|