libbin 1.0.3 → 1.0.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|