libbin 1.0.3 → 1.0.4
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/LICENSE +0 -0
- data/ext/libbin/extconf.rb +0 -0
- data/ext/libbin/half.c +0 -0
- data/ext/libbin/half.h +0 -0
- data/ext/libbin/libbin_c.c +0 -0
- data/ext/libbin/pghalf.c +0 -0
- data/ext/libbin/pghalf.h +0 -0
- data/lib/libbin.rb +48 -47
- data/lib/libbin/alignment.rb +0 -0
- data/lib/libbin/data_types.rb +37 -9
- data/libbin.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 230be2238c11ec4505d14cea8a43181b6b006cd3db0eccc4d40d1fb117912681
|
4
|
+
data.tar.gz: c21f1a9ab288be527d14eeea80f248f9332d98d3dc8351dd811536aaa24850f0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a8fbca741eb24035f80751e3eaf49a3b1b89ac1dbb8f4ae9cec3b58c77ddaf2e8b93c74af781cde5756e07d4a4fd115d07e703a8b5f8ba537da104c82f4a845d
|
7
|
+
data.tar.gz: 307b2a33d3d6d3357bc8c59079dfa0bbdb62a9e189894abde7d9b32bcf180c42b5614dcdb4ccdcebdc593c40e32afe59c3ad018db50a3ecff8568c833034778e
|
data/LICENSE
CHANGED
File without changes
|
data/ext/libbin/extconf.rb
CHANGED
File without changes
|
data/ext/libbin/half.c
CHANGED
File without changes
|
data/ext/libbin/half.h
CHANGED
File without changes
|
data/ext/libbin/libbin_c.c
CHANGED
File without changes
|
data/ext/libbin/pghalf.c
CHANGED
File without changes
|
data/ext/libbin/pghalf.h
CHANGED
File without changes
|
data/lib/libbin.rb
CHANGED
@@ -117,10 +117,11 @@ module LibBin
|
|
117
117
|
end
|
118
118
|
end
|
119
119
|
|
120
|
-
def __decode_seek_offset(offset)
|
120
|
+
def __decode_seek_offset(offset, relative_offset)
|
121
121
|
return nil unless offset
|
122
122
|
offset = __decode_expression(offset)
|
123
123
|
return false if offset == 0x0
|
124
|
+
offset += @__position if relative_offset
|
124
125
|
@__cur_position = offset
|
125
126
|
@__input.seek(offset) if @__input
|
126
127
|
@__output.seek(offset) if @__output
|
@@ -141,31 +142,31 @@ module LibBin
|
|
141
142
|
return __decode_expression(type)
|
142
143
|
end
|
143
144
|
|
144
|
-
def __decode_static_conditions(
|
145
|
+
def __decode_static_conditions(field)
|
145
146
|
@__offset = nil
|
146
147
|
@__condition = nil
|
147
148
|
@__type = nil
|
148
149
|
@__count = nil
|
149
|
-
unless sequence
|
150
|
-
@__offset = __decode_seek_offset(offset)
|
150
|
+
unless field.sequence?
|
151
|
+
@__offset = __decode_seek_offset(field.offset, field.relative_offset?)
|
151
152
|
throw :ignored, nil if @__offset == false
|
152
|
-
@__condition = __decode_condition(condition)
|
153
|
+
@__condition = __decode_condition(field.condition)
|
153
154
|
throw :ignored, nil unless @__condition
|
154
|
-
@__type = __decode_type(type)
|
155
|
+
@__type = __decode_type(field.type)
|
155
156
|
end
|
156
|
-
@__count = __decode_count(count)
|
157
|
+
@__count = __decode_count(field.count)
|
157
158
|
end
|
158
159
|
|
159
|
-
def __decode_dynamic_conditions(
|
160
|
-
return true unless sequence
|
160
|
+
def __decode_dynamic_conditions(field)
|
161
|
+
return true unless field.sequence?
|
161
162
|
@__offset = nil
|
162
163
|
@__condition = nil
|
163
164
|
@__type = nil
|
164
|
-
@__offset = __decode_seek_offset(offset)
|
165
|
+
@__offset = __decode_seek_offset(field.offset, field.relative_offset?)
|
165
166
|
return false if @__offset == false
|
166
|
-
@__condition = __decode_condition(condition)
|
167
|
+
@__condition = __decode_condition(field.condition)
|
167
168
|
return false unless @__condition
|
168
|
-
@__type = __decode_type(type)
|
169
|
+
@__type = __decode_type(field.type)
|
169
170
|
return true
|
170
171
|
end
|
171
172
|
|
@@ -177,61 +178,61 @@ module LibBin
|
|
177
178
|
@__condition = nil
|
178
179
|
end
|
179
180
|
|
180
|
-
def __convert_field(field
|
181
|
-
__decode_static_conditions(
|
181
|
+
def __convert_field(field)
|
182
|
+
__decode_static_conditions(field)
|
182
183
|
vs = @__count.times.collect do |it|
|
183
184
|
@__iterator = it
|
184
|
-
if __decode_dynamic_conditions(
|
185
|
+
if __decode_dynamic_conditions(field)
|
185
186
|
@__type::convert(@__input, @__output, @__input_big, @__output_big, self, it)
|
186
187
|
else
|
187
188
|
nil
|
188
189
|
end
|
189
190
|
end
|
190
191
|
__restore_context
|
191
|
-
vs = vs.first unless count
|
192
|
+
vs = vs.first unless field.count
|
192
193
|
vs
|
193
194
|
end
|
194
195
|
|
195
|
-
def __load_field(field
|
196
|
-
__decode_static_conditions(
|
196
|
+
def __load_field(field)
|
197
|
+
__decode_static_conditions(field)
|
197
198
|
vs = @__count.times.collect do |it|
|
198
199
|
@__iterator = it
|
199
|
-
if __decode_dynamic_conditions(
|
200
|
+
if __decode_dynamic_conditions(field)
|
200
201
|
@__type::load(@__input, @__input_big, self, it)
|
201
202
|
else
|
202
203
|
nil
|
203
204
|
end
|
204
205
|
end
|
205
206
|
__restore_context
|
206
|
-
vs = vs.first unless count
|
207
|
+
vs = vs.first unless field.count
|
207
208
|
vs
|
208
209
|
end
|
209
210
|
|
210
|
-
def __dump_field(vs, field
|
211
|
-
__decode_static_conditions(
|
212
|
-
vs = [vs] unless count
|
211
|
+
def __dump_field(vs, field)
|
212
|
+
__decode_static_conditions(field)
|
213
|
+
vs = [vs] unless field.count
|
213
214
|
vs.each_with_index do |v, it|
|
214
215
|
@__iterator = it
|
215
|
-
if __decode_dynamic_conditions(
|
216
|
+
if __decode_dynamic_conditions(field)
|
216
217
|
@__type::dump(v, @__output, @__output_big, self, it)
|
217
218
|
end
|
218
219
|
end
|
219
220
|
__restore_context
|
220
221
|
end
|
221
222
|
|
222
|
-
def __shape_field(vs, previous_offset, kind, field
|
223
|
-
__decode_static_conditions(
|
224
|
-
vs = [vs] unless count
|
223
|
+
def __shape_field(vs, previous_offset, kind, field)
|
224
|
+
__decode_static_conditions(field)
|
225
|
+
vs = [vs] unless field.count
|
225
226
|
vs = vs.each_with_index.collect do |v, it|
|
226
227
|
@__iterator = it
|
227
|
-
if __decode_dynamic_conditions(
|
228
|
+
if __decode_dynamic_conditions(field)
|
228
229
|
sh = @__type::shape(v, @__cur_position, self, it, kind)
|
229
230
|
@__cur_position = sh.last + 1 if sh.last && sh.last >= 0
|
230
231
|
sh
|
231
232
|
end
|
232
233
|
end
|
233
234
|
__restore_context
|
234
|
-
vs = vs.first unless count
|
235
|
+
vs = vs.first unless field.count
|
235
236
|
vs
|
236
237
|
end
|
237
238
|
|
@@ -242,15 +243,15 @@ module LibBin
|
|
242
243
|
def __shape(previous_offset = 0, parent = nil, index = nil, kind = DataShape)
|
243
244
|
__set_size_type(previous_offset, parent, index)
|
244
245
|
members = {}
|
245
|
-
self.class.instance_variable_get(:@fields).each { |
|
246
|
+
self.class.instance_variable_get(:@fields).each { |field|
|
246
247
|
begin
|
247
|
-
vs = send(name)
|
248
|
+
vs = send(field.name)
|
248
249
|
member = catch(:ignored) do
|
249
|
-
__shape_field(vs, previous_offset, kind,
|
250
|
+
__shape_field(vs, previous_offset, kind, field)
|
250
251
|
end
|
251
|
-
members[name] = member
|
252
|
+
members[field.name] = member
|
252
253
|
rescue
|
253
|
-
STDERR.puts "#{self.class}: #{name}(#{type})"
|
254
|
+
STDERR.puts "#{self.class}: #{field.name}(#{field.type})"
|
254
255
|
raise
|
255
256
|
end
|
256
257
|
}
|
@@ -260,14 +261,14 @@ module LibBin
|
|
260
261
|
end
|
261
262
|
|
262
263
|
def __convert_fields
|
263
|
-
self.class.instance_variable_get(:@fields).each { |
|
264
|
+
self.class.instance_variable_get(:@fields).each { |field|
|
264
265
|
begin
|
265
266
|
vs = catch(:ignored) do
|
266
|
-
__convert_field(
|
267
|
+
__convert_field(field)
|
267
268
|
end
|
268
|
-
send("#{name}=", vs)
|
269
|
+
send("#{field.name}=", vs)
|
269
270
|
rescue
|
270
|
-
STDERR.puts "#{self.class}: #{name}(#{type})"
|
271
|
+
STDERR.puts "#{self.class}: #{field.name}(#{field.type})"
|
271
272
|
raise
|
272
273
|
end
|
273
274
|
}
|
@@ -275,14 +276,14 @@ module LibBin
|
|
275
276
|
end
|
276
277
|
|
277
278
|
def __load_fields
|
278
|
-
self.class.instance_variable_get(:@fields).each { |
|
279
|
+
self.class.instance_variable_get(:@fields).each { |field|
|
279
280
|
begin
|
280
281
|
vs = catch(:ignored) do
|
281
|
-
__load_field(
|
282
|
+
__load_field(field)
|
282
283
|
end
|
283
|
-
send("#{name}=", vs)
|
284
|
+
send("#{field.name}=", vs)
|
284
285
|
rescue
|
285
|
-
STDERR.puts "#{self.class}: #{name}(#{type})"
|
286
|
+
STDERR.puts "#{self.class}: #{field.name}(#{field.type})"
|
286
287
|
raise
|
287
288
|
end
|
288
289
|
}
|
@@ -290,14 +291,14 @@ module LibBin
|
|
290
291
|
end
|
291
292
|
|
292
293
|
def __dump_fields
|
293
|
-
self.class.instance_variable_get(:@fields).each { |
|
294
|
+
self.class.instance_variable_get(:@fields).each { |field|
|
294
295
|
begin
|
295
|
-
vs = send(name)
|
296
|
+
vs = send(field.name)
|
296
297
|
catch(:ignored) do
|
297
|
-
__dump_field(vs,
|
298
|
+
__dump_field(vs, field)
|
298
299
|
end
|
299
300
|
rescue
|
300
|
-
STDERR.puts "#{self.class}: #{name}(#{type})"
|
301
|
+
STDERR.puts "#{self.class}: #{field.name}(#{field.type})"
|
301
302
|
raise
|
302
303
|
end
|
303
304
|
}
|
@@ -346,7 +347,7 @@ module LibBin
|
|
346
347
|
end
|
347
348
|
|
348
349
|
def self.shape(value, previous_offset = 0, parent = nil, index = nil, kind = DataShape)
|
349
|
-
value.__shape(previous_offset, parent, index, kind
|
350
|
+
value.__shape(previous_offset, parent, index, kind)
|
350
351
|
end
|
351
352
|
|
352
353
|
end
|
data/lib/libbin/alignment.rb
CHANGED
File without changes
|
data/lib/libbin/data_types.rb
CHANGED
@@ -70,6 +70,34 @@ module LibBin
|
|
70
70
|
|
71
71
|
end
|
72
72
|
|
73
|
+
class Field
|
74
|
+
attr_reader :name,
|
75
|
+
:type,
|
76
|
+
:count,
|
77
|
+
:offset,
|
78
|
+
:sequence,
|
79
|
+
:condition
|
80
|
+
|
81
|
+
def sequence?
|
82
|
+
@sequence
|
83
|
+
end
|
84
|
+
|
85
|
+
def relative_offset?
|
86
|
+
@relative_offset
|
87
|
+
end
|
88
|
+
|
89
|
+
def initialize(name, type, count, offset, sequence, condition, relative_offset)
|
90
|
+
@name = name
|
91
|
+
@type = type
|
92
|
+
@count = count
|
93
|
+
@offset = offset
|
94
|
+
@sequence = sequence
|
95
|
+
@condition = condition
|
96
|
+
@relative_offset = relative_offset
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
73
101
|
class DataConverter
|
74
102
|
|
75
103
|
rl = lambda { |type, str|
|
@@ -340,17 +368,17 @@ module LibBin
|
|
340
368
|
|
341
369
|
end
|
342
370
|
|
343
|
-
def self.register_field(field, type, count: nil, offset: nil, sequence: false, condition: nil)
|
371
|
+
def self.register_field(field, type, count: nil, offset: nil, sequence: false, condition: nil, relative_offset: false)
|
344
372
|
if type.kind_of?(Symbol)
|
345
373
|
if type[0] == 'a'
|
346
|
-
|
347
|
-
@fields.push([field, c, count, offset, sequence, condition])
|
374
|
+
real_type = Class::new(Str) do init(sym) end
|
348
375
|
else
|
349
|
-
|
376
|
+
real_type = const_get(SCALAR_TYPES[type][0])
|
350
377
|
end
|
351
378
|
else
|
352
|
-
|
379
|
+
real_type = type
|
353
380
|
end
|
381
|
+
@fields.push(Field::new(field, real_type, count, offset, sequence, condition, relative_offset))
|
354
382
|
attr_accessor field
|
355
383
|
end
|
356
384
|
|
@@ -361,8 +389,8 @@ module LibBin
|
|
361
389
|
init(#{symbol.inspect})
|
362
390
|
end
|
363
391
|
|
364
|
-
def self.#{name}(field, count: nil, offset: nil, sequence: false, condition: nil)
|
365
|
-
@fields.push(
|
392
|
+
def self.#{name}(field, count: nil, offset: nil, sequence: false, condition: nil, relative_offset: false)
|
393
|
+
@fields.push(Field::new(field, #{klassname}, count, offset, sequence, condition, relative_offset))
|
366
394
|
attr_accessor field
|
367
395
|
end
|
368
396
|
EOF
|
@@ -401,12 +429,12 @@ EOF
|
|
401
429
|
create_scalar_type(:pghalf_le)
|
402
430
|
create_scalar_type(:pghalf_be)
|
403
431
|
|
404
|
-
def self.string( field, length = nil, count: nil, offset: nil, sequence: false, condition: nil)
|
432
|
+
def self.string( field, length = nil, count: nil, offset: nil, sequence: false, condition: nil, relative_offset: false)
|
405
433
|
sym = (length ? :"a#{length}" : :"a*")
|
406
434
|
c = Class::new(Str) do
|
407
435
|
init(sym)
|
408
436
|
end
|
409
|
-
@fields.push(
|
437
|
+
@fields.push(Field::new(field, c, count, offset, sequence, condition, relative_offset))
|
410
438
|
attr_accessor field
|
411
439
|
end
|
412
440
|
|
data/libbin.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libbin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brice Videau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-09-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: float-formats
|