extzstd 0.0.2.CONCEPT-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 +7 -0
- data/LICENSE +24 -0
- data/README.md +59 -0
- data/Rakefile +158 -0
- data/contrib/zstd/LICENSE +26 -0
- data/contrib/zstd/Makefile +115 -0
- data/contrib/zstd/fse.c +2466 -0
- data/contrib/zstd/fse.h +320 -0
- data/contrib/zstd/fse_static.h +282 -0
- data/contrib/zstd/libzstd.pc.in +14 -0
- data/contrib/zstd/zstd.c +1768 -0
- data/contrib/zstd/zstd.h +93 -0
- data/contrib/zstd/zstd_static.h +89 -0
- data/ext/extconf.rb +22 -0
- data/ext/extzstd-stream.c +398 -0
- data/ext/extzstd.c +193 -0
- data/ext/extzstd.h +79 -0
- data/gemstub.rb +19 -0
- data/lib/2.0/extzstd.so +0 -0
- data/lib/2.1/extzstd.so +0 -0
- data/lib/2.2/extzstd.so +0 -0
- data/lib/extzstd/version.rb +3 -0
- data/lib/extzstd.rb +138 -0
- metadata +93 -0
data/ext/extzstd.c
ADDED
@@ -0,0 +1,193 @@
|
|
1
|
+
#include "extzstd.h"
|
2
|
+
|
3
|
+
VALUE mZstd;
|
4
|
+
VALUE eError;
|
5
|
+
|
6
|
+
static size_t
|
7
|
+
aux_ZSTD_compress_nogvl(va_list *vp)
|
8
|
+
{
|
9
|
+
char *dest = va_arg(*vp, char *);
|
10
|
+
size_t destsize = va_arg(*vp, size_t);
|
11
|
+
const char *src = va_arg(*vp, const char *);
|
12
|
+
size_t srcsize = va_arg(*vp, size_t);
|
13
|
+
return ZSTD_compress(dest, destsize, src, srcsize);
|
14
|
+
}
|
15
|
+
|
16
|
+
static inline size_t
|
17
|
+
aux_ZSTD_compress(char *dest, size_t destsize, const char *src, size_t srcsize)
|
18
|
+
{
|
19
|
+
return (size_t)aux_thread_call_without_gvl(
|
20
|
+
(void *(*)(void *))aux_ZSTD_compress_nogvl, NULL,
|
21
|
+
dest, destsize, src, srcsize);
|
22
|
+
}
|
23
|
+
|
24
|
+
static inline void
|
25
|
+
zstd_s_encode_args(int argc, VALUE argv[], VALUE *src, VALUE *dest, size_t *maxsize)
|
26
|
+
{
|
27
|
+
switch (argc) {
|
28
|
+
case 1:
|
29
|
+
*src = argv[0];
|
30
|
+
rb_check_type(*src, RUBY_T_STRING);
|
31
|
+
*maxsize = ZSTD_compressBound(RSTRING_LEN(*src));
|
32
|
+
*dest = rb_str_buf_new(*maxsize);
|
33
|
+
return;
|
34
|
+
case 2:
|
35
|
+
*src = argv[0];
|
36
|
+
rb_check_type(*src, RUBY_T_STRING);
|
37
|
+
*dest = argv[1];
|
38
|
+
if (rb_type_p(*dest, RUBY_T_STRING)) {
|
39
|
+
*maxsize = ZSTD_compressBound(RSTRING_LEN(*src));
|
40
|
+
rb_str_resize(*dest, *maxsize);
|
41
|
+
} else {
|
42
|
+
*maxsize = NUM2SIZET(*dest);
|
43
|
+
*dest = rb_str_buf_new(*maxsize);
|
44
|
+
}
|
45
|
+
return;
|
46
|
+
case 3:
|
47
|
+
*src = argv[0];
|
48
|
+
rb_check_type(*src, RUBY_T_STRING);
|
49
|
+
*maxsize = NUM2SIZET(argv[1]);
|
50
|
+
*dest = argv[2];
|
51
|
+
rb_check_type(*dest, RUBY_T_STRING);
|
52
|
+
rb_str_resize(*dest, *maxsize);
|
53
|
+
return;
|
54
|
+
default:
|
55
|
+
rb_error_arity(argc, 1, 3);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
|
59
|
+
/*
|
60
|
+
* call-seq:
|
61
|
+
* encode(src) -> encoded string
|
62
|
+
* encode(src, size) -> encoded string
|
63
|
+
* encode(src, dest) -> dest with encoded string
|
64
|
+
* encode(src, size, dest) -> dest with encoded string
|
65
|
+
*/
|
66
|
+
static VALUE
|
67
|
+
zstd_s_encode(int argc, VALUE argv[], VALUE mod)
|
68
|
+
{
|
69
|
+
VALUE src, dest;
|
70
|
+
size_t maxsize;
|
71
|
+
zstd_s_encode_args(argc, argv, &src, &dest, &maxsize);
|
72
|
+
const char *srcp;
|
73
|
+
size_t srcsize;
|
74
|
+
RSTRING_GETMEM(src, srcp, srcsize);
|
75
|
+
rb_obj_infect(dest, src);
|
76
|
+
size_t s = aux_ZSTD_compress(RSTRING_PTR(dest), maxsize, srcp, srcsize);
|
77
|
+
if (ZSTD_isError(s)) {
|
78
|
+
rb_raise(eError,
|
79
|
+
"failed ZSTD_compress - %s(%d) in %s:%d:%s",
|
80
|
+
ZSTD_getErrorName(s), (int)s,
|
81
|
+
__FILE__, __LINE__, __func__);
|
82
|
+
}
|
83
|
+
if (s > maxsize) {
|
84
|
+
rb_bug("%s:%d:%s: detect buffer overflow in ZSTD_compress - maxsize is %zd, but returned size is %zd",
|
85
|
+
__FILE__, __LINE__, __func__, maxsize, s);
|
86
|
+
}
|
87
|
+
rb_str_set_len(dest, s);
|
88
|
+
return dest;
|
89
|
+
}
|
90
|
+
|
91
|
+
static size_t
|
92
|
+
aux_ZSTD_decompress_nogvl(va_list *vp)
|
93
|
+
{
|
94
|
+
char *dest = va_arg(*vp, char *);
|
95
|
+
size_t destsize = va_arg(*vp, size_t);
|
96
|
+
const char *src = va_arg(*vp, const char *);
|
97
|
+
size_t srcsize = va_arg(*vp, size_t);
|
98
|
+
return ZSTD_decompress(dest, destsize, src, srcsize);
|
99
|
+
}
|
100
|
+
|
101
|
+
static inline size_t
|
102
|
+
aux_ZSTD_decompress(char *dest, size_t destsize, const char *src, size_t srcsize)
|
103
|
+
{
|
104
|
+
return (size_t)aux_thread_call_without_gvl(
|
105
|
+
(void *(*)(void *))aux_ZSTD_decompress_nogvl, NULL,
|
106
|
+
dest, destsize, src, srcsize);
|
107
|
+
}
|
108
|
+
|
109
|
+
static inline void
|
110
|
+
zstd_s_decode_args(int argc, VALUE argv[], VALUE *src, VALUE *dest, size_t *maxsize)
|
111
|
+
{
|
112
|
+
switch (argc) {
|
113
|
+
case 2:
|
114
|
+
*src = argv[0];
|
115
|
+
rb_check_type(*src, RUBY_T_STRING);
|
116
|
+
*maxsize = NUM2SIZET(argv[1]);
|
117
|
+
*dest = rb_str_buf_new(*maxsize);
|
118
|
+
return;
|
119
|
+
case 3:
|
120
|
+
*src = argv[0];
|
121
|
+
rb_check_type(*src, RUBY_T_STRING);
|
122
|
+
*maxsize = NUM2SIZET(argv[1]);
|
123
|
+
*dest = argv[2];
|
124
|
+
rb_check_type(*dest, RUBY_T_STRING);
|
125
|
+
rb_str_resize(*dest, *maxsize);
|
126
|
+
return;
|
127
|
+
default:
|
128
|
+
rb_error_arity(argc, 2, 3);
|
129
|
+
}
|
130
|
+
}
|
131
|
+
|
132
|
+
/*
|
133
|
+
* call-seq:
|
134
|
+
* decode(src, size) -> decoded string
|
135
|
+
* decode(src, size, dest) -> dest with decoded string
|
136
|
+
*/
|
137
|
+
static VALUE
|
138
|
+
zstd_s_decode(int argc, VALUE argv[], VALUE mod)
|
139
|
+
{
|
140
|
+
VALUE src, dest;
|
141
|
+
size_t maxsize;
|
142
|
+
zstd_s_decode_args(argc, argv, &src, &dest, &maxsize);
|
143
|
+
const char *srcp;
|
144
|
+
size_t srcsize;
|
145
|
+
RSTRING_GETMEM(src, srcp, srcsize);
|
146
|
+
rb_obj_infect(dest, src);
|
147
|
+
size_t s = aux_ZSTD_decompress(RSTRING_PTR(dest), maxsize, srcp, srcsize);
|
148
|
+
if (ZSTD_isError(s)) {
|
149
|
+
rb_raise(eError,
|
150
|
+
"failed ZSTD_decompress - %s(%d) in %s:%d:%s",
|
151
|
+
ZSTD_getErrorName(s), (int)s,
|
152
|
+
__FILE__, __LINE__, __func__);
|
153
|
+
}
|
154
|
+
if (s > maxsize) {
|
155
|
+
rb_bug("%s:%d:%s: detect buffer overflow in ZSTD_compress - maxsize is %zd, but returned size is %zd",
|
156
|
+
__FILE__, __LINE__, __func__, maxsize, s);
|
157
|
+
}
|
158
|
+
rb_str_set_len(dest, s);
|
159
|
+
return dest;
|
160
|
+
}
|
161
|
+
|
162
|
+
static VALUE
|
163
|
+
libver_s_to_s(VALUE ver)
|
164
|
+
{
|
165
|
+
static VALUE str;
|
166
|
+
if (!str) {
|
167
|
+
str = rb_sprintf("%d.%d.%d",
|
168
|
+
ZSTD_VERSION_MAJOR,
|
169
|
+
ZSTD_VERSION_MINOR,
|
170
|
+
ZSTD_VERSION_RELEASE);
|
171
|
+
}
|
172
|
+
return str;
|
173
|
+
}
|
174
|
+
|
175
|
+
void
|
176
|
+
Init_extzstd(void)
|
177
|
+
{
|
178
|
+
mZstd = rb_define_module("Zstd");
|
179
|
+
rb_define_singleton_method(mZstd, "encode", RUBY_METHOD_FUNC(zstd_s_encode), -1);
|
180
|
+
rb_define_singleton_method(mZstd, "decode", RUBY_METHOD_FUNC(zstd_s_decode), -1);
|
181
|
+
|
182
|
+
VALUE libver = rb_ary_new3(3,
|
183
|
+
INT2FIX(ZSTD_VERSION_MAJOR),
|
184
|
+
INT2FIX(ZSTD_VERSION_MINOR),
|
185
|
+
INT2FIX(ZSTD_VERSION_RELEASE));
|
186
|
+
rb_define_singleton_method(libver, "to_s", RUBY_METHOD_FUNC(libver_s_to_s), 0);
|
187
|
+
rb_obj_freeze(libver);
|
188
|
+
rb_define_const(mZstd, "LIBRARY_VERSION", libver);
|
189
|
+
|
190
|
+
eError = rb_define_class_under(mZstd, "Error", rb_eRuntimeError);
|
191
|
+
|
192
|
+
init_extzstd_stream();
|
193
|
+
}
|
data/ext/extzstd.h
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
#ifndef EXTZSTD_H
|
2
|
+
#define EXTZSTD_H 1
|
3
|
+
|
4
|
+
#include <stdarg.h>
|
5
|
+
#include <ruby.h>
|
6
|
+
#include <ruby/thread.h>
|
7
|
+
#include <zstd.h>
|
8
|
+
#include <zstd_static.h>
|
9
|
+
|
10
|
+
#define RDOCFAKE(DUMMY_CODE)
|
11
|
+
|
12
|
+
extern VALUE mZstd;
|
13
|
+
extern VALUE eError;
|
14
|
+
|
15
|
+
void init_extzstd_stream(void);
|
16
|
+
|
17
|
+
static inline void
|
18
|
+
referror(VALUE v)
|
19
|
+
{
|
20
|
+
rb_raise(rb_eRuntimeError,
|
21
|
+
"invalid reference - not initialized yet (#<%s:%p>)",
|
22
|
+
rb_obj_classname(v), (void *)v);
|
23
|
+
}
|
24
|
+
|
25
|
+
static inline void
|
26
|
+
reiniterror(VALUE v)
|
27
|
+
{
|
28
|
+
rb_raise(rb_eRuntimeError,
|
29
|
+
"already initialized (#<%s:%p>)",
|
30
|
+
rb_obj_classname(v), (void *)v);
|
31
|
+
}
|
32
|
+
|
33
|
+
static inline void *
|
34
|
+
checkref(VALUE v, void *p)
|
35
|
+
{
|
36
|
+
if (!p) { referror(v); }
|
37
|
+
return p;
|
38
|
+
}
|
39
|
+
|
40
|
+
static inline void *
|
41
|
+
getrefp(VALUE v, const rb_data_type_t *type)
|
42
|
+
{
|
43
|
+
void *p;
|
44
|
+
TypedData_Get_Struct(v, void, type, p);
|
45
|
+
return p;
|
46
|
+
}
|
47
|
+
|
48
|
+
static inline void *
|
49
|
+
getref(VALUE v, const rb_data_type_t *type)
|
50
|
+
{
|
51
|
+
return checkref(v, getrefp(v, type));
|
52
|
+
}
|
53
|
+
|
54
|
+
static inline VALUE
|
55
|
+
aux_str_modify_expand(VALUE s, size_t z)
|
56
|
+
{
|
57
|
+
rb_check_type(s, RUBY_T_STRING);
|
58
|
+
size_t size = RSTRING_LEN(s);
|
59
|
+
if (z > size) {
|
60
|
+
rb_str_modify_expand(s, z - size);
|
61
|
+
} else {
|
62
|
+
rb_str_modify(s);
|
63
|
+
}
|
64
|
+
return s;
|
65
|
+
}
|
66
|
+
|
67
|
+
static inline void *
|
68
|
+
aux_thread_call_without_gvl(void *(*func)(void *), void (*cancel)(void *), ...)
|
69
|
+
{
|
70
|
+
va_list va1, va2;
|
71
|
+
va_start(va1, cancel);
|
72
|
+
va_start(va2, cancel);
|
73
|
+
void *p = rb_thread_call_without_gvl(func, &va1, cancel, &va2);
|
74
|
+
va_end(va1);
|
75
|
+
va_end(va2);
|
76
|
+
return p;
|
77
|
+
}
|
78
|
+
|
79
|
+
#endif /* !EXTZSTD_H */
|
data/gemstub.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "lib/extzstd/version"
|
2
|
+
|
3
|
+
GEMSTUB = Gem::Specification.new do |s|
|
4
|
+
s.name = "extzstd"
|
5
|
+
s.version = Zstd::VERSION
|
6
|
+
s.summary = "ruby bindings for Zstandard (zstd)"
|
7
|
+
s.description = <<EOS
|
8
|
+
unoficial ruby bindings for Zstandard (zstd) <https://github.com/Cyan4973/zstd>.
|
9
|
+
EOS
|
10
|
+
s.homepage = "https://osdn.jp/projects/rutsubo/"
|
11
|
+
s.license = "2-clause BSD License"
|
12
|
+
s.author = "dearblue"
|
13
|
+
s.email = "dearblue@users.osdn.me"
|
14
|
+
|
15
|
+
s.required_ruby_version = ">= 2.0"
|
16
|
+
s.add_development_dependency "rake", "~> 10.0"
|
17
|
+
end
|
18
|
+
|
19
|
+
EXTRA.concat(FileList["contrib/**/*"])
|
data/lib/2.0/extzstd.so
ADDED
Binary file
|
data/lib/2.1/extzstd.so
ADDED
Binary file
|
data/lib/2.2/extzstd.so
ADDED
Binary file
|
data/lib/extzstd.rb
ADDED
@@ -0,0 +1,138 @@
|
|
1
|
+
#vim: set fileencoding:utf-8
|
2
|
+
|
3
|
+
ver = RbConfig::CONFIG["ruby_version"].slice(/\d+\.\d+/)
|
4
|
+
soname = File.basename(__FILE__, ".rb") << ".so"
|
5
|
+
lib = File.join(File.dirname(__FILE__), ver, soname)
|
6
|
+
if File.file?(lib)
|
7
|
+
require_relative File.join(ver, soname)
|
8
|
+
else
|
9
|
+
require_relative soname
|
10
|
+
end
|
11
|
+
|
12
|
+
require_relative "extzstd/version"
|
13
|
+
|
14
|
+
require "stringio"
|
15
|
+
|
16
|
+
if false
|
17
|
+
def p(*args)
|
18
|
+
sf = File.basename(caller(1, 1)[0])
|
19
|
+
args.each do |mesg|
|
20
|
+
$stderr.puts "#{sf}: #{mesg.inspect}\n"
|
21
|
+
end
|
22
|
+
return *args
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module Zstd
|
27
|
+
module Aux
|
28
|
+
module_function
|
29
|
+
def io_read(io, size, buf)
|
30
|
+
raise Error, "encounted EOF (read error)" unless io.read(size, buf)
|
31
|
+
raise Error, "read size too small (read error)" unless buf.bytesize == size
|
32
|
+
buf
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
class Decoder < Struct.new(:decoder, :import, :readbuf, :destbuf, :status)
|
37
|
+
BLOCKSIZE = 1 << 18
|
38
|
+
STATUS_TERMINATE = nil
|
39
|
+
STATUS_BLOCK_APPROACH = 1
|
40
|
+
STATUS_INBLOCK = 2
|
41
|
+
|
42
|
+
#
|
43
|
+
# call-seq:
|
44
|
+
# open(import) -> decoder
|
45
|
+
# open(import) { |decoder| ... } -> yield returned value
|
46
|
+
#
|
47
|
+
# [import]
|
48
|
+
# String instance or +read+ method haved Object.
|
49
|
+
#
|
50
|
+
def self.open(import)
|
51
|
+
import = StringIO.new(import) if import.kind_of?(String)
|
52
|
+
dec = new(import)
|
53
|
+
|
54
|
+
return dec unless block_given?
|
55
|
+
|
56
|
+
begin
|
57
|
+
yield(dec)
|
58
|
+
ensure
|
59
|
+
dec.close rescue nil
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def initialize(import)
|
64
|
+
raise Error, "require .read method - <%s:0x%08x>" % [import.class, import.object_id << 1] unless import.respond_to?(:read)
|
65
|
+
super(LowLevelDecoder.new, import, "".b, "".b, STATUS_BLOCK_APPROACH)
|
66
|
+
|
67
|
+
# read header
|
68
|
+
Aux.io_read(import, decoder.next_srcsize, readbuf)
|
69
|
+
decoder.decode(readbuf, "", 0)
|
70
|
+
end
|
71
|
+
|
72
|
+
def close
|
73
|
+
decoder.reset
|
74
|
+
import.close rescue nil if import.respond_to?(:close)
|
75
|
+
readbuf.clear
|
76
|
+
destbuf.clear
|
77
|
+
self.status = STATUS_TERMINATE
|
78
|
+
nil
|
79
|
+
end
|
80
|
+
|
81
|
+
def eof
|
82
|
+
!status
|
83
|
+
end
|
84
|
+
|
85
|
+
alias eof? eof
|
86
|
+
|
87
|
+
def read(size = nil, dest = "".b)
|
88
|
+
dest.clear
|
89
|
+
destenc = dest.encoding
|
90
|
+
dest.force_encoding Encoding::BINARY
|
91
|
+
|
92
|
+
until size && size <= 0
|
93
|
+
if destbuf.empty?
|
94
|
+
unless fetch
|
95
|
+
return nil if dest.empty?
|
96
|
+
break
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
d = destbuf.slice!(0, size || destbuf.bytesize)
|
101
|
+
dest << d
|
102
|
+
|
103
|
+
size -= d.bytesize if size
|
104
|
+
end
|
105
|
+
|
106
|
+
dest
|
107
|
+
ensure
|
108
|
+
dest.force_encoding destenc rescue nil if destenc
|
109
|
+
end
|
110
|
+
|
111
|
+
private
|
112
|
+
def fetch
|
113
|
+
return nil if eof?
|
114
|
+
|
115
|
+
while true
|
116
|
+
if status == STATUS_INBLOCK
|
117
|
+
s = decoder.next_srcsize
|
118
|
+
if s > 0
|
119
|
+
Aux.io_read(import, s, readbuf)
|
120
|
+
return destbuf if decoder.decode(readbuf, destbuf, BLOCKSIZE)
|
121
|
+
next
|
122
|
+
end
|
123
|
+
self.status = STATUS_BLOCK_APPROACH
|
124
|
+
end
|
125
|
+
|
126
|
+
# status == STATUS_BLOCK_APPROACH
|
127
|
+
s = decoder.next_srcsize
|
128
|
+
if s == 0
|
129
|
+
self.status = STATUS_TERMINATE
|
130
|
+
return nil
|
131
|
+
end
|
132
|
+
Aux.io_read(import, s, readbuf)
|
133
|
+
decoder.decode(readbuf, "", 0)
|
134
|
+
self.status = STATUS_INBLOCK
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: extzstd
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2.CONCEPT
|
5
|
+
platform: x86-mingw32
|
6
|
+
authors:
|
7
|
+
- dearblue
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-10-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '10.0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '10.0'
|
27
|
+
description: |
|
28
|
+
unoficial ruby bindings for Zstandard (zstd) <https://github.com/Cyan4973/zstd>.
|
29
|
+
email: dearblue@users.osdn.me
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files:
|
33
|
+
- LICENSE
|
34
|
+
- README.md
|
35
|
+
- contrib/zstd/LICENSE
|
36
|
+
- ext/extzstd-stream.c
|
37
|
+
- ext/extzstd.c
|
38
|
+
- ext/extzstd.h
|
39
|
+
- lib/extzstd.rb
|
40
|
+
- lib/extzstd/version.rb
|
41
|
+
files:
|
42
|
+
- LICENSE
|
43
|
+
- README.md
|
44
|
+
- Rakefile
|
45
|
+
- contrib/zstd/LICENSE
|
46
|
+
- contrib/zstd/Makefile
|
47
|
+
- contrib/zstd/fse.c
|
48
|
+
- contrib/zstd/fse.h
|
49
|
+
- contrib/zstd/fse_static.h
|
50
|
+
- contrib/zstd/libzstd.pc.in
|
51
|
+
- contrib/zstd/zstd.c
|
52
|
+
- contrib/zstd/zstd.h
|
53
|
+
- contrib/zstd/zstd_static.h
|
54
|
+
- ext/extconf.rb
|
55
|
+
- ext/extzstd-stream.c
|
56
|
+
- ext/extzstd.c
|
57
|
+
- ext/extzstd.h
|
58
|
+
- gemstub.rb
|
59
|
+
- lib/2.0/extzstd.so
|
60
|
+
- lib/2.1/extzstd.so
|
61
|
+
- lib/2.2/extzstd.so
|
62
|
+
- lib/extzstd.rb
|
63
|
+
- lib/extzstd/version.rb
|
64
|
+
homepage: https://osdn.jp/projects/rutsubo/
|
65
|
+
licenses:
|
66
|
+
- 2-clause BSD License
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options:
|
70
|
+
- "--charset"
|
71
|
+
- UTF-8
|
72
|
+
- "-m"
|
73
|
+
- README.md
|
74
|
+
require_paths:
|
75
|
+
- lib
|
76
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '2.0'
|
81
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
82
|
+
requirements:
|
83
|
+
- - ">"
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: 1.3.1
|
86
|
+
requirements: []
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 2.4.8
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: ruby bindings for Zstandard (zstd)
|
92
|
+
test_files: []
|
93
|
+
has_rdoc:
|