ffi-struct_ex 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b5f6419c35f3fafa8e32d334891f9ff94c8de5d8
4
- data.tar.gz: 44f8717d43e0bd7704fbafd3a5b86f884bafe3c5
3
+ metadata.gz: 6d550f7884cc459c4dbf3f506f6952fc9dc2f345
4
+ data.tar.gz: 7087461425de5d646a04f5e8bc75749d908cbb7b
5
5
  SHA512:
6
- metadata.gz: 1f3ed97c400af758499755b85d04f06886a595bd5fd6a1cc729ba0dceaaa2df964368c45c26429cf9393a031b43da2473c35206f63e5f69efd629643f7a8760b
7
- data.tar.gz: 0d3840f2325ca19f4178121ad9bd450fb906c80f85ce4bb1be390e36a89490bff6b2f4e8db7ada1c6390add4b4b11a1d7351cbca82030d67fb1b10f5c9afcf0d
6
+ metadata.gz: 1db936827a6652292e2849fd93ea54ad7f14c5f2c53503c9be3f1cbebec24287541197e66d1162cc30ea0969fb31b8e2a3f996d39bbd34b28ba3f732fd0c8720
7
+ data.tar.gz: 4e85fe3b694f1ac30ea118e450f7c0e63df8f295c32fd33f9bb6cff1ddca0a850a8bbb3cd379e9828f5c0bb9c782808a232115f7915ab303140e25bcccb98ab1
data/README.md CHANGED
@@ -62,6 +62,8 @@ subject[:field_0].read #=> 0b0110_1101
62
62
 
63
63
  subject[:field_0] = {bits_0_2: 0b001, bit_3: 0b1, bit_4: 0b0, bits_5_7: 0b011}
64
64
  subject[:field_0].read #=> 0b0110_1001
65
+
66
+ subject[:field_0] == {bits_0_2: 0b001, bit_3: 0b1, bit_4: 0b0, bits_5_7: 0b011} #=> true
65
67
  ```
66
68
 
67
69
  ## Contributing
@@ -53,6 +53,7 @@ module FFI
53
53
  def layout(*descs)
54
54
  if descs.size == 0 || !descs[1].is_a?(Integer)
55
55
  super(*descs)
56
+ #@bits_size = self.size * 8
56
57
  else
57
58
  @bit_layouts = {}
58
59
 
@@ -83,6 +84,7 @@ module FFI
83
84
  end
84
85
 
85
86
  def alignment
87
+ return super unless self.bit_layouts
86
88
  #FIXME consider 24 bits situation
87
89
  FFI.find_type("uint#{bytes_size * 8}".to_sym).alignment
88
90
  end
@@ -108,6 +110,7 @@ module FFI
108
110
 
109
111
  def []=(bit_field_name, value)
110
112
  return super unless self.class.bit_layouts && self.class.bit_layouts.keys.include?(bit_field_name)
113
+
111
114
  value = look_for_value(bit_field_name, value)
112
115
 
113
116
  bit_layout = self.class.bit_layouts[bit_field_name]
@@ -135,6 +138,16 @@ module FFI
135
138
  self.class.bytes_size
136
139
  end
137
140
 
141
+ def ==(other)
142
+ if other.is_a?(Integer)
143
+ self.read == other
144
+ elsif other.is_a?(Hash)
145
+ other.all? {|k, v| self[k] == self.look_for_value(k, v)}
146
+ else
147
+ super
148
+ end
149
+ end
150
+
138
151
  def look_for_value(bit_field_name, value)
139
152
  #FIXME add error handling
140
153
  if value.kind_of?(Integer)
@@ -154,6 +167,8 @@ module FFI
154
167
  value.to_i(2)
155
168
  end
156
169
  end
170
+ else
171
+ value
157
172
  end
158
173
  end
159
174
  end
@@ -1,5 +1,5 @@
1
1
  module Ffi
2
2
  module StructEx
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -4,17 +4,25 @@ require 'ffi/struct_ex'
4
4
 
5
5
  class TestStructEx < Test::Unit::TestCase
6
6
  def test_bit_fields
7
- subject = Class.new(FFI::StructEx) do
7
+ subject_class = Class.new(FFI::StructEx) do
8
8
  layout :field_0, bit_fields(:bits_0_2, 3,
9
9
  :bit_3, 1,
10
10
  :bit_4, 1,
11
- :bits_5_7, 3),
11
+ :bits_5_7, 3,
12
+ :bits_8_15, 8),
12
13
  :field_1, :uint8,
13
14
  :field_2, :uint8,
14
- :field_3, [:uint8, 2]
15
- end.new
15
+ :field_3, :uint8
16
+ end
17
+
18
+ assert_equal(6, subject_class.size)
19
+ assert_equal(2, subject_class.alignment)
20
+ assert_equal(2, subject_class.offset_of(:field_1))
21
+
22
+ subject = subject_class.new
16
23
 
17
24
  assert_equal(FFI::StructEx, subject[:field_0].class.superclass)
25
+ assert_equal(2, subject[:field_0].size)
18
26
 
19
27
  subject[:field_0] = 0b0110_1001
20
28
  assert_equal(0b0110_1001, subject[:field_0].read)
@@ -27,6 +35,13 @@ class TestStructEx < Test::Unit::TestCase
27
35
  subject[:field_0] = {bits_0_2: 0b001, bit_3: 0b1, bit_4: 0b0, bits_5_7: 0b011}
28
36
  assert_equal(0b0110_1001, subject[:field_0].read)
29
37
  assert_equal(0b001, subject[:field_0][:bits_0_2])
38
+
39
+ assert(subject[:field_0] == {bits_0_2: 0b001, bit_3: 0b1, bit_4: 0b0, bits_5_7: 0b011})
40
+
41
+ subject[:field_1] = 1
42
+ subject[:field_2] = 2
43
+ subject[:field_3] = 3
44
+ assert(subject == {field_0: {bits_0_2: 0b001, bit_3: 0b1, bit_4: 0b0, bits_5_7: 0b011}, field_1: 1, field_2: 2, field_3: 3})
30
45
  end
31
46
 
32
47
  def test_pure_bit_fields
@@ -37,6 +52,9 @@ class TestStructEx < Test::Unit::TestCase
37
52
  :bits_5_7, 3
38
53
  end
39
54
 
55
+ assert_equal(1, subject_class.size)
56
+ assert_equal(1, subject_class.alignment)
57
+
40
58
  subject = subject_class.new
41
59
 
42
60
  subject[:bits_0_2] = 0b101
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ffi-struct_ex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruijia Li
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-18 00:00:00.000000000 Z
11
+ date: 2014-05-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi