extlzham 0.0.1.PROTOTYPE2 → 0.0.1.PROTOTYPE3
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/README.md +10 -10
- data/Rakefile +12 -7
- data/contrib/lzham/README.md +1 -1
- data/ext/constants.c +15 -1
- data/ext/decoder.c +40 -42
- data/ext/encoder.c +90 -56
- data/ext/error.c +7 -7
- data/ext/extconf.rb +1 -0
- data/ext/extlzham.c +20 -20
- data/ext/extlzham.h +25 -20
- data/gemstub.rb +4 -4
- data/lib/extlzham.rb +1 -2
- data/lib/extlzham/version.rb +1 -1
- data/test/test_extlzham.rb +35 -0
- metadata +15 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d819ac9fc3dcfcf43a6667f14bbf27ba1d315d39
|
4
|
+
data.tar.gz: 1a5e007e6cbdcada07c80eb9202cd0c4af419840
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4fc46857b8a8288263283ca74d21a8876f35d3243a39a1ccba7186e5fc7ece083869451f9e35914d59903682c33cba63c58d18b28263766f4673893d2d51edb
|
7
|
+
data.tar.gz: 5e091d4bc1f3639c6bd054f4d1c0ca2a7ad6f00e14c8cf1391c915f1086e86087f6310008ea05af84105999c667b888d786a2bd3dbc7152f3b6dd36ffce6e596
|
data/README.md
CHANGED
@@ -5,16 +5,16 @@
|
|
5
5
|
This is ruby bindings for compression library
|
6
6
|
[LZHAM (https://github.com/richgel999/lzham\_codec)](https://github.com/richgel999/lzham_codec).
|
7
7
|
|
8
|
-
*
|
9
|
-
*
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*
|
13
|
-
*
|
14
|
-
*
|
15
|
-
*
|
16
|
-
*
|
17
|
-
|
8
|
+
* package name: extlzham
|
9
|
+
* author: dearblue (mailto:dearblue@users.osdn.me)
|
10
|
+
* version: 0.0.1.PROTOTYPE2
|
11
|
+
* license: 2-clause BSD License (<LICENSE.md>)
|
12
|
+
* report issue to: <https://osdn.jp/projects/rutsubo/ticket/>
|
13
|
+
* dependency ruby: ruby-2.0+
|
14
|
+
* dependency ruby gems: (none)
|
15
|
+
* dependency libraries: (none)
|
16
|
+
* bundled external libraries:
|
17
|
+
* LZHAM-1.0-stable1 <https://github.com/richgel999/lzham_codec/releases/tag/v1_0_stable1>
|
18
18
|
|
19
19
|
|
20
20
|
## HOW TO USE
|
data/Rakefile
CHANGED
@@ -2,13 +2,15 @@
|
|
2
2
|
require "rake/clean"
|
3
3
|
|
4
4
|
DOC = FileList["{README,LICENSE,CHANGELOG,Changelog,HISTORY}{,.ja}{,.txt,.rd,.rdoc,.md,.markdown}"] +
|
5
|
-
FileList["ext/**/{README,LICENSE,CHANGELOG,Changelog,HISTORY}{,.ja}{,.txt,.rd,.rdoc,.md,.markdown}"]
|
5
|
+
FileList["{contrib,ext}/**/{README,LICENSE,CHANGELOG,Changelog,HISTORY}{,.ja}{,.txt,.rd,.rdoc,.md,.markdown}"] +
|
6
|
+
FileList["ext/**/*.{c,C,cc,cxx,cpp,h,H,hh}"]
|
6
7
|
#EXT = FileList["ext/**/*.{h,hh,c,cc,cpp,cxx}"] +
|
7
8
|
# FileList["ext/externals/**/*"]
|
8
9
|
EXT = FileList["ext/**/*"]
|
9
10
|
BIN = FileList["bin/*"]
|
10
11
|
LIB = FileList["lib/**/*.rb"]
|
11
12
|
SPEC = FileList["spec/**/*"]
|
13
|
+
TEST = FileList["test/**/*"]
|
12
14
|
EXAMPLE = FileList["examples/**/*"]
|
13
15
|
GEMSTUB_SRC = "gemstub.rb"
|
14
16
|
RAKEFILE = [File.basename(__FILE__), GEMSTUB_SRC]
|
@@ -25,9 +27,12 @@ GEMSTUB.executables.sort!
|
|
25
27
|
GEMFILE = "#{GEMSTUB.name}-#{GEMSTUB.version}.gem"
|
26
28
|
GEMSPEC = "#{GEMSTUB.name}.gemspec"
|
27
29
|
|
28
|
-
GEMSTUB.files += DOC + EXT + EXTCONF + BIN + LIB + SPEC + EXAMPLE + RAKEFILE + EXTRA
|
30
|
+
GEMSTUB.files += DOC + EXT + EXTCONF + BIN + LIB + SPEC + TEST + EXAMPLE + RAKEFILE + EXTRA
|
29
31
|
GEMSTUB.files.sort!
|
30
|
-
GEMSTUB.rdoc_options
|
32
|
+
if GEMSTUB.rdoc_options.nil? || GEMSTUB.rdoc_options.empty?
|
33
|
+
readme = %W(.md .markdown .rd .rdoc .txt #{""}).map { |ext| "README#{ext}" }.find { |m| DOC.find { |n| n == m } }
|
34
|
+
GEMSTUB.rdoc_options = %w(--charset UTF-8) + (readme ? %W(-m #{readme}) : [])
|
35
|
+
end
|
31
36
|
GEMSTUB.extra_rdoc_files += DOC + LIB + EXT.reject { |n| n.include?("/externals/") || !%w(.h .hh .c .cc .cpp .cxx).include?(File.extname(n)) }
|
32
37
|
GEMSTUB.extra_rdoc_files.sort!
|
33
38
|
|
@@ -82,7 +87,7 @@ unless EXTCONF.empty?
|
|
82
87
|
desc "generate binary gemspec"
|
83
88
|
task "native-gemspec" => GEMSPEC_NATIVE
|
84
89
|
|
85
|
-
file GEMFILE_NATIVE => DOC + EXT + EXTCONF + BIN + LIB + SPEC + EXAMPLE + SOFILES + RAKEFILE + [GEMSPEC_NATIVE] do
|
90
|
+
file GEMFILE_NATIVE => DOC + EXT + EXTCONF + BIN + LIB + SPEC + TEST + EXAMPLE + SOFILES + RAKEFILE + [GEMSPEC_NATIVE] do
|
86
91
|
sh "gem build #{GEMSPEC_NATIVE}"
|
87
92
|
end
|
88
93
|
|
@@ -123,8 +128,8 @@ end
|
|
123
128
|
task :all => GEMFILE
|
124
129
|
|
125
130
|
desc "generate local rdoc"
|
126
|
-
task :rdoc => DOC +
|
127
|
-
sh *(%w(rdoc) + GEMSTUB.rdoc_options + DOC +
|
131
|
+
task :rdoc => DOC + LIB do
|
132
|
+
sh *(%w(rdoc) + GEMSTUB.rdoc_options + DOC + LIB)
|
128
133
|
end
|
129
134
|
|
130
135
|
desc "launch rspec"
|
@@ -138,7 +143,7 @@ task gem: GEMFILE
|
|
138
143
|
desc "generate gemspec"
|
139
144
|
task gemspec: GEMSPEC
|
140
145
|
|
141
|
-
file GEMFILE => DOC + EXT + EXTCONF + BIN + LIB + SPEC + EXAMPLE + RAKEFILE + [GEMSPEC] do
|
146
|
+
file GEMFILE => DOC + EXT + EXTCONF + BIN + LIB + SPEC + TEST + EXAMPLE + RAKEFILE + [GEMSPEC] do
|
142
147
|
sh "gem build #{GEMSPEC}"
|
143
148
|
end
|
144
149
|
|
data/contrib/lzham/README.md
CHANGED
@@ -83,7 +83,7 @@ written with v1.0. The only thing that could change this are critical bugfixes.<
|
|
83
83
|
|
84
84
|
<h3>Platforms/Compiler Support</h3>
|
85
85
|
|
86
|
-
LZHAM currently officially supports x86/x64 Linux, iOS, OSX, and Windows x86/x64. At one time the codec compiled and ran fine on Xbox 360 (PPC, big endian). Android support is coming next.
|
86
|
+
LZHAM currently officially supports x86/x64 Linux, iOS, OSX, FreeBSD, and Windows x86/x64. At one time the codec compiled and ran fine on Xbox 360 (PPC, big endian). Android support is coming next.
|
87
87
|
It should be easy to retarget by modifying the macros in lzham_core.h.</p>
|
88
88
|
|
89
89
|
<p>LZHAM has optional support for multithreaded compression. It supports gcc built-ins or MSVC intrinsics for atomic ops. For threading, it supports OSX
|
data/ext/constants.c
CHANGED
@@ -3,8 +3,9 @@
|
|
3
3
|
VALUE mConsts;
|
4
4
|
|
5
5
|
void
|
6
|
-
|
6
|
+
extlzham_init_constants(void)
|
7
7
|
{
|
8
|
+
RDOCFAKE(mLZHAM = rb_define_module("LZHAM"));
|
8
9
|
mConsts = rb_define_module_under(mLZHAM, "Constants");
|
9
10
|
rb_include_module(mLZHAM, mConsts);
|
10
11
|
rb_define_const(mConsts, "NO_FLUSH", INT2FIX(LZHAM_NO_FLUSH));
|
@@ -13,9 +14,15 @@ init_constants(void)
|
|
13
14
|
rb_define_const(mConsts, "FINISH", INT2FIX(LZHAM_FINISH));
|
14
15
|
rb_define_const(mConsts, "TABLE_FLUSH", INT2FIX(LZHAM_TABLE_FLUSH));
|
15
16
|
rb_define_const(mConsts, "MIN_DICT_SIZE_LOG2", INT2FIX(LZHAM_MIN_DICT_SIZE_LOG2));
|
17
|
+
rb_define_const(mConsts, "MAX_DICT_SIZE_LOG2", INT2FIX(LZHAM_MAX_DICT_SIZE_LOG2_X86));
|
16
18
|
rb_define_const(mConsts, "MAX_DICT_SIZE_LOG2_X86", INT2FIX(LZHAM_MAX_DICT_SIZE_LOG2_X86));
|
17
19
|
rb_define_const(mConsts, "MAX_DICT_SIZE_LOG2_X64", INT2FIX(LZHAM_MAX_DICT_SIZE_LOG2_X64));
|
18
20
|
rb_define_const(mConsts, "MAX_HELPER_THREADS", INT2FIX(LZHAM_MAX_HELPER_THREADS));
|
21
|
+
rb_define_const(mConsts, "COMP_LEVEL_FASTEST", INT2FIX(LZHAM_COMP_LEVEL_FASTEST));
|
22
|
+
rb_define_const(mConsts, "COMP_LEVEL_FASTER", INT2FIX(LZHAM_COMP_LEVEL_FASTER));
|
23
|
+
rb_define_const(mConsts, "COMP_LEVEL_DEFAULT", INT2FIX(LZHAM_COMP_LEVEL_DEFAULT));
|
24
|
+
rb_define_const(mConsts, "COMP_LEVEL_BETTER", INT2FIX(LZHAM_COMP_LEVEL_BETTER));
|
25
|
+
rb_define_const(mConsts, "COMP_LEVEL_UBER", INT2FIX(LZHAM_COMP_LEVEL_UBER));
|
19
26
|
rb_define_const(mConsts, "COMP_FLAG_EXTREME_PARSING", INT2FIX(LZHAM_COMP_FLAG_EXTREME_PARSING));
|
20
27
|
rb_define_const(mConsts, "COMP_FLAG_DETERMINISTIC_PARSING", INT2FIX(LZHAM_COMP_FLAG_DETERMINISTIC_PARSING));
|
21
28
|
rb_define_const(mConsts, "COMP_FLAG_TRADEOFF_DECOMPRESSION_RATE_FOR_COMP_RATIO", INT2FIX(LZHAM_COMP_FLAG_TRADEOFF_DECOMPRESSION_RATE_FOR_COMP_RATIO));
|
@@ -27,15 +34,22 @@ init_constants(void)
|
|
27
34
|
rb_define_const(mConsts, "DECOMP_FLAG_OUTPUT_UNBUFFERED", INT2FIX(LZHAM_DECOMP_FLAG_OUTPUT_UNBUFFERED));
|
28
35
|
rb_define_const(mConsts, "DECOMP_FLAG_COMPUTE_ADLER32", INT2FIX(LZHAM_DECOMP_FLAG_COMPUTE_ADLER32));
|
29
36
|
rb_define_const(mConsts, "DECOMP_FLAG_READ_ZLIB_STREAM", INT2FIX(LZHAM_DECOMP_FLAG_READ_ZLIB_STREAM));
|
37
|
+
|
30
38
|
rb_define_const(mConsts, "LZHAM_NO_FLUSH", INT2FIX(LZHAM_NO_FLUSH));
|
31
39
|
rb_define_const(mConsts, "LZHAM_SYNC_FLUSH", INT2FIX(LZHAM_SYNC_FLUSH));
|
32
40
|
rb_define_const(mConsts, "LZHAM_FULL_FLUSH", INT2FIX(LZHAM_FULL_FLUSH));
|
33
41
|
rb_define_const(mConsts, "LZHAM_FINISH", INT2FIX(LZHAM_FINISH));
|
34
42
|
rb_define_const(mConsts, "LZHAM_TABLE_FLUSH", INT2FIX(LZHAM_TABLE_FLUSH));
|
35
43
|
rb_define_const(mConsts, "LZHAM_MIN_DICT_SIZE_LOG2", INT2FIX(LZHAM_MIN_DICT_SIZE_LOG2));
|
44
|
+
rb_define_const(mConsts, "LZHAM_MAX_DICT_SIZE_LOG2", INT2FIX(LZHAM_MAX_DICT_SIZE_LOG2_X86));
|
36
45
|
rb_define_const(mConsts, "LZHAM_MAX_DICT_SIZE_LOG2_X86", INT2FIX(LZHAM_MAX_DICT_SIZE_LOG2_X86));
|
37
46
|
rb_define_const(mConsts, "LZHAM_MAX_DICT_SIZE_LOG2_X64", INT2FIX(LZHAM_MAX_DICT_SIZE_LOG2_X64));
|
38
47
|
rb_define_const(mConsts, "LZHAM_MAX_HELPER_THREADS", INT2FIX(LZHAM_MAX_HELPER_THREADS));
|
48
|
+
rb_define_const(mConsts, "LZHAM_COMP_LEVEL_FASTEST", INT2FIX(LZHAM_COMP_LEVEL_FASTEST));
|
49
|
+
rb_define_const(mConsts, "LZHAM_COMP_LEVEL_FASTER", INT2FIX(LZHAM_COMP_LEVEL_FASTER));
|
50
|
+
rb_define_const(mConsts, "LZHAM_COMP_LEVEL_DEFAULT", INT2FIX(LZHAM_COMP_LEVEL_DEFAULT));
|
51
|
+
rb_define_const(mConsts, "LZHAM_COMP_LEVEL_BETTER", INT2FIX(LZHAM_COMP_LEVEL_BETTER));
|
52
|
+
rb_define_const(mConsts, "LZHAM_COMP_LEVEL_UBER", INT2FIX(LZHAM_COMP_LEVEL_UBER));
|
39
53
|
rb_define_const(mConsts, "LZHAM_COMP_FLAG_EXTREME_PARSING", INT2FIX(LZHAM_COMP_FLAG_EXTREME_PARSING));
|
40
54
|
rb_define_const(mConsts, "LZHAM_COMP_FLAG_DETERMINISTIC_PARSING", INT2FIX(LZHAM_COMP_FLAG_DETERMINISTIC_PARSING));
|
41
55
|
rb_define_const(mConsts, "LZHAM_COMP_FLAG_TRADEOFF_DECOMPRESSION_RATE_FOR_COMP_RATIO", INT2FIX(LZHAM_COMP_FLAG_TRADEOFF_DECOMPRESSION_RATE_FOR_COMP_RATIO));
|
data/ext/decoder.c
CHANGED
@@ -21,13 +21,13 @@ aux_conv_decode_params(VALUE opts)
|
|
21
21
|
p.m_table_max_update_interval = 0;
|
22
22
|
p.m_table_update_interval_slow_rate = 0;
|
23
23
|
} else {
|
24
|
-
p.m_dict_size_log2 =
|
25
|
-
p.m_table_update_rate =
|
26
|
-
p.m_decompress_flags =
|
24
|
+
p.m_dict_size_log2 = aux_getoptu32(opts, id_dictsize, LZHAM_MIN_DICT_SIZE_LOG2);
|
25
|
+
p.m_table_update_rate = aux_getoptu32(opts, id_table_update_rate, 0);
|
26
|
+
p.m_decompress_flags = aux_getoptu32(opts, id_flags, 0);
|
27
27
|
p.m_num_seed_bytes = 0;
|
28
28
|
p.m_pSeed_bytes = NULL;
|
29
|
-
p.m_table_max_update_interval =
|
30
|
-
p.m_table_update_interval_slow_rate =
|
29
|
+
p.m_table_max_update_interval = aux_getoptu32(opts, id_table_max_update_interval, 0);
|
30
|
+
p.m_table_update_interval_slow_rate = aux_getoptu32(opts, id_table_update_interval_slow_rate, 0);
|
31
31
|
}
|
32
32
|
|
33
33
|
return p;
|
@@ -38,7 +38,7 @@ aux_conv_decode_params(VALUE opts)
|
|
38
38
|
* decode(string, max_decoded_size, opts = {}) -> decoded string
|
39
39
|
*/
|
40
40
|
static VALUE
|
41
|
-
|
41
|
+
dec_s_decode(int argc, VALUE argv[], VALUE mod)
|
42
42
|
{
|
43
43
|
VALUE src, size, opts;
|
44
44
|
rb_scan_args(argc, argv, "2:", &src, &size, &opts);
|
@@ -57,7 +57,7 @@ ext_s_decode(int argc, VALUE argv[], VALUE mod)
|
|
57
57
|
|
58
58
|
if (s != LZHAM_DECOMP_STATUS_SUCCESS) {
|
59
59
|
rb_str_resize(dest, 0);
|
60
|
-
|
60
|
+
extlzham_decode_error(s);
|
61
61
|
}
|
62
62
|
|
63
63
|
rb_str_resize(dest, destsize);
|
@@ -74,7 +74,7 @@ struct decoder
|
|
74
74
|
};
|
75
75
|
|
76
76
|
static void
|
77
|
-
|
77
|
+
dec_mark(struct decoder *p)
|
78
78
|
{
|
79
79
|
if (p) {
|
80
80
|
rb_gc_mark(p->outport);
|
@@ -83,7 +83,7 @@ ext_dec_mark(struct decoder *p)
|
|
83
83
|
}
|
84
84
|
|
85
85
|
static void
|
86
|
-
|
86
|
+
dec_free(struct decoder *p)
|
87
87
|
{
|
88
88
|
if (p) {
|
89
89
|
if (p->decoder) {
|
@@ -93,15 +93,15 @@ ext_dec_free(struct decoder *p)
|
|
93
93
|
}
|
94
94
|
|
95
95
|
static VALUE
|
96
|
-
|
96
|
+
dec_alloc(VALUE klass)
|
97
97
|
{
|
98
98
|
struct decoder *p;
|
99
|
-
VALUE obj = Data_Make_Struct(klass, struct decoder,
|
99
|
+
VALUE obj = Data_Make_Struct(klass, struct decoder, dec_mark, dec_free, p);
|
100
100
|
return obj;
|
101
101
|
}
|
102
102
|
|
103
103
|
static inline struct decoder *
|
104
|
-
|
104
|
+
getdecoderp(VALUE obj)
|
105
105
|
{
|
106
106
|
struct decoder *p;
|
107
107
|
Data_Get_Struct(obj, struct decoder, p);
|
@@ -109,9 +109,9 @@ aux_decoder_refp(VALUE obj)
|
|
109
109
|
}
|
110
110
|
|
111
111
|
static inline struct decoder *
|
112
|
-
|
112
|
+
getdecoder(VALUE obj)
|
113
113
|
{
|
114
|
-
struct decoder *p =
|
114
|
+
struct decoder *p = getdecoderp(obj);
|
115
115
|
if (!p || !p->decoder) {
|
116
116
|
rb_raise(eError,
|
117
117
|
"not initialized - #<%s:%p>",
|
@@ -125,7 +125,7 @@ aux_decoder_ref(VALUE obj)
|
|
125
125
|
* initialize(outport = nil, opts = {})
|
126
126
|
*/
|
127
127
|
static VALUE
|
128
|
-
|
128
|
+
dec_init(int argc, VALUE argv[], VALUE dec)
|
129
129
|
{
|
130
130
|
struct decoder *p = DATA_PTR(dec);
|
131
131
|
if (p->decoder) {
|
@@ -196,7 +196,7 @@ struct dec_update_args
|
|
196
196
|
static VALUE
|
197
197
|
dec_update_protected(struct dec_update_args *args)
|
198
198
|
{
|
199
|
-
struct decoder *p =
|
199
|
+
struct decoder *p = getdecoder(args->decoder);
|
200
200
|
const char *inbuf, *intail;
|
201
201
|
|
202
202
|
if (NIL_P(args->src)) {
|
@@ -217,7 +217,7 @@ dec_update_protected(struct dec_update_args *args)
|
|
217
217
|
(lzham_uint8 *)inbuf, &insize,
|
218
218
|
(lzham_uint8 *)RSTRING_PTR(p->outbuf), &outsize, args->flush);
|
219
219
|
rb_str_unlocktmp(p->outbuf);
|
220
|
-
//fprintf(stderr, "%s:%d:%s: status=%s (%d), insize=%zu, outsize=%zu\n", __FILE__, __LINE__, __func__,
|
220
|
+
//fprintf(stderr, "%s:%d:%s: status=%s (%d), insize=%zu, outsize=%zu\n", __FILE__, __LINE__, __func__, extlzham_decode_status_str(s), s, insize, outsize);
|
221
221
|
if (!NIL_P(args->src)) {
|
222
222
|
inbuf += insize;
|
223
223
|
}
|
@@ -226,11 +226,11 @@ dec_update_protected(struct dec_update_args *args)
|
|
226
226
|
s != LZHAM_DECOMP_STATUS_NEEDS_MORE_INPUT &&
|
227
227
|
s != LZHAM_DECOMP_STATUS_SUCCESS) {
|
228
228
|
|
229
|
-
|
229
|
+
extlzham_decode_error(s);
|
230
230
|
}
|
231
231
|
if (outsize > 0) {
|
232
232
|
rb_str_set_len(p->outbuf, outsize);
|
233
|
-
rb_funcall2(p->outport,
|
233
|
+
rb_funcall2(p->outport, id_op_lshift, 1, &p->outbuf);
|
234
234
|
}
|
235
235
|
} while (inbuf < intail || s == LZHAM_DECOMP_STATUS_HAS_MORE_OUTPUT);
|
236
236
|
|
@@ -238,7 +238,7 @@ dec_update_protected(struct dec_update_args *args)
|
|
238
238
|
}
|
239
239
|
|
240
240
|
static inline void
|
241
|
-
|
241
|
+
dec_update_common(VALUE dec, VALUE src, int flush)
|
242
242
|
{
|
243
243
|
struct dec_update_args args = { dec, src, flush };
|
244
244
|
if (NIL_P(src)) {
|
@@ -259,57 +259,55 @@ dec_update(VALUE dec, VALUE src, int flush)
|
|
259
259
|
* update(src, flush = false) -> self
|
260
260
|
*/
|
261
261
|
static VALUE
|
262
|
-
|
262
|
+
dec_update(int argc, VALUE argv[], VALUE dec)
|
263
263
|
{
|
264
264
|
VALUE src, flush;
|
265
265
|
rb_scan_args(argc, argv, "11", &src, &flush);
|
266
266
|
rb_check_type(src, RUBY_T_STRING);
|
267
|
-
|
267
|
+
dec_update_common(dec, src, RTEST(flush) ? 1 : 0);
|
268
268
|
return dec;
|
269
269
|
}
|
270
270
|
|
271
271
|
static VALUE
|
272
|
-
|
272
|
+
dec_finish(VALUE dec)
|
273
273
|
{
|
274
|
-
|
274
|
+
dec_update_common(dec, Qnil, 1);
|
275
275
|
return dec;
|
276
276
|
}
|
277
277
|
|
278
278
|
static VALUE
|
279
|
-
|
279
|
+
dec_op_lshift(VALUE dec, VALUE src)
|
280
280
|
{
|
281
281
|
rb_check_type(src, RUBY_T_STRING);
|
282
|
-
|
282
|
+
dec_update_common(dec, src, 0);
|
283
283
|
return dec;
|
284
284
|
}
|
285
285
|
|
286
286
|
static VALUE
|
287
|
-
|
287
|
+
dec_get_outport(VALUE dec)
|
288
288
|
{
|
289
|
-
|
290
|
-
return p->outport;
|
289
|
+
return getdecoder(dec)->outport;
|
291
290
|
}
|
292
291
|
|
293
292
|
static VALUE
|
294
|
-
|
293
|
+
dec_set_outport(VALUE dec, VALUE outport)
|
295
294
|
{
|
296
|
-
|
297
|
-
p->outport = outport;
|
298
|
-
return outport;
|
295
|
+
return getdecoder(dec)->outport = outport;
|
299
296
|
}
|
300
297
|
|
301
298
|
void
|
302
|
-
|
299
|
+
extlzham_init_decoder(void)
|
303
300
|
{
|
301
|
+
RDOCFAKE(mLZHAM = rb_define_module("LZHAM"));
|
304
302
|
cDecoder = rb_define_class_under(mLZHAM, "Decoder", rb_cObject);
|
305
303
|
rb_include_module(cDecoder, mConsts);
|
306
|
-
rb_define_alloc_func(cDecoder,
|
307
|
-
rb_define_singleton_method(cDecoder, "decode", RUBY_METHOD_FUNC(
|
308
|
-
rb_define_method(cDecoder, "initialize", RUBY_METHOD_FUNC(
|
309
|
-
rb_define_method(cDecoder, "update", RUBY_METHOD_FUNC(
|
310
|
-
rb_define_method(cDecoder, "finish", RUBY_METHOD_FUNC(
|
311
|
-
rb_define_method(cDecoder, "<<", RUBY_METHOD_FUNC(
|
312
|
-
rb_define_method(cDecoder, "outport", RUBY_METHOD_FUNC(
|
313
|
-
rb_define_method(cDecoder, "outport=", RUBY_METHOD_FUNC(
|
304
|
+
rb_define_alloc_func(cDecoder, dec_alloc);
|
305
|
+
rb_define_singleton_method(cDecoder, "decode", RUBY_METHOD_FUNC(dec_s_decode), -1);
|
306
|
+
rb_define_method(cDecoder, "initialize", RUBY_METHOD_FUNC(dec_init), -1);
|
307
|
+
rb_define_method(cDecoder, "update", RUBY_METHOD_FUNC(dec_update), -1);
|
308
|
+
rb_define_method(cDecoder, "finish", RUBY_METHOD_FUNC(dec_finish), 0);
|
309
|
+
rb_define_method(cDecoder, "<<", RUBY_METHOD_FUNC(dec_op_lshift), 1);
|
310
|
+
rb_define_method(cDecoder, "outport", RUBY_METHOD_FUNC(dec_get_outport), 0);
|
311
|
+
rb_define_method(cDecoder, "outport=", RUBY_METHOD_FUNC(dec_set_outport), 1);
|
314
312
|
|
315
313
|
}
|
data/ext/encoder.c
CHANGED
@@ -19,15 +19,15 @@ scan_encode_params(VALUE opts)
|
|
19
19
|
p.m_table_max_update_interval = 0;
|
20
20
|
p.m_table_update_interval_slow_rate = 0;
|
21
21
|
} else {
|
22
|
-
p.m_dict_size_log2 =
|
23
|
-
p.m_level =
|
24
|
-
p.m_table_update_rate =
|
25
|
-
p.m_max_helper_threads =
|
26
|
-
p.m_compress_flags =
|
22
|
+
p.m_dict_size_log2 = aux_getoptu32(opts, id_dictsize, LZHAM_MIN_DICT_SIZE_LOG2);
|
23
|
+
p.m_level = aux_getoptu32(opts, id_level, LZHAM_COMP_LEVEL_DEFAULT);
|
24
|
+
p.m_table_update_rate = aux_getoptu32(opts, id_table_update_rate, 0);
|
25
|
+
p.m_max_helper_threads = aux_getoptu32(opts, id_threads, -1);
|
26
|
+
p.m_compress_flags = aux_getoptu32(opts, id_flags, 0);
|
27
27
|
p.m_num_seed_bytes = 0;
|
28
28
|
p.m_pSeed_bytes = NULL;
|
29
|
-
p.m_table_max_update_interval =
|
30
|
-
p.m_table_update_interval_slow_rate =
|
29
|
+
p.m_table_max_update_interval = aux_getoptu32(opts, id_table_max_update_interval, 0);
|
30
|
+
p.m_table_update_interval_slow_rate = aux_getoptu32(opts, id_table_update_interval_slow_rate, 0);
|
31
31
|
}
|
32
32
|
return p;
|
33
33
|
}
|
@@ -38,16 +38,13 @@ scan_encode_args(int argc, VALUE argv[], VALUE *src, size_t *srcsize, VALUE *des
|
|
38
38
|
VALUE opts;
|
39
39
|
rb_scan_args(argc, argv, "11:", src, dest, &opts);
|
40
40
|
rb_check_type(*src, RUBY_T_STRING);
|
41
|
-
//rb_str_locktmp(src);
|
42
41
|
*srcsize = RSTRING_LEN(*src);
|
43
42
|
*destsize = lzham_z_compressBound(*srcsize);
|
44
43
|
if (NIL_P(*dest)) {
|
45
44
|
*dest = rb_str_buf_new(*destsize);
|
46
45
|
} else {
|
47
46
|
rb_check_type(*dest, RUBY_T_STRING);
|
48
|
-
|
49
|
-
rb_str_set_len(*dest, 0);
|
50
|
-
rb_str_modify_expand(*dest, *destsize);
|
47
|
+
aux_str_reserve(*dest, *destsize);
|
51
48
|
}
|
52
49
|
*params = scan_encode_params(opts);
|
53
50
|
}
|
@@ -58,7 +55,7 @@ scan_encode_args(int argc, VALUE argv[], VALUE *src, size_t *srcsize, VALUE *des
|
|
58
55
|
* encode(src, dest, opts = {}) -> encoded string
|
59
56
|
*/
|
60
57
|
static VALUE
|
61
|
-
|
58
|
+
enc_s_encode(int argc, VALUE argv[], VALUE mod)
|
62
59
|
{
|
63
60
|
VALUE src, dest;
|
64
61
|
size_t srcsize, destsize;
|
@@ -66,16 +63,13 @@ ext_s_encode(int argc, VALUE argv[], VALUE mod)
|
|
66
63
|
scan_encode_args(argc, argv, &src, &srcsize, &dest, &destsize, ¶ms);
|
67
64
|
lzham_compress_status_t s;
|
68
65
|
s = lzham_compress_memory(¶ms,
|
69
|
-
|
70
|
-
|
71
|
-
//rb_str_unlocktmp(src);
|
66
|
+
(lzham_uint8 *)RSTRING_PTR(dest), &destsize,
|
67
|
+
(const lzham_uint8 *)RSTRING_PTR(src), srcsize, NULL);
|
72
68
|
|
73
69
|
if (s != LZHAM_COMP_STATUS_SUCCESS) {
|
74
|
-
|
75
|
-
aux_encode_error(s);
|
70
|
+
extlzham_encode_error(s);
|
76
71
|
}
|
77
72
|
|
78
|
-
rb_str_resize(dest, destsize);
|
79
73
|
rb_str_set_len(dest, destsize);
|
80
74
|
|
81
75
|
return dest;
|
@@ -89,7 +83,7 @@ struct encoder
|
|
89
83
|
};
|
90
84
|
|
91
85
|
static void
|
92
|
-
|
86
|
+
enc_mark(struct encoder *p)
|
93
87
|
{
|
94
88
|
if (p) {
|
95
89
|
rb_gc_mark(p->outport);
|
@@ -98,7 +92,7 @@ ext_enc_mark(struct encoder *p)
|
|
98
92
|
}
|
99
93
|
|
100
94
|
static void
|
101
|
-
|
95
|
+
enc_free(struct encoder *p)
|
102
96
|
{
|
103
97
|
if (p) {
|
104
98
|
if (p->encoder) {
|
@@ -108,15 +102,15 @@ ext_enc_free(struct encoder *p)
|
|
108
102
|
}
|
109
103
|
|
110
104
|
static VALUE
|
111
|
-
|
105
|
+
enc_alloc(VALUE klass)
|
112
106
|
{
|
113
107
|
struct encoder *p;
|
114
|
-
VALUE obj = Data_Make_Struct(klass, struct encoder,
|
108
|
+
VALUE obj = Data_Make_Struct(klass, struct encoder, enc_mark, enc_free, p);
|
115
109
|
return obj;
|
116
110
|
}
|
117
111
|
|
118
112
|
static inline struct encoder *
|
119
|
-
|
113
|
+
getencoderp(VALUE obj)
|
120
114
|
{
|
121
115
|
struct encoder *p;
|
122
116
|
Data_Get_Struct(obj, struct encoder, p);
|
@@ -124,9 +118,9 @@ aux_encoder_refp(VALUE obj)
|
|
124
118
|
}
|
125
119
|
|
126
120
|
static inline struct encoder *
|
127
|
-
|
121
|
+
getencoder(VALUE obj)
|
128
122
|
{
|
129
|
-
struct encoder *p =
|
123
|
+
struct encoder *p = getencoderp(obj);
|
130
124
|
if (!p || !p->encoder) {
|
131
125
|
rb_raise(eError,
|
132
126
|
"not initialized - #<%s:%p>",
|
@@ -140,7 +134,7 @@ aux_encoder_ref(VALUE obj)
|
|
140
134
|
* initialize(outport = nil, opts = {})
|
141
135
|
*/
|
142
136
|
static VALUE
|
143
|
-
|
137
|
+
enc_init(int argc, VALUE argv[], VALUE enc)
|
144
138
|
{
|
145
139
|
struct encoder *p = DATA_PTR(enc);
|
146
140
|
if (p->encoder) {
|
@@ -212,7 +206,7 @@ aux_lzham_compress2(lzham_compress_state_ptr state,
|
|
212
206
|
static VALUE
|
213
207
|
enc_update_protected(struct enc_update_args *args)
|
214
208
|
{
|
215
|
-
struct encoder *p =
|
209
|
+
struct encoder *p = getencoder(args->encoder);
|
216
210
|
const char *inbuf, *intail;
|
217
211
|
|
218
212
|
if (NIL_P(args->src)) {
|
@@ -236,17 +230,17 @@ enc_update_protected(struct enc_update_args *args)
|
|
236
230
|
if (!NIL_P(args->src)) {
|
237
231
|
inbuf += insize;
|
238
232
|
}
|
239
|
-
//fprintf(stderr, "%s:%d:%s: status=%s (%d), insize=%zu, outsize=%zu\n", __FILE__, __LINE__, __func__,
|
233
|
+
//fprintf(stderr, "%s:%d:%s: status=%s (%d), insize=%zu, outsize=%zu\n", __FILE__, __LINE__, __func__, extlzham_encode_status_str(s), s, insize, outsize);
|
240
234
|
if (s != LZHAM_COMP_STATUS_SUCCESS &&
|
241
235
|
s != LZHAM_COMP_STATUS_NEEDS_MORE_INPUT &&
|
242
236
|
s != LZHAM_COMP_STATUS_NOT_FINISHED &&
|
243
237
|
s != LZHAM_COMP_STATUS_HAS_MORE_OUTPUT) {
|
244
238
|
|
245
|
-
|
239
|
+
extlzham_encode_error(s);
|
246
240
|
}
|
247
241
|
if (outsize > 0) {
|
248
242
|
rb_str_set_len(p->outbuf, outsize);
|
249
|
-
rb_funcall2(p->outport,
|
243
|
+
rb_funcall2(p->outport, id_op_lshift, 1, &p->outbuf);
|
250
244
|
}
|
251
245
|
} while (inbuf < intail || s == LZHAM_COMP_STATUS_HAS_MORE_OUTPUT);
|
252
246
|
|
@@ -254,7 +248,7 @@ enc_update_protected(struct enc_update_args *args)
|
|
254
248
|
}
|
255
249
|
|
256
250
|
static inline void
|
257
|
-
|
251
|
+
enc_update_common(VALUE enc, VALUE src, int flush)
|
258
252
|
{
|
259
253
|
struct enc_update_args args = { enc, src, flush };
|
260
254
|
if (NIL_P(src)) {
|
@@ -275,64 +269,104 @@ enc_update(VALUE enc, VALUE src, int flush)
|
|
275
269
|
* update(src, flush = LZHAM::NO_FLUSH) -> self
|
276
270
|
*/
|
277
271
|
static VALUE
|
278
|
-
|
272
|
+
enc_update(int argc, VALUE argv[], VALUE enc)
|
279
273
|
{
|
280
274
|
VALUE src, flush;
|
281
275
|
rb_scan_args(argc, argv, "11", &src, &flush);
|
282
276
|
rb_check_type(src, RUBY_T_STRING);
|
283
277
|
if (NIL_P(flush)) {
|
284
|
-
|
278
|
+
enc_update_common(enc, src, LZHAM_NO_FLUSH);
|
285
279
|
} else {
|
286
|
-
|
280
|
+
enc_update_common(enc, src, NUM2INT(flush));
|
287
281
|
}
|
288
282
|
return enc;
|
289
283
|
}
|
290
284
|
|
285
|
+
/*
|
286
|
+
* call-seq:
|
287
|
+
* write(src) -> self
|
288
|
+
* self << src -> self
|
289
|
+
*
|
290
|
+
* same as <tt>enc.update(src)</tt>
|
291
|
+
*/
|
291
292
|
static VALUE
|
292
|
-
|
293
|
+
enc_write(VALUE enc, VALUE src)
|
293
294
|
{
|
294
|
-
|
295
|
+
rb_check_type(src, RUBY_T_STRING);
|
296
|
+
enc_update_common(enc, src, LZHAM_NO_FLUSH);
|
295
297
|
return enc;
|
296
298
|
}
|
297
299
|
|
298
300
|
/*
|
299
|
-
*
|
301
|
+
* call-seq:
|
302
|
+
* flush(flush = LZHAM::SYNC_FLUSH) -> self
|
303
|
+
*
|
304
|
+
* Accept flush types: LZHAM::SYNC_FLUSH, LZHAM::FULL_FLUSH, LZHAM::TABLE_FLUSH
|
300
305
|
*/
|
301
306
|
static VALUE
|
302
|
-
|
307
|
+
enc_flush(int argc, VALUE argv[], VALUE enc)
|
303
308
|
{
|
304
|
-
|
305
|
-
|
309
|
+
int flush;
|
310
|
+
switch (argc) {
|
311
|
+
case 0:
|
312
|
+
flush = LZHAM_SYNC_FLUSH;
|
313
|
+
break;
|
314
|
+
case 1:
|
315
|
+
flush = NUM2INT(argv[0]);
|
316
|
+
if (flush != LZHAM_SYNC_FLUSH &&
|
317
|
+
flush != LZHAM_FULL_FLUSH &&
|
318
|
+
flush != LZHAM_TABLE_FLUSH) {
|
319
|
+
|
320
|
+
rb_raise(rb_eArgError,
|
321
|
+
"wrong flush type (%d for LZHAM::SYNC_FLUSH (%d), LZHAM::FULL_FLUSH (%d) and LZHAM::TABLE_FLUSH (%d))",
|
322
|
+
flush, LZHAM_SYNC_FLUSH, LZHAM_FULL_FLUSH, LZHAM_TABLE_FLUSH);
|
323
|
+
}
|
324
|
+
break;
|
325
|
+
default:
|
326
|
+
rb_error_arity(argc, 0, 1);
|
327
|
+
}
|
328
|
+
|
329
|
+
enc_update_common(enc, Qnil, flush);
|
330
|
+
|
331
|
+
return enc;
|
332
|
+
}
|
333
|
+
|
334
|
+
static VALUE
|
335
|
+
enc_finish(VALUE enc)
|
336
|
+
{
|
337
|
+
enc_update_common(enc, Qnil, LZHAM_FINISH);
|
306
338
|
return enc;
|
307
339
|
}
|
308
340
|
|
309
341
|
|
310
342
|
static VALUE
|
311
|
-
|
343
|
+
enc_get_outport(VALUE enc)
|
312
344
|
{
|
313
|
-
|
314
|
-
return p->outport;
|
345
|
+
return getencoder(enc)->outport;
|
315
346
|
}
|
316
347
|
|
317
348
|
static VALUE
|
318
|
-
|
349
|
+
enc_set_outport(VALUE enc, VALUE outport)
|
319
350
|
{
|
320
|
-
|
321
|
-
p->outport = outport;
|
322
|
-
return outport;
|
351
|
+
return getencoder(enc)->outport = outport;
|
323
352
|
}
|
324
353
|
|
325
354
|
void
|
326
|
-
|
355
|
+
extlzham_init_encoder(void)
|
327
356
|
{
|
357
|
+
RDOCFAKE(mLZHAM = rb_define_module("LZHAM"));
|
328
358
|
cEncoder = rb_define_class_under(mLZHAM, "Encoder", rb_cObject);
|
329
359
|
rb_include_module(cEncoder, mConsts);
|
330
|
-
rb_define_alloc_func(cEncoder,
|
331
|
-
rb_define_singleton_method(cEncoder, "encode", RUBY_METHOD_FUNC(
|
332
|
-
rb_define_method(cEncoder, "initialize", RUBY_METHOD_FUNC(
|
333
|
-
rb_define_method(cEncoder, "update", RUBY_METHOD_FUNC(
|
334
|
-
rb_define_method(cEncoder, "
|
335
|
-
rb_define_method(cEncoder, "
|
336
|
-
rb_define_method(cEncoder, "
|
337
|
-
rb_define_method(cEncoder, "outport
|
360
|
+
rb_define_alloc_func(cEncoder, enc_alloc);
|
361
|
+
rb_define_singleton_method(cEncoder, "encode", RUBY_METHOD_FUNC(enc_s_encode), -1);
|
362
|
+
rb_define_method(cEncoder, "initialize", RUBY_METHOD_FUNC(enc_init), -1);
|
363
|
+
rb_define_method(cEncoder, "update", RUBY_METHOD_FUNC(enc_update), -1);
|
364
|
+
rb_define_method(cEncoder, "write", RUBY_METHOD_FUNC(enc_write), 1);
|
365
|
+
rb_define_method(cEncoder, "flush", RUBY_METHOD_FUNC(enc_flush), -1);
|
366
|
+
rb_define_method(cEncoder, "finish", RUBY_METHOD_FUNC(enc_finish), 0);
|
367
|
+
rb_define_method(cEncoder, "outport", RUBY_METHOD_FUNC(enc_get_outport), 0);
|
368
|
+
rb_define_method(cEncoder, "outport=", RUBY_METHOD_FUNC(enc_set_outport), 1);
|
369
|
+
rb_define_alias(cEncoder, "<<", "write");
|
370
|
+
rb_define_alias(cEncoder, "encode", "update");
|
371
|
+
rb_define_alias(cEncoder, "compress", "update");
|
338
372
|
}
|
data/ext/error.c
CHANGED
@@ -8,7 +8,7 @@ VALUE eError;
|
|
8
8
|
break \
|
9
9
|
|
10
10
|
const char *
|
11
|
-
|
11
|
+
extlzham_encode_status_str(lzham_compress_status_t status)
|
12
12
|
{
|
13
13
|
const char *mesg;
|
14
14
|
switch (status) {
|
@@ -29,15 +29,15 @@ aux_encode_status_str(lzham_compress_status_t status)
|
|
29
29
|
}
|
30
30
|
|
31
31
|
void
|
32
|
-
|
32
|
+
extlzham_encode_error(lzham_compress_status_t status)
|
33
33
|
{
|
34
34
|
rb_raise(eError,
|
35
35
|
"LZHAM encode error - %s (0x%04X)",
|
36
|
-
|
36
|
+
extlzham_encode_status_str(status), status);
|
37
37
|
}
|
38
38
|
|
39
39
|
const char *
|
40
|
-
|
40
|
+
extlzham_decode_status_str(lzham_decompress_status_t status)
|
41
41
|
{
|
42
42
|
const char *mesg;
|
43
43
|
switch (status) {
|
@@ -66,15 +66,15 @@ aux_decode_status_str(lzham_decompress_status_t status)
|
|
66
66
|
}
|
67
67
|
|
68
68
|
void
|
69
|
-
|
69
|
+
extlzham_decode_error(lzham_decompress_status_t status)
|
70
70
|
{
|
71
71
|
rb_raise(eError,
|
72
72
|
"LZHAM decode error - %s (0x%04X)",
|
73
|
-
|
73
|
+
extlzham_decode_status_str(status), status);
|
74
74
|
}
|
75
75
|
|
76
76
|
void
|
77
|
-
|
77
|
+
extlzham_init_error(void)
|
78
78
|
{
|
79
79
|
eError = rb_define_class_under(mLZHAM, "Error", rb_eRuntimeError);
|
80
80
|
}
|
data/ext/extconf.rb
CHANGED
@@ -21,6 +21,7 @@ find_header "lzham_decomp.h", "$(srcdir)/../contrib/lzham/lzhamdecomp" or abort
|
|
21
21
|
|
22
22
|
if RbConfig::CONFIG["arch"] =~ /mingw/
|
23
23
|
$CPPFLAGS << " -D__forceinline=__attribute__\\(\\(always_inline\\)\\)"
|
24
|
+
$LDFLAGS << " -static-libgcc -static-libstdc++"
|
24
25
|
end
|
25
26
|
|
26
27
|
try_link "void main(void){}", " -Wl,-Bsymbolic " and $LDFLAGS << " -Wl,-Bsymbolic "
|
data/ext/extlzham.c
CHANGED
@@ -2,33 +2,33 @@
|
|
2
2
|
|
3
3
|
VALUE mLZHAM;
|
4
4
|
|
5
|
-
ID
|
6
|
-
ID
|
7
|
-
ID
|
8
|
-
ID
|
9
|
-
ID
|
10
|
-
ID
|
11
|
-
ID
|
12
|
-
ID
|
5
|
+
ID id_op_lshift;
|
6
|
+
ID id_dictsize;
|
7
|
+
ID id_level;
|
8
|
+
ID id_table_update_rate;
|
9
|
+
ID id_threads;
|
10
|
+
ID id_flags;
|
11
|
+
ID id_table_max_update_interval;
|
12
|
+
ID id_table_update_interval_slow_rate;
|
13
13
|
|
14
14
|
void
|
15
15
|
Init_extlzham(void)
|
16
16
|
{
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
17
|
+
id_op_lshift = rb_intern("<<");
|
18
|
+
id_dictsize = rb_intern("dictsize");
|
19
|
+
id_level = rb_intern("level");
|
20
|
+
id_table_update_rate = rb_intern("table_update_rate");
|
21
|
+
id_threads = rb_intern("threads");
|
22
|
+
id_flags = rb_intern("flags");
|
23
|
+
id_table_max_update_interval = rb_intern("table_max_update_interval");
|
24
|
+
id_table_update_interval_slow_rate = rb_intern("table_update_interval_slow_rate");
|
25
25
|
|
26
26
|
mLZHAM = rb_define_module("LZHAM");
|
27
27
|
rb_define_const(mLZHAM, "LZHAM", mLZHAM);
|
28
28
|
rb_define_const(mLZHAM, "LIBVERSION", UINT2NUM(lzham_get_version()));
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
30
|
+
extlzham_init_error();
|
31
|
+
extlzham_init_constants();
|
32
|
+
extlzham_init_encoder();
|
33
|
+
extlzham_init_decoder();
|
34
34
|
}
|
data/ext/extlzham.h
CHANGED
@@ -6,20 +6,22 @@
|
|
6
6
|
#include <ruby/thread.h>
|
7
7
|
#include <lzham.h>
|
8
8
|
|
9
|
+
#define RDOCFAKE(STMT)
|
10
|
+
|
9
11
|
extern VALUE mLZHAM;
|
10
12
|
extern VALUE eError;
|
11
13
|
extern VALUE cEncoder;
|
12
14
|
extern VALUE cDecoder;
|
13
15
|
extern VALUE mConsts;
|
14
16
|
|
15
|
-
extern ID
|
16
|
-
extern ID
|
17
|
-
extern ID
|
18
|
-
extern ID
|
19
|
-
extern ID
|
20
|
-
extern ID
|
21
|
-
extern ID
|
22
|
-
extern ID
|
17
|
+
extern ID id_op_lshift;
|
18
|
+
extern ID id_dictsize;
|
19
|
+
extern ID id_level;
|
20
|
+
extern ID id_table_update_rate;
|
21
|
+
extern ID id_threads;
|
22
|
+
extern ID id_flags;
|
23
|
+
extern ID id_table_max_update_interval;
|
24
|
+
extern ID id_table_update_interval_slow_rate;
|
23
25
|
|
24
26
|
enum {
|
25
27
|
//WORKBUF_SIZE = 256 * 1024, /* 256 KiB */
|
@@ -27,18 +29,18 @@ enum {
|
|
27
29
|
//WORKBUF_SIZE = 1 << 16, /* 64 KiB */
|
28
30
|
};
|
29
31
|
|
30
|
-
const char *
|
31
|
-
const char *
|
32
|
-
void
|
33
|
-
void
|
32
|
+
const char *extlzham_encode_status_str(lzham_compress_status_t status);
|
33
|
+
const char *extlzham_decode_status_str(lzham_decompress_status_t status);
|
34
|
+
void extlzham_encode_error(lzham_compress_status_t status);
|
35
|
+
void extlzham_decode_error(lzham_decompress_status_t status);
|
34
36
|
|
35
|
-
void
|
36
|
-
void
|
37
|
-
void
|
38
|
-
void
|
37
|
+
void extlzham_init_error(void);
|
38
|
+
void extlzham_init_constants(void);
|
39
|
+
void extlzham_init_encoder(void);
|
40
|
+
void extlzham_init_decoder(void);
|
39
41
|
|
40
42
|
static inline uint32_t
|
41
|
-
|
43
|
+
aux_getoptu32(VALUE hash, ID key, uint32_t defaultvalue)
|
42
44
|
{
|
43
45
|
VALUE d = rb_hash_lookup2(hash, ID2SYM(key), Qundef);
|
44
46
|
if (d == Qundef) { return defaultvalue; }
|
@@ -48,9 +50,12 @@ aux_hash_lookup_to_u32(VALUE hash, ID key, uint32_t defaultvalue)
|
|
48
50
|
static inline VALUE
|
49
51
|
aux_str_reserve(VALUE str, size_t size)
|
50
52
|
{
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
if (size > rb_str_capacity(str)) {
|
54
|
+
rb_str_modify_expand(str, size - RSTRING_LEN(str));
|
55
|
+
} else {
|
56
|
+
rb_str_modify(str);
|
57
|
+
}
|
58
|
+
|
54
59
|
return str;
|
55
60
|
}
|
56
61
|
|
data/gemstub.rb
CHANGED
@@ -5,14 +5,14 @@ require_relative "lib/extlzham/version"
|
|
5
5
|
GEMSTUB = Gem::Specification.new do |s|
|
6
6
|
s.name = "extlzham"
|
7
7
|
s.version = LZHAM::VERSION
|
8
|
-
s.summary = "ruby
|
8
|
+
s.summary = "ruby bindings for lzham"
|
9
9
|
s.description = <<EOS
|
10
|
-
ruby
|
10
|
+
ruby bindings for lzham <https://github.com/richgel999/lzham_codec>.
|
11
11
|
EOS
|
12
|
-
s.homepage = "
|
12
|
+
s.homepage = "https://osdn.jp/projects/rutsubo/"
|
13
13
|
s.license = "2-clause BSD License"
|
14
14
|
s.author = "dearblue"
|
15
|
-
s.email = "dearblue@users.
|
15
|
+
s.email = "dearblue@users.osdn.me"
|
16
16
|
|
17
17
|
s.required_ruby_version = ">= 2.0"
|
18
18
|
s.add_development_dependency "rspec", "~> 2.14"
|
data/lib/extlzham.rb
CHANGED
@@ -1,7 +1,5 @@
|
|
1
1
|
#vim: set fileencoding:utf-8
|
2
2
|
|
3
|
-
require "stringio"
|
4
|
-
|
5
3
|
ver = RbConfig::CONFIG["ruby_version"].slice(/\d+\.\d+/)
|
6
4
|
soname = File.basename(__FILE__, ".rb") << ".so"
|
7
5
|
lib = File.join(File.dirname(__FILE__), ver, soname)
|
@@ -11,6 +9,7 @@ else
|
|
11
9
|
require_relative soname
|
12
10
|
end
|
13
11
|
|
12
|
+
require "stringio"
|
14
13
|
require_relative "extlzham/version"
|
15
14
|
|
16
15
|
module LZHAM
|
data/lib/extlzham/version.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
#!ruby
|
2
|
+
|
3
|
+
require "test-unit"
|
4
|
+
require "openssl"
|
5
|
+
require "extlzham"
|
6
|
+
|
7
|
+
SMALLSIZE = 4000
|
8
|
+
BIGSIZE = 12000000
|
9
|
+
|
10
|
+
SAMPLES = [
|
11
|
+
"",
|
12
|
+
"\0" * SMALLSIZE,
|
13
|
+
"\0" * BIGSIZE,
|
14
|
+
"\xaa".b * SMALLSIZE,
|
15
|
+
"\xaa".b * BIGSIZE,
|
16
|
+
OpenSSL::Random.random_bytes(SMALLSIZE),
|
17
|
+
OpenSSL::Random.random_bytes(BIGSIZE),
|
18
|
+
]
|
19
|
+
|
20
|
+
SAMPLES << File.read("/usr/ports/INDEX-10", mode: "rb") rescue nil # if on FreeBSD
|
21
|
+
SAMPLES << File.read("/boot/kernel/kernel", mode: "rb") rescue nil # if on FreeBSD
|
22
|
+
|
23
|
+
class TestExtlzham < Test::Unit::TestCase
|
24
|
+
SAMPLES.size.times do |i|
|
25
|
+
class_eval <<-EOS, __FILE__, __LINE__ + 1
|
26
|
+
def test_encode1_decode_#{i}
|
27
|
+
assert { LZHAM.decode(LZHAM.encode(SAMPLES[#{i}])) == SAMPLES[#{i}] }
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_encode2_decode_#{i}
|
31
|
+
assert { LZHAM.decode(LZHAM::Encoder.encode(SAMPLES[#{i}])) == SAMPLES[#{i}] }
|
32
|
+
end
|
33
|
+
EOS
|
34
|
+
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extlzham
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.1.
|
4
|
+
version: 0.0.1.PROTOTYPE3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- dearblue
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -39,14 +39,16 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
description: |
|
42
|
-
ruby
|
43
|
-
email: dearblue@users.
|
42
|
+
ruby bindings for lzham <https://github.com/richgel999/lzham_codec>.
|
43
|
+
email: dearblue@users.osdn.me
|
44
44
|
executables: []
|
45
45
|
extensions:
|
46
46
|
- ext/extconf.rb
|
47
47
|
extra_rdoc_files:
|
48
48
|
- LICENSE.md
|
49
49
|
- README.md
|
50
|
+
- contrib/lzham/LICENSE
|
51
|
+
- contrib/lzham/README.md
|
50
52
|
- ext/constants.c
|
51
53
|
- ext/decoder.c
|
52
54
|
- ext/encoder.c
|
@@ -119,12 +121,17 @@ files:
|
|
119
121
|
- gemstub.rb
|
120
122
|
- lib/extlzham.rb
|
121
123
|
- lib/extlzham/version.rb
|
122
|
-
|
124
|
+
- test/test_extlzham.rb
|
125
|
+
homepage: https://osdn.jp/projects/rutsubo/
|
123
126
|
licenses:
|
124
127
|
- 2-clause BSD License
|
125
128
|
metadata: {}
|
126
129
|
post_install_message:
|
127
|
-
rdoc_options:
|
130
|
+
rdoc_options:
|
131
|
+
- "--charset"
|
132
|
+
- UTF-8
|
133
|
+
- "-m"
|
134
|
+
- README.md
|
128
135
|
require_paths:
|
129
136
|
- lib
|
130
137
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -139,8 +146,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
146
|
version: 1.3.1
|
140
147
|
requirements: []
|
141
148
|
rubyforge_project:
|
142
|
-
rubygems_version: 2.4.
|
149
|
+
rubygems_version: 2.4.8
|
143
150
|
signing_key:
|
144
151
|
specification_version: 4
|
145
|
-
summary: ruby
|
152
|
+
summary: ruby bindings for lzham
|
146
153
|
test_files: []
|