zstd-ruby 1.5.6.7 → 2.0.0.pre.preview1

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +29 -1
  3. data/ext/zstdruby/common.h +1 -4
  4. data/ext/zstdruby/exports.txt +1 -0
  5. data/ext/zstdruby/extconf.rb +6 -1
  6. data/ext/zstdruby/libzstd/common/bits.h +92 -87
  7. data/ext/zstdruby/libzstd/common/bitstream.h +26 -29
  8. data/ext/zstdruby/libzstd/common/compiler.h +36 -22
  9. data/ext/zstdruby/libzstd/common/cpu.h +1 -1
  10. data/ext/zstdruby/libzstd/common/debug.h +0 -9
  11. data/ext/zstdruby/libzstd/common/error_private.c +1 -0
  12. data/ext/zstdruby/libzstd/common/error_private.h +0 -10
  13. data/ext/zstdruby/libzstd/common/fse.h +2 -17
  14. data/ext/zstdruby/libzstd/common/fse_decompress.c +2 -0
  15. data/ext/zstdruby/libzstd/common/huf.h +0 -9
  16. data/ext/zstdruby/libzstd/common/mem.h +7 -11
  17. data/ext/zstdruby/libzstd/common/pool.h +0 -9
  18. data/ext/zstdruby/libzstd/common/portability_macros.h +22 -9
  19. data/ext/zstdruby/libzstd/common/threading.h +0 -8
  20. data/ext/zstdruby/libzstd/common/xxhash.h +93 -19
  21. data/ext/zstdruby/libzstd/common/zstd_deps.h +12 -0
  22. data/ext/zstdruby/libzstd/common/zstd_internal.h +1 -69
  23. data/ext/zstdruby/libzstd/common/zstd_trace.h +5 -12
  24. data/ext/zstdruby/libzstd/compress/hist.c +10 -0
  25. data/ext/zstdruby/libzstd/compress/hist.h +7 -0
  26. data/ext/zstdruby/libzstd/compress/zstd_compress.c +1057 -367
  27. data/ext/zstdruby/libzstd/compress/zstd_compress_internal.h +227 -125
  28. data/ext/zstdruby/libzstd/compress/zstd_compress_literals.c +1 -1
  29. data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.c +7 -7
  30. data/ext/zstdruby/libzstd/compress/zstd_compress_sequences.h +7 -6
  31. data/ext/zstdruby/libzstd/compress/zstd_compress_superblock.c +17 -17
  32. data/ext/zstdruby/libzstd/compress/zstd_cwksp.h +41 -24
  33. data/ext/zstdruby/libzstd/compress/zstd_double_fast.c +58 -50
  34. data/ext/zstdruby/libzstd/compress/zstd_double_fast.h +4 -12
  35. data/ext/zstdruby/libzstd/compress/zstd_fast.c +91 -74
  36. data/ext/zstdruby/libzstd/compress/zstd_fast.h +4 -12
  37. data/ext/zstdruby/libzstd/compress/zstd_lazy.c +64 -64
  38. data/ext/zstdruby/libzstd/compress/zstd_lazy.h +30 -39
  39. data/ext/zstdruby/libzstd/compress/zstd_ldm.c +48 -33
  40. data/ext/zstdruby/libzstd/compress/zstd_ldm.h +6 -14
  41. data/ext/zstdruby/libzstd/compress/zstd_opt.c +55 -51
  42. data/ext/zstdruby/libzstd/compress/zstd_opt.h +8 -16
  43. data/ext/zstdruby/libzstd/compress/zstd_preSplit.c +238 -0
  44. data/ext/zstdruby/libzstd/compress/zstd_preSplit.h +33 -0
  45. data/ext/zstdruby/libzstd/compress/zstdmt_compress.c +134 -93
  46. data/ext/zstdruby/libzstd/compress/zstdmt_compress.h +4 -15
  47. data/ext/zstdruby/libzstd/decompress/huf_decompress_amd64.S +10 -3
  48. data/ext/zstdruby/libzstd/decompress/zstd_decompress.c +14 -11
  49. data/ext/zstdruby/libzstd/decompress/zstd_decompress_block.c +6 -12
  50. data/ext/zstdruby/libzstd/decompress/zstd_decompress_internal.h +5 -5
  51. data/ext/zstdruby/libzstd/dictBuilder/cover.c +60 -19
  52. data/ext/zstdruby/libzstd/dictBuilder/divsufsort.h +0 -10
  53. data/ext/zstdruby/libzstd/dictBuilder/zdict.c +2 -2
  54. data/ext/zstdruby/libzstd/zdict.h +15 -8
  55. data/ext/zstdruby/libzstd/zstd.h +241 -132
  56. data/ext/zstdruby/libzstd/zstd_errors.h +1 -8
  57. data/ext/zstdruby/main.c +1 -1
  58. data/ext/zstdruby/streaming_compress.c +2 -3
  59. data/ext/zstdruby/streaming_decompress.c +22 -0
  60. data/ext/zstdruby/zstdruby.c +2 -103
  61. data/lib/zstd-ruby/version.rb +1 -1
  62. metadata +7 -4
