ffi-struct_ex 0.0.1 → 0.0.2

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.
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