class GirFFI::Builders::MappingMethodBuilder

Implements the creation mapping method for a callback or vfunc handler. This method converts arguments from C to Ruby, and the result from Ruby to C.

TODO: Inherit from BaseMethodBuilder

Public Class Methods

for_callback(argument_infos, return_value_info) click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 16
def self.for_callback(argument_infos, return_value_info)
  new nil, argument_infos, return_value_info, CallbackArgumentBuilder
end
for_vfunc(receiver_info, argument_infos, return_value_info) click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 20
def self.for_vfunc(receiver_info, argument_infos, return_value_info)
  new receiver_info, argument_infos, return_value_info, VFuncArgumentBuilder
end
new(receiver_info, argument_infos, return_value_info, builder_class) click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 24
def initialize(receiver_info, argument_infos, return_value_info, builder_class)
  @argument_builder_class = builder_class
  receiver_builder = make_argument_builder receiver_info if receiver_info
  argument_builders = argument_infos.map { |info| make_argument_builder info }
  return_value_builder =
    CallbackReturnValueBuilder.new(variable_generator, return_value_info)

  @argument_builder_collection =
    ArgumentBuilderCollection.new(return_value_builder, argument_builders,
                                  receiver_builder: receiver_builder)
  @template = MethodTemplate.new(self, @argument_builder_collection)
end

Public Instance Methods

invocation() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 54
def invocation
  "_proc.call(#{call_argument_list})"
end
method_arguments() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 45
def method_arguments
  @method_arguments ||=
    @argument_builder_collection.method_argument_names.dup.unshift('_proc')
end
method_definition() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 37
def method_definition
  @template.method_definition
end
method_name() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 41
def method_name
  'call_with_argument_mapping'
end
preparation() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 50
def preparation
  []
end
result() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 58
def result
  if (name = @argument_builder_collection.return_value_name)
    ["return #{name}"]
  else
    []
  end
end
singleton_method?() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 66
def singleton_method?
  true
end

Private Instance Methods

call_argument_list() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 72
def call_argument_list
  @argument_builder_collection.call_argument_names.join(', ')
end
make_argument_builder(argument_info) click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 80
def make_argument_builder(argument_info)
  @argument_builder_class.new variable_generator, argument_info
end
variable_generator() click to toggle source
# File lib/gir_ffi/builders/mapping_method_builder.rb, line 76
def variable_generator
  @variable_generator ||= VariableNameGenerator.new
end