Top Level Namespace
Defined Under Namespace
Classes: Bool, Ipv4Address, Ipv6Address, MacAddress
Instance Method Summary
collapse
Instance Method Details
#_def_enum(size) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
# File 'lib/enum.rb', line 3
def _def_enum(size)
eval %(
class Enum#{size} < BinData::Primitive
mandatory_parameter :list
endian :big
uint#{size} :enum, initial_value: 0
def get
list.invert.fetch(enum)
rescue KeyError
enum
end
def set(value)
self.enum = list.fetch(value)
rescue KeyError
self.enum = value
end
private
def list
list = eval_parameter(:list)
case list
when Array
shift = 0
list.each_with_object({}) do |each, result|
result[each] = shift
shift += 1
result
end
when Hash
list
end
end
end
)
end
|
#_def_flags(size) ⇒ Object
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'lib/flags.rb', line 3
def _def_flags(size)
eval %(
class Flags#{size} < BinData::Primitive
mandatory_parameter :list
endian :big
uint#{size} :flags, initial_value: 0
def get
list.each_with_object([]) do |(key, value), result|
result << key if (flags & value != 0) || (flags == value)
result
end
end
def set(value)
value.each do |each|
fail "Invalid flag: \#{value}" unless list.keys.include?(each)
end
self.flags = value.empty? ?
0 :
value.map { |each| list[each] }.inject(:|)
end
private
def list
list = eval_parameter(:list)
case list
when Array
shift = 0
list.each_with_object({}) do |each, result|
result[each] = 1 << shift
shift += 1
result
end
when Hash
list
end
end
end
)
end
|