ruby-brs 1.1.4 → 1.3.0
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 +86 -46
- data/ext/brs_ext/buffer.c +21 -9
- data/ext/brs_ext/buffer.h +7 -7
- data/ext/brs_ext/error.c +11 -15
- data/ext/brs_ext/error.h +2 -1
- data/ext/brs_ext/gvl.h +24 -0
- data/ext/brs_ext/io.c +240 -123
- data/ext/brs_ext/main.c +4 -1
- data/ext/brs_ext/option.c +54 -33
- data/ext/brs_ext/option.h +41 -29
- data/ext/brs_ext/stream/compressor.c +118 -54
- data/ext/brs_ext/stream/compressor.h +4 -1
- data/ext/brs_ext/stream/decompressor.c +54 -25
- data/ext/brs_ext/stream/decompressor.h +4 -1
- data/ext/brs_ext/string.c +118 -65
- data/ext/extconf.rb +90 -10
- data/lib/brs/file.rb +2 -2
- data/lib/brs/option.rb +36 -4
- data/lib/brs/stream/abstract.rb +5 -3
- data/lib/brs/stream/reader.rb +3 -2
- data/lib/brs/stream/reader_helpers.rb +1 -1
- data/lib/brs/validation.rb +3 -1
- data/lib/brs/version.rb +1 -1
- metadata +74 -17
data/lib/brs/option.rb
CHANGED
@@ -11,16 +11,20 @@ module BRS
|
|
11
11
|
DEFAULT_BUFFER_LENGTH = 0
|
12
12
|
|
13
13
|
COMPRESSOR_DEFAULTS = {
|
14
|
+
:gvl => false,
|
14
15
|
:mode => nil,
|
15
16
|
:quality => nil,
|
16
17
|
:lgwin => nil,
|
17
18
|
:lgblock => nil,
|
19
|
+
:npostfix => nil,
|
20
|
+
:ndirect => nil,
|
18
21
|
:disable_literal_context_modeling => nil,
|
19
22
|
:large_window => nil
|
20
23
|
}
|
21
24
|
.freeze
|
22
25
|
|
23
26
|
DECOMPRESSOR_DEFAULTS = {
|
27
|
+
:gvl => false,
|
24
28
|
:disable_ring_buffer_reallocation => nil,
|
25
29
|
:large_window => nil
|
26
30
|
}
|
@@ -29,11 +33,16 @@ module BRS
|
|
29
33
|
def self.get_compressor_options(options, buffer_length_names)
|
30
34
|
Validation.validate_hash options
|
31
35
|
|
32
|
-
buffer_length_defaults = buffer_length_names.each_with_object({})
|
33
|
-
|
36
|
+
buffer_length_defaults = buffer_length_names.each_with_object({}) do |name, defaults|
|
37
|
+
defaults[name] = DEFAULT_BUFFER_LENGTH
|
38
|
+
end
|
39
|
+
|
40
|
+
options = COMPRESSOR_DEFAULTS.merge(buffer_length_defaults).merge options
|
34
41
|
|
35
42
|
buffer_length_names.each { |name| Validation.validate_not_negative_integer options[name] }
|
36
43
|
|
44
|
+
Validation.validate_bool options[:gvl]
|
45
|
+
|
37
46
|
mode = options[:mode]
|
38
47
|
unless mode.nil?
|
39
48
|
Validation.validate_symbol mode
|
@@ -58,6 +67,24 @@ module BRS
|
|
58
67
|
raise ValidateError, "invalid lgblock" if lgblock < MIN_LGBLOCK || lgblock > MAX_LGBLOCK
|
59
68
|
end
|
60
69
|
|
70
|
+
npostfix = options[:npostfix]
|
71
|
+
unless npostfix.nil?
|
72
|
+
Validation.validate_not_negative_integer npostfix
|
73
|
+
raise ValidateError, "invalid npostfix" if npostfix < MIN_NPOSTFIX || npostfix > MAX_NPOSTFIX
|
74
|
+
end
|
75
|
+
|
76
|
+
ndirect = options[:ndirect]
|
77
|
+
unless ndirect.nil?
|
78
|
+
Validation.validate_not_negative_integer ndirect
|
79
|
+
raise ValidateError, "invalid ndirect" if ndirect < MIN_NDIRECT || ndirect > MAX_NDIRECT
|
80
|
+
|
81
|
+
raise ValidateError, "invalid ndirect" if
|
82
|
+
!npostfix.nil? && (
|
83
|
+
(ndirect - MIN_NDIRECT) % (NDIRECT_NPOSTFIX_STEP_BASE << npostfix) != 0 ||
|
84
|
+
(ndirect - MIN_NDIRECT) > (NDIRECT_NPOSTFIX_MAX_BASE << npostfix)
|
85
|
+
)
|
86
|
+
end
|
87
|
+
|
61
88
|
disable_literal_context_modeling = options[:disable_literal_context_modeling]
|
62
89
|
Validation.validate_bool disable_literal_context_modeling unless disable_literal_context_modeling.nil?
|
63
90
|
|
@@ -70,11 +97,16 @@ module BRS
|
|
70
97
|
def self.get_decompressor_options(options, buffer_length_names)
|
71
98
|
Validation.validate_hash options
|
72
99
|
|
73
|
-
buffer_length_defaults = buffer_length_names.each_with_object({})
|
74
|
-
|
100
|
+
buffer_length_defaults = buffer_length_names.each_with_object({}) do |name, defaults|
|
101
|
+
defaults[name] = DEFAULT_BUFFER_LENGTH
|
102
|
+
end
|
103
|
+
|
104
|
+
options = DECOMPRESSOR_DEFAULTS.merge(buffer_length_defaults).merge options
|
75
105
|
|
76
106
|
buffer_length_names.each { |name| Validation.validate_not_negative_integer options[name] }
|
77
107
|
|
108
|
+
Validation.validate_bool options[:gvl]
|
109
|
+
|
78
110
|
disable_ring_buffer_reallocation = options[:disable_ring_buffer_reallocation]
|
79
111
|
Validation.validate_bool disable_ring_buffer_reallocation unless disable_ring_buffer_reallocation.nil?
|
80
112
|
|
data/lib/brs/stream/abstract.rb
CHANGED
@@ -12,7 +12,8 @@ module BRS
|
|
12
12
|
# Native stream is not seekable by design.
|
13
13
|
# Related methods like "seek" and "pos=" can't be implemented.
|
14
14
|
|
15
|
-
# It is not possible to maintain correspondance between bytes
|
15
|
+
# It is not possible to maintain correspondance between bytes
|
16
|
+
# consumed from source and bytes written to destination by design.
|
16
17
|
# We will consume all source bytes and maintain buffer with remaining destination data.
|
17
18
|
|
18
19
|
include Delegates
|
@@ -89,8 +90,9 @@ module BRS
|
|
89
90
|
end
|
90
91
|
|
91
92
|
internal_encoding = args[1]
|
92
|
-
|
93
|
-
|
93
|
+
unless internal_encoding.nil? || internal_encoding.is_a?(::Encoding)
|
94
|
+
Validation.validate_string internal_encoding
|
95
|
+
end
|
94
96
|
|
95
97
|
transcode_options = args[2]
|
96
98
|
Validation.validate_hash transcode_options unless transcode_options.nil?
|
data/lib/brs/stream/reader.rb
CHANGED
@@ -33,8 +33,9 @@ module BRS
|
|
33
33
|
source_buffer_length = @options[:source_buffer_length]
|
34
34
|
Validation.validate_not_negative_integer source_buffer_length unless source_buffer_length.nil?
|
35
35
|
|
36
|
-
source_buffer_length
|
37
|
-
|
36
|
+
if source_buffer_length.nil? || source_buffer_length.zero?
|
37
|
+
source_buffer_length = Buffer::DEFAULT_SOURCE_BUFFER_LENGTH_FOR_DECOMPRESSOR
|
38
|
+
end
|
38
39
|
|
39
40
|
@source_buffer_length = source_buffer_length
|
40
41
|
end
|
data/lib/brs/validation.rb
CHANGED
@@ -47,7 +47,9 @@ module BRS
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def self.validate_proc(value)
|
50
|
-
|
50
|
+
unless value.is_a?(::Proc) || value.is_a?(::Method) || value.is_a?(::UnboundMethod)
|
51
|
+
raise ValidateError, "invalid proc"
|
52
|
+
end
|
51
53
|
end
|
52
54
|
end
|
53
55
|
end
|
data/lib/brs/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-brs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Aladjev
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: codecov
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: json
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: minitar
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -44,28 +58,42 @@ dependencies:
|
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '5.
|
61
|
+
version: '5.14'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '5.
|
68
|
+
version: '5.14'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: ocg
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
75
|
+
version: '1.4'
|
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: '1.
|
82
|
+
version: '1.4'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: parallel
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
69
97
|
- !ruby/object:Gem::Dependency
|
70
98
|
name: rake
|
71
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -100,28 +128,56 @@ dependencies:
|
|
100
128
|
requirements:
|
101
129
|
- - "~>"
|
102
130
|
- !ruby/object:Gem::Version
|
103
|
-
version: '
|
131
|
+
version: '1.22'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '1.22'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rubocop-minitest
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0.15'
|
104
146
|
type: :development
|
105
147
|
prerelease: false
|
106
148
|
version_requirements: !ruby/object:Gem::Requirement
|
107
149
|
requirements:
|
108
150
|
- - "~>"
|
109
151
|
- !ruby/object:Gem::Version
|
110
|
-
version: '0.
|
152
|
+
version: '0.15'
|
111
153
|
- !ruby/object:Gem::Dependency
|
112
154
|
name: rubocop-performance
|
113
155
|
requirement: !ruby/object:Gem::Requirement
|
114
156
|
requirements:
|
115
157
|
- - "~>"
|
116
158
|
- !ruby/object:Gem::Version
|
117
|
-
version: '1.
|
159
|
+
version: '1.11'
|
118
160
|
type: :development
|
119
161
|
prerelease: false
|
120
162
|
version_requirements: !ruby/object:Gem::Requirement
|
121
163
|
requirements:
|
122
164
|
- - "~>"
|
123
165
|
- !ruby/object:Gem::Version
|
124
|
-
version: '1.
|
166
|
+
version: '1.11'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: rubocop-rake
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - "~>"
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0.6'
|
174
|
+
type: :development
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0.6'
|
125
181
|
- !ruby/object:Gem::Dependency
|
126
182
|
name: simplecov
|
127
183
|
requirement: !ruby/object:Gem::Requirement
|
@@ -136,7 +192,7 @@ dependencies:
|
|
136
192
|
- - ">="
|
137
193
|
- !ruby/object:Gem::Version
|
138
194
|
version: '0'
|
139
|
-
description:
|
195
|
+
description:
|
140
196
|
email: aladjev.andrew@gmail.com
|
141
197
|
executables: []
|
142
198
|
extensions:
|
@@ -151,6 +207,7 @@ files:
|
|
151
207
|
- ext/brs_ext/common.h
|
152
208
|
- ext/brs_ext/error.c
|
153
209
|
- ext/brs_ext/error.h
|
210
|
+
- ext/brs_ext/gvl.h
|
154
211
|
- ext/brs_ext/io.c
|
155
212
|
- ext/brs_ext/io.h
|
156
213
|
- ext/brs_ext/macro.h
|
@@ -185,23 +242,23 @@ homepage: https://github.com/andrew-aladev/ruby-brs
|
|
185
242
|
licenses:
|
186
243
|
- MIT
|
187
244
|
metadata: {}
|
188
|
-
post_install_message:
|
245
|
+
post_install_message:
|
189
246
|
rdoc_options: []
|
190
247
|
require_paths:
|
191
248
|
- lib
|
192
249
|
required_ruby_version: !ruby/object:Gem::Requirement
|
193
250
|
requirements:
|
194
|
-
- - "
|
251
|
+
- - ">="
|
195
252
|
- !ruby/object:Gem::Version
|
196
|
-
version: '2.
|
253
|
+
version: '2.5'
|
197
254
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
198
255
|
requirements:
|
199
256
|
- - ">="
|
200
257
|
- !ruby/object:Gem::Version
|
201
258
|
version: '0'
|
202
259
|
requirements: []
|
203
|
-
rubygems_version: 3.
|
204
|
-
signing_key:
|
260
|
+
rubygems_version: 3.2.22
|
261
|
+
signing_key:
|
205
262
|
specification_version: 4
|
206
263
|
summary: Ruby bindings for brotli library.
|
207
264
|
test_files: []
|