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.
@@ -14,6 +14,7 @@ module BitStruct
14
14
  end
15
15
 
16
16
  def to_s( slicer, delimiter = nil )
17
+ return "nil" unless slicer.data
17
18
  read( slicer ).to_s
18
19
  end
19
20
 
@@ -30,7 +30,7 @@ module BitStruct
30
30
  end
31
31
 
32
32
  def to_s( slicer, delimiter )
33
- "{ #{read( slicer ).to_s delimiter} }"
33
+ "{#{read( slicer ).to_s delimiter}}"
34
34
  end
35
35
 
36
36
  end
@@ -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 = new_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
- self.class.fields.each do |field|
73
- slicer = self.class.get_slicer_for field
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} = #{field.to_s slicer, delimiter}"
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 "gsf" do |field|
96
- context.send :get_slicer_for, field
107
+ define_method "singleton" do
108
+ context
97
109
  end
98
110
 
99
111
  define_method "#{field.name}" do
100
- slicer = context.send :get_slicer_for, field
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 = context.send :get_slicer_for, field
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 get_slicer_for( field )
117
- unless slicers[ field ]
118
- bit_offset, bit_length = get_field_spec field
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
@@ -3,7 +3,7 @@ rubygems_version: 0.8.11
3
3
  specification_version: 1
4
4
  name: BitStructEx
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.85
6
+ version: 0.0.86
7
7
  date: 2006-05-18 00:00:00 +02:00
8
8
  summary: Simple DSL for defining bit-based structures on byte data.
9
9
  require_paths: