class GirFFI::CallbackBase
Base module for callbacks and vfuncs. NOTE: Another option would be to derive this class from FFI::Function, allowing a more natural implementation of from_native
, to_native
and wrap.
Constants
- CALLBACKS
Public Class Methods
copy_value_to_pointer(value, pointer, offset = 0)
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 84 def self.copy_value_to_pointer(value, pointer, offset = 0) pointer.put_pointer offset, to_native(value, nil) end
drop_callback(prc)
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 44 def self.drop_callback(prc) CALLBACKS.delete prc.object_id end
from(prc)
click to toggle source
Create Callback from a Proc. Makes sure arguments are properly wrapped, and the callback is stored to prevent garbage collection.
# File lib/gir_ffi/callback_base.rb, line 50 def self.from(prc) wrap_proc(prc).tap do |cb| store_callback cb end end
from_native(value, _context)
click to toggle source
TODO: Return instance of this class
# File lib/gir_ffi/callback_base.rb, line 18 def self.from_native(value, _context) return nil if !value || value.null? FFI::Function.new(gir_ffi_builder.return_ffi_type, gir_ffi_builder.argument_ffi_types, value) end
get_value_from_pointer(pointer, offset)
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 88 def self.get_value_from_pointer(pointer, offset) from_native pointer.get_pointer(offset), nil end
native_type()
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 13 def self.native_type FFI::Type::POINTER end
store_callback(prc)
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 40 def self.store_callback(prc) CALLBACKS[prc.object_id] = prc end
to_ffi_type()
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 68 def self.to_ffi_type self end
to_native(value, _context)
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 25 def self.to_native(value, _context) case value when CallbackBase value.to_native when FFI::Function value end end
wrap(ptr)
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 34 def self.wrap(ptr) from_native ptr, nil end
wrap_proc(prc)
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 56 def self.wrap_proc(prc) return unless prc new do |*args| begin call_with_argument_mapping(prc, *args) rescue StandardError => e GLib::MainLoop.handle_exception e end end end
Public Instance Methods
to_native()
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 72 def to_native @to_native ||= begin builder = self.class.gir_ffi_builder FFI::Function.new(builder.return_ffi_type, builder.argument_ffi_types, self) end end
to_ptr()
click to toggle source
# File lib/gir_ffi/callback_base.rb, line 80 def to_ptr to_native.to_ptr end