ruby-lzws 1.4.0 → 1.4.3
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 +11 -12
- data/ext/lzws_ext/gvl.h +2 -2
- data/ext/lzws_ext/macro.h +1 -1
- data/lib/lzws/error.rb +9 -4
- data/lib/lzws/file.rb +12 -35
- data/lib/lzws/option.rb +36 -0
- data/lib/lzws/stream/raw/compressor.rb +11 -53
- data/lib/lzws/stream/raw/decompressor.rb +11 -35
- data/lib/lzws/stream/reader.rb +6 -176
- data/lib/lzws/stream/writer.rb +6 -140
- data/lib/lzws/string.rb +12 -16
- data/lib/lzws/validation.rb +4 -41
- data/lib/lzws/version.rb +1 -1
- metadata +42 -19
- data/lib/lzws/stream/abstract.rb +0 -152
- data/lib/lzws/stream/delegates.rb +0 -36
- data/lib/lzws/stream/raw/abstract.rb +0 -63
- data/lib/lzws/stream/reader_helpers.rb +0 -194
- data/lib/lzws/stream/stat.rb +0 -78
- data/lib/lzws/stream/writer_helpers.rb +0 -91
data/lib/lzws/stream/writer.rb
CHANGED
@@ -1,150 +1,16 @@
|
|
1
1
|
# Ruby bindings for lzws library.
|
2
2
|
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
3
|
|
4
|
-
|
4
|
+
require "adsp/stream/writer"
|
5
|
+
|
5
6
|
require_relative "raw/compressor"
|
6
|
-
require_relative "writer_helpers"
|
7
7
|
|
8
8
|
module LZWS
|
9
9
|
module Stream
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
@options = options
|
15
|
-
|
16
|
-
super destination_io, *args
|
17
|
-
end
|
18
|
-
|
19
|
-
protected def create_raw_stream
|
20
|
-
Raw::Compressor.new @options
|
21
|
-
end
|
22
|
-
|
23
|
-
# -- synchronous --
|
24
|
-
|
25
|
-
def write(*objects)
|
26
|
-
write_remaining_buffer
|
27
|
-
|
28
|
-
bytes_written = 0
|
29
|
-
|
30
|
-
objects.each do |object|
|
31
|
-
source = transcode object.to_s
|
32
|
-
bytes_written += raw_wrapper :write, source
|
33
|
-
end
|
34
|
-
|
35
|
-
@pos += bytes_written
|
36
|
-
|
37
|
-
bytes_written
|
38
|
-
end
|
39
|
-
|
40
|
-
def flush
|
41
|
-
finish :flush
|
42
|
-
|
43
|
-
@io.flush
|
44
|
-
|
45
|
-
self
|
46
|
-
end
|
47
|
-
|
48
|
-
def rewind
|
49
|
-
finish :close
|
50
|
-
|
51
|
-
super
|
52
|
-
end
|
53
|
-
|
54
|
-
def close
|
55
|
-
finish :close
|
56
|
-
|
57
|
-
super
|
58
|
-
end
|
59
|
-
|
60
|
-
protected def finish(method_name)
|
61
|
-
write_remaining_buffer
|
62
|
-
|
63
|
-
raw_wrapper method_name
|
64
|
-
end
|
65
|
-
|
66
|
-
protected def write_remaining_buffer
|
67
|
-
return nil if @buffer.bytesize.zero?
|
68
|
-
|
69
|
-
@io.write @buffer
|
70
|
-
|
71
|
-
reset_buffer
|
72
|
-
end
|
73
|
-
|
74
|
-
protected def raw_wrapper(method_name, *args)
|
75
|
-
@raw_stream.send(method_name, *args) { |portion| @io.write portion }
|
76
|
-
end
|
77
|
-
|
78
|
-
# -- asynchronous --
|
79
|
-
|
80
|
-
# IO write nonblock can raise wait writable error.
|
81
|
-
# After resolving this error user may provide same content again.
|
82
|
-
# It is not possible to revert accepted content after error.
|
83
|
-
# So we have to accept content after processing IO write nonblock.
|
84
|
-
# It means that first write nonblock won't call IO write nonblock.
|
85
|
-
def write_nonblock(object, *options)
|
86
|
-
return 0 unless write_remaining_buffer_nonblock(*options)
|
87
|
-
|
88
|
-
source = transcode object.to_s
|
89
|
-
bytes_written = raw_nonblock_wrapper :write, source
|
90
|
-
@pos += bytes_written
|
91
|
-
|
92
|
-
bytes_written
|
93
|
-
end
|
94
|
-
|
95
|
-
def flush_nonblock(*options)
|
96
|
-
return false unless finish_nonblock :flush, *options
|
97
|
-
|
98
|
-
@io.flush
|
99
|
-
|
100
|
-
true
|
101
|
-
end
|
102
|
-
|
103
|
-
def rewind_nonblock(*options)
|
104
|
-
return false unless finish_nonblock :close, *options
|
105
|
-
|
106
|
-
method(:rewind).super_method.call
|
107
|
-
|
108
|
-
true
|
109
|
-
end
|
110
|
-
|
111
|
-
def close_nonblock(*options)
|
112
|
-
return false unless finish_nonblock :close, *options
|
113
|
-
|
114
|
-
method(:close).super_method.call
|
115
|
-
|
116
|
-
true
|
117
|
-
end
|
118
|
-
|
119
|
-
protected def finish_nonblock(method_name, *options)
|
120
|
-
return false unless write_remaining_buffer_nonblock(*options)
|
121
|
-
|
122
|
-
raw_nonblock_wrapper method_name
|
123
|
-
|
124
|
-
write_remaining_buffer_nonblock(*options)
|
125
|
-
end
|
126
|
-
|
127
|
-
protected def write_remaining_buffer_nonblock(*options)
|
128
|
-
return true if @buffer.bytesize.zero?
|
129
|
-
|
130
|
-
bytes_written = @io.write_nonblock @buffer, *options
|
131
|
-
return false if bytes_written.zero?
|
132
|
-
|
133
|
-
@buffer = @buffer.byteslice bytes_written, @buffer.bytesize - bytes_written
|
134
|
-
|
135
|
-
@buffer.bytesize.zero?
|
136
|
-
end
|
137
|
-
|
138
|
-
protected def raw_nonblock_wrapper(method_name, *args)
|
139
|
-
@raw_stream.send(method_name, *args) { |portion| @buffer << portion }
|
140
|
-
end
|
141
|
-
|
142
|
-
# -- common --
|
143
|
-
|
144
|
-
protected def transcode(data)
|
145
|
-
data = data.encode @external_encoding, **@transcode_options unless @external_encoding.nil?
|
146
|
-
data
|
147
|
-
end
|
10
|
+
# LZWS::Stream::Writer class.
|
11
|
+
class Writer < ADSP::Stream::Writer
|
12
|
+
# Current raw stream class.
|
13
|
+
RawCompressor = Raw::Compressor
|
148
14
|
end
|
149
15
|
end
|
150
16
|
end
|
data/lib/lzws/string.rb
CHANGED
@@ -1,29 +1,25 @@
|
|
1
1
|
# Ruby bindings for lzws library.
|
2
2
|
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
3
|
|
4
|
+
require "adsp/string"
|
4
5
|
require "lzws_ext"
|
5
6
|
|
6
7
|
require_relative "option"
|
7
|
-
require_relative "validation"
|
8
8
|
|
9
9
|
module LZWS
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
LZWS._native_compress_string source, options
|
10
|
+
# LZWS::String class.
|
11
|
+
class String < ADSP::String
|
12
|
+
# Current option class.
|
13
|
+
Option = LZWS::Option
|
14
|
+
|
15
|
+
# Bypasses native compress.
|
16
|
+
def self.native_compress_string(*args)
|
17
|
+
LZWS._native_compress_string(*args)
|
19
18
|
end
|
20
19
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
options = Option.get_decompressor_options options, BUFFER_LENGTH_NAMES
|
25
|
-
|
26
|
-
LZWS._native_decompress_string source, options
|
20
|
+
# Bypasses native decompress.
|
21
|
+
def self.native_decompress_string(*args)
|
22
|
+
LZWS._native_decompress_string(*args)
|
27
23
|
end
|
28
24
|
end
|
29
25
|
end
|
data/lib/lzws/validation.rb
CHANGED
@@ -1,51 +1,14 @@
|
|
1
1
|
# Ruby bindings for lzws library.
|
2
2
|
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
3
|
|
4
|
-
|
4
|
+
require "adsp/validation"
|
5
5
|
|
6
6
|
module LZWS
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
write
|
11
|
-
readpartial
|
12
|
-
read_nonblock
|
13
|
-
write_nonblock
|
14
|
-
eof?
|
15
|
-
flush
|
16
|
-
close
|
17
|
-
closed?
|
18
|
-
]
|
19
|
-
.freeze
|
20
|
-
|
7
|
+
# LZWS::Validation class.
|
8
|
+
class Validation < ADSP::Validation
|
9
|
+
# Raises error when +value+ is not boolean.
|
21
10
|
def self.validate_bool(value)
|
22
11
|
raise ValidateError, "invalid bool" unless value.is_a?(::TrueClass) || value.is_a?(::FalseClass)
|
23
12
|
end
|
24
|
-
|
25
|
-
def self.validate_positive_integer(value)
|
26
|
-
raise ValidateError, "invalid positive integer" unless value.is_a?(::Integer) && value.positive?
|
27
|
-
end
|
28
|
-
|
29
|
-
def self.validate_not_negative_integer(value)
|
30
|
-
raise ValidateError, "invalid not negative integer" unless value.is_a?(::Integer) && value >= 0
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.validate_string(value)
|
34
|
-
raise ValidateError, "invalid string" unless value.is_a? ::String
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.validate_io(value)
|
38
|
-
raise ValidateError, "invalid io" unless IO_METHODS.all? { |method| value.respond_to? method }
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.validate_hash(value)
|
42
|
-
raise ValidateError, "invalid hash" unless value.is_a? ::Hash
|
43
|
-
end
|
44
|
-
|
45
|
-
def self.validate_proc(value)
|
46
|
-
unless value.is_a?(::Proc) || value.is_a?(::Method) || value.is_a?(::UnboundMethod)
|
47
|
-
raise ValidateError, "invalid proc"
|
48
|
-
end
|
49
|
-
end
|
50
13
|
end
|
51
14
|
end
|
data/lib/lzws/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-lzws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.4.
|
4
|
+
version: 1.4.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Aladjev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: adsp
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: codecov
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -58,14 +72,14 @@ dependencies:
|
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '5.
|
75
|
+
version: '5.16'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '5.
|
82
|
+
version: '5.16'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
84
|
name: ocg
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,48 +136,62 @@ dependencies:
|
|
122
136
|
- - ">="
|
123
137
|
- !ruby/object:Gem::Version
|
124
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rdoc
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
125
153
|
- !ruby/object:Gem::Dependency
|
126
154
|
name: rubocop
|
127
155
|
requirement: !ruby/object:Gem::Requirement
|
128
156
|
requirements:
|
129
157
|
- - "~>"
|
130
158
|
- !ruby/object:Gem::Version
|
131
|
-
version: '1.
|
159
|
+
version: '1.31'
|
132
160
|
type: :development
|
133
161
|
prerelease: false
|
134
162
|
version_requirements: !ruby/object:Gem::Requirement
|
135
163
|
requirements:
|
136
164
|
- - "~>"
|
137
165
|
- !ruby/object:Gem::Version
|
138
|
-
version: '1.
|
166
|
+
version: '1.31'
|
139
167
|
- !ruby/object:Gem::Dependency
|
140
168
|
name: rubocop-minitest
|
141
169
|
requirement: !ruby/object:Gem::Requirement
|
142
170
|
requirements:
|
143
171
|
- - "~>"
|
144
172
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0.
|
173
|
+
version: '0.20'
|
146
174
|
type: :development
|
147
175
|
prerelease: false
|
148
176
|
version_requirements: !ruby/object:Gem::Requirement
|
149
177
|
requirements:
|
150
178
|
- - "~>"
|
151
179
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0.
|
180
|
+
version: '0.20'
|
153
181
|
- !ruby/object:Gem::Dependency
|
154
182
|
name: rubocop-performance
|
155
183
|
requirement: !ruby/object:Gem::Requirement
|
156
184
|
requirements:
|
157
185
|
- - "~>"
|
158
186
|
- !ruby/object:Gem::Version
|
159
|
-
version: '1.
|
187
|
+
version: '1.14'
|
160
188
|
type: :development
|
161
189
|
prerelease: false
|
162
190
|
version_requirements: !ruby/object:Gem::Requirement
|
163
191
|
requirements:
|
164
192
|
- - "~>"
|
165
193
|
- !ruby/object:Gem::Version
|
166
|
-
version: '1.
|
194
|
+
version: '1.14'
|
167
195
|
- !ruby/object:Gem::Dependency
|
168
196
|
name: rubocop-rake
|
169
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -225,23 +253,18 @@ files:
|
|
225
253
|
- lib/lzws/error.rb
|
226
254
|
- lib/lzws/file.rb
|
227
255
|
- lib/lzws/option.rb
|
228
|
-
- lib/lzws/stream/abstract.rb
|
229
|
-
- lib/lzws/stream/delegates.rb
|
230
|
-
- lib/lzws/stream/raw/abstract.rb
|
231
256
|
- lib/lzws/stream/raw/compressor.rb
|
232
257
|
- lib/lzws/stream/raw/decompressor.rb
|
233
258
|
- lib/lzws/stream/reader.rb
|
234
|
-
- lib/lzws/stream/reader_helpers.rb
|
235
|
-
- lib/lzws/stream/stat.rb
|
236
259
|
- lib/lzws/stream/writer.rb
|
237
|
-
- lib/lzws/stream/writer_helpers.rb
|
238
260
|
- lib/lzws/string.rb
|
239
261
|
- lib/lzws/validation.rb
|
240
262
|
- lib/lzws/version.rb
|
241
263
|
homepage: https://github.com/andrew-aladev/ruby-lzws
|
242
264
|
licenses:
|
243
265
|
- MIT
|
244
|
-
metadata:
|
266
|
+
metadata:
|
267
|
+
rubygems_mfa_required: 'true'
|
245
268
|
post_install_message:
|
246
269
|
rdoc_options: []
|
247
270
|
require_paths:
|
@@ -250,14 +273,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
250
273
|
requirements:
|
251
274
|
- - ">="
|
252
275
|
- !ruby/object:Gem::Version
|
253
|
-
version: '2.
|
276
|
+
version: '2.6'
|
254
277
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
255
278
|
requirements:
|
256
279
|
- - ">="
|
257
280
|
- !ruby/object:Gem::Version
|
258
281
|
version: '0'
|
259
282
|
requirements: []
|
260
|
-
rubygems_version: 3.
|
283
|
+
rubygems_version: 3.3.7
|
261
284
|
signing_key:
|
262
285
|
specification_version: 4
|
263
286
|
summary: Ruby bindings for lzws library (compatible with UNIX compress).
|
data/lib/lzws/stream/abstract.rb
DELETED
@@ -1,152 +0,0 @@
|
|
1
|
-
# Ruby bindings for lzws library.
|
2
|
-
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
|
-
|
4
|
-
require_relative "delegates"
|
5
|
-
require_relative "stat"
|
6
|
-
require_relative "../error"
|
7
|
-
require_relative "../validation"
|
8
|
-
|
9
|
-
module LZWS
|
10
|
-
module Stream
|
11
|
-
class Abstract
|
12
|
-
# Native stream is not seekable by design.
|
13
|
-
# Related methods like "seek" and "pos=" can't be implemented.
|
14
|
-
|
15
|
-
# It is not possible to maintain correspondance between bytes
|
16
|
-
# consumed from source and bytes written to destination by design.
|
17
|
-
# We will consume all source bytes and maintain buffer with remaining destination data.
|
18
|
-
|
19
|
-
include Delegates
|
20
|
-
|
21
|
-
attr_reader :io, :stat, :external_encoding, :internal_encoding, :transcode_options, :pos
|
22
|
-
|
23
|
-
alias tell pos
|
24
|
-
|
25
|
-
def initialize(io, options = {})
|
26
|
-
@raw_stream = create_raw_stream
|
27
|
-
|
28
|
-
Validation.validate_io io
|
29
|
-
@io = io
|
30
|
-
|
31
|
-
@stat = Stat.new @io.stat if @io.respond_to? :stat
|
32
|
-
|
33
|
-
set_encoding options[:external_encoding], options[:internal_encoding], options[:transcode_options]
|
34
|
-
reset_buffer
|
35
|
-
reset_io_advise
|
36
|
-
|
37
|
-
@pos = 0
|
38
|
-
end
|
39
|
-
|
40
|
-
# -- buffer --
|
41
|
-
|
42
|
-
protected def reset_buffer
|
43
|
-
@buffer = ::String.new :encoding => ::Encoding::BINARY
|
44
|
-
end
|
45
|
-
|
46
|
-
# -- advise --
|
47
|
-
|
48
|
-
protected def reset_io_advise
|
49
|
-
# Both compressor and decompressor need sequential io access.
|
50
|
-
@io.advise :sequential if @io.respond_to? :advise
|
51
|
-
rescue ::Errno::ESPIPE
|
52
|
-
# ok
|
53
|
-
end
|
54
|
-
|
55
|
-
def advise
|
56
|
-
# Noop
|
57
|
-
nil
|
58
|
-
end
|
59
|
-
|
60
|
-
# -- encoding --
|
61
|
-
|
62
|
-
def set_encoding(*args)
|
63
|
-
external_encoding, internal_encoding, transcode_options = process_set_encoding_arguments(*args)
|
64
|
-
|
65
|
-
set_target_encoding :@external_encoding, external_encoding
|
66
|
-
set_target_encoding :@internal_encoding, internal_encoding
|
67
|
-
@transcode_options = transcode_options
|
68
|
-
|
69
|
-
self
|
70
|
-
end
|
71
|
-
|
72
|
-
protected def process_set_encoding_arguments(*args)
|
73
|
-
external_encoding = args[0]
|
74
|
-
|
75
|
-
unless external_encoding.nil? || external_encoding.is_a?(::Encoding)
|
76
|
-
Validation.validate_string external_encoding
|
77
|
-
|
78
|
-
# First argument can be "external_encoding:internal_encoding".
|
79
|
-
match = %r{(.+?):(.+)}.match external_encoding
|
80
|
-
|
81
|
-
unless match.nil?
|
82
|
-
external_encoding = match[0]
|
83
|
-
internal_encoding = match[1]
|
84
|
-
|
85
|
-
transcode_options = args[1]
|
86
|
-
Validation.validate_hash transcode_options unless transcode_options.nil?
|
87
|
-
|
88
|
-
return [external_encoding, internal_encoding, transcode_options]
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
internal_encoding = args[1]
|
93
|
-
unless internal_encoding.nil? || internal_encoding.is_a?(::Encoding)
|
94
|
-
Validation.validate_string internal_encoding
|
95
|
-
end
|
96
|
-
|
97
|
-
transcode_options = args[2]
|
98
|
-
Validation.validate_hash transcode_options unless transcode_options.nil?
|
99
|
-
|
100
|
-
[external_encoding, internal_encoding, transcode_options]
|
101
|
-
end
|
102
|
-
|
103
|
-
protected def set_target_encoding(name, value)
|
104
|
-
unless value.nil? || value.is_a?(::Encoding)
|
105
|
-
begin
|
106
|
-
value = ::Encoding.find value
|
107
|
-
rescue ::ArgumentError
|
108
|
-
raise ValidateError, "invalid #{name} encoding"
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
instance_variable_set name, value
|
113
|
-
end
|
114
|
-
|
115
|
-
protected def target_encoding
|
116
|
-
return @internal_encoding unless @internal_encoding.nil?
|
117
|
-
return @external_encoding unless @external_encoding.nil?
|
118
|
-
|
119
|
-
::Encoding::BINARY
|
120
|
-
end
|
121
|
-
|
122
|
-
# -- etc --
|
123
|
-
|
124
|
-
def rewind
|
125
|
-
@raw_stream = create_raw_stream
|
126
|
-
|
127
|
-
@io.rewind if @io.respond_to? :rewind
|
128
|
-
|
129
|
-
reset_buffer
|
130
|
-
reset_io_advise
|
131
|
-
|
132
|
-
@pos = 0
|
133
|
-
|
134
|
-
0
|
135
|
-
end
|
136
|
-
|
137
|
-
def close
|
138
|
-
@io.close
|
139
|
-
|
140
|
-
nil
|
141
|
-
end
|
142
|
-
|
143
|
-
def closed?
|
144
|
-
@raw_stream.closed? && @io.closed?
|
145
|
-
end
|
146
|
-
|
147
|
-
def to_io
|
148
|
-
self
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
# Ruby bindings for lzws library.
|
2
|
-
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
|
-
|
4
|
-
require "forwardable"
|
5
|
-
|
6
|
-
module LZWS
|
7
|
-
module Stream
|
8
|
-
module Delegates
|
9
|
-
DELEGATES = %i[
|
10
|
-
autoclose=
|
11
|
-
autoclose?
|
12
|
-
binmode
|
13
|
-
binmode?
|
14
|
-
close_on_exec=
|
15
|
-
close_on_exec?
|
16
|
-
fcntl
|
17
|
-
fdatasync
|
18
|
-
fileno
|
19
|
-
fsync
|
20
|
-
ioctl
|
21
|
-
isatty
|
22
|
-
pid
|
23
|
-
sync
|
24
|
-
sync=
|
25
|
-
to_i
|
26
|
-
tty?
|
27
|
-
]
|
28
|
-
.freeze
|
29
|
-
|
30
|
-
def self.included(klass)
|
31
|
-
klass.extend ::Forwardable
|
32
|
-
klass.def_delegators :@io, *DELEGATES
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,63 +0,0 @@
|
|
1
|
-
# Ruby bindings for lzws library.
|
2
|
-
# Copyright (c) 2019 AUTHORS, MIT License.
|
3
|
-
|
4
|
-
require "lzws_ext"
|
5
|
-
|
6
|
-
require_relative "../../error"
|
7
|
-
require_relative "../../validation"
|
8
|
-
|
9
|
-
module LZWS
|
10
|
-
module Stream
|
11
|
-
module Raw
|
12
|
-
class Abstract
|
13
|
-
def initialize(native_stream)
|
14
|
-
@native_stream = native_stream
|
15
|
-
@is_closed = false
|
16
|
-
end
|
17
|
-
|
18
|
-
# -- write --
|
19
|
-
|
20
|
-
def flush(&writer)
|
21
|
-
do_not_use_after_close
|
22
|
-
|
23
|
-
Validation.validate_proc writer
|
24
|
-
|
25
|
-
write_result(&writer)
|
26
|
-
|
27
|
-
nil
|
28
|
-
end
|
29
|
-
|
30
|
-
protected def more_destination(&writer)
|
31
|
-
result_bytesize = write_result(&writer)
|
32
|
-
raise NotEnoughDestinationError, "not enough destination" if result_bytesize.zero?
|
33
|
-
end
|
34
|
-
|
35
|
-
protected def write_result(&_writer)
|
36
|
-
result = @native_stream.read_result
|
37
|
-
yield result
|
38
|
-
|
39
|
-
result.bytesize
|
40
|
-
end
|
41
|
-
|
42
|
-
# -- close --
|
43
|
-
|
44
|
-
protected def do_not_use_after_close
|
45
|
-
raise UsedAfterCloseError, "used after close" if closed?
|
46
|
-
end
|
47
|
-
|
48
|
-
def close(&writer)
|
49
|
-
write_result(&writer)
|
50
|
-
|
51
|
-
@native_stream.close
|
52
|
-
@is_closed = true
|
53
|
-
|
54
|
-
nil
|
55
|
-
end
|
56
|
-
|
57
|
-
def closed?
|
58
|
-
@is_closed
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|