bytemapper 1.0.22 → 1.0.24

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9383a019c471ccf2979e92c7c2e8a8c7a20f5c63fa74613837c2d38a84632a52
4
- data.tar.gz: 903ecf62d057d5ee4f478e022df4129cccf1c9ce545ab60eeef1314bbcbaad67
3
+ metadata.gz: ea6f9b415c3147f7af5584a41f5f6c49dbe68fd7137771e6930bba37c8164400
4
+ data.tar.gz: c40ea7b989e39da462f13a2a9e43730eb8efdfdf5e5b4053d0c4d9ffd1eecd43
5
5
  SHA512:
6
- metadata.gz: 753673f95b723b32f1c0b1aa9dc88418e9e1bc740bc07185a4f5896c05fb388be68f23b5192aeba58bfb3d1c90368687cfda1d7d51471527b1e16e9b0d1b102e
7
- data.tar.gz: 21e687cb299ee9aee44a068df8c37cc7a5cca987b7c7175d3677eb3af9ae26a74e5ddc10c1ce8eada691502202a8b5d36dc65e19972e3ac8b70e3e47d2f223c3
6
+ metadata.gz: dfbbbd391b56398a95d77bb2e0777241684f4621d0d16a782af0dde25c10afa186817839e01ef659c15aa7b1a46ed7aab0c6a5811c08e8cc15b51fef0ec8ff41
7
+ data.tar.gz: 8c6e57cdf80bb6b921444a5b4d48ee56b682644534d411e9079fc7551018ed692415caa72066588d90c7966816bdc3ad7ee89600beca782afcace6656932f14a
@@ -20,6 +20,7 @@ module Bytemapper
20
20
  require 'bytemapper/type'
21
21
  require 'bytemapper/nameable'
22
22
  require 'bytemapper/chunk'
23
+ require 'bytemapper/table'
23
24
 
24
25
  @@registry = Registry.new
25
26
 
@@ -81,6 +82,10 @@ module Bytemapper
81
82
  end
82
83
  end
83
84
 
85
+ def repeat(obj, times = nil)
86
+ Table.new(obj, times)
87
+ end
88
+
84
89
  def registered?(obj)
85
90
  registry.registered?(obj)
86
91
  end
@@ -24,11 +24,16 @@ module Bytemapper
24
24
  @name = name
25
25
  @shape = shape
26
26
  @bytes = bytes.is_a?(StringIO) ? bytes : StringIO.new(bytes)
27
- @bytes.truncate(shape.size)
28
27
  replace(shape)
29
28
  each_pair do |k,v|
30
29
  self[k] = if v.is_a?(Hash)
31
30
  Chunk.new(@bytes.read(v.size), v, k)
31
+ elsif v.is_a?(Bytemapper::Table)
32
+ if v.unbounded?
33
+ v.populate(@bytes.read(@bytes.size-@bytes.pos))
34
+ else
35
+ v.populate(@bytes.read(v.capacity))
36
+ end
32
37
  else
33
38
  unpack(v)
34
39
  end
@@ -49,11 +54,20 @@ module Bytemapper
49
54
  bytes.string.split(//).map(&:chr)
50
55
  end
51
56
 
57
+ def capacity
58
+ shape.size
59
+ end
60
+
52
61
  def size
53
62
  bytes.size
54
63
  end
55
64
 
56
- def print
65
+ def consumed
66
+ size
67
+ end
68
+
69
+ def remaining
70
+ capacity - consumed
57
71
  end
58
72
 
59
73
  def unpack(value, endian = nil)
@@ -21,6 +21,8 @@ module Bytemapper
21
21
  k = prefix.nil? ? k : "#{prefix}_#{k}".to_sym
22
22
  if v.is_a?(Hash)
23
23
  v.flatten(flattened, k)
24
+ elsif v.is_a?(Bytemapper::Table)
25
+ v.each_with_index { |e,i| e.flatten(flattened, i) }
24
26
  else
25
27
  flattened[k] = v
26
28
  end
@@ -16,7 +16,11 @@
16
16
 
17
17
  module Bytemapper
18
18
  module Nameable
19
- attr_accessor :name
19
+ attr_reader :name
20
20
  attr_accessor :names
21
+
22
+ def name=(val)
23
+ @name ||= val.to_sym
24
+ end
21
25
  end
22
26
  end
@@ -0,0 +1,44 @@
1
+ module Bytemapper
2
+ module NilTimes
3
+ refine NilClass do
4
+ def times
5
+ 0
6
+ end
7
+ end
8
+ end
9
+
10
+ class Table < Array
11
+ include Flattenable
12
+ include Nameable
13
+ attr_reader :shape, :rows, :bytes
14
+ using NilTimes
15
+
16
+ def initialize(shape, rows = nil)
17
+ @shape = Bytemapper.get(shape)
18
+ rows.times { self << @shape }
19
+ end
20
+
21
+ def populate(bytes)
22
+ bytes = bytes.nil? ? '' : bytes
23
+ @bytes = bytes.is_a?(StringIO) ? bytes : StringIO.new(bytes)
24
+ @bytes.string.force_encoding(Encoding::ASCII_8BIT)
25
+ if unbounded?
26
+ (bytes.size / shape.size).times { self << @shape }
27
+ end
28
+
29
+ table = Table.new(shape)
30
+ table.clear
31
+ (bytes.size / shape.size).times { table << Chunk.new(@bytes.read(shape.size), shape, shape.name) }
32
+ table
33
+ end
34
+
35
+ def unbounded?
36
+ empty?
37
+ end
38
+
39
+ def size
40
+ empty? ? 0 : map(&:size).reduce(:+)
41
+ end
42
+ end
43
+ end
44
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bytemapper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.22
4
+ version: 1.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jefferson Hudson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-14 00:00:00.000000000 Z
11
+ date: 2020-08-14 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Model and interact with bytestrings using Ruby objects.
14
14
  email: jefferson.hudson@gmail.com
@@ -22,6 +22,7 @@ files:
22
22
  - lib/bytemapper/nameable.rb
23
23
  - lib/bytemapper/registry.rb
24
24
  - lib/bytemapper/shape.rb
25
+ - lib/bytemapper/table.rb
25
26
  - lib/bytemapper/type.rb
26
27
  - lib/bytemapper/typeable.rb
27
28
  homepage: https://github.com/l4cr0ss/bytemapper