BitStructEx 0.0.86 → 0.0.91

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.
@@ -72,36 +72,32 @@ module BitStruct
72
72
 
73
73
  #private
74
74
 
75
- def get_data( idx )
76
- @data[ idx ]
77
- end
78
-
79
75
  def set_data( idx, val )
80
76
  @data[ idx ] = val
81
77
  end
82
78
 
83
79
  def first_byte
84
- data.length - ( ( @bit_offset + @bit_length ) / 8.0 ).ceil
80
+ @first_byte ||= ( data.length - ( ( @bit_offset + @bit_length ) / 8.0 ).ceil )
85
81
  end
86
82
 
87
83
  def last_byte
88
- data.length - 1 - @bit_offset / 8
84
+ @last_byte ||= ( data.length - 1 - @bit_offset / 8 )
89
85
  end
90
86
 
91
87
  def length_in_bytes
92
- ( @bit_length / 8.0 ).ceil
88
+ @length_in_bytes ||= ( @bit_length / 8.0 ).ceil
93
89
  end
94
90
 
95
91
  def insert_length_in_bytes
96
- ( ( ( @bit_offset & 7 ) + @bit_length ) / 8.0 ).ceil
92
+ @insert_length_in_bytes ||= ( ( ( @bit_offset & 7 ) + @bit_length ) / 8.0 ).ceil
97
93
  end
98
94
 
99
95
  def masked_first_byte
100
- get_data( first_byte ) & merge_first_byte_mask
96
+ @data[ first_byte ] & merge_first_byte_mask
101
97
  end
102
98
 
103
99
  def masked_last_byte
104
- get_data( last_byte ) & merge_last_byte_mask
100
+ @data[ last_byte ] & merge_last_byte_mask
105
101
  end
106
102
 
107
103
  def required_shift
@@ -111,7 +107,7 @@ module BitStruct
111
107
  def get_raw_bytes
112
108
  raw_bytes = []
113
109
  first_byte.upto( last_byte ) do |idx|
114
- raw_bytes << get_data( idx )
110
+ raw_bytes << @data[ idx ]
115
111
  end
116
112
  raw_bytes
117
113
  end
@@ -123,20 +119,22 @@ module BitStruct
123
119
  end
124
120
 
125
121
  def highest_byte_mask
122
+ return @highest_byte_mask if @highest_byte_mask
126
123
  mask_bits = ( ( @bit_length ) & 7 )
127
124
  mask_bits = 8 if mask_bits == 0
128
- ( 2 ** mask_bits ) - 1
125
+ @highest_byte_mask = ( 2 ** mask_bits ) - 1
129
126
  end
130
127
 
131
128
  def insert_first_byte_mask
129
+ return @insert_first_byte_mask if @insert_first_byte_mask
132
130
  mask_bits = ( ( @bit_offset + @bit_length ) & 7 )
133
131
  mask_bits = 8 if mask_bits == 0
134
- ( 2 ** mask_bits ) - 1
132
+ @insert_first_byte_mask = ( 2 ** mask_bits ) - 1
135
133
  end
136
134
 
137
135
  def insert_last_byte_mask
138
- mask_bits = 0xFF
139
- ( mask_bits << ( @bit_offset & 7 ) ) & 0xFF
136
+ return @insert_last_byte_mask if @insert_last_byte_mask
137
+ @insert_last_byte_mask = ( ( mask_bits = 0xFF ) << ( @bit_offset & 7 ) ) & 0xFF
140
138
  end
141
139
 
142
140
  def merge_first_byte_mask
@@ -7,64 +7,17 @@ module BitStruct
7
7
 
8
8
  include Endianess
9
9
 
10
- def initialize( data, endianess = nil )
10
+ def self.endianize( data, endianess = nil )
11
11
  raise "Bad input" unless data.respond_to? "[]".to_sym
12
12
  raise "Unknown endianess" unless valid endianess
13
- @data = data
14
- @endianess = endianess || BIG_ENDIAN
13
+ data = data.reverse if ( endianess || BIG_ENDIAN ) == LITTLE_ENDIAN
14
+ data
15
15
  end
16
16
 
17
- def size
18
- @data.size
19
- end
20
-
21
- def length
22
- @data.length
23
- end
24
-
25
- def each
26
- 0.upto( size - 1 ) { |idx| yield self[ idx ] }
27
- end
28
-
29
- def to_s
30
- str = ''
31
- each { |b| str << b }
32
- str
33
- end
34
-
35
- def []( idx )
36
- @data[ endianized( idx ) ]
37
- end
38
-
39
- def []=( idx, val )
40
- @data[ endianized( idx ) ] = val
41
- end
42
-
43
- def reverse
44
- ReversedByteData.new self, BIG_ENDIAN
45
- end
46
-
47
- private
48
-
49
- def valid( endianess )
17
+ def self.valid( endianess )
50
18
  endianess == nil || endianess == LITTLE_ENDIAN || endianess == BIG_ENDIAN
51
19
  end
52
20
 
53
- def endianized( idx )
54
- return idx if @endianess == BIG_ENDIAN
55
- return @data.length - idx - 1 if @endianess == LITTLE_ENDIAN
56
- end
57
-
58
- end
59
-
60
- class ReversedByteData < ByteData
61
-
62
- alias super_endianized endianized
63
-
64
- def endianized( idx )
65
- res = super_endianized( idx )
66
- @data.length - res - 1
67
- end
68
21
  end
69
22
 
70
23
  end
@@ -59,12 +59,7 @@ module BitStruct
59
59
 
60
60
  def set_data( new_data, endianess = nil )
61
61
  raise "No data?" unless new_data
62
- if new_data.is_a? ByteData
63
- raise "Cannot change endianess of ByteData object" if endianess
64
- @data = new_data
65
- else new_data
66
- @data = ByteData.new new_data, endianess
67
- end
62
+ @data = ByteData.endianize new_data, endianess
68
63
  end
69
64
 
70
65
  def to_s( delimiter = "\n" )
metadata CHANGED
@@ -3,8 +3,8 @@ 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.86
7
- date: 2006-05-18 00:00:00 +02:00
6
+ version: 0.0.91
7
+ date: 2006-06-04 00:00:00 +02:00
8
8
  summary: Simple DSL for defining bit-based structures on byte data.
9
9
  require_paths:
10
10
  - src