extzstd 0.0.3.CONCEPT-x86-mingw32 → 0.1-x86-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/HISTORY.ja +5 -0
- data/LICENSE +6 -6
- data/README.md +35 -22
- data/contrib/zstd/LICENSE +13 -9
- data/contrib/zstd/README.md +37 -44
- data/contrib/zstd/common/entropy_common.c +33 -39
- data/contrib/zstd/common/error_private.c +43 -0
- data/contrib/zstd/common/error_private.h +11 -60
- data/contrib/zstd/common/fse.h +11 -5
- data/contrib/zstd/common/fse_decompress.c +14 -16
- data/contrib/zstd/common/huf.h +1 -1
- data/contrib/zstd/common/mem.h +36 -43
- data/contrib/zstd/common/xxhash.c +31 -18
- data/contrib/zstd/common/xxhash.h +71 -35
- data/contrib/zstd/common/zbuff.h +29 -35
- data/contrib/zstd/common/zstd_common.c +24 -32
- data/contrib/zstd/common/zstd_errors.h +60 -0
- data/contrib/zstd/common/zstd_internal.h +109 -80
- data/contrib/zstd/compress/fse_compress.c +9 -6
- data/contrib/zstd/compress/huf_compress.c +30 -74
- data/contrib/zstd/compress/zbuff_compress.c +43 -51
- data/contrib/zstd/compress/zstd_compress.c +953 -763
- data/contrib/zstd/compress/zstd_opt.h +115 -261
- data/contrib/zstd/decompress/huf_decompress.c +29 -40
- data/contrib/zstd/decompress/zbuff_decompress.c +36 -78
- data/contrib/zstd/decompress/zstd_decompress.c +976 -496
- data/contrib/zstd/dictBuilder/divsufsort.h +5 -5
- data/contrib/zstd/dictBuilder/zdict.c +194 -229
- data/contrib/zstd/dictBuilder/zdict.h +66 -68
- data/contrib/zstd/legacy/zstd_legacy.h +168 -49
- data/contrib/zstd/legacy/zstd_v01.c +95 -178
- data/contrib/zstd/legacy/zstd_v01.h +12 -32
- data/contrib/zstd/legacy/zstd_v02.c +48 -274
- data/contrib/zstd/legacy/zstd_v02.h +12 -32
- data/contrib/zstd/legacy/zstd_v03.c +48 -274
- data/contrib/zstd/legacy/zstd_v03.h +12 -32
- data/contrib/zstd/legacy/zstd_v04.c +63 -320
- data/contrib/zstd/legacy/zstd_v04.h +13 -33
- data/contrib/zstd/legacy/zstd_v05.c +80 -345
- data/contrib/zstd/legacy/zstd_v05.h +9 -31
- data/contrib/zstd/legacy/zstd_v06.c +48 -458
- data/contrib/zstd/legacy/zstd_v06.h +41 -67
- data/contrib/zstd/legacy/zstd_v07.c +4544 -0
- data/contrib/zstd/legacy/zstd_v07.h +173 -0
- data/contrib/zstd/zstd.h +640 -0
- data/ext/extconf.rb +7 -3
- data/ext/extzstd.c +263 -106
- data/ext/extzstd.h +8 -6
- data/ext/extzstd_nogvls.h +0 -117
- data/ext/extzstd_stream.c +347 -0
- data/ext/zstd_common.c +8 -0
- data/ext/zstd_compress.c +6 -0
- data/ext/zstd_decompress.c +5 -0
- data/ext/zstd_dictbuilder.c +5 -0
- data/ext/zstd_legacy_v07.c +1 -0
- data/gemstub.rb +18 -16
- data/lib/2.1/extzstd.so +0 -0
- data/lib/2.2/extzstd.so +0 -0
- data/lib/2.3/extzstd.so +0 -0
- data/lib/extzstd/version.rb +1 -1
- data/lib/extzstd.rb +77 -43
- data/test/test_basic.rb +11 -6
- metadata +23 -11
- data/contrib/zstd/common/error_public.h +0 -77
- data/contrib/zstd/common/zstd.h +0 -475
- data/ext/extzstd_buffered.c +0 -265
- data/ext/zstd_amalgam.c +0 -18
- data/lib/2.0/extzstd.so +0 -0
data/ext/extzstd.c
CHANGED
@@ -1,8 +1,36 @@
|
|
1
1
|
#include "extzstd.h"
|
2
|
-
#include <mem.h>
|
3
|
-
#include <
|
2
|
+
#include <zstd/common/mem.h>
|
3
|
+
#include <zstd_errors.h>
|
4
4
|
#include <zdict.h>
|
5
5
|
|
6
|
+
static void
|
7
|
+
aux_string_pointer(VALUE str, const char **ptr, size_t *size)
|
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
|
+
}
|
33
|
+
|
6
34
|
VALUE extzstd_mZstd;
|
7
35
|
|
8
36
|
/*
|
@@ -207,22 +235,29 @@ init_constants(void)
|
|
207
235
|
VALUE mConstants = rb_define_module_under(extzstd_mZstd, "Constants");
|
208
236
|
rb_include_module(extzstd_mZstd, mConstants);
|
209
237
|
|
238
|
+
rb_define_const(mConstants, "ZSTD_MAX_COMPRESSION_LEVEL", INT2NUM(ZSTD_maxCLevel()));
|
239
|
+
rb_define_const(mConstants, "MAX_COMPRESSION_LEVEL", INT2NUM(ZSTD_maxCLevel()));
|
240
|
+
|
210
241
|
rb_define_const(mConstants, "ZSTD_FAST", INT2NUM(ZSTD_fast));
|
211
242
|
rb_define_const(mConstants, "ZSTD_DFAST", INT2NUM(ZSTD_dfast));
|
212
243
|
rb_define_const(mConstants, "ZSTD_GREEDY", INT2NUM(ZSTD_greedy));
|
213
244
|
rb_define_const(mConstants, "ZSTD_LAZY", INT2NUM(ZSTD_lazy));
|
214
245
|
rb_define_const(mConstants, "ZSTD_LAZY2", INT2NUM(ZSTD_lazy2));
|
215
246
|
rb_define_const(mConstants, "ZSTD_BTLAZY2", INT2NUM(ZSTD_btlazy2));
|
247
|
+
rb_define_const(mConstants, "ZSTD_BTOPT", INT2NUM(ZSTD_btopt));
|
216
248
|
rb_define_const(mConstants, "ZSTD_WINDOWLOG_MAX", INT2NUM(ZSTD_WINDOWLOG_MAX));
|
217
249
|
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
250
|
rb_define_const(mConstants, "ZSTD_HASHLOG_MAX", INT2NUM(ZSTD_HASHLOG_MAX));
|
221
251
|
rb_define_const(mConstants, "ZSTD_HASHLOG_MIN", INT2NUM(ZSTD_HASHLOG_MIN));
|
252
|
+
rb_define_const(mConstants, "ZSTD_CHAINLOG_MAX", INT2NUM(ZSTD_CHAINLOG_MAX));
|
253
|
+
rb_define_const(mConstants, "ZSTD_CHAINLOG_MIN", INT2NUM(ZSTD_CHAINLOG_MIN));
|
254
|
+
rb_define_const(mConstants, "ZSTD_HASHLOG3_MAX", INT2NUM(ZSTD_HASHLOG3_MAX));
|
222
255
|
rb_define_const(mConstants, "ZSTD_SEARCHLOG_MAX", INT2NUM(ZSTD_SEARCHLOG_MAX));
|
223
256
|
rb_define_const(mConstants, "ZSTD_SEARCHLOG_MIN", INT2NUM(ZSTD_SEARCHLOG_MIN));
|
224
257
|
rb_define_const(mConstants, "ZSTD_SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
|
225
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));
|
226
261
|
|
227
262
|
rb_define_const(mConstants, "FAST", INT2NUM(ZSTD_fast));
|
228
263
|
rb_define_const(mConstants, "DFAST", INT2NUM(ZSTD_dfast));
|
@@ -230,16 +265,20 @@ init_constants(void)
|
|
230
265
|
rb_define_const(mConstants, "LAZY", INT2NUM(ZSTD_lazy));
|
231
266
|
rb_define_const(mConstants, "LAZY2", INT2NUM(ZSTD_lazy2));
|
232
267
|
rb_define_const(mConstants, "BTLAZY2", INT2NUM(ZSTD_btlazy2));
|
268
|
+
rb_define_const(mConstants, "BTOPT", INT2NUM(ZSTD_btopt));
|
233
269
|
rb_define_const(mConstants, "WINDOWLOG_MAX", INT2NUM(ZSTD_WINDOWLOG_MAX));
|
234
270
|
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
271
|
rb_define_const(mConstants, "HASHLOG_MAX", INT2NUM(ZSTD_HASHLOG_MAX));
|
238
272
|
rb_define_const(mConstants, "HASHLOG_MIN", INT2NUM(ZSTD_HASHLOG_MIN));
|
273
|
+
rb_define_const(mConstants, "CHAINLOG_MAX", INT2NUM(ZSTD_CHAINLOG_MAX));
|
274
|
+
rb_define_const(mConstants, "CHAINLOG_MIN", INT2NUM(ZSTD_CHAINLOG_MIN));
|
275
|
+
rb_define_const(mConstants, "HASHLOG3_MAX", INT2NUM(ZSTD_HASHLOG3_MAX));
|
239
276
|
rb_define_const(mConstants, "SEARCHLOG_MAX", INT2NUM(ZSTD_SEARCHLOG_MAX));
|
240
277
|
rb_define_const(mConstants, "SEARCHLOG_MIN", INT2NUM(ZSTD_SEARCHLOG_MIN));
|
241
278
|
rb_define_const(mConstants, "SEARCHLENGTH_MAX", INT2NUM(ZSTD_SEARCHLENGTH_MAX));
|
242
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));
|
243
282
|
}
|
244
283
|
|
245
284
|
/*
|
@@ -249,33 +288,33 @@ init_constants(void)
|
|
249
288
|
VALUE extzstd_cParams;
|
250
289
|
|
251
290
|
AUX_IMPLEMENT_CONTEXT(
|
252
|
-
ZSTD_parameters,
|
253
|
-
|
254
|
-
|
291
|
+
ZSTD_parameters, params_type, "extzstd.Parameters",
|
292
|
+
params_alloc_dummy, NULL, free, NULL,
|
293
|
+
getparamsp, getparams, params_p);
|
255
294
|
|
256
295
|
ZSTD_parameters *
|
257
|
-
|
296
|
+
extzstd_getparams(VALUE v)
|
258
297
|
{
|
259
|
-
return
|
298
|
+
return getparams(v);
|
260
299
|
}
|
261
300
|
|
262
301
|
int
|
263
|
-
|
302
|
+
extzstd_params_p(VALUE v)
|
264
303
|
{
|
265
|
-
return
|
304
|
+
return params_p(v);
|
266
305
|
}
|
267
306
|
|
268
307
|
static VALUE
|
269
|
-
|
308
|
+
params_alloc(VALUE mod)
|
270
309
|
{
|
271
310
|
ZSTD_parameters *p;
|
272
|
-
return TypedData_Make_Struct(mod, ZSTD_parameters, &
|
311
|
+
return TypedData_Make_Struct(mod, ZSTD_parameters, ¶ms_type, p);
|
273
312
|
}
|
274
313
|
|
275
314
|
VALUE
|
276
315
|
extzstd_params_alloc(ZSTD_parameters **p)
|
277
316
|
{
|
278
|
-
return TypedData_Make_Struct(extzstd_cParams, ZSTD_parameters, &
|
317
|
+
return TypedData_Make_Struct(extzstd_cParams, ZSTD_parameters, ¶ms_type, *p);
|
279
318
|
}
|
280
319
|
|
281
320
|
/*
|
@@ -291,42 +330,22 @@ extzstd_params_alloc(ZSTD_parameters **p)
|
|
291
330
|
* [opts hashlog: nil]
|
292
331
|
* [opts searchlog: nil]
|
293
332
|
* [opts searchlength: nil]
|
333
|
+
* [opts targetlength: nil]
|
294
334
|
* [opts strategy: nil]
|
295
335
|
*/
|
296
336
|
static VALUE
|
297
|
-
|
337
|
+
params_init(int argc, VALUE argv[], VALUE v)
|
298
338
|
{
|
299
|
-
ZSTD_parameters *p =
|
339
|
+
ZSTD_parameters *p = getparams(v);
|
300
340
|
uint64_t sizehint;
|
301
341
|
size_t dictsize;
|
302
342
|
int level;
|
303
343
|
VALUE opts = Qnil;
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
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
|
-
}
|
344
|
+
|
345
|
+
argc = rb_scan_args(argc, argv, "03:", NULL, NULL, NULL, &opts);
|
346
|
+
level = argc > 0 ? aux_num2int(argv[0], 0) : 0;
|
347
|
+
sizehint = argc > 1 ? aux_num2int_u64(argv[1], 0) : 0;
|
348
|
+
dictsize = argc > 2 ? aux_num2int_u64(argv[2], 0) : 0;
|
330
349
|
|
331
350
|
*p = ZSTD_getParams(level, sizehint, dictsize);
|
332
351
|
|
@@ -344,6 +363,7 @@ encparams_init(int argc, VALUE argv[], VALUE v)
|
|
344
363
|
SETUP_PARAM(p->cParams.hashLog, opts, "hashlog", NUM2UINT);
|
345
364
|
SETUP_PARAM(p->cParams.searchLog, opts, "searchlog", NUM2UINT);
|
346
365
|
SETUP_PARAM(p->cParams.searchLength, opts, "searchlength", NUM2UINT);
|
366
|
+
SETUP_PARAM(p->cParams.targetLength, opts, "targetlength", NUM2UINT);
|
347
367
|
SETUP_PARAM(p->cParams.strategy, opts, "strategy", NUM2UINT);
|
348
368
|
#undef SETUP_PARAM
|
349
369
|
}
|
@@ -352,10 +372,10 @@ encparams_init(int argc, VALUE argv[], VALUE v)
|
|
352
372
|
}
|
353
373
|
|
354
374
|
static VALUE
|
355
|
-
|
375
|
+
params_init_copy(VALUE params, VALUE src)
|
356
376
|
{
|
357
|
-
ZSTD_parameters *a =
|
358
|
-
ZSTD_parameters *b =
|
377
|
+
ZSTD_parameters *a = getparams(params);
|
378
|
+
ZSTD_parameters *b = getparams(src);
|
359
379
|
rb_check_frozen(params);
|
360
380
|
rb_obj_infect(params, src);
|
361
381
|
memcpy(a, b, sizeof(*a));
|
@@ -363,9 +383,9 @@ encparams_init_copy(VALUE params, VALUE src)
|
|
363
383
|
}
|
364
384
|
|
365
385
|
//static VALUE
|
366
|
-
//
|
386
|
+
//params_validate(VALUE v)
|
367
387
|
//{
|
368
|
-
// ZSTD_validateParams(
|
388
|
+
// ZSTD_validateParams(getparams(v));
|
369
389
|
// return v;
|
370
390
|
//}
|
371
391
|
|
@@ -373,28 +393,29 @@ encparams_init_copy(VALUE params, VALUE src)
|
|
373
393
|
static VALUE \
|
374
394
|
GETTER(VALUE v) \
|
375
395
|
{ \
|
376
|
-
return UINT2NUM(
|
396
|
+
return UINT2NUM(getparams(v)->cParams.FIELD); \
|
377
397
|
} \
|
378
398
|
\
|
379
399
|
static VALUE \
|
380
400
|
SETTER(VALUE v, VALUE n) \
|
381
401
|
{ \
|
382
|
-
|
402
|
+
getparams(v)->cParams.FIELD = NUM2UINT(n); \
|
383
403
|
return n; \
|
384
404
|
} \
|
385
405
|
|
386
|
-
//IMP_PARAMS(
|
387
|
-
IMP_PARAMS(
|
388
|
-
IMP_PARAMS(
|
389
|
-
IMP_PARAMS(
|
390
|
-
IMP_PARAMS(
|
391
|
-
IMP_PARAMS(
|
392
|
-
IMP_PARAMS(
|
406
|
+
//IMP_PARAMS(params_srcsize, params_set_srcsize, srcSize);
|
407
|
+
IMP_PARAMS(params_windowlog, params_set_windowlog, windowLog);
|
408
|
+
IMP_PARAMS(params_chainlog, params_set_chainlog, chainLog);
|
409
|
+
IMP_PARAMS(params_hashlog, params_set_hashlog, hashLog);
|
410
|
+
IMP_PARAMS(params_searchlog, params_set_searchlog, searchLog);
|
411
|
+
IMP_PARAMS(params_searchlength, params_set_searchlength, searchLength);
|
412
|
+
IMP_PARAMS(params_targetlength, params_set_targetlength, targetLength);
|
413
|
+
IMP_PARAMS(params_strategy, params_set_strategy, strategy);
|
393
414
|
|
394
415
|
#undef IMP_PARAMS
|
395
416
|
|
396
417
|
static VALUE
|
397
|
-
|
418
|
+
params_s_get_preset(int argc, VALUE argv[], VALUE mod)
|
398
419
|
{
|
399
420
|
int level;
|
400
421
|
uint64_t sizehint;
|
@@ -426,66 +447,72 @@ encparams_s_get_preset(int argc, VALUE argv[], VALUE mod)
|
|
426
447
|
}
|
427
448
|
|
428
449
|
ZSTD_parameters *p;
|
429
|
-
VALUE v = TypedData_Make_Struct(mod, ZSTD_parameters, &
|
450
|
+
VALUE v = TypedData_Make_Struct(mod, ZSTD_parameters, ¶ms_type, p);
|
430
451
|
*p = ZSTD_getParams(level, sizehint, dictsize);
|
431
452
|
return v;
|
432
453
|
}
|
433
454
|
|
434
455
|
/*
|
435
|
-
* Document-method: Zstd::
|
436
|
-
* Document-method: Zstd::
|
437
|
-
* Document-method: Zstd::
|
438
|
-
* Document-method: Zstd::
|
439
|
-
* Document-method: Zstd::
|
440
|
-
* Document-method: Zstd::
|
441
|
-
* Document-method: Zstd::
|
442
|
-
* Document-method: Zstd::
|
443
|
-
* Document-method: Zstd::
|
444
|
-
* Document-method: Zstd::
|
445
|
-
* Document-method: Zstd::
|
446
|
-
* Document-method: Zstd::
|
456
|
+
* Document-method: Zstd::Parameters#windowlog
|
457
|
+
* Document-method: Zstd::Parameters#windowlog=
|
458
|
+
* Document-method: Zstd::Parameters#chainlog
|
459
|
+
* Document-method: Zstd::Parameters#chainlog=
|
460
|
+
* Document-method: Zstd::Parameters#hashlog
|
461
|
+
* Document-method: Zstd::Parameters#hashlog=
|
462
|
+
* Document-method: Zstd::Parameters#searchlog
|
463
|
+
* Document-method: Zstd::Parameters#searchlog=
|
464
|
+
* Document-method: Zstd::Parameters#searchlength
|
465
|
+
* Document-method: Zstd::Parameters#searchlength=
|
466
|
+
* Document-method: Zstd::Parameters#targetlength
|
467
|
+
* Document-method: Zstd::Parameters#targetlength=
|
468
|
+
* Document-method: Zstd::Parameters#strategy
|
469
|
+
* Document-method: Zstd::Parameters#strategy=
|
447
470
|
*
|
448
471
|
* Get/Set any field from/to struct ZSTD_parameters of C layer.
|
449
472
|
*/
|
450
473
|
|
451
474
|
static void
|
452
|
-
|
475
|
+
init_params(void)
|
453
476
|
{
|
454
|
-
extzstd_cParams = rb_define_class_under(extzstd_mZstd, "
|
455
|
-
rb_define_alloc_func(extzstd_cParams,
|
456
|
-
rb_define_method(extzstd_cParams, "initialize", RUBY_METHOD_FUNC(
|
457
|
-
rb_define_method(extzstd_cParams, "initialize_copy", RUBY_METHOD_FUNC(
|
458
|
-
//rb_define_method(extzstd_cParams, "validate", RUBY_METHOD_FUNC(
|
459
|
-
//rb_define_method(extzstd_cParams, "srcsize", RUBY_METHOD_FUNC(
|
460
|
-
//rb_define_method(extzstd_cParams, "srcsize=", RUBY_METHOD_FUNC(
|
461
|
-
rb_define_method(extzstd_cParams, "windowlog", RUBY_METHOD_FUNC(
|
462
|
-
rb_define_method(extzstd_cParams, "windowlog=", RUBY_METHOD_FUNC(
|
463
|
-
rb_define_method(extzstd_cParams, "chainlog", RUBY_METHOD_FUNC(
|
464
|
-
rb_define_method(extzstd_cParams, "chainlog=", RUBY_METHOD_FUNC(
|
465
|
-
rb_define_method(extzstd_cParams, "hashlog", RUBY_METHOD_FUNC(
|
466
|
-
rb_define_method(extzstd_cParams, "hashlog=", RUBY_METHOD_FUNC(
|
467
|
-
rb_define_method(extzstd_cParams, "searchlog", RUBY_METHOD_FUNC(
|
468
|
-
rb_define_method(extzstd_cParams, "searchlog=", RUBY_METHOD_FUNC(
|
469
|
-
rb_define_method(extzstd_cParams, "searchlength", RUBY_METHOD_FUNC(
|
470
|
-
rb_define_method(extzstd_cParams, "searchlength=", RUBY_METHOD_FUNC(
|
471
|
-
rb_define_method(extzstd_cParams, "
|
472
|
-
rb_define_method(extzstd_cParams, "
|
473
|
-
|
474
|
-
|
477
|
+
extzstd_cParams = rb_define_class_under(extzstd_mZstd, "Parameters", rb_cObject);
|
478
|
+
rb_define_alloc_func(extzstd_cParams, params_alloc);
|
479
|
+
rb_define_method(extzstd_cParams, "initialize", RUBY_METHOD_FUNC(params_init), -1);
|
480
|
+
rb_define_method(extzstd_cParams, "initialize_copy", RUBY_METHOD_FUNC(params_init_copy), 1);
|
481
|
+
//rb_define_method(extzstd_cParams, "validate", RUBY_METHOD_FUNC(params_validate), 0);
|
482
|
+
//rb_define_method(extzstd_cParams, "srcsize", RUBY_METHOD_FUNC(params_srcsize), 0);
|
483
|
+
//rb_define_method(extzstd_cParams, "srcsize=", RUBY_METHOD_FUNC(params_set_srcsize), 1);
|
484
|
+
rb_define_method(extzstd_cParams, "windowlog", RUBY_METHOD_FUNC(params_windowlog), 0);
|
485
|
+
rb_define_method(extzstd_cParams, "windowlog=", RUBY_METHOD_FUNC(params_set_windowlog), 1);
|
486
|
+
rb_define_method(extzstd_cParams, "chainlog", RUBY_METHOD_FUNC(params_chainlog), 0);
|
487
|
+
rb_define_method(extzstd_cParams, "chainlog=", RUBY_METHOD_FUNC(params_set_chainlog), 1);
|
488
|
+
rb_define_method(extzstd_cParams, "hashlog", RUBY_METHOD_FUNC(params_hashlog), 0);
|
489
|
+
rb_define_method(extzstd_cParams, "hashlog=", RUBY_METHOD_FUNC(params_set_hashlog), 1);
|
490
|
+
rb_define_method(extzstd_cParams, "searchlog", RUBY_METHOD_FUNC(params_searchlog), 0);
|
491
|
+
rb_define_method(extzstd_cParams, "searchlog=", RUBY_METHOD_FUNC(params_set_searchlog), 1);
|
492
|
+
rb_define_method(extzstd_cParams, "searchlength", RUBY_METHOD_FUNC(params_searchlength), 0);
|
493
|
+
rb_define_method(extzstd_cParams, "searchlength=", RUBY_METHOD_FUNC(params_set_searchlength), 1);
|
494
|
+
rb_define_method(extzstd_cParams, "targetlength", RUBY_METHOD_FUNC(params_targetlength), 0);
|
495
|
+
rb_define_method(extzstd_cParams, "targetlength=", RUBY_METHOD_FUNC(params_set_targetlength), 1);
|
496
|
+
rb_define_method(extzstd_cParams, "strategy", RUBY_METHOD_FUNC(params_strategy), 0);
|
497
|
+
rb_define_method(extzstd_cParams, "strategy=", RUBY_METHOD_FUNC(params_set_strategy), 1);
|
498
|
+
|
499
|
+
rb_define_singleton_method(extzstd_cParams, "preset", RUBY_METHOD_FUNC(params_s_get_preset), -1);
|
475
500
|
rb_define_alias(rb_singleton_class(extzstd_cParams), "[]", "preset");
|
476
501
|
}
|
477
502
|
|
478
503
|
|
479
504
|
/*
|
480
|
-
*
|
505
|
+
* module Zstd::Dictionary
|
481
506
|
*/
|
482
507
|
|
508
|
+
static VALUE mDictionary;
|
509
|
+
|
483
510
|
/*
|
484
511
|
* call-seq:
|
485
|
-
*
|
512
|
+
* train_from_buffer(src, dict_capacity) -> dictionary'd string
|
486
513
|
*/
|
487
514
|
static VALUE
|
488
|
-
|
515
|
+
dict_s_train_from_buffer(VALUE mod, VALUE src, VALUE dict_capacity)
|
489
516
|
{
|
490
517
|
rb_check_type(src, RUBY_T_STRING);
|
491
518
|
size_t capa = NUM2SIZET(dict_capacity);
|
@@ -499,14 +526,15 @@ ext_s_dict_train_from_buffer(VALUE mod, VALUE src, VALUE dict_capacity)
|
|
499
526
|
|
500
527
|
/*
|
501
528
|
* call-seq:
|
502
|
-
*
|
529
|
+
* add_entropy_tables_from_buffer(dict, dict_capacity, sample) -> dict
|
503
530
|
*/
|
504
531
|
static VALUE
|
505
|
-
|
532
|
+
dict_s_add_entropy_tables_from_buffer(VALUE mod, VALUE dict, VALUE dict_capacity, VALUE sample)
|
506
533
|
{
|
507
534
|
/*
|
508
|
-
* size_t ZDICT_addEntropyTablesFromBuffer(
|
509
|
-
*
|
535
|
+
* size_t ZDICT_addEntropyTablesFromBuffer(
|
536
|
+
* void* dictBuffer, size_t dictContentSize, size_t dictBufferCapacity,
|
537
|
+
* const void* samplesBuffer, const size_t* samplesSizes, unsigned nbSamples);
|
510
538
|
*/
|
511
539
|
|
512
540
|
rb_check_type(dict, RUBY_T_STRING);
|
@@ -514,19 +542,147 @@ ext_s_dict_add_entropy_tables_from_buffer(VALUE mod, VALUE dict, VALUE dict_capa
|
|
514
542
|
size_t capa = NUM2SIZET(dict_capacity);
|
515
543
|
aux_str_modify_expand(dict, capa);
|
516
544
|
size_t samplesize = RSTRING_LEN(sample);
|
517
|
-
size_t s = ZDICT_addEntropyTablesFromBuffer(RSTRING_PTR(dict), RSTRING_LEN(dict), capa, RSTRING_PTR(
|
545
|
+
size_t s = ZDICT_addEntropyTablesFromBuffer(RSTRING_PTR(dict), RSTRING_LEN(dict), capa, RSTRING_PTR(sample), &samplesize, 1);
|
518
546
|
extzstd_check_error(s);
|
519
547
|
rb_str_set_len(dict, s);
|
520
548
|
return dict;
|
521
549
|
}
|
522
550
|
|
551
|
+
static VALUE
|
552
|
+
dict_s_getid(VALUE mod, VALUE dict)
|
553
|
+
{
|
554
|
+
/*
|
555
|
+
* ZDICTLIB_API unsigned ZDICT_getDictID(const void* dictBuffer, size_t dictSize);
|
556
|
+
*/
|
557
|
+
|
558
|
+
rb_check_type(dict, RUBY_T_STRING);
|
559
|
+
const char *p;
|
560
|
+
size_t psize;
|
561
|
+
RSTRING_GETMEM(dict, p, psize);
|
562
|
+
|
563
|
+
size_t s = ZDICT_getDictID(p, psize);
|
564
|
+
extzstd_check_error(s);
|
565
|
+
|
566
|
+
return SIZET2NUM(s);
|
567
|
+
}
|
568
|
+
|
523
569
|
static void
|
524
570
|
init_dictionary(void)
|
525
571
|
{
|
526
|
-
|
527
|
-
rb_define_singleton_method(
|
572
|
+
mDictionary = rb_define_module_under(extzstd_mZstd, "Dictionary");
|
573
|
+
rb_define_singleton_method(mDictionary, "train_from_buffer", dict_s_train_from_buffer, 2);
|
574
|
+
rb_define_singleton_method(mDictionary, "add_entropy_tables_from_buffer", dict_s_add_entropy_tables_from_buffer, 3);
|
575
|
+
rb_define_singleton_method(mDictionary, "getid", dict_s_getid, 1);
|
576
|
+
}
|
577
|
+
|
578
|
+
/*
|
579
|
+
* module Zstd::ContextLess
|
580
|
+
*/
|
581
|
+
|
582
|
+
static VALUE mContextLess;
|
583
|
+
|
584
|
+
/*
|
585
|
+
* call-seq:
|
586
|
+
* encode(src, dest, maxdest, params)
|
587
|
+
*
|
588
|
+
* [RETURN] dest
|
589
|
+
* [src (string)]
|
590
|
+
* [dest (string)]
|
591
|
+
* [maxdest (integer or nil)]
|
592
|
+
* [params (nil, integer or Zstd::Parameters)]
|
593
|
+
*/
|
594
|
+
static VALUE
|
595
|
+
less_s_encode(VALUE mod, VALUE src, VALUE dest, VALUE maxdest, VALUE predict, VALUE params)
|
596
|
+
{
|
597
|
+
const char *q;
|
598
|
+
size_t qsize;
|
599
|
+
aux_string_pointer(src, &q, &qsize);
|
600
|
+
|
601
|
+
char *r;
|
602
|
+
size_t rsize = (NIL_P(maxdest)) ? ZSTD_compressBound(qsize) : NUM2SIZET(maxdest);
|
603
|
+
aux_string_expand_pointer(dest, &r, rsize);
|
604
|
+
rb_obj_infect(dest, src);
|
605
|
+
|
606
|
+
const char *d;
|
607
|
+
size_t dsize;
|
608
|
+
aux_string_pointer_with_nil(predict, &d, &dsize);
|
609
|
+
rb_obj_infect(dest, predict);
|
610
|
+
|
611
|
+
if (extzstd_params_p(params)) {
|
612
|
+
/*
|
613
|
+
* ZSTDLIB_API size_t ZSTD_compress_advanced(
|
614
|
+
* ZSTD_CCtx* ctx,
|
615
|
+
* void* dst, size_t dstCapacity,
|
616
|
+
* const void* src, size_t srcSize,
|
617
|
+
* const void* dict,size_t dictSize,
|
618
|
+
* ZSTD_parameters params);
|
619
|
+
*/
|
620
|
+
ZSTD_CCtx *zstd = ZSTD_createCCtx();
|
621
|
+
size_t s = ZSTD_compress_advanced(zstd, r, rsize, q, qsize, d, dsize, *extzstd_getparams(params));
|
622
|
+
ZSTD_freeCCtx(zstd);
|
623
|
+
extzstd_check_error(s);
|
624
|
+
rb_str_set_len(dest, s);
|
625
|
+
return dest;
|
626
|
+
} else {
|
627
|
+
/*
|
628
|
+
* ZSTDLIB_API size_t ZSTD_compress_usingDict(
|
629
|
+
* ZSTD_CCtx* ctx,
|
630
|
+
* void* dst, size_t dstCapacity,
|
631
|
+
* const void* src, size_t srcSize,
|
632
|
+
* const void* dict,size_t dictSize,
|
633
|
+
* int compressionLevel);
|
634
|
+
*/
|
635
|
+
ZSTD_CCtx *zstd = ZSTD_createCCtx();
|
636
|
+
size_t s = ZSTD_compress_usingDict(zstd, r, rsize, q, qsize, d, dsize, aux_num2int(params, 0));
|
637
|
+
ZSTD_freeCCtx(zstd);
|
638
|
+
extzstd_check_error(s);
|
639
|
+
rb_str_set_len(dest, s);
|
640
|
+
return dest;
|
641
|
+
}
|
642
|
+
}
|
643
|
+
|
644
|
+
/*
|
645
|
+
* call-seq:
|
646
|
+
* decode(src, dest, maxdest)
|
647
|
+
*
|
648
|
+
* [RETURN] dest
|
649
|
+
* [src (string)]
|
650
|
+
* [dest (string)]
|
651
|
+
* [maxdest (integer or nil)]
|
652
|
+
*/
|
653
|
+
static VALUE
|
654
|
+
less_s_decode(VALUE mod, VALUE src, VALUE dest, VALUE maxdest, VALUE predict)
|
655
|
+
{
|
656
|
+
const char *q;
|
657
|
+
size_t qsize;
|
658
|
+
aux_string_pointer(src, &q, &qsize);
|
659
|
+
|
660
|
+
char *r;
|
661
|
+
size_t rsize = (NIL_P(maxdest)) ? ZSTD_getDecompressedSize(q, qsize) : NUM2SIZET(maxdest);
|
662
|
+
aux_string_expand_pointer(dest, &r, rsize);
|
663
|
+
rb_obj_infect(dest, src);
|
664
|
+
|
665
|
+
const char *d;
|
666
|
+
size_t dsize;
|
667
|
+
aux_string_pointer_with_nil(predict, &d, &dsize);
|
668
|
+
rb_obj_infect(dest, predict);
|
669
|
+
|
670
|
+
ZSTD_DCtx *z = ZSTD_createDCtx();
|
671
|
+
size_t s = ZSTD_decompress_usingDict(z, r, rsize, q, qsize, d, dsize);
|
672
|
+
ZSTD_freeDCtx(z);
|
673
|
+
extzstd_check_error(s);
|
674
|
+
rb_str_set_len(dest, s);
|
675
|
+
|
676
|
+
return dest;
|
528
677
|
}
|
529
678
|
|
679
|
+
static void
|
680
|
+
init_contextless(void)
|
681
|
+
{
|
682
|
+
mContextLess = rb_define_module_under(extzstd_mZstd, "ContextLess");
|
683
|
+
rb_define_singleton_method(mContextLess, "encode", less_s_encode, 5);
|
684
|
+
rb_define_singleton_method(mContextLess, "decode", less_s_decode, 4);
|
685
|
+
}
|
530
686
|
|
531
687
|
/*
|
532
688
|
* library initializer
|
@@ -540,7 +696,8 @@ Init_extzstd(void)
|
|
540
696
|
init_libver();
|
541
697
|
init_error();
|
542
698
|
init_constants();
|
543
|
-
|
699
|
+
init_params();
|
544
700
|
init_dictionary();
|
545
|
-
|
701
|
+
init_contextless();
|
702
|
+
extzstd_init_stream();
|
546
703
|
}
|
data/ext/extzstd.h
CHANGED
@@ -2,8 +2,9 @@
|
|
2
2
|
#define EXTZSTD_H 1
|
3
3
|
|
4
4
|
#define ZSTD_LEGACY_SUPPORT 1
|
5
|
-
#define
|
6
|
-
#
|
5
|
+
#define ZDICT_STATIC_LINKING_ONLY 1
|
6
|
+
#define ZSTD_STATIC_LINKING_ONLY 1
|
7
|
+
#include <zstd.h>
|
7
8
|
#include <stdarg.h>
|
8
9
|
#include <ruby.h>
|
9
10
|
#include <ruby/thread.h>
|
@@ -23,7 +24,7 @@ extern VALUE extzstd_mZstd;
|
|
23
24
|
RDOCFAKE(extzstd_mZstd = rb_define_module("Zstd"));
|
24
25
|
|
25
26
|
extern VALUE extzstd_cParams;
|
26
|
-
RDOCFAKE(extzstd_cParams = rb_define_class_under(extzstd_mZstd, "
|
27
|
+
RDOCFAKE(extzstd_cParams = rb_define_class_under(extzstd_mZstd, "Parameters", rb_cObject));
|
27
28
|
|
28
29
|
extern VALUE extzstd_mExceptions;
|
29
30
|
extern VALUE extzstd_eError;
|
@@ -48,13 +49,14 @@ extern VALUE extzstd_eDictionaryWrongError;
|
|
48
49
|
|
49
50
|
extern void init_extzstd_stream(void);
|
50
51
|
extern void extzstd_init_buffered(void);
|
52
|
+
extern void extzstd_init_stream(void);
|
51
53
|
extern void extzstd_error(ssize_t errcode);
|
52
54
|
extern void extzstd_check_error(ssize_t errcode);
|
53
55
|
extern VALUE extzstd_make_error(ssize_t errcode);
|
54
56
|
extern VALUE extzstd_make_errorf(VALUE exc, const char *fmt, ...);
|
55
57
|
|
56
|
-
extern ZSTD_parameters *
|
57
|
-
extern int
|
58
|
+
extern ZSTD_parameters *extzstd_getparams(VALUE v);
|
59
|
+
extern int extzstd_params_p(VALUE v);
|
58
60
|
extern VALUE extzstd_params_alloc(ZSTD_parameters **p);
|
59
61
|
|
60
62
|
static inline void
|
@@ -161,7 +163,7 @@ aux_num2int_u64(VALUE v, uint64_t default_value)
|
|
161
163
|
}
|
162
164
|
|
163
165
|
static inline VALUE
|
164
|
-
aux_const_dig_str_0(VALUE obj, const char *p[], const char
|
166
|
+
aux_const_dig_str_0(VALUE obj, const char *p[], const char **pp)
|
165
167
|
{
|
166
168
|
for (; p < pp; p ++) {
|
167
169
|
obj = rb_const_get(obj, rb_intern(*p));
|