extzstd 0.0.3.CONCEPT → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (138) hide show
  1. checksums.yaml +5 -5
  2. data/HISTORY.ja.md +39 -0
  3. data/LICENSE +6 -6
  4. data/README.md +26 -45
  5. data/contrib/zstd/CHANGELOG +555 -0
  6. data/contrib/zstd/CODE_OF_CONDUCT.md +5 -0
  7. data/contrib/zstd/CONTRIBUTING.md +392 -0
  8. data/contrib/zstd/COPYING +339 -0
  9. data/contrib/zstd/LICENSE +13 -9
  10. data/contrib/zstd/Makefile +414 -0
  11. data/contrib/zstd/README.md +170 -45
  12. data/contrib/zstd/TESTING.md +44 -0
  13. data/contrib/zstd/appveyor.yml +289 -0
  14. data/contrib/zstd/lib/BUCK +234 -0
  15. data/contrib/zstd/lib/Makefile +354 -0
  16. data/contrib/zstd/lib/README.md +179 -0
  17. data/contrib/zstd/{common → lib/common}/bitstream.h +170 -130
  18. data/contrib/zstd/lib/common/compiler.h +175 -0
  19. data/contrib/zstd/lib/common/cpu.h +215 -0
  20. data/contrib/zstd/lib/common/debug.c +24 -0
  21. data/contrib/zstd/lib/common/debug.h +114 -0
  22. data/contrib/zstd/{common → lib/common}/entropy_common.c +79 -94
  23. data/contrib/zstd/lib/common/error_private.c +55 -0
  24. data/contrib/zstd/lib/common/error_private.h +80 -0
  25. data/contrib/zstd/{common → lib/common}/fse.h +153 -93
  26. data/contrib/zstd/{common → lib/common}/fse_decompress.c +37 -82
  27. data/contrib/zstd/lib/common/huf.h +340 -0
  28. data/contrib/zstd/{common → lib/common}/mem.h +154 -78
  29. data/contrib/zstd/lib/common/pool.c +344 -0
  30. data/contrib/zstd/lib/common/pool.h +84 -0
  31. data/contrib/zstd/lib/common/threading.c +121 -0
  32. data/contrib/zstd/lib/common/threading.h +155 -0
  33. data/contrib/zstd/{common → lib/common}/xxhash.c +85 -75
  34. data/contrib/zstd/{common → lib/common}/xxhash.h +85 -73
  35. data/contrib/zstd/lib/common/zstd_common.c +83 -0
  36. data/contrib/zstd/lib/common/zstd_errors.h +94 -0
  37. data/contrib/zstd/lib/common/zstd_internal.h +447 -0
  38. data/contrib/zstd/{compress → lib/compress}/fse_compress.c +194 -303
  39. data/contrib/zstd/lib/compress/hist.c +183 -0
  40. data/contrib/zstd/lib/compress/hist.h +75 -0
  41. data/contrib/zstd/lib/compress/huf_compress.c +798 -0
  42. data/contrib/zstd/lib/compress/zstd_compress.c +4278 -0
  43. data/contrib/zstd/lib/compress/zstd_compress_internal.h +1125 -0
  44. data/contrib/zstd/lib/compress/zstd_compress_literals.c +158 -0
  45. data/contrib/zstd/lib/compress/zstd_compress_literals.h +29 -0
  46. data/contrib/zstd/lib/compress/zstd_compress_sequences.c +419 -0
  47. data/contrib/zstd/lib/compress/zstd_compress_sequences.h +54 -0
  48. data/contrib/zstd/lib/compress/zstd_compress_superblock.c +845 -0
  49. data/contrib/zstd/lib/compress/zstd_compress_superblock.h +32 -0
  50. data/contrib/zstd/lib/compress/zstd_cwksp.h +525 -0
  51. data/contrib/zstd/lib/compress/zstd_double_fast.c +521 -0
  52. data/contrib/zstd/lib/compress/zstd_double_fast.h +38 -0
  53. data/contrib/zstd/lib/compress/zstd_fast.c +496 -0
  54. data/contrib/zstd/lib/compress/zstd_fast.h +37 -0
  55. data/contrib/zstd/lib/compress/zstd_lazy.c +1138 -0
  56. data/contrib/zstd/lib/compress/zstd_lazy.h +67 -0
  57. data/contrib/zstd/lib/compress/zstd_ldm.c +619 -0
  58. data/contrib/zstd/lib/compress/zstd_ldm.h +110 -0
  59. data/contrib/zstd/lib/compress/zstd_opt.c +1200 -0
  60. data/contrib/zstd/lib/compress/zstd_opt.h +56 -0
  61. data/contrib/zstd/lib/compress/zstdmt_compress.c +2143 -0
  62. data/contrib/zstd/lib/compress/zstdmt_compress.h +192 -0
  63. data/contrib/zstd/lib/decompress/huf_decompress.c +1248 -0
  64. data/contrib/zstd/lib/decompress/zstd_ddict.c +244 -0
  65. data/contrib/zstd/lib/decompress/zstd_ddict.h +44 -0
  66. data/contrib/zstd/lib/decompress/zstd_decompress.c +1885 -0
  67. data/contrib/zstd/lib/decompress/zstd_decompress_block.c +1432 -0
  68. data/contrib/zstd/lib/decompress/zstd_decompress_block.h +59 -0
  69. data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +189 -0
  70. data/contrib/zstd/{common → lib/deprecated}/zbuff.h +86 -69
  71. data/contrib/zstd/lib/deprecated/zbuff_common.c +26 -0
  72. data/contrib/zstd/lib/deprecated/zbuff_compress.c +147 -0
  73. data/contrib/zstd/lib/deprecated/zbuff_decompress.c +75 -0
  74. data/contrib/zstd/lib/dictBuilder/cover.c +1236 -0
  75. data/contrib/zstd/lib/dictBuilder/cover.h +157 -0
  76. data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.c +3 -3
  77. data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.h +5 -5
  78. data/contrib/zstd/lib/dictBuilder/fastcover.c +757 -0
  79. data/contrib/zstd/{dictBuilder → lib/dictBuilder}/zdict.c +437 -347
  80. data/contrib/zstd/lib/dictBuilder/zdict.h +305 -0
  81. data/contrib/zstd/lib/legacy/zstd_legacy.h +415 -0
  82. data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.c +272 -292
  83. data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.h +26 -32
  84. data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.c +162 -392
  85. data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.h +26 -32
  86. data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.c +162 -391
  87. data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.h +27 -33
  88. data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.c +195 -604
  89. data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.h +26 -32
  90. data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.c +300 -575
  91. data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.h +22 -31
  92. data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.c +165 -592
  93. data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.h +54 -67
  94. data/contrib/zstd/lib/legacy/zstd_v07.c +4541 -0
  95. data/contrib/zstd/lib/legacy/zstd_v07.h +187 -0
  96. data/contrib/zstd/lib/libzstd.pc.in +15 -0
  97. data/contrib/zstd/lib/zstd.h +2090 -0
  98. data/ext/depend +2 -0
  99. data/ext/extconf.rb +18 -5
  100. data/ext/extzstd.c +296 -214
  101. data/ext/extzstd.h +81 -36
  102. data/ext/extzstd_nogvls.h +0 -117
  103. data/ext/extzstd_stream.c +622 -0
  104. data/ext/libzstd_conf.h +8 -0
  105. data/ext/zstd_common.c +11 -0
  106. data/ext/zstd_compress.c +15 -0
  107. data/ext/zstd_decompress.c +6 -0
  108. data/ext/zstd_dictbuilder.c +10 -0
  109. data/ext/zstd_dictbuilder_fastcover.c +3 -0
  110. data/ext/zstd_legacy_v01.c +3 -1
  111. data/ext/zstd_legacy_v02.c +3 -1
  112. data/ext/zstd_legacy_v03.c +3 -1
  113. data/ext/zstd_legacy_v04.c +3 -1
  114. data/ext/zstd_legacy_v05.c +3 -1
  115. data/ext/zstd_legacy_v06.c +3 -1
  116. data/ext/zstd_legacy_v07.c +3 -0
  117. data/gemstub.rb +27 -21
  118. data/lib/extzstd.rb +82 -161
  119. data/lib/extzstd/version.rb +1 -1
  120. data/test/test_basic.rb +19 -6
  121. metadata +127 -59
  122. data/contrib/zstd/common/error_private.h +0 -125
  123. data/contrib/zstd/common/error_public.h +0 -77
  124. data/contrib/zstd/common/huf.h +0 -228
  125. data/contrib/zstd/common/zstd.h +0 -475
  126. data/contrib/zstd/common/zstd_common.c +0 -91
  127. data/contrib/zstd/common/zstd_internal.h +0 -238
  128. data/contrib/zstd/compress/huf_compress.c +0 -577
  129. data/contrib/zstd/compress/zbuff_compress.c +0 -327
  130. data/contrib/zstd/compress/zstd_compress.c +0 -3074
  131. data/contrib/zstd/compress/zstd_opt.h +0 -1046
  132. data/contrib/zstd/decompress/huf_decompress.c +0 -894
  133. data/contrib/zstd/decompress/zbuff_decompress.c +0 -294
  134. data/contrib/zstd/decompress/zstd_decompress.c +0 -1362
  135. data/contrib/zstd/dictBuilder/zdict.h +0 -113
  136. data/contrib/zstd/legacy/zstd_legacy.h +0 -140
  137. data/ext/extzstd_buffered.c +0 -265
  138. data/ext/zstd_amalgam.c +0 -18
@@ -0,0 +1,2 @@
1
+ extzstd.o: extzstd.c extzstd.h
2
+ extzstd_stream.o: extzstd_stream.c extzstd.h extzstd_nogvls.h
@@ -2,9 +2,13 @@
2
2
 
3
3
  require "mkmf"
4
4
 
5
- find_header "zstd.h", "$(srcdir)/../contrib/zstd/common" or abort "can't find ``zstd.h''"
6
- find_header "zdict.h", "$(srcdir)/../contrib/zstd/dictBuilder" or abort "can't find ``zdict.h''"
7
- find_header "zstd_legacy.h", "$(srcdir)/../contrib/zstd/legacy" or abort "can't find ``zstd_legacy.h''"
5
+ $INCFLAGS = %w(
6
+ -I$(srcdir)/../contrib
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
+ ).join(" ") + " #$INCFLAGS"
8
12
 
9
13
  #dir = File.dirname(__FILE__).gsub(/[\[\{\?\*]/, "[\\0]")
10
14
  #filepattern = "{.,../contrib/zstd}/**/*.c"
@@ -13,8 +17,17 @@ find_header "zstd_legacy.h", "$(srcdir)/../contrib/zstd/legacy" or abort "can't
13
17
  #$srcs = files
14
18
  #$VPATH.push "$(srcdir)/../contrib/zstd", "$(srcdir)/../contrib/zstd/legacy"
15
19
 
16
- if RbConfig::CONFIG["arch"] =~ /mingw/
17
- $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
18
31
  end
19
32
 
20
33
  create_makefile File.join(RUBY_VERSION.slice(/\d+\.\d+/), "extzstd")
@@ -1,10 +1,13 @@
1
1
  #include "extzstd.h"
2
- #include <mem.h>
3
- #include <error_public.h>
2
+ #include <zstd/lib/common/mem.h>
3
+ #include <zstd_errors.h>
4
4
  #include <zdict.h>
5
5
 
6
6
  VALUE extzstd_mZstd;
7
7
 
8
+ static ID id_initialize;
9
+ static ID id_error_code;
10
+
8
11
  /*
9
12
  * constant Zstd::LIBRARY_VERSION
10
13
  */
@@ -55,25 +58,6 @@ init_libver(void)
55
58
  VALUE extzstd_mExceptions;
56
59
 
57
60
  VALUE extzstd_eError;
58
- VALUE extzstd_eError;
59
- VALUE extzstd_eGenericError;
60
- VALUE extzstd_ePrefixUnknownError;
61
- VALUE extzstd_eFrameParameterUnsupportedError;
62
- VALUE extzstd_eFrameParameterUnsupportedBy32bitsError;
63
- VALUE extzstd_eCompressionParameterUnsupportedError;
64
- VALUE extzstd_eInitMissingError;
65
- VALUE extzstd_eMemoryAllocationError;
66
- VALUE extzstd_eStageWrongError;
67
- VALUE extzstd_eDstSizeTooSmallError;
68
- VALUE extzstd_eSrcSizeWrongError;
69
- VALUE extzstd_eCorruptionDetectedError;
70
- VALUE extzstd_eChecksumWrongError;
71
- VALUE extzstd_eTableLogTooLargeError;
72
- VALUE extzstd_eMaxSymbolValueTooLargeError;
73
- VALUE extzstd_eMaxSymbolValueTooSmallError;
74
- VALUE extzstd_eDictionaryCorruptedError;
75
- VALUE extzstd_eDictionaryWrongError;
76
-
77
61
 
78
62
  void
79
63
  extzstd_check_error(ssize_t errcode)
@@ -90,16 +74,20 @@ extzstd_error(ssize_t errcode)
90
74
  }
91
75
 
92
76
  VALUE
93
- extzstd_make_errorf(VALUE exc, const char *fmt, ...)
77
+ extzstd_make_errorf(ssize_t errcode, const char *fmt, ...)
94
78
  {
79
+ VALUE e;
80
+
95
81
  if (fmt && strlen(fmt) > 0) {
82
+ VALUE args[] = { SSIZET2NUM(errcode), Qnil };
96
83
  va_list va;
97
84
  va_start(va, fmt);
98
- VALUE mesg = rb_vsprintf(fmt, va);
85
+ args[1] = rb_vsprintf(fmt, va);
99
86
  va_end(va);
100
- return rb_exc_new3(exc, mesg);
87
+ return rb_class_new_instance(2, args, extzstd_eError);
101
88
  } else {
102
- return rb_exc_new2(exc, "");
89
+ VALUE args[] = { SSIZET2NUM(errcode) };
90
+ return rb_class_new_instance(1, args, extzstd_eError);
103
91
  }
104
92
  }
105
93
 
@@ -108,33 +96,34 @@ extzstd_make_error(ssize_t errcode)
108
96
  {
109
97
  if (!ZSTD_isError(errcode)) { return Qnil; }
110
98
 
111
- #define CASE_ERROR(zstderr, extzstderr, ...) \
112
- case zstderr: return extzstd_make_errorf(extzstderr, __VA_ARGS__); \
113
-
114
- switch (-errcode) {
115
- CASE_ERROR(ZSTD_error_GENERIC, extzstd_eGenericError, NULL);
116
- CASE_ERROR(ZSTD_error_prefix_unknown, extzstd_ePrefixUnknownError, NULL);
117
- CASE_ERROR(ZSTD_error_frameParameter_unsupported, extzstd_eFrameParameterUnsupportedError, NULL);
118
- CASE_ERROR(ZSTD_error_frameParameter_unsupportedBy32bits, extzstd_eFrameParameterUnsupportedBy32bitsError, NULL);
119
- CASE_ERROR(ZSTD_error_compressionParameter_unsupported, extzstd_eCompressionParameterUnsupportedError, NULL);
120
- CASE_ERROR(ZSTD_error_init_missing, extzstd_eInitMissingError, NULL);
121
- CASE_ERROR(ZSTD_error_memory_allocation, extzstd_eMemoryAllocationError, NULL);
122
- CASE_ERROR(ZSTD_error_stage_wrong, extzstd_eStageWrongError, NULL);
123
- CASE_ERROR(ZSTD_error_dstSize_tooSmall, extzstd_eDstSizeTooSmallError, NULL);
124
- CASE_ERROR(ZSTD_error_srcSize_wrong, extzstd_eSrcSizeWrongError, NULL);
125
- CASE_ERROR(ZSTD_error_corruption_detected, extzstd_eCorruptionDetectedError, NULL);
126
- CASE_ERROR(ZSTD_error_checksum_wrong, extzstd_eChecksumWrongError, NULL);
127
- CASE_ERROR(ZSTD_error_tableLog_tooLarge, extzstd_eTableLogTooLargeError, NULL);
128
- CASE_ERROR(ZSTD_error_maxSymbolValue_tooLarge, extzstd_eMaxSymbolValueTooLargeError, NULL);
129
- CASE_ERROR(ZSTD_error_maxSymbolValue_tooSmall, extzstd_eMaxSymbolValueTooSmallError, NULL);
130
- CASE_ERROR(ZSTD_error_dictionary_corrupted, extzstd_eDictionaryCorruptedError, NULL);
131
- CASE_ERROR(ZSTD_error_dictionary_wrong, extzstd_eDictionaryWrongError, NULL);
132
- default:
133
- return extzstd_make_errorf(extzstd_eError,
134
- "unknown zstd error code (%d)", errcode);
135
- }
99
+ return extzstd_make_errorf(ZSTD_getErrorCode(errcode), NULL);
100
+ }
101
+
102
+ static VALUE
103
+ err_initialize(int argc, VALUE argv[], VALUE err)
104
+ {
105
+ VALUE errcode;
106
+
107
+ rb_scan_args(argc, argv, "1*", &errcode, NULL);
108
+ rb_call_super(argc - 1, argv + 1);
109
+ rb_ivar_set(err, id_error_code, errcode);
110
+
111
+ return err;
112
+ }
113
+
114
+ static VALUE
115
+ err_errcode(VALUE err)
116
+ {
117
+ return rb_ivar_get(err, id_error_code);
118
+ }
136
119
 
137
- #undef CASE_ERROR
120
+ static VALUE
121
+ err_to_s(VALUE err)
122
+ {
123
+ ZSTD_ErrorCode code = (ZSTD_ErrorCode)NUM2SSIZET(rb_ivar_get(err, id_error_code));
124
+ VALUE mesg = rb_call_super(0, NULL);
125
+ VALUE mesg2 = rb_sprintf(" - %s (errcode: %d)", ZSTD_getErrorString(code), (int)code);
126
+ return rb_str_plus(mesg, mesg2);
138
127
  }
139
128
 
140
129
  static void
@@ -144,57 +133,10 @@ init_error(void)
144
133
 
145
134
  extzstd_eError = rb_define_class_under(extzstd_mZstd, "Error", rb_eRuntimeError);
146
135
  rb_include_module(extzstd_eError, extzstd_mExceptions);
147
-
148
- extzstd_eGenericError = rb_define_class_under(extzstd_mZstd, "GenericError", rb_eRuntimeError);
149
- rb_include_module(extzstd_eGenericError, extzstd_mExceptions);
150
-
151
- extzstd_ePrefixUnknownError = rb_define_class_under(extzstd_mZstd, "PrefixUnknownError", rb_eArgError);
152
- rb_include_module(extzstd_ePrefixUnknownError, extzstd_mExceptions);
153
-
154
- extzstd_eFrameParameterUnsupportedError = rb_define_class_under(extzstd_mZstd, "FrameParameterUnsupportedError", rb_eRuntimeError);
155
- rb_include_module(extzstd_eFrameParameterUnsupportedError, extzstd_mExceptions);
156
-
157
- extzstd_eFrameParameterUnsupportedBy32bitsError = rb_define_class_under(extzstd_mZstd, "FrameParameterUnsupportedBy32bitsImplementationError", rb_eRuntimeError);
158
- rb_include_module(extzstd_eFrameParameterUnsupportedBy32bitsError, extzstd_mExceptions);
159
-
160
- extzstd_eCompressionParameterUnsupportedError = rb_define_class_under(extzstd_mZstd, "CompressionParameterUnsupportedError", rb_eRuntimeError);
161
- rb_include_module(extzstd_eCompressionParameterUnsupportedError, extzstd_mExceptions);
162
-
163
- extzstd_eInitMissingError = rb_define_class_under(extzstd_mZstd, "InitMissingError", rb_eRuntimeError);
164
- rb_include_module(extzstd_eInitMissingError, extzstd_mExceptions);
165
-
166
- extzstd_eMemoryAllocationError = rb_define_class_under(extzstd_mZstd, "MemoryAllocationError", aux_const_dig_str(rb_cObject, "Errno", "ENOMEM"));
167
- rb_include_module(extzstd_eMemoryAllocationError, extzstd_mExceptions);
168
-
169
- extzstd_eStageWrongError = rb_define_class_under(extzstd_mZstd, "StageWrongError", rb_eRuntimeError);
170
- rb_include_module(extzstd_eStageWrongError, extzstd_mExceptions);
171
-
172
- extzstd_eDstSizeTooSmallError = rb_define_class_under(extzstd_mZstd, "DstSizeTooSmallError", rb_eArgError);
173
- rb_include_module(extzstd_eDstSizeTooSmallError, extzstd_mExceptions);
174
-
175
- extzstd_eSrcSizeWrongError = rb_define_class_under(extzstd_mZstd, "SrcSizeWrongError", rb_eArgError);
176
- rb_include_module(extzstd_eSrcSizeWrongError, extzstd_mExceptions);
177
-
178
- extzstd_eCorruptionDetectedError = rb_define_class_under(extzstd_mZstd, "CorruptionDetectedError", rb_eRuntimeError);
179
- rb_include_module(extzstd_eCorruptionDetectedError, extzstd_mExceptions);
180
-
181
- extzstd_eChecksumWrongError = rb_define_class_under(extzstd_mZstd, "ChecksumWrongError", rb_eRuntimeError);
182
- rb_include_module(extzstd_eChecksumWrongError, extzstd_mExceptions);
183
-
184
- extzstd_eTableLogTooLargeError = rb_define_class_under(extzstd_mZstd, "TableLogTooLargeError", rb_eArgError);
185
- rb_include_module(extzstd_eTableLogTooLargeError, extzstd_mExceptions);
186
-
187
- extzstd_eMaxSymbolValueTooLargeError = rb_define_class_under(extzstd_mZstd, "MaxSymbolValueTooLargeError", rb_eArgError);
188
- rb_include_module(extzstd_eMaxSymbolValueTooLargeError, extzstd_mExceptions);
189
-
190
- extzstd_eMaxSymbolValueTooSmallError = rb_define_class_under(extzstd_mZstd, "MaxSymbolValueTooSmallError", rb_eArgError);
191
- rb_include_module(extzstd_eMaxSymbolValueTooSmallError, extzstd_mExceptions);
192
-
193
- extzstd_eDictionaryCorruptedError = rb_define_class_under(extzstd_mZstd, "DictionaryCorruptedError", rb_eRuntimeError);
194
- rb_include_module(extzstd_eDictionaryCorruptedError, extzstd_mExceptions);
195
-
196
- extzstd_eDictionaryWrongError = rb_define_class_under(extzstd_mZstd, "DictionaryWrongError", rb_eRuntimeError);
197
- rb_include_module(extzstd_eDictionaryWrongError, extzstd_mExceptions);
136
+ rb_define_method(extzstd_eError, "initialize", err_initialize, -1);
137
+ rb_define_method(extzstd_eError, "error_code", err_errcode, 0);
138
+ rb_define_method(extzstd_eError, "to_s", err_to_s, 0);
139
+ rb_define_alias(extzstd_eError, "errcode", "error_code");
198
140
  }
