Class: GirFFI::Builders::MarshallingMethodBuilder
- Inherits:
-
Object
- Object
- GirFFI::Builders::MarshallingMethodBuilder
- Defined in:
- lib/gir_ffi/builders/marshalling_method_builder.rb
Overview
Implements the creation mapping method for a callback or signal handler. This method converts arguments from C to Ruby, and the result from Ruby to C.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(receiver_info, argument_infos, return_value_info) ⇒ MarshallingMethodBuilder
constructor
A new instance of MarshallingMethodBuilder.
- #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) ⇒ MarshallingMethodBuilder
Returns a new instance of MarshallingMethodBuilder.
17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 17 def initialize receiver_info, argument_infos, return_value_info receiver_builder = make_argument_builder receiver_info argument_builders = argument_infos.map { |arg| make_argument_builder arg } 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_signal(receiver_info, argument_infos, return_value_info) ⇒ Object
13 14 15 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 13 def self.for_signal receiver_info, argument_infos, return_value_info new receiver_info, argument_infos, return_value_info end |
Instance Method Details
#invocation ⇒ Object
49 50 51 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 49 def invocation "wrap(closure.to_ptr).invoke_block(#{call_argument_list})" end |
#method_arguments ⇒ Object
37 38 39 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 37 def method_arguments %w(closure return_value param_values _invocation_hint _marshal_data) end |
#method_definition ⇒ Object
29 30 31 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 29 def method_definition @template.method_definition end |
#method_name ⇒ Object
33 34 35 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 33 def method_name 'marshaller' end |
#preparation ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 41 def preparation if param_names.size == 1 ["#{param_names.first} = param_values.first.get_value_plain"] else ["#{param_names.join(', ')} = param_values.map(&:get_value_plain)"] end end |
#result ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 53 def result if (name = @argument_builder_collection.return_value_name) ["return_value.set_value #{name}"] else [] end end |
#singleton_method? ⇒ Boolean
61 62 63 |
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 61 def singleton_method? true end |