extzstd 0.1 → 0.3.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 +39 -0
- data/README.md +38 -56
- data/contrib/zstd/CHANGELOG +613 -0
- data/contrib/zstd/CODE_OF_CONDUCT.md +5 -0
- data/contrib/zstd/CONTRIBUTING.md +406 -0
- data/contrib/zstd/COPYING +339 -0
- data/contrib/zstd/Makefile +420 -0
- data/contrib/zstd/README.md +179 -41
- data/contrib/zstd/TESTING.md +44 -0
- data/contrib/zstd/appveyor.yml +292 -0
- data/contrib/zstd/lib/BUCK +234 -0
- data/contrib/zstd/lib/Makefile +451 -0
- data/contrib/zstd/lib/README.md +207 -0
- data/contrib/zstd/{common → lib/common}/bitstream.h +187 -138
- data/contrib/zstd/lib/common/compiler.h +288 -0
- data/contrib/zstd/lib/common/cpu.h +213 -0
- data/contrib/zstd/lib/common/debug.c +24 -0
- data/contrib/zstd/lib/common/debug.h +107 -0
- data/contrib/zstd/lib/common/entropy_common.c +362 -0
- data/contrib/zstd/{common → lib/common}/error_private.c +25 -12
- data/contrib/zstd/{common → lib/common}/error_private.h +14 -10
- data/contrib/zstd/{common → lib/common}/fse.h +173 -92
- data/contrib/zstd/{common → lib/common}/fse_decompress.c +149 -85
- data/contrib/zstd/lib/common/huf.h +361 -0
- data/contrib/zstd/{common → lib/common}/mem.h +115 -59
- data/contrib/zstd/lib/common/pool.c +350 -0
- data/contrib/zstd/lib/common/pool.h +84 -0
- data/contrib/zstd/lib/common/threading.c +122 -0
- data/contrib/zstd/lib/common/threading.h +155 -0
- data/contrib/zstd/{common → lib/common}/xxhash.c +55 -96
- data/contrib/zstd/{common → lib/common}/xxhash.h +23 -47
- data/contrib/zstd/lib/common/zstd_common.c +83 -0
- data/contrib/zstd/lib/common/zstd_deps.h +111 -0
- data/contrib/zstd/lib/common/zstd_errors.h +95 -0
- data/contrib/zstd/lib/common/zstd_internal.h +478 -0
- data/contrib/zstd/{compress → lib/compress}/fse_compress.c +214 -319
- data/contrib/zstd/lib/compress/hist.c +181 -0
- data/contrib/zstd/lib/compress/hist.h +75 -0
- data/contrib/zstd/lib/compress/huf_compress.c +913 -0
- data/contrib/zstd/lib/compress/zstd_compress.c +5208 -0
- data/contrib/zstd/lib/compress/zstd_compress_internal.h +1203 -0
- data/contrib/zstd/lib/compress/zstd_compress_literals.c +158 -0
- data/contrib/zstd/lib/compress/zstd_compress_literals.h +29 -0
- data/contrib/zstd/lib/compress/zstd_compress_sequences.c +433 -0
- data/contrib/zstd/lib/compress/zstd_compress_sequences.h +54 -0
- data/contrib/zstd/lib/compress/zstd_compress_superblock.c +849 -0
- data/contrib/zstd/lib/compress/zstd_compress_superblock.h +32 -0
- data/contrib/zstd/lib/compress/zstd_cwksp.h +561 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.c +521 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.h +38 -0
- data/contrib/zstd/lib/compress/zstd_fast.c +496 -0
- data/contrib/zstd/lib/compress/zstd_fast.h +37 -0
- data/contrib/zstd/lib/compress/zstd_lazy.c +1412 -0
- data/contrib/zstd/lib/compress/zstd_lazy.h +87 -0
- data/contrib/zstd/lib/compress/zstd_ldm.c +660 -0
- data/contrib/zstd/lib/compress/zstd_ldm.h +116 -0
- data/contrib/zstd/lib/compress/zstd_opt.c +1345 -0
- data/contrib/zstd/lib/compress/zstd_opt.h +56 -0
- data/contrib/zstd/lib/compress/zstdmt_compress.c +1811 -0
- data/contrib/zstd/lib/compress/zstdmt_compress.h +110 -0
- data/contrib/zstd/lib/decompress/huf_decompress.c +1350 -0
- data/contrib/zstd/lib/decompress/zstd_ddict.c +244 -0
- data/contrib/zstd/lib/decompress/zstd_ddict.h +44 -0
- data/contrib/zstd/lib/decompress/zstd_decompress.c +1930 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_block.c +1540 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_block.h +62 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +190 -0
- data/contrib/zstd/{common → lib/deprecated}/zbuff.h +68 -45
- data/contrib/zstd/lib/deprecated/zbuff_common.c +26 -0
- data/contrib/zstd/lib/deprecated/zbuff_compress.c +147 -0
- data/contrib/zstd/lib/deprecated/zbuff_decompress.c +75 -0
- data/contrib/zstd/lib/dictBuilder/cover.c +1245 -0
- data/contrib/zstd/lib/dictBuilder/cover.h +157 -0
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.c +3 -3
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.h +0 -0
- data/contrib/zstd/lib/dictBuilder/fastcover.c +758 -0
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/zdict.c +318 -194
- data/contrib/zstd/lib/dictBuilder/zdict.h +305 -0
- data/contrib/zstd/{legacy → lib/legacy}/zstd_legacy.h +171 -15
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.c +191 -124
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.c +125 -125
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.c +125 -124
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.h +20 -6
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.c +151 -299
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.c +237 -243
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.h +19 -6
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.c +130 -143
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.h +18 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v07.c +158 -157
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v07.h +19 -5
- data/contrib/zstd/lib/libzstd.pc.in +15 -0
- data/contrib/zstd/lib/zstd.h +2391 -0
- data/ext/depend +2 -0
- data/ext/extconf.rb +15 -6
- data/ext/extzstd.c +76 -145
- data/ext/extzstd.h +80 -31
- data/ext/extzstd_stream.c +417 -142
- data/ext/libzstd_conf.h +8 -0
- data/ext/zstd_common.c +10 -7
- data/ext/zstd_compress.c +14 -5
- data/ext/zstd_decompress.c +5 -4
- data/ext/zstd_dictbuilder.c +9 -4
- data/ext/zstd_dictbuilder_fastcover.c +3 -0
- data/ext/zstd_legacy_v01.c +3 -1
- data/ext/zstd_legacy_v02.c +3 -1
- data/ext/zstd_legacy_v03.c +3 -1
- data/ext/zstd_legacy_v04.c +3 -1
- data/ext/zstd_legacy_v05.c +3 -1
- data/ext/zstd_legacy_v06.c +3 -1
- data/ext/zstd_legacy_v07.c +3 -1
- data/gemstub.rb +10 -24
- data/lib/extzstd.rb +64 -179
- data/lib/extzstd/version.rb +6 -1
- data/test/test_basic.rb +9 -6
- metadata +113 -57
- data/HISTORY.ja +0 -5
- data/contrib/zstd/common/entropy_common.c +0 -225
- data/contrib/zstd/common/huf.h +0 -228
- data/contrib/zstd/common/zstd_common.c +0 -83
- data/contrib/zstd/common/zstd_errors.h +0 -60
- data/contrib/zstd/common/zstd_internal.h +0 -267
- data/contrib/zstd/compress/huf_compress.c +0 -533
- data/contrib/zstd/compress/zbuff_compress.c +0 -319
- data/contrib/zstd/compress/zstd_compress.c +0 -3264
- data/contrib/zstd/compress/zstd_opt.h +0 -900
- data/contrib/zstd/decompress/huf_decompress.c +0 -883
- data/contrib/zstd/decompress/zbuff_decompress.c +0 -252
- data/contrib/zstd/decompress/zstd_decompress.c +0 -1842
- data/contrib/zstd/dictBuilder/zdict.h +0 -111
- data/contrib/zstd/zstd.h +0 -640
data/ext/depend
ADDED
data/ext/extconf.rb
CHANGED
|
@@ -4,10 +4,10 @@ require "mkmf"
|
|
|
4
4
|
|
|
5
5
|
$INCFLAGS = %w(
|
|
6
6
|
-I$(srcdir)/../contrib
|
|
7
|
-
-I$(srcdir)/../contrib/zstd
|
|
8
|
-
-I$(srcdir)/../contrib/zstd/common
|
|
9
|
-
-I$(srcdir)/../contrib/zstd/dictBuilder
|
|
10
|
-
-I$(srcdir)/../contrib/zstd/legacy
|
|
7
|
+
-I$(srcdir)/../contrib/zstd/lib
|
|
8
|
+
-I$(srcdir)/../contrib/zstd/lib/common
|
|
9
|
+
-I$(srcdir)/../contrib/zstd/lib/dictBuilder
|
|
10
|
+
-I$(srcdir)/../contrib/zstd/lib/legacy
|
|
11
11
|
).join(" ") + " #$INCFLAGS"
|
|
12
12
|
|
|
13
13
|
#dir = File.dirname(__FILE__).gsub(/[\[\{\?\*]/, "[\\0]")
|
|
@@ -17,8 +17,17 @@ $INCFLAGS = %w(
|
|
|
17
17
|
#$srcs = files
|
|
18
18
|
#$VPATH.push "$(srcdir)/../contrib/zstd", "$(srcdir)/../contrib/zstd/legacy"
|
|
19
19
|
|
|
20
|
-
if RbConfig::CONFIG["arch"] =~ /mingw/
|
|
21
|
-
$LDFLAGS << " -static-libgcc"
|
|
20
|
+
if RbConfig::CONFIG["arch"] =~ /mingw/i
|
|
21
|
+
$LDFLAGS << " -static-libgcc" if try_ldflags("-static-libgcc")
|
|
22
|
+
else
|
|
23
|
+
if try_compile(<<-"VISIBILITY")
|
|
24
|
+
__attribute__ ((visibility("hidden"))) int conftest(void) { return 0; }
|
|
25
|
+
VISIBILITY
|
|
26
|
+
if try_cflags("-fvisibility=hidden")
|
|
27
|
+
$CFLAGS << " -fvisibility=hidden"
|
|
28
|
+
$defs << %('-DRBEXT_API=__attribute__ ((visibility("default")))')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
22
31
|
end
|
|
23
32
|
|
|
24
33
|
create_makefile File.join(RUBY_VERSION.slice(/\d+\.\d+/), "extzstd")
|
data/ext/extzstd.c
CHANGED
|
@@ -1,38 +1,17 @@
|
|
|
1
1
|
#include "extzstd.h"
|
|
2
|
-
#include <zstd/common/mem.h>
|
|
2
|
+
#include <zstd/lib/common/mem.h>
|
|
3
3
|
#include <zstd_errors.h>
|
|
4
4
|
#include <zdict.h>
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
rb_check_type(str, RUBY_T_STRING);
|
|
10
|
-
RSTRING_GETMEM(str, *ptr, *size);
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
static void
|
|
14
|
-
aux_string_pointer_with_nil(VALUE str, const char **ptr, size_t *size)
|
|
15
|
-
{
|
|
16
|
-
if (NIL_P(str)) {
|
|
17
|
-
*ptr = NULL;
|
|
18
|
-
*size = 0;
|
|
19
|
-
} else {
|
|
20
|
-
aux_string_pointer(str, ptr, size);
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
static void
|
|
25
|
-
aux_string_expand_pointer(VALUE str, char **ptr, size_t size)
|
|
26
|
-
{
|
|
27
|
-
rb_check_type(str, RUBY_T_STRING);
|
|
28
|
-
rb_str_modify(str);
|
|
29
|
-
rb_str_set_len(str, 0);
|
|
30
|
-
rb_str_modify_expand(str, size);
|
|
31
|
-
*ptr = RSTRING_PTR(str);
|
|
32
|
-
}
|
|
6
|
+
#ifndef RB_EXT_RACTOR_SAFE
|
|
7
|
+
# define RB_EXT_RACTOR_SAFE(FEATURE) ((void)(FEATURE))
|
|
8
|
+
#endif
|
|
33
9
|
|
|
34
10
|
VALUE extzstd_mZstd;
|
|
35
11
|
|
|
12
|
+
static ID id_initialize;
|
|
13
|
+
static ID id_error_code;
|
|
14
|
+
|
|
36
15
|
/*
|
|
37
16
|
* constant Zstd::LIBRARY_VERSION
|
|
38
17
|
*/
|
|
@@ -83,25 +62,6 @@ init_libver(void)
|
|
|
83
62
|
VALUE extzstd_mExceptions;
|
|
84
63
|
|
|
85
64
|
VALUE extzstd_eError;
|
|
86
|
-
VALUE extzstd_eError;
|
|
87
|
-
VALUE extzstd_eGenericError;
|
|
88
|
-
VALUE extzstd_ePrefixUnknownError;
|
|
89
|
-
VALUE extzstd_eFrameParameterUnsupportedError;
|
|
90
|
-
VALUE extzstd_eFrameParameterUnsupportedBy32bitsError;
|
|
91
|
-
VALUE extzstd_eCompressionParameterUnsupportedError;
|
|
92
|
-
VALUE extzstd_eInitMissingError;
|
|
93
|
-
VALUE extzstd_eMemoryAllocationError;
|
|
94
|
-
VALUE extzstd_eStageWrongError;
|
|
95
|
-
VALUE extzstd_eDstSizeTooSmallError;
|
|
96
|
-
VALUE extzstd_eSrcSizeWrongError;
|
|
97
|
-
VALUE extzstd_eCorruptionDetectedError;
|
|
98
|
-
VALUE extzstd_eChecksumWrongError;
|
|
99
|
-
VALUE extzstd_eTableLogTooLargeError;
|
|
100
|
-
VALUE extzstd_eMaxSymbolValueTooLargeError;
|
|
101
|
-
VALUE extzstd_eMaxSymbolValueTooSmallError;
|
|
102
|
-
VALUE extzstd_eDictionaryCorruptedError;
|
|
103
|
-
VALUE extzstd_eDictionaryWrongError;
|
|
104
|
-
|
|
105
65
|
|
|
106
66
|
void
|
|
107
67
|
extzstd_check_error(ssize_t errcode)
|
|
@@ -118,16 +78,20 @@ extzstd_error(ssize_t errcode)
|
|
|
118
78
|
}
|
|
119
79
|
|
|
120
80
|
VALUE
|
|
121
|
-
extzstd_make_errorf(
|
|
81
|
+
extzstd_make_errorf(ssize_t errcode, const char *fmt, ...)
|
|
122
82
|
{
|
|
83
|
+
VALUE e;
|
|
84
|
+
|
|
123
85
|
if (fmt && strlen(fmt) > 0) {
|
|
86
|
+
VALUE args[] = { SSIZET2NUM(errcode), Qnil };
|
|
124
87
|
va_list va;
|
|
125
88
|
va_start(va, fmt);
|
|
126
|
-
|
|
89
|
+
args[1] = rb_vsprintf(fmt, va);
|
|
127
90
|
va_end(va);
|
|
128
|
-
return
|
|
91
|
+
return rb_class_new_instance(2, args, extzstd_eError);
|
|
129
92
|
} else {
|
|
130
|
-
|
|
93
|
+
VALUE args[] = { SSIZET2NUM(errcode) };
|
|
94
|
+
return rb_class_new_instance(1, args, extzstd_eError);
|
|
131
95
|
}
|
|
132
96
|
}
|
|
133
97
|
|
|
@@ -136,33 +100,34 @@ extzstd_make_error(ssize_t errcode)
|
|
|
136
100
|
{
|
|
137
101
|
if (!ZSTD_isError(errcode)) { return Qnil; }
|
|
138
102
|
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
CASE_ERROR(ZSTD_error_corruption_detected, extzstd_eCorruptionDetectedError, NULL);
|
|
154
|
-
CASE_ERROR(ZSTD_error_checksum_wrong, extzstd_eChecksumWrongError, NULL);
|
|
155
|
-
CASE_ERROR(ZSTD_error_tableLog_tooLarge, extzstd_eTableLogTooLargeError, NULL);
|
|
156
|
-
CASE_ERROR(ZSTD_error_maxSymbolValue_tooLarge, extzstd_eMaxSymbolValueTooLargeError, NULL);
|
|
157
|
-
CASE_ERROR(ZSTD_error_maxSymbolValue_tooSmall, extzstd_eMaxSymbolValueTooSmallError, NULL);
|
|
158
|
-
CASE_ERROR(ZSTD_error_dictionary_corrupted, extzstd_eDictionaryCorruptedError, NULL);
|
|
159
|
-
CASE_ERROR(ZSTD_error_dictionary_wrong, extzstd_eDictionaryWrongError, NULL);
|
|
160
|
-
default:
|
|
161
|
-
return extzstd_make_errorf(extzstd_eError,
|
|
162
|
-
"unknown zstd error code (%d)", errcode);
|
|
163
|
-
}
|
|
103
|
+
return extzstd_make_errorf(ZSTD_getErrorCode(errcode), NULL);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
static VALUE
|
|
107
|
+
err_initialize(int argc, VALUE argv[], VALUE err)
|
|
108
|
+
{
|
|
109
|
+
VALUE errcode;
|
|
110
|
+
|
|
111
|
+
rb_scan_args(argc, argv, "1*", &errcode, NULL);
|
|
112
|
+
rb_call_super(argc - 1, argv + 1);
|
|
113
|
+
rb_ivar_set(err, id_error_code, errcode);
|
|
114
|
+
|
|
115
|
+
return err;
|
|
116
|
+
}
|
|
164
117
|
|
|
165
|
-
|
|
118
|
+
static VALUE
|
|
119
|
+
err_errcode(VALUE err)
|
|
120
|
+
{
|
|
121
|
+
return rb_ivar_get(err, id_error_code);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
static VALUE
|
|
125
|
+
err_to_s(VALUE err)
|
|
126
|
+
{
|
|
127
|
+
ZSTD_ErrorCode code = (ZSTD_ErrorCode)NUM2SSIZET(rb_ivar_get(err, id_error_code));
|
|
128
|
+
VALUE mesg = rb_call_super(0, NULL);
|
|
129
|
+
VALUE mesg2 = rb_sprintf(" - %s (errcode: %d)", ZSTD_getErrorString(code), (int)code);
|
|
130
|
+
return rb_str_plus(mesg, mesg2);
|
|
166
131
|
}
|
|
167
132
|
|
|
168
133
|
static void
|
|
@@ -172,57 +137,10 @@ init_error(void)
|
|
|
172
137
|
|
|
173
138
|
extzstd_eError = rb_define_class_under(extzstd_mZstd, "Error", rb_eRuntimeError);
|
|
174
139
|
rb_include_module(extzstd_eError, extzstd_mExceptions);
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
extzstd_ePrefixUnknownError = rb_define_class_under(extzstd_mZstd, "PrefixUnknownError", rb_eArgError);
|
|
180
|
-
rb_include_module(extzstd_ePrefixUnknownError, extzstd_mExceptions);
|
|
181
|
-
|
|
182
|
-
extzstd_eFrameParameterUnsupportedError = rb_define_class_under(extzstd_mZstd, "FrameParameterUnsupportedError", rb_eRuntimeError);
|
|
183
|
-
rb_include_module(extzstd_eFrameParameterUnsupportedError, extzstd_mExceptions);
|
|
184
|
-
|
|
185
|
-
extzstd_eFrameParameterUnsupportedBy32bitsError = rb_define_class_under(extzstd_mZstd, "FrameParameterUnsupportedBy32bitsImplementationError", rb_eRuntimeError);
|
|
186
|
-
rb_include_module(extzstd_eFrameParameterUnsupportedBy32bitsError, extzstd_mExceptions);
|
|
187
|
-
|
|
188
|
-
extzstd_eCompressionParameterUnsupportedError = rb_define_class_under(extzstd_mZstd, "CompressionParameterUnsupportedError", rb_eRuntimeError);
|
|
189
|
-
rb_include_module(extzstd_eCompressionParameterUnsupportedError, extzstd_mExceptions);
|
|
190
|
-
|
|
191
|
-
extzstd_eInitMissingError = rb_define_class_under(extzstd_mZstd, "InitMissingError", rb_eRuntimeError);
|
|
192
|
-
rb_include_module(extzstd_eInitMissingError, extzstd_mExceptions);
|
|
193
|
-
|
|
194
|
-
extzstd_eMemoryAllocationError = rb_define_class_under(extzstd_mZstd, "MemoryAllocationError", aux_const_dig_str(rb_cObject, "Errno", "ENOMEM"));
|
|
195
|
-
rb_include_module(extzstd_eMemoryAllocationError, extzstd_mExceptions);
|
|
196
|
-
|
|
197
|
-
extzstd_eStageWrongError = rb_define_class_under(extzstd_mZstd, "StageWrongError", rb_eRuntimeError);
|
|
198
|
-
rb_include_module(extzstd_eStageWrongError, extzstd_mExceptions);
|
|
199
|
-
|
|
200
|
-
extzstd_eDstSizeTooSmallError = rb_define_class_under(extzstd_mZstd, "DstSizeTooSmallError", rb_eArgError);
|
|
201
|
-
rb_include_module(extzstd_eDstSizeTooSmallError, extzstd_mExceptions);
|
|
202
|
-
|
|
203
|
-
extzstd_eSrcSizeWrongError = rb_define_class_under(extzstd_mZstd, "SrcSizeWrongError", rb_eArgError);
|
|
204
|
-
rb_include_module(extzstd_eSrcSizeWrongError, extzstd_mExceptions);
|
|
205
|
-
|
|
206
|
-
extzstd_eCorruptionDetectedError = rb_define_class_under(extzstd_mZstd, "CorruptionDetectedError", rb_eRuntimeError);
|
|
207
|
-
rb_include_module(extzstd_eCorruptionDetectedError, extzstd_mExceptions);
|
|
208
|
-
|
|
209
|
-
extzstd_eChecksumWrongError = rb_define_class_under(extzstd_mZstd, "ChecksumWrongError", rb_eRuntimeError);
|
|
210
|
-
rb_include_module(extzstd_eChecksumWrongError, extzstd_mExceptions);
|
|
211
|
-
|
|
212
|
-
extzstd_eTableLogTooLargeError = rb_define_class_under(extzstd_mZstd, "TableLogTooLargeError", rb_eArgError);
|
|
213
|
-
rb_include_module(extzstd_eTableLogTooLargeError, extzstd_mExceptions);
|
|
214
|
-
|
|
215
|
-
extzstd_eMaxSymbolValueTooLargeError = rb_define_class_under(extzstd_mZstd, "MaxSymbolValueTooLargeError", rb_eArgError);
|
|
216
|
-
rb_include_module(extzstd_eMaxSymbolValueTooLargeError, extzstd_mExceptions);
|
|
217
|
-
|
|
218
|
-
extzstd_eMaxSymbolValueTooSmallError = rb_define_class_under(extzstd_mZstd, "MaxSymbolValueTooSmallError", rb_eArgError);
|
|
219
|
-
rb_include_module(extzstd_eMaxSymbolValueTooSmallError, extzstd_mExceptions);
|
|
220
|
-
|
|
221
|
-
extzstd_eDictionaryCorruptedError = rb_define_class_under(extzstd_mZstd, "DictionaryCorruptedError", rb_eRuntimeError);
|
|
222
|
-
rb_include_module(extzstd_eDictionaryCorruptedError, extzstd_mExceptions);
|
|
223
|
-
|
|
224
|
-
extzstd_eDictionaryWrongError = rb_define_class_under(extzstd_mZstd, "DictionaryWrongError", rb_eRuntimeError);
|
|
225
|
-
rb_include_module(extzstd_eDictionaryWrongError, extzstd_mExceptions);
|
|
140
|
+
rb_define_method(extzstd_eError, "initialize", err_initialize, -1);
|
|
141
|
+
rb_define_method(extzstd_eError, "error_code", err_errcode, 0);
|
|
142
|
+
rb_define_method(extzstd_eError, "to_s", err_to_s, 0);
|
|
143
|
+
rb_define_alias(extzstd_eError, "errcode", "error_code");
|
|
226
144
|
}
|
|
227
145
|
|
|
228
146
|
/*
|
|
@@ -245,6 +163,8 @@ init_constants(void)
|
|
|
245
163
|
rb_define_const(mConstants, "ZSTD_LAZY2", INT2NUM(ZSTD_lazy2));
|
|
246
164
|
rb_define_const(mConstants, "ZSTD_BTLAZY2", INT2NUM(ZSTD_btlazy2));
|
|
247
165
|
rb_define_const(mConstants, "ZSTD_BTOPT", INT2NUM(ZSTD_btopt));
|
|
166
|
+
rb_define_const(mConstants, "ZSTD_BTULTRA", INT2NUM(ZSTD_btultra));
|
|
167
|
+
rb_define_const(mConstants, "ZSTD_BTULTRA2", INT2NUM(ZSTD_btultra2));
|
|
248
168
|
rb_define_const(mConstants, "ZSTD_WINDOWLOG_MAX", INT2NUM(ZSTD_WINDOWLOG_MAX));
|
|
249
169
|
rb_define_const(mConstants, "ZSTD_WINDOWLOG_MIN", INT2NUM(ZSTD_WINDOWLOG_MIN));
|
|
250
170
|
rb_define_const(mConstants, "ZSTD_HASHLOG_MAX", INT2NUM(ZSTD_HASHLOG_MAX));
|
|
@@ -254,10 +174,10 @@ init_constants(void)
|
|
|
254
174
|
rb_define_const(mConstants, "ZSTD_HASHLOG3_MAX", INT2NUM(ZSTD_HASHLOG3_MAX));
|
|
255
175
|
rb_define_const(mConstants, "ZSTD_SEARCHLOG_MAX", INT2NUM(ZSTD_SEARCHLOG_MAX));
|
|
256
176
|
rb_define_const(mConstants, "ZSTD_SEARCHLOG_MIN", INT2NUM(ZSTD_SEARCHLOG_MIN));
|
|
257
|
-
rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
|
|
258
|
-
rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MIN", INT2NUM(ZSTD_SEARCHLENGTH_MIN));
|
|
259
|
-
rb_define_const(mConstants, "ZSTD_TARGETLENGTH_MAX", INT2NUM(ZSTD_TARGETLENGTH_MAX));
|
|
260
|
-
rb_define_const(mConstants, "ZSTD_TARGETLENGTH_MIN", INT2NUM(ZSTD_TARGETLENGTH_MIN));
|
|
177
|
+
//rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
|
|
178
|
+
//rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MIN", INT2NUM(ZSTD_SEARCHLENGTH_MIN));
|
|
179
|
+
//rb_define_const(mConstants, "ZSTD_TARGETLENGTH_MAX", INT2NUM(ZSTD_TARGETLENGTH_MAX));
|
|
180
|
+
//rb_define_const(mConstants, "ZSTD_TARGETLENGTH_MIN", INT2NUM(ZSTD_TARGETLENGTH_MIN));
|
|
261
181
|
|
|
262
182
|
rb_define_const(mConstants, "FAST", INT2NUM(ZSTD_fast));
|
|
263
183
|
rb_define_const(mConstants, "DFAST", INT2NUM(ZSTD_dfast));
|
|
@@ -266,6 +186,8 @@ init_constants(void)
|
|
|
266
186
|
rb_define_const(mConstants, "LAZY2", INT2NUM(ZSTD_lazy2));
|
|
267
187
|
rb_define_const(mConstants, "BTLAZY2", INT2NUM(ZSTD_btlazy2));
|
|
268
188
|
rb_define_const(mConstants, "BTOPT", INT2NUM(ZSTD_btopt));
|
|
189
|
+
rb_define_const(mConstants, "BTULTRA", INT2NUM(ZSTD_btultra));
|
|
190
|
+
rb_define_const(mConstants, "BTULTRA2", INT2NUM(ZSTD_btultra2));
|
|
269
191
|
rb_define_const(mConstants, "WINDOWLOG_MAX", INT2NUM(ZSTD_WINDOWLOG_MAX));
|
|
270
192
|
rb_define_const(mConstants, "WINDOWLOG_MIN", INT2NUM(ZSTD_WINDOWLOG_MIN));
|
|
271
193
|
rb_define_const(mConstants, "HASHLOG_MAX", INT2NUM(ZSTD_HASHLOG_MAX));
|
|
@@ -275,10 +197,10 @@ init_constants(void)
|
|
|
275
197
|
rb_define_const(mConstants, "HASHLOG3_MAX", INT2NUM(ZSTD_HASHLOG3_MAX));
|
|
276
198
|
rb_define_const(mConstants, "SEARCHLOG_MAX", INT2NUM(ZSTD_SEARCHLOG_MAX));
|
|
277
199
|
rb_define_const(mConstants, "SEARCHLOG_MIN", INT2NUM(ZSTD_SEARCHLOG_MIN));
|
|
278
|
-
rb_define_const(mConstants, "SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
|
|
279
|
-
rb_define_const(mConstants, "SEARCHLENGTH_MIN", INT2NUM(ZSTD_SEARCHLENGTH_MIN));
|
|
280
|
-
rb_define_const(mConstants, "TARGETLENGTH_MAX", INT2NUM(ZSTD_TARGETLENGTH_MAX));
|
|
281
|
-
rb_define_const(mConstants, "TARGETLENGTH_MIN", INT2NUM(ZSTD_TARGETLENGTH_MIN));
|
|
200
|
+
//rb_define_const(mConstants, "SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
|
|
201
|
+
//rb_define_const(mConstants, "SEARCHLENGTH_MIN", INT2NUM(ZSTD_SEARCHLENGTH_MIN));
|
|
202
|
+
//rb_define_const(mConstants, "TARGETLENGTH_MAX", INT2NUM(ZSTD_TARGETLENGTH_MAX));
|
|
203
|
+
//rb_define_const(mConstants, "TARGETLENGTH_MIN", INT2NUM(ZSTD_TARGETLENGTH_MIN));
|
|
282
204
|
}
|
|
283
205
|
|
|
284
206
|
/*
|
|
@@ -329,7 +251,7 @@ extzstd_params_alloc(ZSTD_parameters **p)
|
|
|
329
251
|
* [opts contentlog: nil]
|
|
330
252
|
* [opts hashlog: nil]
|
|
331
253
|
* [opts searchlog: nil]
|
|
332
|
-
* [opts
|
|
254
|
+
* [opts minmatch: nil]
|
|
333
255
|
* [opts targetlength: nil]
|
|
334
256
|
* [opts strategy: nil]
|
|
335
257
|
*/
|
|
@@ -362,9 +284,12 @@ params_init(int argc, VALUE argv[], VALUE v)
|
|
|
362
284
|
SETUP_PARAM(p->cParams.chainLog, opts, "chainlog", NUM2UINT);
|
|
363
285
|
SETUP_PARAM(p->cParams.hashLog, opts, "hashlog", NUM2UINT);
|
|
364
286
|
SETUP_PARAM(p->cParams.searchLog, opts, "searchlog", NUM2UINT);
|
|
365
|
-
SETUP_PARAM(p->cParams.
|
|
287
|
+
SETUP_PARAM(p->cParams.minMatch, opts, "minmatch", NUM2UINT);
|
|
366
288
|
SETUP_PARAM(p->cParams.targetLength, opts, "targetlength", NUM2UINT);
|
|
367
289
|
SETUP_PARAM(p->cParams.strategy, opts, "strategy", NUM2UINT);
|
|
290
|
+
SETUP_PARAM(p->fParams.contentSizeFlag, opts, "contentsize", RTEST);
|
|
291
|
+
SETUP_PARAM(p->fParams.checksumFlag, opts, "checksum", RTEST);
|
|
292
|
+
SETUP_PARAM(p->fParams.noDictIDFlag, opts, "nodictid", RTEST);
|
|
368
293
|
#undef SETUP_PARAM
|
|
369
294
|
}
|
|
370
295
|
|
|
@@ -408,7 +333,7 @@ IMP_PARAMS(params_windowlog, params_set_windowlog, windowLog);
|
|
|
408
333
|
IMP_PARAMS(params_chainlog, params_set_chainlog, chainLog);
|
|
409
334
|
IMP_PARAMS(params_hashlog, params_set_hashlog, hashLog);
|
|
410
335
|
IMP_PARAMS(params_searchlog, params_set_searchlog, searchLog);
|
|
411
|
-
IMP_PARAMS(
|
|
336
|
+
IMP_PARAMS(params_minmatch, params_set_minmatch, minMatch);
|
|
412
337
|
IMP_PARAMS(params_targetlength, params_set_targetlength, targetLength);
|
|
413
338
|
IMP_PARAMS(params_strategy, params_set_strategy, strategy);
|
|
414
339
|
|
|
@@ -461,8 +386,8 @@ params_s_get_preset(int argc, VALUE argv[], VALUE mod)
|
|
|
461
386
|
* Document-method: Zstd::Parameters#hashlog=
|
|
462
387
|
* Document-method: Zstd::Parameters#searchlog
|
|
463
388
|
* Document-method: Zstd::Parameters#searchlog=
|
|
464
|
-
* Document-method: Zstd::Parameters#
|
|
465
|
-
* Document-method: Zstd::Parameters#
|
|
389
|
+
* Document-method: Zstd::Parameters#minmatch
|
|
390
|
+
* Document-method: Zstd::Parameters#minmatch=
|
|
466
391
|
* Document-method: Zstd::Parameters#targetlength
|
|
467
392
|
* Document-method: Zstd::Parameters#targetlength=
|
|
468
393
|
* Document-method: Zstd::Parameters#strategy
|
|
@@ -489,8 +414,8 @@ init_params(void)
|
|
|
489
414
|
rb_define_method(extzstd_cParams, "hashlog=", RUBY_METHOD_FUNC(params_set_hashlog), 1);
|
|
490
415
|
rb_define_method(extzstd_cParams, "searchlog", RUBY_METHOD_FUNC(params_searchlog), 0);
|
|
491
416
|
rb_define_method(extzstd_cParams, "searchlog=", RUBY_METHOD_FUNC(params_set_searchlog), 1);
|
|
492
|
-
rb_define_method(extzstd_cParams, "
|
|
493
|
-
rb_define_method(extzstd_cParams, "
|
|
417
|
+
rb_define_method(extzstd_cParams, "minmatch", RUBY_METHOD_FUNC(params_minmatch), 0);
|
|
418
|
+
rb_define_method(extzstd_cParams, "minmatch=", RUBY_METHOD_FUNC(params_set_minmatch), 1);
|
|
494
419
|
rb_define_method(extzstd_cParams, "targetlength", RUBY_METHOD_FUNC(params_targetlength), 0);
|
|
495
420
|
rb_define_method(extzstd_cParams, "targetlength=", RUBY_METHOD_FUNC(params_set_targetlength), 1);
|
|
496
421
|
rb_define_method(extzstd_cParams, "strategy", RUBY_METHOD_FUNC(params_strategy), 0);
|
|
@@ -518,7 +443,8 @@ dict_s_train_from_buffer(VALUE mod, VALUE src, VALUE dict_capacity)
|
|
|
518
443
|
size_t capa = NUM2SIZET(dict_capacity);
|
|
519
444
|
VALUE dict = rb_str_buf_new(capa);
|
|
520
445
|
size_t srcsize = RSTRING_LEN(src);
|
|
521
|
-
|
|
446
|
+
const ZDICT_legacy_params_t params = { 0 };
|
|
447
|
+
size_t s = ZDICT_trainFromBuffer_legacy(RSTRING_PTR(dict), capa, RSTRING_PTR(src), &srcsize, 1, params);
|
|
522
448
|
extzstd_check_error(s);
|
|
523
449
|
rb_str_set_len(dict, s);
|
|
524
450
|
return dict;
|
|
@@ -688,9 +614,14 @@ init_contextless(void)
|
|
|
688
614
|
* library initializer
|
|
689
615
|
*/
|
|
690
616
|
|
|
691
|
-
void
|
|
617
|
+
RBEXT_API void
|
|
692
618
|
Init_extzstd(void)
|
|
693
619
|
{
|
|
620
|
+
RB_EXT_RACTOR_SAFE(true);
|
|
621
|
+
|
|
622
|
+
id_initialize = rb_intern("initialize");
|
|
623
|
+
id_error_code = rb_intern("error_code");
|
|
624
|
+
|
|
694
625
|
extzstd_mZstd = rb_define_module("Zstd");
|
|
695
626
|
|
|
696
627
|
init_libver();
|
data/ext/extzstd.h
CHANGED
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
#define ZSTD_LEGACY_SUPPORT 1
|
|
5
5
|
#define ZDICT_STATIC_LINKING_ONLY 1
|
|
6
|
-
|
|
6
|
+
//#define ZSTD_STATIC_LINKING_ONLY 1
|
|
7
|
+
#include <common/zstd_internal.h> /* for MIN() */
|
|
7
8
|
#include <zstd.h>
|
|
8
9
|
#include <stdarg.h>
|
|
10
|
+
#include <stdbool.h>
|
|
9
11
|
#include <ruby.h>
|
|
10
12
|
#include <ruby/thread.h>
|
|
13
|
+
#include <ruby/version.h>
|
|
11
14
|
|
|
12
15
|
#define ELEMENTOF(ARRAY) (sizeof(ARRAY) / sizeof(ARRAY[0]))
|
|
13
16
|
#define ENDOF(ARRAY) (ARRAY + ELEMENTOF(ARRAY))
|
|
@@ -28,24 +31,6 @@ RDOCFAKE(extzstd_cParams = rb_define_class_under(extzstd_mZstd, "Parameters", rb
|
|
|
28
31
|
|
|
29
32
|
extern VALUE extzstd_mExceptions;
|
|
30
33
|
extern VALUE extzstd_eError;
|
|
31
|
-
extern VALUE extzstd_eGenericError;
|
|
32
|
-
extern VALUE extzstd_ePrefixUnknownError;
|
|
33
|
-
extern VALUE extzstd_eFrameParameterUnsupportedError;
|
|
34
|
-
extern VALUE extzstd_eFrameParameterUnsupportedBy32bitsError;
|
|
35
|
-
extern VALUE extzstd_eCompressionParameterUnsupportedError;
|
|
36
|
-
extern VALUE extzstd_eInitMissingError;
|
|
37
|
-
extern VALUE extzstd_eMemoryAllocationError;
|
|
38
|
-
extern VALUE extzstd_eStageWrongError;
|
|
39
|
-
extern VALUE extzstd_eDstSizeTooSmallError;
|
|
40
|
-
extern VALUE extzstd_eSrcSizeWrongError;
|
|
41
|
-
extern VALUE extzstd_eCorruptionDetectedError;
|
|
42
|
-
extern VALUE extzstd_eChecksumWrongError;
|
|
43
|
-
extern VALUE extzstd_eTableLogTooLargeError;
|
|
44
|
-
extern VALUE extzstd_eMaxSymbolValueTooLargeError;
|
|
45
|
-
extern VALUE extzstd_eMaxSymbolValueTooSmallError;
|
|
46
|
-
extern VALUE extzstd_eDictionaryCorruptedError;
|
|
47
|
-
extern VALUE extzstd_eDictionaryWrongError;
|
|
48
|
-
|
|
49
34
|
|
|
50
35
|
extern void init_extzstd_stream(void);
|
|
51
36
|
extern void extzstd_init_buffered(void);
|
|
@@ -53,7 +38,7 @@ extern void extzstd_init_stream(void);
|
|
|
53
38
|
extern void extzstd_error(ssize_t errcode);
|
|
54
39
|
extern void extzstd_check_error(ssize_t errcode);
|
|
55
40
|
extern VALUE extzstd_make_error(ssize_t errcode);
|
|
56
|
-
extern VALUE extzstd_make_errorf(
|
|
41
|
+
extern VALUE extzstd_make_errorf(ssize_t errcode, const char *fmt, ...);
|
|
57
42
|
|
|
58
43
|
extern ZSTD_parameters *extzstd_getparams(VALUE v);
|
|
59
44
|
extern int extzstd_params_p(VALUE v);
|
|
@@ -171,16 +156,80 @@ aux_const_dig_str_0(VALUE obj, const char *p[], const char **pp)
|
|
|
171
156
|
return obj;
|
|
172
157
|
}
|
|
173
158
|
|
|
174
|
-
#define aux_const_dig_str(OBJ, ...)
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
159
|
+
#define aux_const_dig_str(OBJ, ...) \
|
|
160
|
+
aux_const_dig_str_0((OBJ), \
|
|
161
|
+
((const char *[]){ __VA_ARGS__ }), \
|
|
162
|
+
ENDOF(((const char *[]){ __VA_ARGS__ }))) \
|
|
163
|
+
|
|
164
|
+
#define AUX_TUPLE(...) \
|
|
165
|
+
rb_ary_new4(ELEMENTOF(((VALUE[]) { __VA_ARGS__ })), \
|
|
166
|
+
((VALUE[]) { __VA_ARGS__ })) \
|
|
167
|
+
|
|
168
|
+
#define AUX_FUNCALL(RECV, MID, ...) \
|
|
169
|
+
rb_funcall2((RECV), (MID), \
|
|
170
|
+
ELEMENTOF(((const VALUE[]){ __VA_ARGS__ })), \
|
|
171
|
+
((const VALUE[]){ __VA_ARGS__ })) \
|
|
172
|
+
|
|
173
|
+
#define AUX_TRY_WITH_GC(cond, mesg) \
|
|
174
|
+
do { \
|
|
175
|
+
if (!(cond)) { \
|
|
176
|
+
rb_gc(); \
|
|
177
|
+
if (!(cond)) { \
|
|
178
|
+
errno = ENOMEM; \
|
|
179
|
+
rb_sys_fail(mesg); \
|
|
180
|
+
} \
|
|
181
|
+
} \
|
|
182
|
+
} while (0) \
|
|
183
|
+
|
|
184
|
+
#if defined _WIN32 || defined __CYGWIN__
|
|
185
|
+
# define RBEXT_IMPORT __declspec(dllimport)
|
|
186
|
+
# define RBEXT_EXPORT __declspec(dllexport)
|
|
187
|
+
# define RBEXT_LOCAL
|
|
188
|
+
#elif defined(__GNUC__) && __GNUC__ >= 4 || defined(__clang__)
|
|
189
|
+
# define RBEXT_IMPORT __attribute__((visibility("default")))
|
|
190
|
+
# define RBEXT_EXPORT __attribute__((visibility("default")))
|
|
191
|
+
# define RBEXT_LOCAL __attribute__((visibility("hidden")))
|
|
192
|
+
#else
|
|
193
|
+
# define RBEXT_IMPORT
|
|
194
|
+
# define RBEXT_EXPORT
|
|
195
|
+
# define RBEXT_LOCAL
|
|
196
|
+
#endif
|
|
197
|
+
|
|
198
|
+
#ifndef RBEXT_API
|
|
199
|
+
# define RBEXT_API RBEXT_EXPORT
|
|
200
|
+
#endif
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
static void
|
|
204
|
+
aux_string_pointer(VALUE str, const char **ptr, size_t *size)
|
|
205
|
+
{
|
|
206
|
+
rb_check_type(str, RUBY_T_STRING);
|
|
207
|
+
RSTRING_GETMEM(str, *ptr, *size);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
static void
|
|
211
|
+
aux_string_pointer_with_nil(VALUE str, const char **ptr, size_t *size)
|
|
212
|
+
{
|
|
213
|
+
if (NIL_P(str)) {
|
|
214
|
+
*ptr = NULL;
|
|
215
|
+
*size = 0;
|
|
216
|
+
} else {
|
|
217
|
+
aux_string_pointer(str, ptr, size);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
static void
|
|
222
|
+
aux_string_expand_pointer(VALUE str, char **ptr, size_t size)
|
|
223
|
+
{
|
|
224
|
+
rb_check_type(str, RUBY_T_STRING);
|
|
225
|
+
rb_str_modify(str);
|
|
226
|
+
rb_str_set_len(str, 0);
|
|
227
|
+
rb_str_modify_expand(str, size);
|
|
228
|
+
*ptr = RSTRING_PTR(str);
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
#if RUBY_API_VERSION_CODE >= 30000
|
|
232
|
+
# define rb_obj_infect(dest, src) ((void)(dest), (void)(src))
|
|
233
|
+
#endif
|
|
185
234
|
|
|
186
235
|
#endif /* EXTZSTD_H */
|