Class: Fiddley::Struct
- Inherits:
-
Object
show all
- Extended by:
- Utils
- Includes:
- Utils
- Defined in:
- lib/fiddley/struct.rb
Constant Summary
Constants included
from Utils
Utils::SIZET_FORMAT, Utils::SIZET_TYPE
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Utils
str2value, type2offset_size, type2size, type2str, type2type, value2str
Constructor Details
#initialize ⇒ Struct
Returns a new instance of Struct.
36
37
38
|
# File 'lib/fiddley/struct.rb', line 36
def initialize
@ptr = Fiddle::Pointer.malloc(self.class.size)
end
|
Class Method Details
.layout(*args) ⇒ Object
9
10
11
12
13
14
15
16
|
# File 'lib/fiddley/struct.rb', line 9
def self.layout(*args)
@members = {}
@size = 0
args.each_slice(2) do |name, type|
@members[name] = [type, @size]
@size += type2offset_size(type)
end
end
|
.members ⇒ Object
22
23
24
|
# File 'lib/fiddley/struct.rb', line 22
def self.members
@members
end
|
.offset_of(key) ⇒ Object
30
31
32
33
34
|
# File 'lib/fiddley/struct.rb', line 30
def self.offset_of(key)
raise IndexError, "#{key} is not defined" unless members.has_key?(key)
type, offset = members[key]
offset
end
|
.ptr ⇒ Object
18
19
20
|
# File 'lib/fiddley/struct.rb', line 18
def self.ptr
:pointer
end
|
.size ⇒ Object
26
27
28
|
# File 'lib/fiddley/struct.rb', line 26
def self.size
@size
end
|
Instance Method Details
#[](key) ⇒ Object
40
41
42
43
44
|
# File 'lib/fiddley/struct.rb', line 40
def [](key)
raise IndexError, "#{key} is not defined" unless self.class.members.has_key?(key)
type, offset = self.class.members[key]
str2value(type, @ptr[offset, type2size(type)])
end
|
#[]=(key, value) ⇒ Object
46
47
48
49
50
|
# File 'lib/fiddley/struct.rb', line 46
def []=(key, value)
raise IndexError, "#{key} is not defined" unless self.class.members.has_key?(key)
type, offset = self.class.members[key]
@ptr[offset, type2size(type)] = value2str(type, value)
end
|
#to_ptr ⇒ Object
52
53
54
|
# File 'lib/fiddley/struct.rb', line 52
def to_ptr
@ptr
end
|