bytemapper 1.0.22 → 1.0.24

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 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