# 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
# File lib/generator/struct.rb, line 28 28: def self.camelcase(name) 29: name.gsub(/^_?\w|\_\w/) { |c| c.upcase }.delete('_') 30: end
# File lib/generator/struct.rb, line 31 31: def initialize(params = { }) 32: super 33: @name = self.class.camelcase(@symname) 34: end
# 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
# 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
# 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
# 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
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.