@@ -15,10 +15,6 @@
15
15
  extern "C" {
16
16
  #endif
17
17
 
18
- /*===== dependency =====*/
19
- #include <stddef.h> /* size_t */
20
-
21
-
22
18
  /* ===== ZSTDERRORLIB_API : control library symbols visibility ===== */
23
19
  #ifndef ZSTDERRORLIB_VISIBLE
24
20
  /* Backwards compatibility with old macro name */
@@ -80,6 +76,7 @@ typedef enum {
80
76
  ZSTD_error_tableLog_tooLarge = 44,
81
77
  ZSTD_error_maxSymbolValue_tooLarge = 46,
82
78
  ZSTD_error_maxSymbolValue_tooSmall = 48,
79
+ ZSTD_error_cannotProduce_uncompressedBlock = 49,
83
80
  ZSTD_error_stabilityCondition_notRespected = 50,
84
81
  ZSTD_error_stage_wrong = 60,
85
82
  ZSTD_error_init_missing = 62,
@@ -100,10 +97,6 @@ typedef enum {
100
97
  ZSTD_error_maxCode = 120 /* never EVER use this value directly, it can change in future versions! Use ZSTD_isError() instead */
101
98
  } ZSTD_ErrorCode;
102
99
 
103
- /*! ZSTD_getErrorCode() :
104
- convert a `size_t` function result into a `ZSTD_ErrorCode` enum type,
105
- which can be used to compare with enum list published above */
106
- ZSTDERRORLIB_API ZSTD_ErrorCode ZSTD_getErrorCode(size_t functionResult);
107
100
  ZSTDERRORLIB_API const char* ZSTD_getErrorString(ZSTD_ErrorCode code); /**< Same as ZSTD_getErrorName, but using a `ZSTD_ErrorCode` enum argument */
108
101
 
109
102
 
data/ext/zstdruby/main.c CHANGED
@@ -8,7 +8,7 @@ void zstd_ruby_skippable_frame_init(void);
8
8
  void zstd_ruby_streaming_compress_init(void);
9
9
  void zstd_ruby_streaming_decompress_init(void);
10
10
 
11
- void
11
+ RUBY_FUNC_EXPORTED void
12
12
  Init_zstdruby(void)
13
13
  {
14
14
  #ifdef HAVE_RB_EXT_RACTOR_SAFE
@@ -71,8 +71,7 @@ static VALUE
71
71
  rb_streaming_compress_initialize(int argc, VALUE *argv, VALUE obj)
72
72
  {
73
73
  VALUE kwargs;
74
- VALUE compression_level_value;
75
- rb_scan_args(argc, argv, "01:", &compression_level_value, &kwargs);
74
+ rb_scan_args(argc, argv, "00:", &kwargs);
76
75
 
77
76
  struct streaming_compress_t* sc;
78
77
  TypedData_Get_Struct(obj, struct streaming_compress_t, &streaming_compress_type, sc);
@@ -82,7 +81,7 @@ rb_streaming_compress_initialize(int argc, VALUE *argv, VALUE obj)
82
81
  if (ctx == NULL) {
83
82
  rb_raise(rb_eRuntimeError, "%s", "ZSTD_createCCtx error");
84
83
  }
85
- set_compress_params(ctx, compression_level_value, kwargs);
84
+ set_compress_params(ctx, kwargs);
86
85
 
87
86
  sc->ctx = ctx;
88
87
  sc->buf = rb_str_new(NULL, buffOutSize);
@@ -113,6 +113,27 @@ rb_streaming_decompress_decompress(VALUE obj, VALUE src)
113
113
  return result;
114
114
  }
115
115
 
116
+ static VALUE
117
+ rb_streaming_decompress_decompress_with_pos(VALUE obj, VALUE src)
118
+ {
119
+ StringValue(src);
120
+ const char* input_data = RSTRING_PTR(src);
121
+ size_t input_size = RSTRING_LEN(src);
122
+ ZSTD_inBuffer input = { input_data, input_size, 0 };
123
+
124
+ struct streaming_decompress_t* sd;
125
+ TypedData_Get_Struct(obj, struct streaming_decompress_t, &streaming_decompress_type, sd);
126
+ const char* output_data = RSTRING_PTR(sd->buf);
127
+ VALUE result = rb_str_new(0, 0);
128
+ ZSTD_outBuffer output = { (void*)output_data, sd->buf_size, 0 };
129
+ size_t const ret = zstd_stream_decompress(sd->dctx, &output, &input, false);
130
+ if (ZSTD_isError(ret)) {
131
+ rb_raise(rb_eRuntimeError, "decompress error error code: %s", ZSTD_getErrorName(ret));
132
+ }
133
+ rb_str_cat(result, output.dst, output.pos);
134
+ return rb_ary_new_from_args(2, result, ULONG2NUM(input.pos));
135
+ }
136
+
116
137
  extern VALUE rb_mZstd, cStreamingDecompress;
117
138
  void
118
139
  zstd_ruby_streaming_decompress_init(void)
@@ -121,4 +142,5 @@ zstd_ruby_streaming_decompress_init(void)
121
142
  rb_define_alloc_func(cStreamingDecompress, rb_streaming_decompress_allocate);
122
143
  rb_define_method(cStreamingDecompress, "initialize", rb_streaming_decompress_initialize, -1);
123
144
  rb_define_method(cStreamingDecompress, "decompress", rb_streaming_decompress_decompress, 1);
145
+ rb_define_method(cStreamingDecompress, "decompress_with_pos", rb_streaming_decompress_decompress_with_pos, 1);
124
146
  }
@@ -11,16 +11,15 @@ static VALUE zstdVersion(VALUE self)
11
11
  static VALUE rb_compress(int argc, VALUE *argv, VALUE self)
12
12
  {
13
13
  VALUE input_value;
14
- VALUE compression_level_value;
15
14
  VALUE kwargs;
16
- rb_scan_args(argc, argv, "11:", &input_value, &compression_level_value, &kwargs);
15
+ rb_scan_args(argc, argv, "10:", &input_value, &kwargs);
17
16
 
18
17
  ZSTD_CCtx* const ctx = ZSTD_createCCtx();
19
18
  if (ctx == NULL) {
20
19
  rb_raise(rb_eRuntimeError, "%s", "ZSTD_createCCtx error");
21
20
  }
22
21
 
23
- set_compress_params(ctx, compression_level_value, kwargs);
22
+ set_compress_params(ctx, kwargs);
24
23
 
25
24
  StringValue(input_value);
26
25
  char* input_data = RSTRING_PTR(input_value);
@@ -40,51 +39,6 @@ static VALUE rb_compress(int argc, VALUE *argv, VALUE self)
40
39
  return output;
41
40
  }
42
41
 
43
- static VALUE rb_compress_using_dict(int argc, VALUE *argv, VALUE self)
44
- {
45
- rb_warn("Zstd.compress_using_dict is deprecated; use Zstd.compress with `dict:` instead.");
46
- VALUE input_value;
47
- VALUE dict;
48
- VALUE compression_level_value;
49
- rb_scan_args(argc, argv, "21", &input_value, &dict, &compression_level_value);
50
- int compression_level = convert_compression_level(compression_level_value);
51
-
52
- StringValue(input_value);
53
- char* input_data = RSTRING_PTR(input_value);
54
- size_t input_size = RSTRING_LEN(input_value);
55
- size_t max_compressed_size = ZSTD_compressBound(input_size);
56
-
57
- char* dict_buffer = RSTRING_PTR(dict);
58
- size_t dict_size = RSTRING_LEN(dict);
59
-
60
- ZSTD_CDict* const cdict = ZSTD_createCDict(dict_buffer, dict_size, compression_level);
61
- if (cdict == NULL) {
62
- rb_raise(rb_eRuntimeError, "%s", "ZSTD_createCDict failed");
63
- }
64
- ZSTD_CCtx* const ctx = ZSTD_createCCtx();
65
- if (ctx == NULL) {
66
- ZSTD_freeCDict(cdict);
67
- rb_raise(rb_eRuntimeError, "%s", "ZSTD_createCCtx failed");
68
- }
69
-
70
- VALUE output = rb_str_new(NULL, max_compressed_size);
71
- char* output_data = RSTRING_PTR(output);
72
- size_t const compressed_size = ZSTD_compress_usingCDict(ctx, (void*)output_data, max_compressed_size,
73
- (void*)input_data, input_size, cdict);
74
-
75
- if (ZSTD_isError(compressed_size)) {
76
- ZSTD_freeCDict(cdict);
77
- ZSTD_freeCCtx(ctx);
78
- rb_raise(rb_eRuntimeError, "%s: %s", "compress failed", ZSTD_getErrorName(compressed_size));
79
- }
80
-
81
- rb_str_resize(output, compressed_size);
82
- ZSTD_freeCDict(cdict);
83
- ZSTD_freeCCtx(ctx);
84
- return output;
85
- }
86
-
87
-
88
42
  static VALUE decompress_buffered(ZSTD_DCtx* dctx, const char* input_data, size_t input_size)
89
43
  {
90
44
  ZSTD_inBuffer input = { input_data, input_size, 0 };
@@ -142,59 +96,6 @@ static VALUE rb_decompress(int argc, VALUE *argv, VALUE self)
142
96
  return output;
143
97
  }
144
98
 
145
- static VALUE rb_decompress_using_dict(int argc, VALUE *argv, VALUE self)
146
- {
147
- rb_warn("Zstd.decompress_using_dict is deprecated; use Zstd.decompress with `dict:` instead.");
148
- VALUE input_value;
149
- VALUE dict;
150
- rb_scan_args(argc, argv, "20", &input_value, &dict);
151
-
152
- StringValue(input_value);
153
- char* input_data = RSTRING_PTR(input_value);
154
- size_t input_size = RSTRING_LEN(input_value);
155
-
156
- char* dict_buffer = RSTRING_PTR(dict);
157
- size_t dict_size = RSTRING_LEN(dict);
158
- ZSTD_DDict* const ddict = ZSTD_createDDict(dict_buffer, dict_size);
159
- if (ddict == NULL) {
160
- rb_raise(rb_eRuntimeError, "%s", "ZSTD_createDDict failed");
161
- }
162
- unsigned const expected_dict_id = ZSTD_getDictID_fromDDict(ddict);
163
- unsigned const actual_dict_id = ZSTD_getDictID_fromFrame(input_data, input_size);
164
- if (expected_dict_id != actual_dict_id) {
165
- ZSTD_freeDDict(ddict);
166
- rb_raise(rb_eRuntimeError, "DictID mismatch");
167
- }
168
-
169
- ZSTD_DCtx* const ctx = ZSTD_createDCtx();
170
- if (ctx == NULL) {
171
- ZSTD_freeDDict(ddict);
172
- rb_raise(rb_eRuntimeError, "%s", "ZSTD_createDCtx failed");
173
- }
174
-
175
- unsigned long long const uncompressed_size = ZSTD_getFrameContentSize(input_data, input_size);
176
- if (uncompressed_size == ZSTD_CONTENTSIZE_ERROR) {
177
- ZSTD_freeDDict(ddict);
178
- ZSTD_freeDCtx(ctx);
179
- rb_raise(rb_eRuntimeError, "%s: %s", "not compressed by zstd", ZSTD_getErrorName(uncompressed_size));
180
- }
181
- if (uncompressed_size == ZSTD_CONTENTSIZE_UNKNOWN) {
182
- return decompress_buffered(ctx, input_data, input_size);
183
- }
184
-
185
- VALUE output = rb_str_new(NULL, uncompressed_size);
186
- char* output_data = RSTRING_PTR(output);
187
- size_t const decompress_size = ZSTD_decompress_usingDDict(ctx, output_data, uncompressed_size, input_data, input_size, ddict);
188
- if (ZSTD_isError(decompress_size)) {
189
- ZSTD_freeDDict(ddict);
190
- ZSTD_freeDCtx(ctx);
191
- rb_raise(rb_eRuntimeError, "%s: %s", "decompress error", ZSTD_getErrorName(decompress_size));
192
- }
193
- ZSTD_freeDDict(ddict);
194
- ZSTD_freeDCtx(ctx);
195
- return output;
196
- }
197
-
198
99
  static void free_cdict(void *dict)
199
100
  {
200
101
  ZSTD_freeCDict(dict);
@@ -284,9 +185,7 @@ zstd_ruby_init(void)
284
185
  {
285
186
  rb_define_module_function(rb_mZstd, "zstd_version", zstdVersion, 0);
286
187
  rb_define_module_function(rb_mZstd, "compress", rb_compress, -1);
287
- rb_define_module_function(rb_mZstd, "compress_using_dict", rb_compress_using_dict, -1);
288
188
  rb_define_module_function(rb_mZstd, "decompress", rb_decompress, -1);
289
- rb_define_module_function(rb_mZstd, "decompress_using_dict", rb_decompress_using_dict, -1);
290
189
 
291
190
  rb_define_alloc_func(rb_cCDict, rb_cdict_alloc);
292
191
  rb_define_private_method(rb_cCDict, "initialize", rb_cdict_initialize, -1);
@@ -1,3 +1,3 @@
1
1
  module Zstd
2
- VERSION = "1.5.6.7"
2
+ VERSION = "2.0.0-preview1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zstd-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.6.7
4
+ version: 2.0.0.pre.preview1
5
5
  platform: ruby
6
6
  authors:
7
7
  - SpringMT
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-07-06 00:00:00.000000000 Z
11
+ date: 2025-07-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -100,6 +100,7 @@ files:
100
100
  - bin/console
101
101
  - bin/setup
102
102
  - ext/zstdruby/common.h
103
+ - ext/zstdruby/exports.txt
103
104
  - ext/zstdruby/extconf.rb
104
105
  - ext/zstdruby/libzstd/common/allocations.h
105
106
  - ext/zstdruby/libzstd/common/bits.h
@@ -151,6 +152,8 @@ files:
151
152
  - ext/zstdruby/libzstd/compress/zstd_ldm_geartab.h
152
153
  - ext/zstdruby/libzstd/compress/zstd_opt.c
153
154
  - ext/zstdruby/libzstd/compress/zstd_opt.h
155
+ - ext/zstdruby/libzstd/compress/zstd_preSplit.c
156
+ - ext/zstdruby/libzstd/compress/zstd_preSplit.h
154
157
  - ext/zstdruby/libzstd/compress/zstdmt_compress.c
155
158
  - ext/zstdruby/libzstd/compress/zstdmt_compress.h
156
159
  - ext/zstdruby/libzstd/decompress/huf_decompress.c
@@ -196,9 +199,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
196
199
  version: '0'
197
200
  required_rubygems_version: !ruby/object:Gem::Requirement
198
201
  requirements:
199
- - - ">="
202
+ - - ">"
200
203
  - !ruby/object:Gem::Version
201
- version: '0'
204
+ version: 1.3.1
202
205
  requirements: []
203
206
  rubygems_version: 3.4.19
204
207
  signing_key: