extzstd 0.0.1.CONCEPT → 0.0.2.CONCEPT

Sign up to get free protection for your applications and to get access to all the features.
@@ -46,9 +46,9 @@ extern "C" {
46
46
  * Version
47
47
  **************************************/
48
48
  #define ZSTD_VERSION_MAJOR 0 /* for breaking interface changes */
49
- #define ZSTD_VERSION_MINOR 0 /* for new (non-breaking) interface capabilities */
50
- #define ZSTD_VERSION_RELEASE 1 /* for tweaks, bug-fixes, or development */
51
- #define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
49
+ #define ZSTD_VERSION_MINOR 1 /* for new (non-breaking) interface capabilities */
50
+ #define ZSTD_VERSION_RELEASE 2 /* for tweaks, bug-fixes, or development */
51
+ #define ZSTD_VERSION_NUMBER (ZSTD_VERSION_MAJOR *100*100 + ZSTD_VERSION_MINOR *100 + ZSTD_VERSION_RELEASE)
52
52
  unsigned ZSTD_versionNumber (void);
53
53
 
54
54
 
@@ -64,13 +64,13 @@ size_t ZSTD_decompress( void* dst, size_t maxOriginalSize,
64
64
  /*
65
65
  ZSTD_compress() :
66
66
  Compresses 'srcSize' bytes from buffer 'src' into buffer 'dst', of maximum size 'dstSize'.
67
- Destination buffer should be sized to handle worst cases situations (input data not compressible).
68
- Worst case size evaluation is provided by function ZSTD_compressBound().
67
+ Destination buffer must be already allocated.
68
+ Compression runs faster if maxDstSize >= ZSTD_compressBound(srcSize).
69
69
  return : the number of bytes written into buffer 'dst'
70
70
  or an error code if it fails (which can be tested using ZSTD_isError())
71
71
 
72
72
  ZSTD_decompress() :
73
- compressedSize : is obviously the source size
73
+ compressedSize : is the exact source size
74
74
  maxOriginalSize : is the size of the 'dst' buffer, which must be already allocated.
75
75
  It must be equal or larger than originalSize, otherwise decompression will fail.
76
76
  return : the number of bytes decompressed into destination buffer (originalSize)
@@ -81,22 +81,13 @@ ZSTD_decompress() :
81
81
  /**************************************
82
82
  * Tool functions
83
83
  **************************************/
84
- size_t ZSTD_compressBound(size_t srcSize); /* maximum compressed size */
84
+ size_t ZSTD_compressBound(size_t srcSize); /* maximum compressed size (worst case scenario) */
85
85
 
86
86
  /* Error Management */
87
87
  unsigned ZSTD_isError(size_t code); /* tells if a return value is an error code */
88
88
  const char* ZSTD_getErrorName(size_t code); /* provides error code string (useful for debugging) */
89
89
 
90
90
 
91
- #define CHECK_OVERFLOW(statment) \
92
- do { \
93
- if (!(statment)) { \
94
- fprintf(stderr, \
95
- "%s:%d:%s: detect buffer overflow - assert for (%s)\n", \
96
- __FILE__, __LINE__, __func__, #statment); \
97
- } \
98
- } while (0) \
99
-
100
91
  #if defined (__cplusplus)
101
92
  }
102
93
  #endif
@@ -45,30 +45,39 @@ extern "C" {
45
45
  /**************************************
46
46
  * Streaming functions
47
47
  **************************************/
48
- typedef void* ZSTD_cctx_t;
49
- ZSTD_cctx_t ZSTD_createCCtx(void);
50
- size_t ZSTD_freeCCtx(ZSTD_cctx_t cctx);
48
+ typedef struct ZSTD_Cctx_s ZSTD_Cctx;
49
+ ZSTD_Cctx* ZSTD_createCCtx(void);
50
+ size_t ZSTD_freeCCtx(ZSTD_Cctx* cctx);
51
51
 
52
- size_t ZSTD_compressBegin(ZSTD_cctx_t cctx, void* dst, size_t maxDstSize);
53
- size_t ZSTD_compressContinue(ZSTD_cctx_t cctx, void* dst, size_t maxDstSize, const void* src, size_t srcSize);
54
- size_t ZSTD_compressEnd(ZSTD_cctx_t cctx, void* dst, size_t maxDstSize);
52
+ size_t ZSTD_compressBegin(ZSTD_Cctx* cctx, void* dst, size_t maxDstSize);
53
+ size_t ZSTD_compressContinue(ZSTD_Cctx* cctx, void* dst, size_t maxDstSize, const void* src, size_t srcSize);
54
+ size_t ZSTD_compressEnd(ZSTD_Cctx* cctx, void* dst, size_t maxDstSize);
55
55
 
56
- typedef void* ZSTD_dctx_t;
57
- ZSTD_dctx_t ZSTD_createDCtx(void);
58
- size_t ZSTD_freeDCtx(ZSTD_dctx_t dctx);
59
56
 
60
- size_t ZSTD_getNextcBlockSize(ZSTD_dctx_t dctx);
61
- size_t ZSTD_decompressContinue(ZSTD_dctx_t dctx, void* dst, size_t maxDstSize, const void* src, size_t srcSize);
57
+ typedef struct ZSTD_Dctx_s ZSTD_Dctx;
58
+ ZSTD_Dctx* ZSTD_createDCtx(void);
59
+ size_t ZSTD_resetDCtx(ZSTD_Dctx* dctx);
60
+ size_t ZSTD_freeDCtx(ZSTD_Dctx* dctx);
62
61
 
62
+ size_t ZSTD_nextSrcSizeToDecompress(ZSTD_Dctx* dctx);
63
+ size_t ZSTD_decompressContinue(ZSTD_Dctx* dctx, void* dst, size_t maxDstSize, const void* src, size_t srcSize);
64
+ /*
65
+ Use above functions alternatively.
66
+ ZSTD_nextSrcSizeToDecompress() tells how much bytes to provide as input to ZSTD_decompressContinue().
67
+ This value is expected to be provided, precisely, as 'srcSize'.
68
+ Otherwise, compression will fail (result is an error code, which can be tested using ZSTD_isError() )
69
+ ZSTD_decompressContinue() result is the number of bytes regenerated within 'dst'.
70
+ It can be zero, which is not an error; it just means ZSTD_decompressContinue() has decoded some header.
71
+ */
63
72
 
64
73
  /**************************************
65
74
  * Error management
66
75
  **************************************/
67
76
  #define ZSTD_LIST_ERRORS(ITEM) \
68
77
  ITEM(ZSTD_OK_NoError) ITEM(ZSTD_ERROR_GENERIC) \
69
- ITEM(ZSTD_ERROR_wrongMagicNumber) \
70
- ITEM(ZSTD_ERROR_wrongSrcSize) ITEM(ZSTD_ERROR_maxDstSize_tooSmall) \
71
- ITEM(ZSTD_ERROR_wrongLBlockSize) \
78
+ ITEM(ZSTD_ERROR_MagicNumber) \
79
+ ITEM(ZSTD_ERROR_SrcSize) ITEM(ZSTD_ERROR_maxDstSize_tooSmall) \
80
+ ITEM(ZSTD_ERROR_corruption) \
72
81
  ITEM(ZSTD_ERROR_maxCode)
73
82
 
74
83
  #define ZSTD_GENERATE_ENUM(ENUM) ENUM,
@@ -77,4 +86,4 @@ typedef enum { ZSTD_LIST_ERRORS(ZSTD_GENERATE_ENUM) } ZSTD_errorCodes; /* expo
77
86
 
78
87
  #if defined (__cplusplus)
79
88
  }
80
- #endif
89
+ #endif
@@ -7,11 +7,16 @@ dir = File.dirname(__FILE__).gsub(/[\[\{\?\*]/, "[\\0]")
7
7
  filepattern = "{.,../contrib/zstd}/*.c"
8
8
  target = File.join(dir, filepattern)
9
9
  files = Dir.glob(target).map { |n| File.basename n }
10
+ ## reject fse.c, because it's included in zstd.c
10
11
  files.reject! { |n| "/contrib/zstd/fse.c".include?(n) }
11
12
  $srcs = files
12
13
 
13
14
  $VPATH.push "$(srcdir)/../contrib/zstd"
14
15
 
15
- find_header "zstd.h", "$(srcdir)/../contrib/zstd"
16
+ find_header "zstd.h", "$(srcdir)/../contrib/zstd" or abort 1
17
+
18
+ if RbConfig::CONFIG["arch"] =~ /mingw/
19
+ $LDFLAGS << " -static-libgcc"
20
+ end
16
21
 
17
22
  create_makefile("extzstd")
@@ -1,30 +1,53 @@
1
1
  #include "extzstd.h"
2
2
 
3
- VALUE cEncoder;
4
- ID id_op_lshift;
3
+ static ID id_op_lshift;
5
4
 
6
- struct zstdencoder
5
+ #if 0
6
+ static size_t
7
+ aux_read(VALUE io, size_t size, char *buf)
8
+ {
9
+ VALUE w = SEND(io, id_read, SIZET2NUM(size));
10
+ if (NIL_P(w)) { return 0; }
11
+ rb_check_type(w, RUBY_T_STRING);
12
+ size_t s = RSTRING_LEN(w);
13
+ if (s > size) {
14
+ rb_raise(rb_eRuntimeError,
15
+ "read size is too big - #<%s:%p> (size is %"PRIuSIZE" for %"PRIuSIZE")",
16
+ rb_obj_classname(io), (void *)io, s, size);
17
+ }
18
+ memcpy(buf, RSTRING_PTR(w), s);
19
+ return s;
20
+ }
21
+ #endif
22
+
23
+ /*
24
+ * class Zstd::Encoder
25
+ */
26
+
27
+ static VALUE cEncoder;
28
+
29
+ struct encoder
7
30
  {
8
31
  VALUE outport;
9
32
  VALUE destbuf;
10
- ZSTD_cctx_t encoder;
33
+ ZSTD_Cctx *encoder;
11
34
  };
12
35
 
13
36
  static void
14
- zstdenc_mark(void *pp)
37
+ enc_mark(void *pp)
15
38
  {
16
39
  if (pp) {
17
- struct zstdencoder *p = pp;
40
+ struct encoder *p = pp;
18
41
  rb_gc_mark(p->outport);
19
42
  rb_gc_mark(p->destbuf);
20
43
  }
21
44
  }
22
45
 
23
46
  static void
24
- zstdenc_free(void *pp)
47
+ enc_free(void *pp)
25
48
  {
26
49
  if (pp) {
27
- struct zstdencoder *p = pp;
50
+ struct encoder *p = pp;
28
51
  if (p->encoder) {
29
52
  ZSTD_freeCCtx(p->encoder);
30
53
  }
@@ -35,39 +58,39 @@ zstdenc_free(void *pp)
35
58
  }
36
59
  }
37
60
 
38
- static const rb_data_type_t zstdencoder_type = {
61
+ static const rb_data_type_t encoder_type = {
39
62
  .wrap_struct_name = "extzstd.Zstd.Encoder",
40
- .function.dmark = zstdenc_mark,
41
- .function.dfree = zstdenc_free,
42
- /* .function.dsize = zstdenc_size, */
63
+ .function.dmark = enc_mark,
64
+ .function.dfree = enc_free,
65
+ /* .function.dsize = enc_size, */
43
66
  };
44
67
 
45
68
 
46
69
  static VALUE
47
- zstdenc_alloc(VALUE klass)
70
+ enc_alloc(VALUE klass)
48
71
  {
49
- struct zstdencoder *p;
50
- VALUE v = TypedData_Make_Struct(klass, struct zstdencoder, &zstdencoder_type, p);
72
+ struct encoder *p;
73
+ VALUE v = TypedData_Make_Struct(klass, struct encoder, &encoder_type, p);
51
74
  p->outport = Qnil;
52
75
  p->destbuf = Qnil;
53
76
  p->encoder = NULL;
54
77
  return v;
55
78
  }
56
79
 
57
- static inline struct zstdencoder *
80
+ static inline struct encoder *
58
81
  getencoderp(VALUE enc)
59
82
  {
60
- return getrefp(enc, &zstdencoder_type);
83
+ return getrefp(enc, &encoder_type);
61
84
  }
62
85
 
63
- static inline struct zstdencoder *
86
+ static inline struct encoder *
64
87
  getencoder(VALUE enc)
65
88
  {
66
- return getref(enc, &zstdencoder_type);
89
+ return getref(enc, &encoder_type);
67
90
  }
68
91
 
69
92
  static inline void
70
- zstdenc_init_args(int argc, VALUE argv[], VALUE *outport)
93
+ enc_init_args(int argc, VALUE argv[], VALUE *outport)
71
94
  {
72
95
  rb_scan_args(argc, argv, "01", outport);
73
96
  if (NIL_P(*outport)) {
@@ -78,30 +101,31 @@ zstdenc_init_args(int argc, VALUE argv[], VALUE *outport)
78
101
  /*
79
102
  * call-seq:
80
103
  * initialize(outport) -> self
104
+ *
105
+ * +outport+ is required +.<<+ method for behavior as same as +IO#<<+ method.
81
106
  */
82
107
  static VALUE
83
- zstdenc_init(int argc, VALUE argv[], VALUE senc)
108
+ enc_init(int argc, VALUE argv[], VALUE enc)
84
109
  {
85
- struct zstdencoder *p = getencoder(senc);
86
- if (p->encoder) { reiniterror(senc); }
87
- zstdenc_init_args(argc, argv, &p->outport);
110
+ struct encoder *p = getencoder(enc);
111
+ if (p->encoder) { reiniterror(enc); }
112
+ enc_init_args(argc, argv, &p->outport);
88
113
  p->destbuf = rb_str_buf_new(4 * 1024); /* FIXME: ``4 * 1024`` to constant value */
89
114
  p->encoder = ZSTD_createCCtx();
90
115
  if (!p->encoder) {
91
116
  rb_raise(eError,
92
- "failed ZSTD_createCCtx()");
117
+ "failed ZSTD_createCCtx()");
93
118
  }
94
119
 
95
120
  size_t destsize = rb_str_capacity(p->destbuf);
96
- //rb_str_resize(p->destbuf, destsize); /* FIXME: rb_str_resize は縮小もするので、できれば rb_str_modify_expand をつかう */
97
121
 
98
122
  size_t s = ZSTD_compressBegin(p->encoder, RSTRING_PTR(p->destbuf), destsize);
99
123
  if (ZSTD_isError(s)) {
100
124
  rb_raise(eError,
101
- "failed ZSTD_compressBegin() - %s (%d)",
102
- ZSTD_getErrorName(s), (int)s);
125
+ "failed ZSTD_compressBegin() - %s (%d)",
126
+ ZSTD_getErrorName(s), (int)s);
103
127
  }
104
-
128
+
105
129
  if (s > destsize) {
106
130
  rb_bug("detect buffer overflow from in ZSTD_compressBegin() (destbuf.bytesize=%d, returned bytesize=%d)",
107
131
  (int)RSTRING_LEN(p->destbuf), (int)s);
@@ -110,7 +134,7 @@ zstdenc_init(int argc, VALUE argv[], VALUE senc)
110
134
  rb_str_set_len(p->destbuf, s);
111
135
  rb_funcall2(p->outport, id_op_lshift, 1, &p->destbuf);
112
136
 
113
- return senc;
137
+ return enc;
114
138
  }
115
139
 
116
140
  /*
@@ -118,10 +142,10 @@ zstdenc_init(int argc, VALUE argv[], VALUE senc)
118
142
  * write(src) -> self
119
143
  */
120
144
  static VALUE
121
- zstdenc_write(int argc, VALUE argv[], VALUE senc)
145
+ enc_write(int argc, VALUE argv[], VALUE enc)
122
146
  {
123
- struct zstdencoder *p = getencoder(senc);
124
- if (!p->encoder) { referror(senc); }
147
+ struct encoder *p = getencoder(enc);
148
+ if (!p->encoder) { referror(enc); }
125
149
 
126
150
  VALUE src;
127
151
  rb_scan_args(argc, argv, "1", &src);
@@ -131,14 +155,15 @@ zstdenc_write(int argc, VALUE argv[], VALUE senc)
131
155
  rb_str_modify(p->destbuf);
132
156
  rb_str_set_len(p->destbuf, 0);
133
157
  rb_str_modify_expand(p->destbuf, destsize);
134
-
158
+ rb_obj_infect(enc, src);
159
+ rb_obj_infect(p->destbuf, enc);
135
160
  size_t s = ZSTD_compressContinue(p->encoder, RSTRING_PTR(p->destbuf), destsize, RSTRING_PTR(src), RSTRING_LEN(src));
136
161
  if (ZSTD_isError(s)) {
137
162
  rb_raise(eError,
138
- "failed ZSTD_compressContinue() - %s (%d)",
139
- ZSTD_getErrorName(s), (int)s);
163
+ "failed ZSTD_compressContinue() - %s (%d)",
164
+ ZSTD_getErrorName(s), (int)s);
140
165
  }
141
-
166
+
142
167
  if (s > destsize) {
143
168
  rb_bug("detect buffer overflow from in ZSTD_compressContinue() (destbuf.bytesize=%d, returned bytesize=%d)",
144
169
  (int)RSTRING_LEN(p->destbuf), (int)s);
@@ -147,7 +172,7 @@ zstdenc_write(int argc, VALUE argv[], VALUE senc)
147
172
  rb_str_set_len(p->destbuf, s);
148
173
  rb_funcall2(p->outport, id_op_lshift, 1, &p->destbuf);
149
174
 
150
- return senc;
175
+ return enc;
151
176
  }
152
177
 
153
178
  /*
@@ -155,10 +180,10 @@ zstdenc_write(int argc, VALUE argv[], VALUE senc)
155
180
  * finish -> self
156
181
  */
157
182
  static VALUE
158
- zstdenc_finish(int argc, VALUE argv[], VALUE senc)
183
+ enc_finish(int argc, VALUE argv[], VALUE enc)
159
184
  {
160
- struct zstdencoder *p = getencoder(senc);
161
- if (!p->encoder) { referror(senc); }
185
+ struct encoder *p = getencoder(enc);
186
+ if (!p->encoder) { referror(enc); }
162
187
 
163
188
  rb_scan_args(argc, argv, "0");
164
189
 
@@ -170,8 +195,8 @@ zstdenc_finish(int argc, VALUE argv[], VALUE senc)
170
195
  size_t s = ZSTD_compressEnd(p->encoder, RSTRING_PTR(p->destbuf), destsize);
171
196
  if (ZSTD_isError(s)) {
172
197
  rb_raise(eError,
173
- "failed ZSTD_compressEnd() - %s (%d)",
174
- ZSTD_getErrorName(s), (int)s);
198
+ "failed ZSTD_compressEnd() - %s (%d)",
199
+ ZSTD_getErrorName(s), (int)s);
175
200
  }
176
201
 
177
202
  if (s > destsize) {
@@ -182,38 +207,192 @@ zstdenc_finish(int argc, VALUE argv[], VALUE senc)
182
207
  rb_str_set_len(p->destbuf, s);
183
208
  rb_funcall2(p->outport, id_op_lshift, 1, &p->destbuf);
184
209
 
185
- return senc;
210
+ return enc;
186
211
  }
187
212
 
188
213
  static VALUE
189
- zstdenc_getoutport(VALUE enc)
214
+ enc_getoutport(VALUE enc)
190
215
  {
191
216
  return getencoder(enc)->outport;
192
217
  }
193
218
 
194
219
  static VALUE
195
- zstdenc_setoutport(VALUE enc, VALUE outport)
220
+ enc_setoutport(VALUE enc, VALUE outport)
196
221
  {
197
222
  return getencoder(enc)->outport = outport;
198
223
  }
199
224
 
225
+ /*
226
+ * class Zstd::LowLevelDecoder
227
+ */
228
+
229
+ static VALUE cLLDecoder;
230
+
231
+ struct lldecoder
232
+ {
233
+ ZSTD_Dctx *decoder;
234
+ };
235
+
236
+ static void
237
+ lldec_mark(void *pp)
238
+ {
239
+ if (pp) {
240
+ struct lldecoder *p = pp;
241
+ }
242
+ }
243
+
244
+ static void
245
+ lldec_free(void *pp)
246
+ {
247
+ if (pp) {
248
+ struct lldecoder *p = pp;
249
+ if (p->decoder) {
250
+ ZSTD_freeDCtx(p->decoder);
251
+ }
252
+ free(p);
253
+ }
254
+ }
255
+
256
+ static const rb_data_type_t lldecoder_type = {
257
+ .wrap_struct_name = "extzstd.Zstd.LowLevelDecoder",
258
+ .function.dmark = lldec_mark,
259
+ .function.dfree = lldec_free,
260
+ /* .function.dsize = lldec_size, */
261
+ };
262
+
263
+
264
+ static VALUE
265
+ lldec_alloc(VALUE klass)
266
+ {
267
+ struct lldecoder *p;
268
+ VALUE v = TypedData_Make_Struct(klass, struct lldecoder, &lldecoder_type, p);
269
+ p->decoder = NULL;
270
+ return v;
271
+ }
272
+
273
+ static inline struct lldecoder *
274
+ getlldecoderp(VALUE v)
275
+ {
276
+ return getrefp(v, &lldecoder_type);
277
+ }
278
+
279
+ static inline struct lldecoder *
280
+ getlldecoder(VALUE v)
281
+ {
282
+ return getref(v, &lldecoder_type);
283
+ }
284
+
285
+ /*
286
+ * call-seq:
287
+ * initialize
288
+ */
289
+ static VALUE
290
+ lldec_init(int argc, VALUE argv[], VALUE dec)
291
+ {
292
+ struct lldecoder *p = getlldecoder(dec);
293
+ if (p->decoder) { reiniterror(dec); }
294
+ rb_check_arity(argc, 0, 0);
295
+ p->decoder = ZSTD_createDCtx();
296
+ if (!p->decoder) {
297
+ rb_raise(eError,
298
+ "failed ZSTD_createDCtx()");
299
+ }
300
+
301
+ ZSTD_resetDCtx(p->decoder);
302
+
303
+ return dec;
304
+ }
305
+
306
+ /*
307
+ * call-seq:
308
+ * reset -> self
309
+ */
310
+ static VALUE
311
+ lldec_reset(VALUE dec)
312
+ {
313
+ struct lldecoder *p = getlldecoder(dec);
314
+ if (!p->decoder) { referror(dec); }
315
+ size_t s = ZSTD_resetDCtx(p->decoder);
316
+ if (ZSTD_isError(s)) {
317
+ rb_raise(eError,
318
+ "failed ZSTD_resetDCtx() - %s (%d)",
319
+ ZSTD_getErrorName(s), (int)s);
320
+ }
321
+ return dec;
322
+ }
323
+
324
+ /*
325
+ * call-seq:
326
+ * next_srcsize -> next size as integer
327
+ */
328
+ static VALUE
329
+ lldec_next_srcsize(VALUE dec)
330
+ {
331
+ struct lldecoder *p = getlldecoder(dec);
332
+ if (!p->decoder) { referror(dec); }
333
+ size_t s = ZSTD_nextSrcSizeToDecompress(p->decoder);
334
+ if (ZSTD_isError(s)) {
335
+ rb_raise(eError,
336
+ "failed ZSTD_nextSrcSizeToDecompress() - %s (%d)",
337
+ ZSTD_getErrorName(s), (int)s);
338
+ }
339
+ return SIZET2NUM(s);
340
+ }
341
+
342
+ /*
343
+ * call-seq:
344
+ * decode(src, dest, maxdestsize) -> dest OR nil
345
+ */
346
+ static VALUE
347
+ lldec_decode(VALUE dec, VALUE src, VALUE dest, VALUE maxdestsize)
348
+ {
349
+ struct lldecoder *p = getlldecoder(dec);
350
+ if (!p->decoder) { referror(dec); }
351
+
352
+ rb_obj_infect(dec, src);
353
+ rb_obj_infect(dest, dec);
354
+ const char *srcp = StringValuePtr(src);
355
+ size_t srcsize = RSTRING_LEN(src);
356
+ size_t destsize = NUM2UINT(maxdestsize); /* サイズ制限のために NUM2UINT にしている */
357
+ aux_str_modify_expand(dest, destsize);
358
+ char *destp = RSTRING_PTR(dest);
359
+ size_t s = ZSTD_decompressContinue(p->decoder, destp, destsize, srcp, srcsize);
360
+ if (ZSTD_isError(s)) {
361
+ rb_raise(eError,
362
+ "failed ZSTD_decompressContinue() - %s (%d)",
363
+ ZSTD_getErrorName(s), (int)s);
364
+ }
365
+ rb_str_set_len(dest, s);
366
+ if (s == 0) {
367
+ return Qnil;
368
+ } else {
369
+ return dest;
370
+ }
371
+ }
372
+
373
+ /*
374
+ * initializer for Zstd::Encoder and Zstd::LowLevelDecoder
375
+ */
376
+
200
377
  void
201
378
  init_extzstd_stream(void)
202
379
  {
203
380
  id_op_lshift = rb_intern("<<");
204
381
 
382
+ RDOCFAKE(mZstd = rb_define_module("Zstd"));
383
+
205
384
  cEncoder = rb_define_class_under(mZstd, "Encoder", rb_cObject);
206
- rb_define_alloc_func(cEncoder, zstdenc_alloc);
207
- rb_define_method(cEncoder, "initialize", RUBY_METHOD_FUNC(zstdenc_init), -1);
208
- rb_define_method(cEncoder, "write", RUBY_METHOD_FUNC(zstdenc_write), -1);
209
- rb_define_method(cEncoder, "finish", RUBY_METHOD_FUNC(zstdenc_finish), -1);
210
- rb_define_method(cEncoder, "outport", RUBY_METHOD_FUNC(zstdenc_getoutport), 0);
211
- rb_define_method(cEncoder, "outport=", RUBY_METHOD_FUNC(zstdenc_setoutport), 1);
212
- /*
213
- cStreamDecoder = rb_define_class_under(mZstd, "StreamDecoder", rb_cObject);
214
- rb_define_alloc_func(cStreamDecoder, zstdenc_alloc);
215
- rb_define_method(cStreamDecoder, "initialize", RUBY_METHOD_FUNC(ext_sdec_init), -1);
216
- rb_define_method(cStreamDecoder, "read", RUBY_METHOD_FUNC(ext_sdec_read), -1);
217
- rb_define_method(cStreamDecoder, "finish", RUBY_METHOD_FUNC(ext_sdec_finish), -1);
218
- */
385
+ rb_define_alloc_func(cEncoder, enc_alloc);
386
+ rb_define_method(cEncoder, "initialize", RUBY_METHOD_FUNC(enc_init), -1);
387
+ rb_define_method(cEncoder, "write", RUBY_METHOD_FUNC(enc_write), -1);
388
+ rb_define_method(cEncoder, "finish", RUBY_METHOD_FUNC(enc_finish), -1);
389
+ rb_define_method(cEncoder, "outport", RUBY_METHOD_FUNC(enc_getoutport), 0);
390
+ rb_define_method(cEncoder, "outport=", RUBY_METHOD_FUNC(enc_setoutport), 1);
391
+
392
+ cLLDecoder = rb_define_class_under(mZstd, "LowLevelDecoder", rb_cObject);
393
+ rb_define_alloc_func(cLLDecoder, lldec_alloc);
394
+ rb_define_method(cLLDecoder, "initialize", RUBY_METHOD_FUNC(lldec_init), -1);
395
+ rb_define_method(cLLDecoder, "reset", RUBY_METHOD_FUNC(lldec_reset), 0);
396
+ rb_define_method(cLLDecoder, "next_srcsize", RUBY_METHOD_FUNC(lldec_next_srcsize), 0);
397
+ rb_define_method(cLLDecoder, "decode", RUBY_METHOD_FUNC(lldec_decode), 3);
219
398
  }