class Fiddley::Struct
Public Class Methods
layout(*args)
click to toggle source
# 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()
click to toggle source
# File lib/fiddley/struct.rb, line 22 def self.members @members end
new()
click to toggle source
# File lib/fiddley/struct.rb, line 36 def initialize @ptr = Fiddle::Pointer.malloc(self.class.size) end
offset_of(key)
click to toggle source
# 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()
click to toggle source
# File lib/fiddley/struct.rb, line 18 def self.ptr :pointer end
size()
click to toggle source
# File lib/fiddley/struct.rb, line 26 def self.size @size end
Public Instance Methods
[](key)
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# File lib/fiddley/struct.rb, line 52 def to_ptr @ptr end