199
141
 
200
142
  /*
@@ -207,22 +149,31 @@ init_constants(void)
207
149
  VALUE mConstants = rb_define_module_under(extzstd_mZstd, "Constants");
208
150
  rb_include_module(extzstd_mZstd, mConstants);
209
151
 
152
+ rb_define_const(mConstants, "ZSTD_MAX_COMPRESSION_LEVEL", INT2NUM(ZSTD_maxCLevel()));
153
+ rb_define_const(mConstants, "MAX_COMPRESSION_LEVEL", INT2NUM(ZSTD_maxCLevel()));
154
+
210
155
  rb_define_const(mConstants, "ZSTD_FAST", INT2NUM(ZSTD_fast));
211
156
  rb_define_const(mConstants, "ZSTD_DFAST", INT2NUM(ZSTD_dfast));
212
157
  rb_define_const(mConstants, "ZSTD_GREEDY", INT2NUM(ZSTD_greedy));
213
158
  rb_define_const(mConstants, "ZSTD_LAZY", INT2NUM(ZSTD_lazy));
214
159
  rb_define_const(mConstants, "ZSTD_LAZY2", INT2NUM(ZSTD_lazy2));
215
160
  rb_define_const(mConstants, "ZSTD_BTLAZY2", INT2NUM(ZSTD_btlazy2));
161
+ rb_define_const(mConstants, "ZSTD_BTOPT", INT2NUM(ZSTD_btopt));
162
+ rb_define_const(mConstants, "ZSTD_BTULTRA", INT2NUM(ZSTD_btultra));
163
+ rb_define_const(mConstants, "ZSTD_BTULTRA2", INT2NUM(ZSTD_btultra2));
216
164
  rb_define_const(mConstants, "ZSTD_WINDOWLOG_MAX", INT2NUM(ZSTD_WINDOWLOG_MAX));
217
165
  rb_define_const(mConstants, "ZSTD_WINDOWLOG_MIN", INT2NUM(ZSTD_WINDOWLOG_MIN));
218
- rb_define_const(mConstants, "ZSTD_CHAINLOG_MAX", INT2NUM(ZSTD_CHAINLOG_MAX));
219
- rb_define_const(mConstants, "ZSTD_CHAINLOG_MIN", INT2NUM(ZSTD_CHAINLOG_MIN));
220
166
  rb_define_const(mConstants, "ZSTD_HASHLOG_MAX", INT2NUM(ZSTD_HASHLOG_MAX));
221
167
  rb_define_const(mConstants, "ZSTD_HASHLOG_MIN", INT2NUM(ZSTD_HASHLOG_MIN));
168
+ rb_define_const(mConstants, "ZSTD_CHAINLOG_MAX", INT2NUM(ZSTD_CHAINLOG_MAX));
169
+ rb_define_const(mConstants, "ZSTD_CHAINLOG_MIN", INT2NUM(ZSTD_CHAINLOG_MIN));
170
+ rb_define_const(mConstants, "ZSTD_HASHLOG3_MAX", INT2NUM(ZSTD_HASHLOG3_MAX));
222
171
  rb_define_const(mConstants, "ZSTD_SEARCHLOG_MAX", INT2NUM(ZSTD_SEARCHLOG_MAX));
223
172
  rb_define_const(mConstants, "ZSTD_SEARCHLOG_MIN", INT2NUM(ZSTD_SEARCHLOG_MIN));
224
- rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
225
- rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MIN", INT2NUM(ZSTD_SEARCHLENGTH_MIN));
173
+ //rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
174
+ //rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MIN", INT2NUM(ZSTD_SEARCHLENGTH_MIN));
175
+ //rb_define_const(mConstants, "ZSTD_TARGETLENGTH_MAX", INT2NUM(ZSTD_TARGETLENGTH_MAX));
176
+ //rb_define_const(mConstants, "ZSTD_TARGETLENGTH_MIN", INT2NUM(ZSTD_TARGETLENGTH_MIN));
226
177
 
227
178
  rb_define_const(mConstants, "FAST", INT2NUM(ZSTD_fast));
228
179
  rb_define_const(mConstants, "DFAST", INT2NUM(ZSTD_dfast));
@@ -230,16 +181,22 @@ init_constants(void)
230
181
  rb_define_const(mConstants, "LAZY", INT2NUM(ZSTD_lazy));
231
182
  rb_define_const(mConstants, "LAZY2", INT2NUM(ZSTD_lazy2));
232
183
  rb_define_const(mConstants, "BTLAZY2", INT2NUM(ZSTD_btlazy2));
184
+ rb_define_const(mConstants, "BTOPT", INT2NUM(ZSTD_btopt));
185
+ rb_define_const(mConstants, "BTULTRA", INT2NUM(ZSTD_btultra));
186
+ rb_define_const(mConstants, "BTULTRA2", INT2NUM(ZSTD_btultra2));
233
187
  rb_define_const(mConstants, "WINDOWLOG_MAX", INT2NUM(ZSTD_WINDOWLOG_MAX));
234
188
  rb_define_const(mConstants, "WINDOWLOG_MIN", INT2NUM(ZSTD_WINDOWLOG_MIN));
235
- rb_define_const(mConstants, "CHAINLOG_MAX", INT2NUM(ZSTD_CHAINLOG_MAX));
236
- rb_define_const(mConstants, "CHAINLOG_MIN", INT2NUM(ZSTD_CHAINLOG_MIN));
237
189
  rb_define_const(mConstants, "HASHLOG_MAX", INT2NUM(ZSTD_HASHLOG_MAX));
238
190
  rb_define_const(mConstants, "HASHLOG_MIN", INT2NUM(ZSTD_HASHLOG_MIN));
191
+ rb_define_const(mConstants, "CHAINLOG_MAX", INT2NUM(ZSTD_CHAINLOG_MAX));
192
+ rb_define_const(mConstants, "CHAINLOG_MIN", INT2NUM(ZSTD_CHAINLOG_MIN));
193
+ rb_define_const(mConstants, "HASHLOG3_MAX", INT2NUM(ZSTD_HASHLOG3_MAX));
239
194
  rb_define_const(mConstants, "SEARCHLOG_MAX", INT2NUM(ZSTD_SEARCHLOG_MAX));
240
195
  rb_define_const(mConstants, "SEARCHLOG_MIN", INT2NUM(ZSTD_SEARCHLOG_MIN));
241
- rb_define_const(mConstants, "SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
242
- rb_define_const(mConstants, "SEARCHLENGTH_MIN", INT2NUM(ZSTD_SEARCHLENGTH_MIN));
196
+ //rb_define_const(mConstants, "SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
197
+ //rb_define_const(mConstants, "SEARCHLENGTH_MIN", INT2NUM(ZSTD_SEARCHLENGTH_MIN));
198
+ //rb_define_const(mConstants, "TARGETLENGTH_MAX", INT2NUM(ZSTD_TARGETLENGTH_MAX));
199
+ //rb_define_const(mConstants, "TARGETLENGTH_MIN", INT2NUM(ZSTD_TARGETLENGTH_MIN));
243
200
  }
244
201
 
245
202
  /*
@@ -249,33 +206,33 @@ init_constants(void)
249
206
  VALUE extzstd_cParams;
250
207
 
251
208
  AUX_IMPLEMENT_CONTEXT(
252
- ZSTD_parameters, encparams_type, "extzstd.EncodeParameters",
253
- encparams_alloc_dummy, NULL, free, NULL,
254
- getencparamsp, getencparams, encparams_p);
209
+ ZSTD_parameters, params_type, "extzstd.Parameters",
210
+ params_alloc_dummy, NULL, free, NULL,
211
+ getparamsp, getparams, params_p);
255
212
 
256
213
  ZSTD_parameters *
257
- extzstd_getencparams(VALUE v)
214
+ extzstd_getparams(VALUE v)
258
215
  {
259
- return getencparams(v);
216
+ return getparams(v);
260
217
  }
261
218
 
262
219
  int
263
- extzstd_encparams_p(VALUE v)
220
+ extzstd_params_p(VALUE v)
264
221
  {
265
- return encparams_p(v);
222
+ return params_p(v);
266
223
  }
267
224
 
268
225
  static VALUE
269
- encparams_alloc(VALUE mod)
226
+ params_alloc(VALUE mod)
270
227
  {
271
228
  ZSTD_parameters *p;
272
- return TypedData_Make_Struct(mod, ZSTD_parameters, &encparams_type, p);
229
+ return TypedData_Make_Struct(mod, ZSTD_parameters, &params_type, p);
273
230
  }
274
231
 
275
232
  VALUE
276
233
  extzstd_params_alloc(ZSTD_parameters **p)
277
234
  {
278
- return TypedData_Make_Struct(extzstd_cParams, ZSTD_parameters, &encparams_type, *p);
235
+ return TypedData_Make_Struct(extzstd_cParams, ZSTD_parameters, &params_type, *p);
279
236
  }
280
237
 
281
238
  /*
@@ -290,43 +247,23 @@ extzstd_params_alloc(ZSTD_parameters **p)
290
247
  * [opts contentlog: nil]
291
248
  * [opts hashlog: nil]
292
249
  * [opts searchlog: nil]
293
- * [opts searchlength: nil]
250
+ * [opts minmatch: nil]
251
+ * [opts targetlength: nil]
294
252
  * [opts strategy: nil]
295
253
  */
