FFI::Generator::Struct

Public Class Methods

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

Public Instance Methods

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

Private Instance Methods

accessors() click to toggle source
    # File lib/generator/struct.rb, line 52
52:       def accessors
53:         result = ""
54:         fields = (@node / 'cdecl').map do |field|
55:           [Node.new(:node => field).symname, "#{Type.new(:node => field, :typedefs => @typedefs)}"]
56:         end
57:         fields.each do |field|
58:           if field[1] == ':string'
59:             result << self.class.string_accessors(field[0], @indent + 2)
60:           elsif field[1] =~ /^callback/ or @typedefs[field[1].delete(':')] =~ /^callback/
61:             result << self.class.callback_accessors(field[0], @indent + 2)
62:           end
63:         end
64:         result += "\n" unless result.empty?
65:         result
66:       end
fields() click to toggle source
    # File lib/generator/struct.rb, line 45
45:       def fields
46:         (@node / 'cdecl').inject([]) do |array, field|
47:           type_node = Type.new(:node => field, :typedefs => @typedefs).to_s
48:           type = type_node.to_s
49:           array << [":#{Node.new(:node => field).symname}", type == ':string' ? ':pointer' : type]
50:         end
51:       end
klass_string() click to toggle source
    # File lib/generator/struct.rb, line 42
42:       def klass_string
43:         @indent_str + "class #{@name} < FFI::Struct\n"
44:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.