packed_struct 0.1.2 → 0.2.0
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.
- data/lib/packed_struct/directive.rb +28 -0
- data/lib/packed_struct/package.rb +26 -1
- data/lib/packed_struct/version.rb +1 -1
- metadata +1 -1
@@ -133,6 +133,34 @@ module PackedStruct
|
|
133
133
|
dir
|
134
134
|
end
|
135
135
|
|
136
|
+
# The number of bytes this takes up in the resulting packed string.
|
137
|
+
#
|
138
|
+
# @return [Numeric]
|
139
|
+
def bytesize
|
140
|
+
case @tags[:type]
|
141
|
+
when nil
|
142
|
+
size / 8
|
143
|
+
when :short
|
144
|
+
2
|
145
|
+
when :int
|
146
|
+
4
|
147
|
+
when :long
|
148
|
+
4
|
149
|
+
when :float
|
150
|
+
if sub_names.include?(:double)
|
151
|
+
8
|
152
|
+
else
|
153
|
+
4
|
154
|
+
end
|
155
|
+
when :null
|
156
|
+
size
|
157
|
+
when :string
|
158
|
+
size
|
159
|
+
else
|
160
|
+
0
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
136
164
|
private
|
137
165
|
|
138
166
|
# Returns all of the names of the subs, and caches it.
|
@@ -9,7 +9,7 @@ module PackedStruct
|
|
9
9
|
#
|
10
10
|
# @return [Array<Directive>]
|
11
11
|
def directives
|
12
|
-
@directives.select
|
12
|
+
@directives = @directives.select { |x| x.parent.nil? }
|
13
13
|
@directives
|
14
14
|
end
|
15
15
|
|
@@ -79,6 +79,31 @@ module PackedStruct
|
|
79
79
|
parts[directive.name] = value
|
80
80
|
end
|
81
81
|
|
82
|
+
|
83
|
+
directives.each { |x| x.value = nil }
|
84
|
+
|
85
|
+
parts.delete(:null) {}
|
86
|
+
parts
|
87
|
+
end
|
88
|
+
# Unpacks from a socket.
|
89
|
+
#
|
90
|
+
# @param sock [#read] the socket to unpack from.
|
91
|
+
# @return [Hash<Symbol, Object>] the unpacked data.
|
92
|
+
def unpack_from_socket(sock)
|
93
|
+
read = ""
|
94
|
+
total = ""
|
95
|
+
parts = {}
|
96
|
+
|
97
|
+
directives.each_with_index do |directive, i|
|
98
|
+
total << directive.to_s
|
99
|
+
read << sock.read(directive.bytesize)
|
100
|
+
value = read.unpack(total)[i]
|
101
|
+
directive.value = value
|
102
|
+
parts[directive.name] = value
|
103
|
+
end
|
104
|
+
|
105
|
+
p read
|
106
|
+
|
82
107
|
directives.each { |x| x.value = nil }
|
83
108
|
|
84
109
|
parts.delete(:null) {}
|