296
254
  static VALUE
297
- encparams_init(int argc, VALUE argv[], VALUE v)
255
+ params_init(int argc, VALUE argv[], VALUE v)
298
256
  {
299
- ZSTD_parameters *p = getencparams(v);
257
+ ZSTD_parameters *p = getparams(v);
300
258
  uint64_t sizehint;
301
259
  size_t dictsize;
302
260
  int level;
303
261
  VALUE opts = Qnil;
304
- int argc0 = argc;
305
- if (argc > 0) {
306
- if (rb_type_p(argv[argc - 1], RUBY_T_HASH)) {
307
- opts = argv[argc - 1];
308
- argc --;
309
- }
310
- }
311
- if (argc == 0) {
312
- level = 0;
313
- sizehint = 0;
314
- dictsize = 0;
315
- } else if (argc == 1) {
316
- level = aux_num2int(argv[0], 0);
317
- sizehint = 0;
318
- dictsize = 0;
319
- } else if (argc == 2) {
320
- level = aux_num2int(argv[0], 0);
321
- sizehint = aux_num2int_u64(argv[1], 0);
322
- dictsize = 0;
323
- } else if (argc == 3) {
324
- level = aux_num2int(argv[0], 0);
325
- sizehint = aux_num2int_u64(argv[1], 0);
326
- dictsize = aux_num2int_u64(argv[2], 0);
327
- } else {
328
- rb_raise(rb_eArgError, "wrong number of argument (%d for 0..3 with keywords)", argc0);
329
- }
262
+
263
+ argc = rb_scan_args(argc, argv, "03:", NULL, NULL, NULL, &opts);
264
+ level = argc > 0 ? aux_num2int(argv[0], 0) : 0;
265
+ sizehint = argc > 1 ? aux_num2int_u64(argv[1], 0) : 0;
266
+ dictsize = argc > 2 ? aux_num2int_u64(argv[2], 0) : 0;
330
267
 
331
268
  *p = ZSTD_getParams(level, sizehint, dictsize);
332
269
 
@@ -343,8 +280,12 @@ encparams_init(int argc, VALUE argv[], VALUE v)
343
280
  SETUP_PARAM(p->cParams.chainLog, opts, "chainlog", NUM2UINT);
344
281
  SETUP_PARAM(p->cParams.hashLog, opts, "hashlog", NUM2UINT);
345
282
  SETUP_PARAM(p->cParams.searchLog, opts, "searchlog", NUM2UINT);
346
- SETUP_PARAM(p->cParams.searchLength, opts, "searchlength", NUM2UINT);
283
+ SETUP_PARAM(p->cParams.minMatch, opts, "minmatch", NUM2UINT);
284
+ SETUP_PARAM(p->cParams.targetLength, opts, "targetlength", NUM2UINT);
347
285
  SETUP_PARAM(p->cParams.strategy, opts, "strategy", NUM2UINT);
286
+ SETUP_PARAM(p->fParams.contentSizeFlag, opts, "contentsize", RTEST);
287
+ SETUP_PARAM(p->fParams.checksumFlag, opts, "checksum", RTEST);
288
+ SETUP_PARAM(p->fParams.noDictIDFlag, opts, "nodictid", RTEST);
348
289
  #undef SETUP_PARAM
349
290
  }
350
291
 
@@ -352,10 +293,10 @@ encparams_init(int argc, VALUE argv[], VALUE v)
352
293
  }
353
294
 
354
295
  static VALUE
