extzstd 0.1 → 0.3.2
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 +5 -5
- data/HISTORY.ja.md +39 -0
- data/README.md +38 -56
- data/contrib/zstd/CHANGELOG +613 -0
- data/contrib/zstd/CODE_OF_CONDUCT.md +5 -0
- data/contrib/zstd/CONTRIBUTING.md +406 -0
- data/contrib/zstd/COPYING +339 -0
- data/contrib/zstd/Makefile +420 -0
- data/contrib/zstd/README.md +179 -41
- data/contrib/zstd/TESTING.md +44 -0
- data/contrib/zstd/appveyor.yml +292 -0
- data/contrib/zstd/lib/BUCK +234 -0
- data/contrib/zstd/lib/Makefile +451 -0
- data/contrib/zstd/lib/README.md +207 -0
- data/contrib/zstd/{common → lib/common}/bitstream.h +187 -138
- data/contrib/zstd/lib/common/compiler.h +288 -0
- data/contrib/zstd/lib/common/cpu.h +213 -0
- data/contrib/zstd/lib/common/debug.c +24 -0
- data/contrib/zstd/lib/common/debug.h +107 -0
- data/contrib/zstd/lib/common/entropy_common.c +362 -0
- data/contrib/zstd/{common → lib/common}/error_private.c +25 -12
- data/contrib/zstd/{common → lib/common}/error_private.h +14 -10
- data/contrib/zstd/{common → lib/common}/fse.h +173 -92
- data/contrib/zstd/{common → lib/common}/fse_decompress.c +149 -85
- data/contrib/zstd/lib/common/huf.h +361 -0
- data/contrib/zstd/{common → lib/common}/mem.h +115 -59
- data/contrib/zstd/lib/common/pool.c +350 -0
- data/contrib/zstd/lib/common/pool.h +84 -0
- data/contrib/zstd/lib/common/threading.c +122 -0
- data/contrib/zstd/lib/common/threading.h +155 -0
- data/contrib/zstd/{common → lib/common}/xxhash.c +55 -96
- data/contrib/zstd/{common → lib/common}/xxhash.h +23 -47
- data/contrib/zstd/lib/common/zstd_common.c +83 -0
- data/contrib/zstd/lib/common/zstd_deps.h +111 -0
- data/contrib/zstd/lib/common/zstd_errors.h +95 -0
- data/contrib/zstd/lib/common/zstd_internal.h +478 -0
- data/contrib/zstd/{compress → lib/compress}/fse_compress.c +214 -319
- data/contrib/zstd/lib/compress/hist.c +181 -0
- data/contrib/zstd/lib/compress/hist.h +75 -0
- data/contrib/zstd/lib/compress/huf_compress.c +913 -0
- data/contrib/zstd/lib/compress/zstd_compress.c +5208 -0
- data/contrib/zstd/lib/compress/zstd_compress_internal.h +1203 -0
- data/contrib/zstd/lib/compress/zstd_compress_literals.c +158 -0
- data/contrib/zstd/lib/compress/zstd_compress_literals.h +29 -0
- data/contrib/zstd/lib/compress/zstd_compress_sequences.c +433 -0
- data/contrib/zstd/lib/compress/zstd_compress_sequences.h +54 -0
- data/contrib/zstd/lib/compress/zstd_compress_superblock.c +849 -0
- data/contrib/zstd/lib/compress/zstd_compress_superblock.h +32 -0
- data/contrib/zstd/lib/compress/zstd_cwksp.h +561 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.c +521 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.h +38 -0
- data/contrib/zstd/lib/compress/zstd_fast.c +496 -0
- data/contrib/zstd/lib/compress/zstd_fast.h +37 -0
- data/contrib/zstd/lib/compress/zstd_lazy.c +1412 -0
- data/contrib/zstd/lib/compress/zstd_lazy.h +87 -0
- data/contrib/zstd/lib/compress/zstd_ldm.c +660 -0
- data/contrib/zstd/lib/compress/zstd_ldm.h +116 -0
- data/contrib/zstd/lib/compress/zstd_opt.c +1345 -0
- data/contrib/zstd/lib/compress/zstd_opt.h +56 -0
- data/contrib/zstd/lib/compress/zstdmt_compress.c +1811 -0
- data/contrib/zstd/lib/compress/zstdmt_compress.h +110 -0
- data/contrib/zstd/lib/decompress/huf_decompress.c +1350 -0
- data/contrib/zstd/lib/decompress/zstd_ddict.c +244 -0
- data/contrib/zstd/lib/decompress/zstd_ddict.h +44 -0
- data/contrib/zstd/lib/decompress/zstd_decompress.c +1930 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_block.c +1540 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_block.h +62 -0
- data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +190 -0
- data/contrib/zstd/{common → lib/deprecated}/zbuff.h +68 -45
- data/contrib/zstd/lib/deprecated/zbuff_common.c +26 -0
- data/contrib/zstd/lib/deprecated/zbuff_compress.c +147 -0
- data/contrib/zstd/lib/deprecated/zbuff_decompress.c +75 -0
- data/contrib/zstd/lib/dictBuilder/cover.c +1245 -0
- data/contrib/zstd/lib/dictBuilder/cover.h +157 -0
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.c +3 -3
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/divsufsort.h +0 -0
- data/contrib/zstd/lib/dictBuilder/fastcover.c +758 -0
- data/contrib/zstd/{dictBuilder → lib/dictBuilder}/zdict.c +318 -194
- data/contrib/zstd/lib/dictBuilder/zdict.h +305 -0
- data/contrib/zstd/{legacy → lib/legacy}/zstd_legacy.h +171 -15
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.c +191 -124
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v01.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.c +125 -125
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v02.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.c +125 -124
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v03.h +20 -6
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.c +151 -299
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v04.h +19 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.c +237 -243
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v05.h +19 -6
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.c +130 -143
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v06.h +18 -5
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v07.c +158 -157
- data/contrib/zstd/{legacy → lib/legacy}/zstd_v07.h +19 -5
- data/contrib/zstd/lib/libzstd.pc.in +15 -0
- data/contrib/zstd/lib/zstd.h +2391 -0
- data/ext/depend +2 -0
- data/ext/extconf.rb +15 -6
- data/ext/extzstd.c +76 -145
- data/ext/extzstd.h +80 -31
- data/ext/extzstd_stream.c +417 -142
- data/ext/libzstd_conf.h +8 -0
- data/ext/zstd_common.c +10 -7
- data/ext/zstd_compress.c +14 -5
- data/ext/zstd_decompress.c +5 -4
- data/ext/zstd_dictbuilder.c +9 -4
- data/ext/zstd_dictbuilder_fastcover.c +3 -0
- data/ext/zstd_legacy_v01.c +3 -1
- data/ext/zstd_legacy_v02.c +3 -1
- data/ext/zstd_legacy_v03.c +3 -1
- data/ext/zstd_legacy_v04.c +3 -1
- data/ext/zstd_legacy_v05.c +3 -1
- data/ext/zstd_legacy_v06.c +3 -1
- data/ext/zstd_legacy_v07.c +3 -1
- data/gemstub.rb +10 -24
- data/lib/extzstd.rb +64 -179
- data/lib/extzstd/version.rb +6 -1
- data/test/test_basic.rb +9 -6
- metadata +113 -57
- data/HISTORY.ja +0 -5
- data/contrib/zstd/common/entropy_common.c +0 -225
- data/contrib/zstd/common/huf.h +0 -228
- data/contrib/zstd/common/zstd_common.c +0 -83
- data/contrib/zstd/common/zstd_errors.h +0 -60
- data/contrib/zstd/common/zstd_internal.h +0 -267
- data/contrib/zstd/compress/huf_compress.c +0 -533
- data/contrib/zstd/compress/zbuff_compress.c +0 -319
- data/contrib/zstd/compress/zstd_compress.c +0 -3264
- data/contrib/zstd/compress/zstd_opt.h +0 -900
- data/contrib/zstd/decompress/huf_decompress.c +0 -883
- data/contrib/zstd/decompress/zbuff_decompress.c +0 -252
- data/contrib/zstd/decompress/zstd_decompress.c +0 -1842
- data/contrib/zstd/dictBuilder/zdict.h +0 -111
- data/contrib/zstd/zstd.h +0 -640
data/ext/libzstd_conf.h
ADDED
data/ext/zstd_common.c
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
#
|
|
2
|
-
#define MEM_MODULE 1
|
|
1
|
+
#include "libzstd_conf.h"
|
|
3
2
|
|
|
4
|
-
#include "../contrib/zstd/common/entropy_common.c"
|
|
5
|
-
#include "../contrib/zstd/common/error_private.c"
|
|
6
|
-
#include "../contrib/zstd/common/fse_decompress.c"
|
|
7
|
-
|
|
8
|
-
#
|
|
3
|
+
#include "../contrib/zstd/lib/common/entropy_common.c"
|
|
4
|
+
#include "../contrib/zstd/lib/common/error_private.c"
|
|
5
|
+
#include "../contrib/zstd/lib/common/fse_decompress.c"
|
|
6
|
+
|
|
7
|
+
#undef CHECK_F
|
|
8
|
+
#include "../contrib/zstd/lib/common/pool.c"
|
|
9
|
+
#include "../contrib/zstd/lib/common/threading.c"
|
|
10
|
+
#include "../contrib/zstd/lib/common/xxhash.c"
|
|
11
|
+
#include "../contrib/zstd/lib/common/zstd_common.c"
|
data/ext/zstd_compress.c
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
#
|
|
2
|
-
#define MEM_MODULE 1
|
|
1
|
+
#include "libzstd_conf.h"
|
|
3
2
|
|
|
4
|
-
#include "../contrib/zstd/compress/fse_compress.c"
|
|
5
|
-
#include "../contrib/zstd/compress/huf_compress.c"
|
|
6
|
-
|
|
3
|
+
#include "../contrib/zstd/lib/compress/fse_compress.c"
|
|
4
|
+
#include "../contrib/zstd/lib/compress/huf_compress.c"
|
|
5
|
+
|
|
6
|
+
#undef CHECK_F
|
|
7
|
+
#include "../contrib/zstd/lib/compress/zstd_compress.c"
|
|
8
|
+
#include "../contrib/zstd/lib/compress/zstd_compress_literals.c"
|
|
9
|
+
#include "../contrib/zstd/lib/compress/zstd_compress_sequences.c"
|
|
10
|
+
#include "../contrib/zstd/lib/compress/zstd_double_fast.c"
|
|
11
|
+
#include "../contrib/zstd/lib/compress/zstd_fast.c"
|
|
12
|
+
#include "../contrib/zstd/lib/compress/zstd_lazy.c"
|
|
13
|
+
#include "../contrib/zstd/lib/compress/zstd_ldm.c"
|
|
14
|
+
#include "../contrib/zstd/lib/compress/zstd_opt.c"
|
|
15
|
+
#include "../contrib/zstd/lib/compress/hist.c"
|
data/ext/zstd_decompress.c
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
#
|
|
2
|
-
#define MEM_MODULE 1
|
|
1
|
+
#include "libzstd_conf.h"
|
|
3
2
|
|
|
4
|
-
#include "../contrib/zstd/decompress/zstd_decompress.c"
|
|
5
|
-
#include "../contrib/zstd/decompress/
|
|
3
|
+
#include "../contrib/zstd/lib/decompress/zstd_decompress.c"
|
|
4
|
+
#include "../contrib/zstd/lib/decompress/zstd_decompress_block.c"
|
|
5
|
+
#include "../contrib/zstd/lib/decompress/huf_decompress.c"
|
|
6
|
+
#include "../contrib/zstd/lib/decompress/zstd_ddict.c"
|
data/ext/zstd_dictbuilder.c
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
|
-
#
|
|
2
|
-
#define MEM_MODULE 1
|
|
1
|
+
#include "libzstd_conf.h"
|
|
3
2
|
|
|
4
|
-
#include "../contrib/zstd/dictBuilder/zdict.c"
|
|
5
|
-
#include "../contrib/zstd/dictBuilder/divsufsort.c"
|
|
3
|
+
#include "../contrib/zstd/lib/dictBuilder/zdict.c"
|
|
4
|
+
#include "../contrib/zstd/lib/dictBuilder/divsufsort.c"
|
|
5
|
+
|
|
6
|
+
#undef DISPLAY
|
|
7
|
+
#undef DISPLAYLEVEL
|
|
8
|
+
#undef DISPLAYUPDATE
|
|
9
|
+
#define prime4bytes cover_prime4bytes
|
|
10
|
+
#include "../contrib/zstd/lib/dictBuilder/cover.c"
|
data/ext/zstd_legacy_v01.c
CHANGED
data/ext/zstd_legacy_v02.c
CHANGED
data/ext/zstd_legacy_v03.c
CHANGED
data/ext/zstd_legacy_v04.c
CHANGED
data/ext/zstd_legacy_v05.c
CHANGED
data/ext/zstd_legacy_v06.c
CHANGED
data/ext/zstd_legacy_v07.c
CHANGED
data/gemstub.rb
CHANGED
|
@@ -1,37 +1,23 @@
|
|
|
1
|
-
|
|
2
|
-
unless File.read("README.md", mode: "rt") =~ verreg
|
|
3
|
-
raise "``version'' is not defined or bad syntax in ``README.md''"
|
|
4
|
-
end
|
|
5
|
-
|
|
6
|
-
version = String($1)
|
|
1
|
+
require_relative "lib/extzstd/version"
|
|
7
2
|
|
|
8
3
|
GEMSTUB = Gem::Specification.new do |s|
|
|
9
4
|
s.name = "extzstd"
|
|
10
|
-
s.version =
|
|
5
|
+
s.version = Zstd::VERSION
|
|
11
6
|
s.summary = "ruby bindings for Zstandard (zstd)"
|
|
12
7
|
s.description = <<EOS
|
|
13
|
-
unoficial ruby bindings for Zstandard (zstd) <https://github.com/
|
|
8
|
+
unoficial ruby bindings for Zstandard (zstd) <https://github.com/facebook/zstd>.
|
|
14
9
|
EOS
|
|
15
|
-
s.homepage = "https://
|
|
16
|
-
s.license = "2-
|
|
10
|
+
s.homepage = "https://github.com/dearblue/ruby-extzstd/"
|
|
11
|
+
s.license = "BSD-2-Clause"
|
|
17
12
|
s.author = "dearblue"
|
|
18
13
|
s.email = "dearblue@users.osdn.me"
|
|
19
14
|
|
|
20
15
|
s.required_ruby_version = ">= 2.0"
|
|
21
|
-
s.add_development_dependency "rake"
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
LIB << "lib/extzstd/version.rb"
|
|
25
|
-
|
|
26
|
-
file "lib/extzstd/version.rb" => %w(README.md) do
|
|
27
|
-
GEMSTUB.version = version
|
|
28
|
-
|
|
29
|
-
mkpath "lib/extzstd"
|
|
30
|
-
File.write "lib/extzstd/version.rb", <<-"EOS", mode: "wb"
|
|
31
|
-
module Zstd
|
|
32
|
-
VERSION = #{version.inspect}
|
|
33
|
-
end
|
|
34
|
-
EOS
|
|
16
|
+
s.add_development_dependency "rake", ">= 12.0"
|
|
35
17
|
end
|
|
36
18
|
|
|
37
19
|
EXTRA.concat(FileList["contrib/**/*"])
|
|
20
|
+
|
|
21
|
+
filter = %r(contrib/zstd/(?:build|contrib|doc|examples|lib/dll|programs|tests|zlibWrapper))
|
|
22
|
+
DOC.reject! { |path| path =~ filter }
|
|
23
|
+
EXTRA.reject! { |path| path =~ filter }
|
data/lib/extzstd.rb
CHANGED
|
@@ -2,9 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
ver = RUBY_VERSION.slice(/\d+\.\d+/)
|
|
4
4
|
soname = File.basename(__FILE__, ".rb") << ".so"
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
require_relative "extzstd/version"
|
|
5
|
+
require File.join(ver, soname)
|
|
8
6
|
|
|
9
7
|
require "stringio"
|
|
10
8
|
|
|
@@ -12,6 +10,40 @@ require "stringio"
|
|
|
12
10
|
# This is ruby bindings for zstd <https://github.com/Cyan4973/zstd> the compression library.
|
|
13
11
|
#
|
|
14
12
|
module Zstd
|
|
13
|
+
module Internals
|
|
14
|
+
unless String.method_defined? :b
|
|
15
|
+
refine String do
|
|
16
|
+
def b
|
|
17
|
+
dup.force_encoding(Encoding::BINARY)
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
using Internals
|
|
24
|
+
|
|
25
|
+
refine String do
|
|
26
|
+
def to_zstd(params = nil, dict: nil)
|
|
27
|
+
ContextLess.encode(self, "".b, nil, dict, params)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def unzstd(size = nil, dict: nil)
|
|
31
|
+
Decoder.open(self, dict) { |d| return d.read(size) }
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
refine Object do
|
|
36
|
+
def to_zstd(params = nil, dict: nil, &block)
|
|
37
|
+
Encoder.open(self, params, dict, &block)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def unzstd(dict: nil, &block)
|
|
41
|
+
Decoder.open(self, dict, &block)
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
using Zstd
|
|
46
|
+
|
|
15
47
|
#
|
|
16
48
|
# call-seq:
|
|
17
49
|
# encode(src_string, level = nil, opts = {}) -> zstd string
|
|
@@ -26,12 +58,8 @@ module Zstd
|
|
|
26
58
|
# [level = nil (integer or nil)]
|
|
27
59
|
# [encode_params (instance of Zstd::Parameters)]
|
|
28
60
|
# [opts dict: nil (string or nil)]
|
|
29
|
-
def self.encode(src,
|
|
30
|
-
|
|
31
|
-
return ContextLess.encode(src, Aux::EMPTY_BUFFER.dup, nil, dict, params)
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
Encoder.open(src, params, dict, &block)
|
|
61
|
+
def self.encode(src, *args, **opts, &block)
|
|
62
|
+
src.to_zstd(*args, **opts, &block)
|
|
35
63
|
end
|
|
36
64
|
|
|
37
65
|
#
|
|
@@ -40,26 +68,20 @@ module Zstd
|
|
|
40
68
|
# decode(zstd_stream, dict: nil) -> zstd decoder
|
|
41
69
|
# decode(zstd_stream, dict: nil) { |decoder| ... } -> yield returned value
|
|
42
70
|
#
|
|
43
|
-
def self.decode(src, *args,
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
when 0
|
|
47
|
-
return ContextLess.decode(src, Aux::EMPTY_BUFFER.dup, nil, dict)
|
|
48
|
-
when 1
|
|
49
|
-
Decoder.open(src, dict) { |d| return d.read(args[0].to_i) }
|
|
50
|
-
else
|
|
51
|
-
raise ArgumentError, "wrong argument number (given #{args.size}, expect 1 or 2)"
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
unless args.empty?
|
|
56
|
-
raise ArgumentError, "wrong argument number (given #{args.size}, expect 1)"
|
|
57
|
-
end
|
|
71
|
+
def self.decode(src, *args, **opts, &block)
|
|
72
|
+
src.unzstd(*args, **opts, &block)
|
|
73
|
+
end
|
|
58
74
|
|
|
59
|
-
|
|
75
|
+
class << Zstd
|
|
76
|
+
alias compress encode
|
|
77
|
+
alias decompress decode
|
|
78
|
+
alias uncompress decode
|
|
60
79
|
end
|
|
61
80
|
|
|
62
|
-
|
|
81
|
+
Compressor = Encoder
|
|
82
|
+
StreamEncoder = Encoder
|
|
83
|
+
|
|
84
|
+
class Encoder
|
|
63
85
|
#
|
|
64
86
|
# call-seq:
|
|
65
87
|
# open(outport, level = nil, dict = nil) -> zstd encoder
|
|
@@ -73,70 +95,24 @@ module Zstd
|
|
|
73
95
|
begin
|
|
74
96
|
yield e
|
|
75
97
|
ensure
|
|
76
|
-
e.close
|
|
98
|
+
e.close unless e.eof?
|
|
77
99
|
end
|
|
78
100
|
end
|
|
79
101
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
# initialize(outport, level = nil, dict = nil)
|
|
83
|
-
# initialize(outport, encode_params, dict = nil)
|
|
84
|
-
#
|
|
85
|
-
# +outport+ need has +.<<+ method.
|
|
86
|
-
#
|
|
87
|
-
def initialize(outport, params = nil, dict = nil)
|
|
88
|
-
encoder = StreamEncoder.new(params, dict)
|
|
89
|
-
super encoder, outport, "".force_encoding(Encoding::BINARY), [true]
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
def eof
|
|
93
|
-
!status[0]
|
|
102
|
+
def self.encode(src, params = nil, dest: nil, dict: nil)
|
|
103
|
+
ContextLess.encode(src, dest || "".b, nil, dict, params)
|
|
94
104
|
end
|
|
95
105
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
def close
|
|
99
|
-
return nil if eof?
|
|
100
|
-
encoder.end(destbuf, StreamEncoder::OUTSIZE)
|
|
101
|
-
outport << destbuf
|
|
102
|
-
status[0] = false
|
|
103
|
-
nil
|
|
104
|
-
end
|
|
105
|
-
|
|
106
|
-
def write(buf)
|
|
107
|
-
raise IOError, "closed stream" if eof?
|
|
108
|
-
|
|
109
|
-
off = 0
|
|
110
|
-
rest = buf.bytesize
|
|
111
|
-
outsize = StreamEncoder::OUTSIZE
|
|
112
|
-
while off && off < rest
|
|
113
|
-
off = encoder.update(buf, off, destbuf, outsize)
|
|
114
|
-
outport << destbuf
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
self
|
|
118
|
-
end
|
|
119
|
-
|
|
120
|
-
alias << write
|
|
121
|
-
|
|
122
|
-
def flush
|
|
123
|
-
raise IOError, "closed stream" if eof?
|
|
124
|
-
|
|
125
|
-
off = 0
|
|
126
|
-
encoder.flush(destbuf, StreamEncoder::OUTSIZE)
|
|
127
|
-
outport << destbuf
|
|
128
|
-
|
|
129
|
-
self
|
|
106
|
+
class << Encoder
|
|
107
|
+
alias compress encode
|
|
130
108
|
end
|
|
131
109
|
end
|
|
132
110
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
STATUS_CLOSED = nil
|
|
137
|
-
STATUS_READY = 0
|
|
138
|
-
STATUS_INPORT_EOF = 1
|
|
111
|
+
Uncompressor = Decoder
|
|
112
|
+
Decompressor = Decoder
|
|
113
|
+
StreamDecoder = Decoder
|
|
139
114
|
|
|
115
|
+
class Decoder
|
|
140
116
|
#
|
|
141
117
|
# call-seq:
|
|
142
118
|
# open(inport, dict = nil) -> decoder
|
|
@@ -159,89 +135,16 @@ module Zstd
|
|
|
159
135
|
end
|
|
160
136
|
end
|
|
161
137
|
|
|
162
|
-
def
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
@inport = inport
|
|
166
|
-
@readbuf = StringIO.new(Aux::EMPTY_BUFFER.dup)
|
|
167
|
-
@destbuf = StringIO.new(Aux::EMPTY_BUFFER.dup)
|
|
168
|
-
@status = STATUS_READY
|
|
169
|
-
@pos = 0
|
|
170
|
-
end
|
|
171
|
-
|
|
172
|
-
def close
|
|
173
|
-
inport.close rescue nil if inport.respond_to?(:close)
|
|
174
|
-
readbuf.truncate 0
|
|
175
|
-
destbuf.truncate 0
|
|
176
|
-
@status = STATUS_CLOSED
|
|
177
|
-
nil
|
|
178
|
-
end
|
|
179
|
-
|
|
180
|
-
def eof
|
|
181
|
-
!status
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
alias eof? eof
|
|
185
|
-
|
|
186
|
-
def read(size = nil, dest = Aux::EMPTY_BUFFER.dup)
|
|
187
|
-
dest ||= Aux::EMPTY_BUFFER.dup
|
|
188
|
-
size &&= size.to_i
|
|
189
|
-
Aux.change_binary(dest) do
|
|
190
|
-
#dest.clear
|
|
191
|
-
dest[0 .. -1] = Aux::EMPTY_BUFFER unless dest.empty? # keep allocated heap
|
|
192
|
-
return dest unless !size || size > 0
|
|
193
|
-
|
|
194
|
-
d = Aux::EMPTY_BUFFER.dup
|
|
195
|
-
until size && size <= 0
|
|
196
|
-
if destbuf.eof?
|
|
197
|
-
break unless fetch
|
|
198
|
-
end
|
|
199
|
-
|
|
200
|
-
destbuf.read(size, d)
|
|
201
|
-
dest << d
|
|
138
|
+
def self.decode(src, dest: nil, dict: nil)
|
|
139
|
+
# NOTE: ContextLess.decode は伸長時のサイズが必要なため、常に利用できるわけではない
|
|
140
|
+
# ContextLess.decode(src, dest || "".b, nil, dict)
|
|
202
141
|
|
|
203
|
-
|
|
204
|
-
end
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
if dest.empty?
|
|
208
|
-
nil
|
|
209
|
-
else
|
|
210
|
-
@pos += dest.bytesize
|
|
211
|
-
dest
|
|
212
|
-
end
|
|
142
|
+
new(StringIO.new(src), dict).read(nil, dest)
|
|
213
143
|
end
|
|
214
144
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
destbuf.rewind
|
|
220
|
-
destbuf.truncate 0
|
|
221
|
-
|
|
222
|
-
while true
|
|
223
|
-
if readbuf.eof? && status != STATUS_INPORT_EOF
|
|
224
|
-
readbuf.rewind
|
|
225
|
-
unless inport.read StreamDecoder::INSIZE, readbuf.string
|
|
226
|
-
@status = STATUS_INPORT_EOF
|
|
227
|
-
end
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
begin
|
|
231
|
-
off = decoder.update readbuf.string, readbuf.pos, destbuf.string, StreamDecoder::OUTSIZE
|
|
232
|
-
readbuf.pos = off if off
|
|
233
|
-
return self if destbuf.size > 0
|
|
234
|
-
break if readbuf.eof? && status == STATUS_INPORT_EOF
|
|
235
|
-
rescue Zstd::InitMissingError
|
|
236
|
-
break if readbuf.eof? && status == STATUS_INPORT_EOF
|
|
237
|
-
raise
|
|
238
|
-
end
|
|
239
|
-
end
|
|
240
|
-
|
|
241
|
-
# when readbuf.eof? && status == STATUS_INPORT_EOF
|
|
242
|
-
|
|
243
|
-
@status = nil
|
|
244
|
-
nil
|
|
145
|
+
class << Decoder
|
|
146
|
+
alias decompress decode
|
|
147
|
+
alias uncompress decode
|
|
245
148
|
end
|
|
246
149
|
end
|
|
247
150
|
|
|
@@ -271,22 +174,4 @@ module Zstd
|
|
|
271
174
|
end
|
|
272
175
|
end
|
|
273
176
|
end
|
|
274
|
-
|
|
275
|
-
module Aux
|
|
276
|
-
EMPTY_BUFFER = "".force_encoding(Encoding::BINARY).freeze
|
|
277
|
-
|
|
278
|
-
def self.io_read(io, size, buf)
|
|
279
|
-
raise Error, "encounted EOF (read error)" unless io.read(size, buf)
|
|
280
|
-
raise Error, "read size too small (read error)" unless buf.bytesize == size
|
|
281
|
-
buf
|
|
282
|
-
end
|
|
283
|
-
|
|
284
|
-
def self.change_binary(str)
|
|
285
|
-
e = str.encoding
|
|
286
|
-
str.force_encoding(Encoding::BINARY)
|
|
287
|
-
yield
|
|
288
|
-
ensure
|
|
289
|
-
str.force_encoding e rescue nil if e
|
|
290
|
-
end
|
|
291
|
-
end
|
|
292
177
|
end
|