BitStructEx 0.0.85 → 0.0.86
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.
- data/src/bit_struct/field.rb +1 -0
- data/src/bit_struct/nested.rb +1 -1
- data/src/bit_struct/struct_base.rb +23 -20
- metadata +1 -1
data/src/bit_struct/field.rb
CHANGED
data/src/bit_struct/nested.rb
CHANGED
@@ -61,7 +61,7 @@ module BitStruct
|
|
61
61
|
raise "No data?" unless new_data
|
62
62
|
if new_data.is_a? ByteData
|
63
63
|
raise "Cannot change endianess of ByteData object" if endianess
|
64
|
-
@data =
|
64
|
+
@data = new_data
|
65
65
|
else new_data
|
66
66
|
@data = ByteData.new new_data, endianess
|
67
67
|
end
|
@@ -69,14 +69,26 @@ module BitStruct
|
|
69
69
|
|
70
70
|
def to_s( delimiter = "\n" )
|
71
71
|
res = ''
|
72
|
-
|
73
|
-
slicer =
|
72
|
+
singleton.fields.each do |field|
|
73
|
+
slicer = get_slicer_for field
|
74
74
|
res += delimiter if res.length > 0 && delimiter
|
75
|
-
res += "#{field.name}
|
75
|
+
res += "#{field.name}=#{field.to_s slicer, delimiter}"
|
76
76
|
end
|
77
77
|
res
|
78
78
|
end
|
79
79
|
|
80
|
+
private
|
81
|
+
|
82
|
+
def get_slicer_for( field )
|
83
|
+
slicers[ field ] ||= self.class.create_slicer_for field
|
84
|
+
slicers[ field ].data = @data
|
85
|
+
slicers[ field ]
|
86
|
+
end
|
87
|
+
|
88
|
+
def slicers
|
89
|
+
@slicers ||= {}
|
90
|
+
end
|
91
|
+
|
80
92
|
class << self
|
81
93
|
|
82
94
|
def fields
|
@@ -92,19 +104,17 @@ module BitStruct
|
|
92
104
|
def add_field( field )
|
93
105
|
context = self
|
94
106
|
|
95
|
-
define_method "
|
96
|
-
context
|
107
|
+
define_method "singleton" do
|
108
|
+
context
|
97
109
|
end
|
98
110
|
|
99
111
|
define_method "#{field.name}" do
|
100
|
-
slicer =
|
101
|
-
slicer.data = @data
|
112
|
+
slicer = get_slicer_for field
|
102
113
|
field.send :read, slicer
|
103
114
|
end
|
104
115
|
|
105
116
|
define_method "#{field.name}=" do |val|
|
106
|
-
slicer =
|
107
|
-
slicer.data = @data
|
117
|
+
slicer = get_slicer_for field
|
108
118
|
field.send :write, slicer, val
|
109
119
|
end
|
110
120
|
|
@@ -113,12 +123,9 @@ module BitStruct
|
|
113
123
|
|
114
124
|
public
|
115
125
|
|
116
|
-
def
|
117
|
-
|
118
|
-
|
119
|
-
slicers[ field ] = BitSlicer.new bit_offset, bit_length
|
120
|
-
end
|
121
|
-
slicers[ field ]
|
126
|
+
def create_slicer_for( field )
|
127
|
+
bit_offset, bit_length = get_field_spec field
|
128
|
+
BitSlicer.new bit_offset, bit_length
|
122
129
|
end
|
123
130
|
|
124
131
|
private
|
@@ -148,10 +155,6 @@ module BitStruct
|
|
148
155
|
words.join + 'Field'
|
149
156
|
end
|
150
157
|
|
151
|
-
def slicers
|
152
|
-
@slicers ||= {}
|
153
|
-
end
|
154
|
-
|
155
158
|
end
|
156
159
|
|
157
160
|
end
|
metadata
CHANGED