355
- encparams_init_copy(VALUE params, VALUE src)
296
+ params_init_copy(VALUE params, VALUE src)
356
297
  {
357
- ZSTD_parameters *a = getencparams(params);
358
- ZSTD_parameters *b = getencparams(src);
298
+ ZSTD_parameters *a = getparams(params);
299
+ ZSTD_parameters *b = getparams(src);
359
300
  rb_check_frozen(params);
360
301
  rb_obj_infect(params, src);
361
302
  memcpy(a, b, sizeof(*a));
@@ -363,9 +304,9 @@ encparams_init_copy(VALUE params, VALUE src)
363
304
  }
364
305
 
365
306
  //static VALUE
366
- //encparams_validate(VALUE v)
307
+ //params_validate(VALUE v)
367
308
  //{
368
- // ZSTD_validateParams(getencparams(v));
309
+ // ZSTD_validateParams(getparams(v));
369
310
  // return v;
370
311
  //}
371
312
 
@@ -373,28 +314,29 @@ encparams_init_copy(VALUE params, VALUE src)
373
314
  static VALUE \
374
315
  GETTER(VALUE v) \
375
316
  { \
376
- return UINT2NUM(getencparams(v)->cParams.FIELD); \
317
+ return UINT2NUM(getparams(v)->cParams.FIELD); \
377
318
  } \
378
319
  \
379
320
  static VALUE \
380
321
  SETTER(VALUE v, VALUE n) \
381
322
  { \
382
- getencparams(v)->cParams.FIELD = NUM2UINT(n); \
323
+ getparams(v)->cParams.FIELD = NUM2UINT(n); \
383
324
  return n; \
384
325
  } \
385
326
 
386
- //IMP_PARAMS(encparams_srcsize, encparams_set_srcsize, srcSize);
387
- IMP_PARAMS(encparams_windowlog, encparams_set_windowlog, windowLog);
388
- IMP_PARAMS(encparams_chainlog, encparams_set_chainlog, chainLog);
389
- IMP_PARAMS(encparams_hashlog, encparams_set_hashlog, hashLog);
390
- IMP_PARAMS(encparams_searchlog, encparams_set_searchlog, searchLog);
391
- IMP_PARAMS(encparams_searchlength, encparams_set_searchlength, searchLength);
392
- IMP_PARAMS(encparams_strategy, encparams_set_strategy, strategy);
327
+ //IMP_PARAMS(params_srcsize, params_set_srcsize, srcSize);
328
+ IMP_PARAMS(params_windowlog, params_set_windowlog, windowLog);
329
+ IMP_PARAMS(params_chainlog, params_set_chainlog, chainLog);
330
+ IMP_PARAMS(params_hashlog, params_set_hashlog, hashLog);
331
+ IMP_PARAMS(params_searchlog, params_set_searchlog, searchLog);
332
+ IMP_PARAMS(params_minmatch, params_set_minmatch, minMatch);
333
+ IMP_PARAMS(params_targetlength, params_set_targetlength, targetLength);
334
+ IMP_PARAMS(params_strategy, params_set_strategy, strategy);
393
335
 
394
336
  #undef IMP_PARAMS
395
337
 
396
338
  static VALUE
397
- encparams_s_get_preset(int argc, VALUE argv[], VALUE mod)
339
+ params_s_get_preset(int argc, VALUE argv[], VALUE mod)
398
340
  {
399
341
  int level;
400
342
  uint64_t sizehint;
@@ -426,72 +368,79 @@ encparams_s_get_preset(int argc, VALUE argv[], VALUE mod)
426
368
  }
427
369
 
428
370
  ZSTD_parameters *p;
429
- VALUE v = TypedData_Make_Struct(mod, ZSTD_parameters, &encparams_type, p);
371
+ VALUE v = TypedData_Make_Struct(mod, ZSTD_parameters, &params_type, p);
430
372
  *p = ZSTD_getParams(level, sizehint, dictsize);
431
373
  return v;
432
374
  }
433
375
 
434
376
  /*
435
- * Document-method: Zstd::EncodeParameters#windowlog
436
- * Document-method: Zstd::EncodeParameters#windowlog=
437
- * Document-method: Zstd::EncodeParameters#chainlog
438
- * Document-method: Zstd::EncodeParameters#chainlog=
439
- * Document-method: Zstd::EncodeParameters#hashlog
440
- * Document-method: Zstd::EncodeParameters#hashlog=
441
- * Document-method: Zstd::EncodeParameters#searchlog
442
- * Document-method: Zstd::EncodeParameters#searchlog=
443
- * Document-method: Zstd::EncodeParameters#searchlength
444
- * Document-method: Zstd::EncodeParameters#searchlength=
445
- * Document-method: Zstd::EncodeParameters#strategy
446
- * Document-method: Zstd::EncodeParameters#strategy=
377
+ * Document-method: Zstd::Parameters#windowlog
378
+ * Document-method: Zstd::Parameters#windowlog=
379
+ * Document-method: Zstd::Parameters#chainlog
380
+ * Document-method: Zstd::Parameters#chainlog=
381
+ * Document-method: Zstd::Parameters#hashlog
382
+ * Document-method: Zstd::Parameters#hashlog=
383
+ * Document-method: Zstd::Parameters#searchlog
384
+ * Document-method: Zstd::Parameters#searchlog=
385
+ * Document-method: Zstd::Parameters#minmatch
386
+ * Document-method: Zstd::Parameters#minmatch=
387
+ * Document-method: Zstd::Parameters#targetlength
388
+ * Document-method: Zstd::Parameters#targetlength=
389
+ * Document-method: Zstd::Parameters#strategy
390
+ * Document-method: Zstd::Parameters#strategy=
447
391
  *
448
392
  * Get/Set any field from/to struct ZSTD_parameters of C layer.
449
393
  */
450
394
 
451
395
  static void
