Class: GirFFI::Builders::MarshallingMethodBuilder
Overview
Implements the creation mapping method for a 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
#argument_builder_collection, #argument_builders, #error_argument, #method_definition, #receiver_builder, #return_value_builder, #return_value_info, #template, #variable_generator
Constructor Details
Returns a new instance of MarshallingMethodBuilder.
19
20
21
22
23
|
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 19
def initialize(receiver_info, info)
super(info, ClosureReturnValueBuilder,
receiver_info: receiver_info,
argument_builder_class: ClosureArgumentBuilder)
end
|
Class Method Details
.for_signal(receiver_info, info) ⇒ Object
15
16
17
|
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 15
def self.for_signal(receiver_info, info)
new receiver_info, info
end
|
Instance Method Details
#invocation ⇒ Object
43
44
45
|
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 43
def invocation
"wrap(closure.to_ptr).invoke_block(#{call_argument_list})"
end
|
#method_arguments ⇒ Object
31
32
33
|
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 31
def method_arguments
%w(closure return_value param_values _invocation_hint _marshal_data)
end
|
#method_name ⇒ Object
Methods used by MethodTemplate
27
28
29
|
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 27
def method_name
"marshaller"
end
|
#preparation ⇒ Object
35
36
37
38
39
40
41
|
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 35
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
47
48
49
50
51
52
53
|
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 47
def result
if (name = @argument_builder_collection.return_value_name)
["return_value.set_value #{name}"]
else
[]
end
end
|
#singleton_method? ⇒ Boolean
55
56
57
|
# File 'lib/gir_ffi/builders/marshalling_method_builder.rb', line 55
def singleton_method?
true
end
|