BitStructEx 0.0.85 → 0.0.86

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: