zstd-ruby 1.3.1.1 → 1.3.2.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/README.md +1 -1
- data/ext/zstdruby/libzstd/.gitignore +1 -0
- data/ext/zstdruby/libzstd/Makefile +40 -26
- data/ext/zstdruby/libzstd/README.md +68 -45
- data/ext/zstdruby/libzstd/common/bitstream.h +35 -23
- data/ext/zstdruby/libzstd/common/compiler.h +1 -0
- data/ext/zstdruby/libzstd/common/error_private.c +4 -2
- data/ext/zstdruby/libzstd/common/error_private.h +4 -4
- data/ext/zstdruby/libzstd/common/fse.h +1 -1
- data/ext/zstdruby/libzstd/common/huf.h +1 -1
- data/ext/zstdruby/libzstd/common/mem.h +1 -0
- data/ext/zstdruby/libzstd/common/pool.c +61 -46
- data/ext/zstdruby/libzstd/common/pool.h +4 -0
- data/ext/zstdruby/libzstd/common/threading.c +11 -15
- data/ext/zstdruby/libzstd/common/threading.h +52 -32
- data/ext/zstdruby/libzstd/common/zstd_common.c +2 -2
- data/ext/zstdruby/libzstd/common/zstd_errors.h +3 -1
- data/ext/zstdruby/libzstd/common/zstd_internal.h +95 -21
- data/ext/zstdruby/libzstd/compress/fse_compress.c +3 -1
- data/ext/zstdruby/libzstd/compress/huf_compress.c +4 -3
- data/ext/zstdruby/libzstd/compress/zstd_compress.c +922 -2102
- data/ext/zstdruby/libzstd/compress/zstd_compress.h +307 -0
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +308 -0
- data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +28 -0
- data/ext/zstdruby/libzstd/compress/zstd_fast.c +242 -0
- data/ext/zstdruby/libzstd/compress/zstd_fast.h +30 -0
- data/ext/zstdruby/libzstd/compress/zstd_lazy.c +749 -0
- data/ext/zstdruby/libzstd/compress/zstd_lazy.h +38 -0
- data/ext/zstdruby/libzstd/compress/zstd_ldm.c +707 -0
- data/ext/zstdruby/libzstd/compress/zstd_ldm.h +67 -0
- data/ext/zstdruby/libzstd/compress/zstd_opt.c +957 -0
- data/ext/zstdruby/libzstd/compress/zstd_opt.h +14 -922
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +210 -133
- data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +20 -3
- data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +373 -196
- data/ext/zstdruby/libzstd/deprecated/zbuff.h +1 -0
- data/ext/zstdruby/libzstd/deprecated/zbuff_common.c +1 -0
- data/ext/zstdruby/libzstd/deprecated/zbuff_compress.c +1 -0
- data/ext/zstdruby/libzstd/deprecated/zbuff_decompress.c +1 -0
- data/ext/zstdruby/libzstd/dictBuilder/cover.c +33 -22
- data/ext/zstdruby/libzstd/dictBuilder/zdict.c +8 -5
- data/ext/zstdruby/libzstd/dictBuilder/zdict.h +1 -0
- data/ext/zstdruby/libzstd/dll/example/Makefile +5 -5
- data/ext/zstdruby/libzstd/legacy/zstd_legacy.h +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v01.c +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v01.h +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v02.c +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v02.h +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v03.c +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v03.h +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v04.c +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v04.h +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v05.c +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v05.h +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v06.c +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v06.h +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v07.c +1 -0
- data/ext/zstdruby/libzstd/legacy/zstd_v07.h +1 -0
- data/ext/zstdruby/libzstd/zstd.h +366 -118
- data/lib/zstd-ruby/version.rb +1 -1
- metadata +11 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a3ec9d9502cfbffe84f2b05b9af56f3c2cf4d10c
|
4
|
+
data.tar.gz: 343ba202deae64999f24b3e75d9bdf9efa1d6c47
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fa08f0458b2b2c66390fbc83e7719f7976de1de4ea6508dc5f834405c624ac446337bdcf186daab047f66f6fdb70b4bf01fde68d3050997e9f52729ef07c3006
|
7
|
+
data.tar.gz: da151831f7354ec3f3d000f32aa5d55b846f22e4aebb00ded8db412fcfa7921c0e005b2c24126ef07c4a4cde4eadc7230a9f53f4601798b33053f1f7583e9434
|
data/README.md
CHANGED
@@ -1,13 +1,11 @@
|
|
1
|
-
#
|
2
|
-
# Copyright (c)
|
1
|
+
# ################################################################
|
2
|
+
# Copyright (c) 2015-present, Yann Collet, Facebook, Inc.
|
3
3
|
# All rights reserved.
|
4
4
|
#
|
5
|
-
# This
|
6
|
-
#
|
7
|
-
#
|
8
|
-
#
|
9
|
-
# of patent rights can be found in the PATENTS file in the same directory.
|
10
|
-
# ##########################################################################
|
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
|
+
# ################################################################
|
11
9
|
|
12
10
|
# Version numbers
|
13
11
|
LIBVER_MAJOR_SCRIPT:=`sed -n '/define ZSTD_VERSION_MAJOR/s/.*[[:blank:]]\([0-9][0-9]*\).*/\1/p' < ./zstd.h`
|
@@ -31,7 +29,7 @@ CFLAGS += $(DEBUGFLAGS) $(MOREFLAGS)
|
|
31
29
|
FLAGS = $(CPPFLAGS) $(CFLAGS)
|
32
30
|
|
33
31
|
|
34
|
-
ZSTD_FILES := $(wildcard common/*.c compress/*.c decompress/*.c dictBuilder/*.c deprecated/*.c)
|
32
|
+
ZSTD_FILES := $(sort $(wildcard common/*.c compress/*.c decompress/*.c dictBuilder/*.c deprecated/*.c))
|
35
33
|
|
36
34
|
ZSTD_LEGACY_SUPPORT ?= 4
|
37
35
|
|
@@ -103,10 +101,19 @@ lib-release lib-release-mt: DEBUGFLAGS :=
|
|
103
101
|
lib-release: lib
|
104
102
|
lib-release-mt: lib-mt
|
105
103
|
|
104
|
+
# Special case : building library in single-thread mode _and_ without zstdmt_compress.c
|
105
|
+
ZSTDMT_FILES = compress/zstdmt_compress.c
|
106
|
+
ZSTD_NOMT_FILES = $(filter-out $(ZSTDMT_FILES),$(ZSTD_FILES))
|
107
|
+
libzstd-nomt: LDFLAGS += -shared -fPIC -fvisibility=hidden
|
108
|
+
libzstd-nomt: $(ZSTD_NOMT_FILES)
|
109
|
+
@echo compiling single-thread dynamic library $(LIBVER)
|
110
|
+
@echo files : $(ZSTD_NOMT_FILES)
|
111
|
+
@$(CC) $(FLAGS) $^ $(LDFLAGS) $(SONAME_FLAGS) -o $@
|
112
|
+
|
106
113
|
clean:
|
107
114
|
@$(RM) -r *.dSYM # Mac OS-X specific
|
108
115
|
@$(RM) core *.o *.a *.gcda *.$(SHARED_EXT) *.$(SHARED_EXT).* libzstd.pc
|
109
|
-
@$(RM) dll/libzstd.dll dll/libzstd.lib
|
116
|
+
@$(RM) dll/libzstd.dll dll/libzstd.lib libzstd-nomt*
|
110
117
|
@$(RM) common/*.o compress/*.o decompress/*.o dictBuilder/*.o legacy/*.o deprecated/*.o
|
111
118
|
@echo Cleaning library completed
|
112
119
|
|
@@ -115,16 +122,17 @@ clean:
|
|
115
122
|
#-----------------------------------------------------------------------------
|
116
123
|
ifneq (,$(filter $(shell uname),Linux Darwin GNU/kFreeBSD GNU OpenBSD FreeBSD NetBSD DragonFly SunOS))
|
117
124
|
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
LIBDIR
|
127
|
-
|
125
|
+
DESTDIR ?=
|
126
|
+
# directory variables : GNU conventions prefer lowercase
|
127
|
+
# see https://www.gnu.org/prep/standards/html_node/Makefile-Conventions.html
|
128
|
+
# support both lower and uppercase (BSD), use uppercase in script
|
129
|
+
prefix ?= /usr/local
|
130
|
+
PREFIX ?= $(prefix)
|
131
|
+
exec_prefix ?= $(PREFIX)
|
132
|
+
libdir ?= $(exec_prefix)/lib
|
133
|
+
LIBDIR ?= $(libdir)
|
134
|
+
includedir ?= $(PREFIX)/include
|
135
|
+
INCLUDEDIR ?= $(includedir)
|
128
136
|
|
129
137
|
ifneq (,$(filter $(shell uname),OpenBSD FreeBSD NetBSD DragonFly))
|
130
138
|
PKGCONFIGDIR ?= $(PREFIX)/libdata/pkgconfig
|
@@ -132,8 +140,14 @@ else
|
|
132
140
|
PKGCONFIGDIR ?= $(LIBDIR)/pkgconfig
|
133
141
|
endif
|
134
142
|
|
135
|
-
|
136
|
-
|
143
|
+
ifneq (,$(filter $(shell uname),SunOS))
|
144
|
+
INSTALL ?= ginstall
|
145
|
+
else
|
146
|
+
INSTALL ?= install
|
147
|
+
endif
|
148
|
+
|
149
|
+
INSTALL_PROGRAM ?= $(INSTALL)
|
150
|
+
INSTALL_DATA ?= $(INSTALL) -m 644
|
137
151
|
|
138
152
|
|
139
153
|
libzstd.pc:
|
@@ -150,9 +164,9 @@ install: libzstd.a libzstd libzstd.pc
|
|
150
164
|
@$(INSTALL_DATA) libzstd.pc $(DESTDIR)$(PKGCONFIGDIR)/
|
151
165
|
@echo Installing libraries
|
152
166
|
@$(INSTALL_DATA) libzstd.a $(DESTDIR)$(LIBDIR)
|
153
|
-
@$(
|
154
|
-
@ln -sf
|
155
|
-
@ln -sf
|
167
|
+
@$(INSTALL_PROGRAM) $(LIBZSTD) $(DESTDIR)$(LIBDIR)
|
168
|
+
@ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
|
169
|
+
@ln -sf $(LIBZSTD) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
|
156
170
|
@echo Installing includes
|
157
171
|
@$(INSTALL_DATA) zstd.h $(DESTDIR)$(INCLUDEDIR)
|
158
172
|
@$(INSTALL_DATA) common/zstd_errors.h $(DESTDIR)$(INCLUDEDIR)
|
@@ -164,7 +178,7 @@ uninstall:
|
|
164
178
|
@$(RM) $(DESTDIR)$(LIBDIR)/libzstd.a
|
165
179
|
@$(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT)
|
166
180
|
@$(RM) $(DESTDIR)$(LIBDIR)/libzstd.$(SHARED_EXT_MAJOR)
|
167
|
-
@$(RM) $(DESTDIR)$(LIBDIR)
|
181
|
+
@$(RM) $(DESTDIR)$(LIBDIR)/$(LIBZSTD)
|
168
182
|
@$(RM) $(DESTDIR)$(PKGCONFIGDIR)/libzstd.pc
|
169
183
|
@$(RM) $(DESTDIR)$(INCLUDEDIR)/zstd.h
|
170
184
|
@$(RM) $(DESTDIR)$(INCLUDEDIR)/zstd_errors.h
|
@@ -1,57 +1,78 @@
|
|
1
1
|
Zstandard library files
|
2
2
|
================================
|
3
3
|
|
4
|
-
The __lib__ directory
|
5
|
-
|
4
|
+
The __lib__ directory is split into several sub-directories,
|
5
|
+
in order to make it easier to select or exclude specific features.
|
6
|
+
|
7
|
+
|
8
|
+
#### Building
|
9
|
+
|
10
|
+
`Makefile` script is provided, supporting the standard set of commands,
|
11
|
+
directories, and variables (see https://www.gnu.org/prep/standards/html_node/Command-Variables.html).
|
12
|
+
- `make` : generates both static and dynamic libraries
|
13
|
+
- `make install` : install libraries in default system directories
|
6
14
|
|
7
15
|
|
8
16
|
#### API
|
9
17
|
|
10
|
-
Zstandard's stable API is exposed within [zstd.h](zstd.h)
|
11
|
-
at the root of `lib` directory.
|
18
|
+
Zstandard's stable API is exposed within [lib/zstd.h](zstd.h).
|
12
19
|
|
13
20
|
|
14
21
|
#### Advanced API
|
15
22
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
23
|
+
Optional advanced features are exposed via :
|
24
|
+
|
25
|
+
- `lib/common/zstd_errors.h` : translates `size_t` function results
|
26
|
+
into an `ZSTD_ErrorCode`, for accurate error handling.
|
27
|
+
- `ZSTD_STATIC_LINKING_ONLY` : if this macro is defined _before_ including `zstd.h`,
|
28
|
+
it unlocks access to advanced experimental API,
|
29
|
+
exposed in second part of `zstd.h`.
|
21
30
|
These APIs shall ___never be used with dynamic library___ !
|
22
31
|
They are not "stable", their definition may change in the future.
|
23
32
|
Only static linking is allowed.
|
24
33
|
|
25
|
-
#### ZSTDMT API
|
26
|
-
|
27
|
-
To enable multithreaded compression within the library, invoke `make lib-mt` target.
|
28
|
-
Prototypes are defined in header file `compress/zstdmt_compress.h`.
|
29
|
-
When linking a program that uses ZSTDMT API against libzstd.a on a POSIX system,
|
30
|
-
`-pthread` flag must be provided to the compiler and linker.
|
31
|
-
Note : ZSTDMT prototypes can still be used with a library built without multithread support,
|
32
|
-
but in this case, they will be single threaded only.
|
33
34
|
|
34
35
|
#### Modular build
|
35
36
|
|
36
|
-
Directory `common
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
The
|
50
|
-
|
51
|
-
For example, advanced API for version `v0.4` is in `legacy/zstd_v04.h` .
|
52
|
-
|
53
|
-
|
54
|
-
####
|
37
|
+
- Directory `lib/common` is always required, for all variants.
|
38
|
+
- Compression source code lies in `lib/compress`
|
39
|
+
- Decompression source code lies in `lib/decompress`
|
40
|
+
- It's possible to include only `compress` or only `decompress`, they don't depend on each other.
|
41
|
+
- `lib/dictBuilder` : makes it possible to generate dictionaries from a set of samples.
|
42
|
+
The API is exposed in `lib/dictBuilder/zdict.h`.
|
43
|
+
This module depends on both `lib/common` and `lib/compress` .
|
44
|
+
- `lib/legacy` : source code to decompress older zstd formats, starting from `v0.1`.
|
45
|
+
This module depends on `lib/common` and `lib/decompress`.
|
46
|
+
To enable this feature, it's necessary to define `ZSTD_LEGACY_SUPPORT = 1` during compilation.
|
47
|
+
Typically, with `gcc`, add argument `-DZSTD_LEGACY_SUPPORT=1`.
|
48
|
+
Using higher number limits the number of version supported.
|
49
|
+
For example, `ZSTD_LEGACY_SUPPORT=2` means : "support legacy formats starting from v0.2+".
|
50
|
+
The API is exposed in `lib/legacy/zstd_legacy.h`.
|
51
|
+
Each version also provides a (dedicated) set of advanced API.
|
52
|
+
For example, advanced API for version `v0.4` is exposed in `lib/legacy/zstd_v04.h` .
|
53
|
+
|
54
|
+
|
55
|
+
#### Multithreading support
|
56
|
+
|
57
|
+
Multithreading is disabled by default when building with `make`.
|
58
|
+
Enabling multithreading requires 2 conditions :
|
59
|
+
- set macro `ZSTD_MULTITHREAD`
|
60
|
+
- on POSIX systems : compile with pthread (`-pthread` compilation flag for `gcc` for example)
|
61
|
+
|
62
|
+
Both conditions are automatically triggered by invoking `make lib-mt` target.
|
63
|
+
Note that, when linking a POSIX program with a multithreaded version of `libzstd`,
|
64
|
+
it's necessary to trigger `-pthread` flag during link stage.
|
65
|
+
|
66
|
+
Multithreading capabilities are exposed via :
|
67
|
+
- private API `lib/compress/zstdmt_compress.h`.
|
68
|
+
Symbols defined in this header are currently exposed in `libzstd`, hence usable.
|
69
|
+
Note however that this API is planned to be locked and remain strictly internal in the future.
|
70
|
+
- advanced API `ZSTD_compress_generic()`, defined in `lib/zstd.h`, experimental section.
|
71
|
+
This API is still considered experimental, but is designed to be labelled "stable" at some point in the future.
|
72
|
+
It's the recommended entry point for multi-threading operations.
|
73
|
+
|
74
|
+
|
75
|
+
#### Windows : using MinGW+MSYS to create DLL
|
55
76
|
|
56
77
|
DLL can be created using MinGW+MSYS with the `make libzstd` command.
|
57
78
|
This command creates `dll\libzstd.dll` and the import library `dll\libzstd.lib`.
|
@@ -67,19 +88,21 @@ file it should be linked with `dll\libzstd.dll`. For example:
|
|
67
88
|
The compiled executable will require ZSTD DLL which is available at `dll\libzstd.dll`.
|
68
89
|
|
69
90
|
|
70
|
-
####
|
91
|
+
#### Deprecated API
|
71
92
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
93
|
+
Obsolete API on their way out are stored in directory `lib/deprecated`.
|
94
|
+
At this stage, it contains older streaming prototypes, in `lib/deprecated/zbuff.h`.
|
95
|
+
Presence in this directory is temporary.
|
96
|
+
These prototypes will be removed in some future version.
|
97
|
+
Consider migrating code towards supported streaming API exposed in `zstd.h`.
|
76
98
|
|
77
99
|
|
78
100
|
#### Miscellaneous
|
79
101
|
|
80
102
|
The other files are not source code. There are :
|
81
103
|
|
82
|
-
- LICENSE : contains the BSD license text
|
83
|
-
- Makefile : script to
|
84
|
-
-
|
85
|
-
-
|
104
|
+
- `LICENSE` : contains the BSD license text
|
105
|
+
- `Makefile` : `make` script to build and install zstd library (static and dynamic)
|
106
|
+
- `BUCK` : support for `buck` build system (https://buckbuild.com/)
|
107
|
+
- `libzstd.pc.in` : for `pkg-config` (used in `make install`)
|
108
|
+
- `README.md` : this file
|
@@ -169,33 +169,39 @@ MEM_STATIC size_t BIT_readBitsFast(BIT_DStream_t* bitD, unsigned nbBits);
|
|
169
169
|
****************************************************************/
|
170
170
|
MEM_STATIC unsigned BIT_highbit32 (register U32 val)
|
171
171
|
{
|
172
|
+
assert(val != 0);
|
173
|
+
{
|
172
174
|
# if defined(_MSC_VER) /* Visual */
|
173
|
-
|
174
|
-
|
175
|
-
|
175
|
+
unsigned long r=0;
|
176
|
+
_BitScanReverse ( &r, val );
|
177
|
+
return (unsigned) r;
|
176
178
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
177
|
-
|
179
|
+
return 31 - __builtin_clz (val);
|
178
180
|
# else /* Software version */
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
181
|
+
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29,
|
182
|
+
11, 14, 16, 18, 22, 25, 3, 30,
|
183
|
+
8, 12, 20, 28, 15, 17, 24, 7,
|
184
|
+
19, 27, 23, 6, 26, 5, 4, 31 };
|
185
|
+
U32 v = val;
|
186
|
+
v |= v >> 1;
|
187
|
+
v |= v >> 2;
|
188
|
+
v |= v >> 4;
|
189
|
+
v |= v >> 8;
|
190
|
+
v |= v >> 16;
|
191
|
+
return DeBruijnClz[ (U32) (v * 0x07C4ACDDU) >> 27];
|
190
192
|
# endif
|
193
|
+
}
|
191
194
|
}
|
192
195
|
|
193
196
|
/*===== Local Constants =====*/
|
194
|
-
static const unsigned BIT_mask[] = {
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
197
|
+
static const unsigned BIT_mask[] = {
|
198
|
+
0, 1, 3, 7, 0xF, 0x1F,
|
199
|
+
0x3F, 0x7F, 0xFF, 0x1FF, 0x3FF, 0x7FF,
|
200
|
+
0xFFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF, 0x1FFFF,
|
201
|
+
0x3FFFF, 0x7FFFF, 0xFFFFF, 0x1FFFFF, 0x3FFFFF, 0x7FFFFF,
|
202
|
+
0xFFFFFF, 0x1FFFFFF, 0x3FFFFFF, 0x7FFFFFF, 0xFFFFFFF, 0x1FFFFFFF,
|
203
|
+
0x3FFFFFFF, 0x7FFFFFFF}; /* up to 31 bits */
|
204
|
+
#define BIT_MASK_SIZE (sizeof(BIT_mask) / sizeof(BIT_mask[0]))
|
199
205
|
|
200
206
|
/*-**************************************************************
|
201
207
|
* bitStream encoding
|
@@ -217,11 +223,14 @@ MEM_STATIC size_t BIT_initCStream(BIT_CStream_t* bitC,
|
|
217
223
|
}
|
218
224
|
|
219
225
|
/*! BIT_addBits() :
|
220
|
-
* can add up to
|
226
|
+
* can add up to 31 bits into `bitC`.
|
221
227
|
* Note : does not check for register overflow ! */
|
222
228
|
MEM_STATIC void BIT_addBits(BIT_CStream_t* bitC,
|
223
229
|
size_t value, unsigned nbBits)
|
224
230
|
{
|
231
|
+
MEM_STATIC_ASSERT(BIT_MASK_SIZE == 32);
|
232
|
+
assert(nbBits < BIT_MASK_SIZE);
|
233
|
+
assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8);
|
225
234
|
bitC->bitContainer |= (value & BIT_mask[nbBits]) << bitC->bitPos;
|
226
235
|
bitC->bitPos += nbBits;
|
227
236
|
}
|
@@ -232,6 +241,7 @@ MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC,
|
|
232
241
|
size_t value, unsigned nbBits)
|
233
242
|
{
|
234
243
|
assert((value>>nbBits) == 0);
|
244
|
+
assert(nbBits + bitC->bitPos < sizeof(bitC->bitContainer) * 8);
|
235
245
|
bitC->bitContainer |= value << bitC->bitPos;
|
236
246
|
bitC->bitPos += nbBits;
|
237
247
|
}
|
@@ -242,7 +252,7 @@ MEM_STATIC void BIT_addBitsFast(BIT_CStream_t* bitC,
|
|
242
252
|
MEM_STATIC void BIT_flushBitsFast(BIT_CStream_t* bitC)
|
243
253
|
{
|
244
254
|
size_t const nbBytes = bitC->bitPos >> 3;
|
245
|
-
assert(
|
255
|
+
assert(bitC->bitPos < sizeof(bitC->bitContainer) * 8);
|
246
256
|
MEM_writeLEST(bitC->ptr, bitC->bitContainer);
|
247
257
|
bitC->ptr += nbBytes;
|
248
258
|
assert(bitC->ptr <= bitC->endPtr);
|
@@ -258,7 +268,7 @@ MEM_STATIC void BIT_flushBitsFast(BIT_CStream_t* bitC)
|
|
258
268
|
MEM_STATIC void BIT_flushBits(BIT_CStream_t* bitC)
|
259
269
|
{
|
260
270
|
size_t const nbBytes = bitC->bitPos >> 3;
|
261
|
-
assert(
|
271
|
+
assert(bitC->bitPos < sizeof(bitC->bitContainer) * 8);
|
262
272
|
MEM_writeLEST(bitC->ptr, bitC->bitContainer);
|
263
273
|
bitC->ptr += nbBytes;
|
264
274
|
if (bitC->ptr > bitC->endPtr) bitC->ptr = bitC->endPtr;
|
@@ -350,12 +360,14 @@ MEM_STATIC size_t BIT_getMiddleBits(size_t bitContainer, U32 const start, U32 co
|
|
350
360
|
# endif
|
351
361
|
return _bextr_u32(bitContainer, start, nbBits);
|
352
362
|
#else
|
363
|
+
assert(nbBits < BIT_MASK_SIZE);
|
353
364
|
return (bitContainer >> start) & BIT_mask[nbBits];
|
354
365
|
#endif
|
355
366
|
}
|
356
367
|
|
357
368
|
MEM_STATIC size_t BIT_getLowerBits(size_t bitContainer, U32 const nbBits)
|
358
369
|
{
|
370
|
+
assert(nbBits < BIT_MASK_SIZE);
|
359
371
|
return bitContainer & BIT_mask[nbBits];
|
360
372
|
}
|
361
373
|
|
@@ -5,6 +5,7 @@
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
6
6
|
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
7
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_COMPILER_H
|
@@ -5,6 +5,7 @@
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
6
6
|
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
7
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
|
/* The purpose of this file is to have a single list of error strings embedded in binary */
|
@@ -29,14 +30,15 @@ const char* ERR_getErrorString(ERR_enum code)
|
|
29
30
|
case PREFIX(init_missing): return "Context should be init first";
|
30
31
|
case PREFIX(memory_allocation): return "Allocation error : not enough memory";
|
31
32
|
case PREFIX(stage_wrong): return "Operation not authorized at current processing stage";
|
32
|
-
case PREFIX(dstSize_tooSmall): return "Destination buffer is too small";
|
33
|
-
case PREFIX(srcSize_wrong): return "Src size is incorrect";
|
34
33
|
case PREFIX(tableLog_tooLarge): return "tableLog requires too much memory : unsupported";
|
35
34
|
case PREFIX(maxSymbolValue_tooLarge): return "Unsupported max Symbol Value : too large";
|
36
35
|
case PREFIX(maxSymbolValue_tooSmall): return "Specified maxSymbolValue is too small";
|
37
36
|
case PREFIX(dictionary_corrupted): return "Dictionary is corrupted";
|
38
37
|
case PREFIX(dictionary_wrong): return "Dictionary mismatch";
|
39
38
|
case PREFIX(dictionaryCreation_failed): return "Cannot create Dictionary from provided samples";
|
39
|
+
case PREFIX(dstSize_tooSmall): return "Destination buffer is too small";
|
40
|
+
case PREFIX(srcSize_wrong): return "Src size is incorrect";
|
41
|
+
/* following error codes are not stable and may be removed or changed in a future version */
|
40
42
|
case PREFIX(frameIndex_tooLarge): return "Frame index is too large";
|
41
43
|
case PREFIX(seekableIO): return "An I/O error occurred when reading/seeking";
|
42
44
|
case PREFIX(maxCode):
|
@@ -5,6 +5,7 @@
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
6
6
|
* LICENSE file in the root directory of this source tree) and the GPLv2 (found
|
7
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
|
/* Note : this module is expected to remain private, do not expose it */
|
@@ -48,10 +49,9 @@ typedef ZSTD_ErrorCode ERR_enum;
|
|
48
49
|
/*-****************************************
|
49
50
|
* Error codes handling
|
50
51
|
******************************************/
|
51
|
-
#
|
52
|
-
#
|
53
|
-
#
|
54
|
-
#define ERROR(name) ((size_t)-PREFIX(name))
|
52
|
+
#undef ERROR /* reported already defined on VS 2015 (Rich Geldreich) */
|
53
|
+
#define ERROR(name) ZSTD_ERROR(name)
|
54
|
+
#define ZSTD_ERROR(name) ((size_t)-PREFIX(name))
|
55
55
|
|
56
56
|
ERR_STATIC unsigned ERR_isError(size_t code) { return (code > ERROR(maxCode)); }
|
57
57
|
|