452
- init_encparams(void)
396
+ init_params(void)
453
397
  {
454
- extzstd_cParams = rb_define_class_under(extzstd_mZstd, "EncodeParameters", rb_cObject);
455
- rb_define_alloc_func(extzstd_cParams, encparams_alloc);
456
- rb_define_method(extzstd_cParams, "initialize", RUBY_METHOD_FUNC(encparams_init), -1);
457
- rb_define_method(extzstd_cParams, "initialize_copy", RUBY_METHOD_FUNC(encparams_init_copy), 1);
458
- //rb_define_method(extzstd_cParams, "validate", RUBY_METHOD_FUNC(encparams_validate), 0);
459
- //rb_define_method(extzstd_cParams, "srcsize", RUBY_METHOD_FUNC(encparams_srcsize), 0);
460
- //rb_define_method(extzstd_cParams, "srcsize=", RUBY_METHOD_FUNC(encparams_set_srcsize), 1);
461
- rb_define_method(extzstd_cParams, "windowlog", RUBY_METHOD_FUNC(encparams_windowlog), 0);
462
- rb_define_method(extzstd_cParams, "windowlog=", RUBY_METHOD_FUNC(encparams_set_windowlog), 1);
463
- rb_define_method(extzstd_cParams, "chainlog", RUBY_METHOD_FUNC(encparams_chainlog), 0);
464
- rb_define_method(extzstd_cParams, "chainlog=", RUBY_METHOD_FUNC(encparams_set_chainlog), 1);
465
- rb_define_method(extzstd_cParams, "hashlog", RUBY_METHOD_FUNC(encparams_hashlog), 0);
466
- rb_define_method(extzstd_cParams, "hashlog=", RUBY_METHOD_FUNC(encparams_set_hashlog), 1);
467
- rb_define_method(extzstd_cParams, "searchlog", RUBY_METHOD_FUNC(encparams_searchlog), 0);
468
- rb_define_method(extzstd_cParams, "searchlog=", RUBY_METHOD_FUNC(encparams_set_searchlog), 1);
469
- rb_define_method(extzstd_cParams, "searchlength", RUBY_METHOD_FUNC(encparams_searchlength), 0);
470
- rb_define_method(extzstd_cParams, "searchlength=", RUBY_METHOD_FUNC(encparams_set_searchlength), 1);
471
- rb_define_method(extzstd_cParams, "strategy", RUBY_METHOD_FUNC(encparams_strategy), 0);
472
- rb_define_method(extzstd_cParams, "strategy=", RUBY_METHOD_FUNC(encparams_set_strategy), 1);
473
-
474
- rb_define_singleton_method(extzstd_cParams, "preset", RUBY_METHOD_FUNC(encparams_s_get_preset), -1);
398
+ extzstd_cParams = rb_define_class_under(extzstd_mZstd, "Parameters", rb_cObject);
399
+ rb_define_alloc_func(extzstd_cParams, params_alloc);
400
+ rb_define_method(extzstd_cParams, "initialize", RUBY_METHOD_FUNC(params_init), -1);
401
+ rb_define_method(extzstd_cParams, "initialize_copy", RUBY_METHOD_FUNC(params_init_copy), 1);
402
+ //rb_define_method(extzstd_cParams, "validate", RUBY_METHOD_FUNC(params_validate), 0);
403
+ //rb_define_method(extzstd_cParams, "srcsize", RUBY_METHOD_FUNC(params_srcsize), 0);
404
+ //rb_define_method(extzstd_cParams, "srcsize=", RUBY_METHOD_FUNC(params_set_srcsize), 1);
405
+ rb_define_method(extzstd_cParams, "windowlog", RUBY_METHOD_FUNC(params_windowlog), 0);
406
+ rb_define_method(extzstd_cParams, "windowlog=", RUBY_METHOD_FUNC(params_set_windowlog), 1);
407
+ rb_define_method(extzstd_cParams, "chainlog", RUBY_METHOD_FUNC(params_chainlog), 0);
408
+ rb_define_method(extzstd_cParams, "chainlog=", RUBY_METHOD_FUNC(params_set_chainlog), 1);
409
+ rb_define_method(extzstd_cParams, "hashlog", RUBY_METHOD_FUNC(params_hashlog), 0);
410
+ rb_define_method(extzstd_cParams, "hashlog=", RUBY_METHOD_FUNC(params_set_hashlog), 1);
411
+ rb_define_method(extzstd_cParams, "searchlog", RUBY_METHOD_FUNC(params_searchlog), 0);
412
+ rb_define_method(extzstd_cParams, "searchlog=", RUBY_METHOD_FUNC(params_set_searchlog), 1);
413
+ rb_define_method(extzstd_cParams, "minmatch", RUBY_METHOD_FUNC(params_minmatch), 0);
414
+ rb_define_method(extzstd_cParams, "minmatch=", RUBY_METHOD_FUNC(params_set_minmatch), 1);
415
+ rb_define_method(extzstd_cParams, "targetlength", RUBY_METHOD_FUNC(params_targetlength), 0);
416
+ rb_define_method(extzstd_cParams, "targetlength=", RUBY_METHOD_FUNC(params_set_targetlength), 1);
417
+ rb_define_method(extzstd_cParams, "strategy", RUBY_METHOD_FUNC(params_strategy), 0);
418
+ rb_define_method(extzstd_cParams, "strategy=", RUBY_METHOD_FUNC(params_set_strategy), 1);
419
+
420
+ rb_define_singleton_method(extzstd_cParams, "preset", RUBY_METHOD_FUNC(params_s_get_preset), -1);
475
421
  rb_define_alias(rb_singleton_class(extzstd_cParams), "[]", "preset");
476
422
  }
477
423
 
478
424
 
479
425
  /*
480
- * zstd dictionary utilities
426
+ * module Zstd::Dictionary
481
427
  */
482
428
 
429
+ static VALUE mDictionary;
430
+
483
431
  /*
484
432
  * call-seq:
485
- * dict_train_from_buffer(src, dict_capacity) -> dictionary'd string
433
+ * train_from_buffer(src, dict_capacity) -> dictionary'd string
486
434
  */
487
435
  static VALUE
