BitStructEx 0.0.86 → 0.0.91

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