class FFI::Generator::Struct

Public Class Methods

callback_accessors(field_name, indent = 0) click to toggle source
# File lib/generator/struct.rb, line 16
      def self.callback_accessors(field_name, indent = 0)
        result = <<-code
def #{field_name}=(cb)
  @#{field_name} = cb
  self[:#{field_name}] = @#{field_name}
end
def #{field_name}
  @#{field_name}
end
code
      result.split("\n").collect { |line| ' ' * indent + line }.join("\n") << "\n"
      end
camelcase(name) click to toggle source
# File lib/generator/struct.rb, line 28
def self.camelcase(name)
  name.gsub(/^_?\w|\_\w/) { |c| c.upcase }.delete('_')
end
new(params = { }) click to toggle source
# File lib/generator/struct.rb, line 31
def initialize(params = { })
  super
  @name = self.class.camelcase(@symname)
end
string_accessors(field_name, indent = 0) click to toggle source
# File lib/generator/struct.rb, line 4
      def self.string_accessors(field_name, indent = 0)
        result = <<-code
def #{field_name}=(str)
  @#{field_name} = FFI::MemoryPointer.from_string(str)
  self[:#{field_name}] = @#{field_name}
end
def #{field_name}
  @#{field_name}.get_string(0)
end
code
      result.split("\n").map { |line| ' ' * indent + line }.join("\n") << "\n"
      end

Public Instance Methods

to_s() click to toggle source
# File lib/generator/struct.rb, line 35
def to_s
  fields_str = fields.inject("") do |str, f|
    str << @indent_str + ' ' * 9 << f.join(', ') << ",\n"
  end
  code = klass_string + @indent_str + "  layout(\n" + fields_str.chomp.chomp(',') + "\n" + @indent_str + "  )\n" + accessors + @indent_str + "end\n"
end