488
- ext_s_dict_train_from_buffer(VALUE mod, VALUE src, VALUE dict_capacity)
436
+ dict_s_train_from_buffer(VALUE mod, VALUE src, VALUE dict_capacity)
489
437
  {
490
438
  rb_check_type(src, RUBY_T_STRING);
491
439
  size_t capa = NUM2SIZET(dict_capacity);
492
440
  VALUE dict = rb_str_buf_new(capa);
493
441
  size_t srcsize = RSTRING_LEN(src);
494
- size_t s = ZDICT_trainFromBuffer(RSTRING_PTR(dict), capa, RSTRING_PTR(src), &srcsize, 1);
442
+ const ZDICT_legacy_params_t params = { 0 };
443
+ size_t s = ZDICT_trainFromBuffer_legacy(RSTRING_PTR(dict), capa, RSTRING_PTR(src), &srcsize, 1, params);
495
444
  extzstd_check_error(s);
496
445
  rb_str_set_len(dict, s);
497
446
  return dict;
@@ -499,14 +448,15 @@ ext_s_dict_train_from_buffer(VALUE mod, VALUE src, VALUE dict_capacity)
499
448
 
500
449
  /*
501
450
  * call-seq:
502
- * dict_add_entropy_tables_from_buffer(dict, dict_capacity, sample) -> dict
451
+ * add_entropy_tables_from_buffer(dict, dict_capacity, sample) -> dict
503
452
  */
504
453
  static VALUE
505
- ext_s_dict_add_entropy_tables_from_buffer(VALUE mod, VALUE dict, VALUE dict_capacity, VALUE sample)
454
+ dict_s_add_entropy_tables_from_buffer(VALUE mod, VALUE dict, VALUE dict_capacity, VALUE sample)
506
455
  {
507
456
  /*
508
- * size_t ZDICT_addEntropyTablesFromBuffer(void* dictBuffer, size_t dictContentSize, size_t dictBufferCapacity,
509
- * const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples);
457
+ * size_t ZDICT_addEntropyTablesFromBuffer(
458
+ * void* dictBuffer, size_t dictContentSize, size_t dictBufferCapacity,
459
+ * const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples);
510
460
  */
511
461
 
512
462
  rb_check_type(dict, RUBY_T_STRING);
@@ -514,33 +464,165 @@ ext_s_dict_add_entropy_tables_from_buffer(VALUE mod, VALUE dict, VALUE dict_capa
514
464
  size_t capa = NUM2SIZET(dict_capacity);
515
465
  aux_str_modify_expand(dict, capa);
516
466
  size_t samplesize = RSTRING_LEN(sample);
517
- size_t s = ZDICT_addEntropyTablesFromBuffer(RSTRING_PTR(dict), RSTRING_LEN(dict), capa, RSTRING_PTR(dict), &samplesize, 1);
467
+ size_t s = ZDICT_addEntropyTablesFromBuffer(RSTRING_PTR(dict), RSTRING_LEN(dict), capa, RSTRING_PTR(sample), &samplesize, 1);
518
468
  extzstd_check_error(s);
519
469
  rb_str_set_len(dict, s);
520
470
  return dict;
521
471
  }
522
472
 
473
+ static VALUE
474
+ dict_s_getid(VALUE mod, VALUE dict)
475
+ {
476
+ /*
477
+ * ZDICTLIB_API unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize);
478
+ */
479
+
480
+ rb_check_type(dict, RUBY_T_STRING);
481
+ const char *p;
482
+ size_t psize;
483
+ RSTRING_GETMEM(dict, p, psize);
484
+
485
+ size_t s = ZDICT_getDictID(p, psize);
486
+ extzstd_check_error(s);
487
+
488
+ return SIZET2NUM(s);
489
+ }
490
+
523
491
  static void
524
492
  init_dictionary(void)
525
493
  {
526
- rb_define_singleton_method(extzstd_mZstd, "dict_train_from_buffer", ext_s_dict_train_from_buffer, 2);
527
- rb_define_singleton_method(extzstd_mZstd, "dict_add_entropy_tables_from_buffer", ext_s_dict_add_entropy_tables_from_buffer, 3);
494
+ mDictionary = rb_define_module_under(extzstd_mZstd, "Dictionary");
495
+ rb_define_singleton_method(mDictionary, "train_from_buffer", dict_s_train_from_buffer, 2);
496
+ rb_define_singleton_method(mDictionary, "add_entropy_tables_from_buffer", dict_s_add_entropy_tables_from_buffer, 3);
497
+ rb_define_singleton_method(mDictionary, "getid", dict_s_getid, 1);
498
+ }
499
+
500
+ /*
501
+ * module Zstd::ContextLess
502
+ */
503
+
504
+ static VALUE mContextLess;
505
+
506
+ /*
507
+ * call-seq:
508
+ * encode(src, dest, maxdest, params)
509
+ *
510
+ * [RETURN] dest
511
+ * [src (string)]
512
+ * [dest (string)]
513
+ * [maxdest (integer or nil)]
514
+ * [params (nil, integer or Zstd::Parameters)]
515
+ */
516
+ static VALUE
517
+ less_s_encode(VALUE mod, VALUE src, VALUE dest, VALUE maxdest, VALUE predict, VALUE params)
518
+ {
519
+ const char *q;
520
+ size_t qsize;
521
+ aux_string_pointer(src, &q, &qsize);
522
+
523
+ char *r;
524
+ size_t rsize = (NIL_P(maxdest)) ? ZSTD_compressBound(qsize) : NUM2SIZET(maxdest);
525
+ aux_string_expand_pointer(dest, &r, rsize);
526
+ rb_obj_infect(dest, src);
527
+
528
+ const char *d;
529
+ size_t dsize;
530
+ aux_string_pointer_with_nil(predict, &d, &dsize);
531
+ rb_obj_infect(dest, predict);
532
+
533
+ if (extzstd_params_p(params)) {
534
+ /*
535
+ * ZSTDLIB_API size_t ZSTD_compress_advanced(
536
+ * ZSTD_CCtx* ctx,
537
+ * void* dst, size_t dstCapacity,
538
+ * const void* src, size_t srcSize,
539
+ * const void* dict,size_t dictSize,
540
+ * ZSTD_parameters params);
541
+ */
542
+ ZSTD_CCtx *zstd = ZSTD_createCCtx();
543
+ size_t s = ZSTD_compress_advanced(zstd, r, rsize, q, qsize, d, dsize, *extzstd_getparams(params));
544
+ ZSTD_freeCCtx(zstd);
545
+ extzstd_check_error(s);
546
+ rb_str_set_len(dest, s);
547
+ return dest;
548
+ } else {
549
+ /*
550
+ * ZSTDLIB_API size_t ZSTD_compress_usingDict(
551
+ * ZSTD_CCtx* ctx,
552
+ * void* dst, size_t dstCapacity,
553
+ * const void* src, size_t srcSize,
554
+ * const void* dict,size_t dictSize,
555
+ * int compressionLevel);
556
+ */
557
+ ZSTD_CCtx *zstd = ZSTD_createCCtx();
558
+ size_t s = ZSTD_compress_usingDict(zstd, r, rsize, q, qsize, d, dsize, aux_num2int(params, 0));
559
+ ZSTD_freeCCtx(zstd);
560
+ extzstd_check_error(s);
561
+ rb_str_set_len(dest, s);
562
+ return dest;
563
+ }
564
+ }
565
+
566
+ /*
567
+ * call-seq:
568
+ * decode(src, dest, maxdest)
569
+ *
570
+ * [RETURN] dest
571
+ * [src (string)]
572
+ * [dest (string)]
573
+ * [maxdest (integer or nil)]
574
+ */
575
+ static VALUE
576
+ less_s_decode(VALUE mod, VALUE src, VALUE dest, VALUE maxdest, VALUE predict)
577
+ {
578
+ const char *q;
579
+ size_t qsize;
580
+ aux_string_pointer(src, &q, &qsize);
581
+
582
+ char *r;
583
+ size_t rsize = (NIL_P(maxdest)) ? ZSTD_getDecompressedSize(q, qsize) : NUM2SIZET(maxdest);
584
+ aux_string_expand_pointer(dest, &r, rsize);
585
+ rb_obj_infect(dest, src);
586
+
587
+ const char *d;
588
+ size_t dsize;
589
+ aux_string_pointer_with_nil(predict, &d, &dsize);
590
+ rb_obj_infect(dest, predict);
591
+
592
+ ZSTD_DCtx *z = ZSTD_createDCtx();
593
+ size_t s = ZSTD_decompress_usingDict(z, r, rsize, q, qsize, d, dsize);
594
+ ZSTD_freeDCtx(z);
595
+ extzstd_check_error(s);
596
+ rb_str_set_len(dest, s);
597
+
598
+ return dest;
528
599
  }
529
600
 
601
+ static void
602
+ init_contextless(void)
603
+ {
604
+ mContextLess = rb_define_module_under(extzstd_mZstd, "ContextLess");
605
+ rb_define_singleton_method(mContextLess, "encode", less_s_encode, 5);
606
+ rb_define_singleton_method(mContextLess, "decode", less_s_decode, 4);
607
+ }
530
608
 
531
609
  /*
532
610
  * library initializer
533
611
  */
534
612
 
535
- void
613
+ RBEXT_API void
536
614
  Init_extzstd(void)
537
615
  {
616
+ id_initialize = rb_intern("initialize");
617
+ id_error_code = rb_intern("error_code");
618
+
538
619
  extzstd_mZstd = rb_define_module("Zstd");
539
620
 
540
621
  init_libver();
541
622
  init_error();
542
623
  init_constants();
543
- init_encparams();
624
+ init_params();
544
625
  init_dictionary();
545
- extzstd_init_buffered();
626
+ init_contextless();
627
+ extzstd_init_stream();
546
628
  }