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