Class: GirFFI::Builders::MappingMethodBuilder
- Inherits:
-
Object
- Object
- GirFFI::Builders::MappingMethodBuilder
- Defined in:
- lib/gir_ffi/builders/mapping_method_builder.rb
Overview
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
Class Method Summary collapse
- .for_callback(argument_infos, return_value_info) ⇒ Object
- .for_vfunc(receiver_info, argument_infos, return_value_info) ⇒ Object
Instance Method Summary collapse
-
#initialize(receiver_info, argument_infos, return_value_info, builder_class) ⇒ MappingMethodBuilder
constructor
A new instance of MappingMethodBuilder.
- #invocation ⇒ Object
- #method_arguments ⇒ Object
- #method_definition ⇒ Object
- #method_name ⇒ Object
- #preparation ⇒ Object
- #result ⇒ Object
- #singleton_method? ⇒ Boolean
Constructor Details
#initialize(receiver_info, argument_infos, return_value_info, builder_class) ⇒ MappingMethodBuilder
Returns a new instance of MappingMethodBuilder.
24 25 26 27 28 29 30 31 32 33 34 35 |
# 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 |
Class Method Details
.for_callback(argument_infos, return_value_info) ⇒ Object
16 17 18 |
# 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) ⇒ Object
20 21 22 |
# 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 |
Instance Method Details
#invocation ⇒ Object
54 55 56 |
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 54 def invocation "_proc.call(#{call_argument_list})" end |
#method_arguments ⇒ Object
45 46 47 48 |
# 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 ⇒ Object
37 38 39 |
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 37 def method_definition @template.method_definition end |
#method_name ⇒ Object
41 42 43 |
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 41 def method_name 'call_with_argument_mapping' end |
#preparation ⇒ Object
50 51 52 |
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 50 def preparation [] end |
#result ⇒ Object
58 59 60 61 62 63 64 |
# 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? ⇒ Boolean
66 67 68 |
# File 'lib/gir_ffi/builders/mapping_method_builder.rb', line 66 def singleton_method? true end |