123456789_123456789_123456789_123456789_123456789_

Class: Fiddle::Closure::BlockCaller

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
Instance Chain:
Inherits: Fiddle::Closure
Defined in: ext/fiddle/lib/fiddle/closure.rb

Overview

Extends ::Fiddle::Closure to allow for building the closure in a block

Class Method Summary

Instance Attribute Summary

::Fiddle::Closure - Inherited

#args

arguments of the FFI closure.

#ctype

the C type of the return of the FFI closure.

#freed?

Whether this closure was freed explicitly.

Instance Method Summary

::Fiddle::Closure - Inherited

#free

Free this closure explicitly.

#initialize,
#to_i

Returns the memory address for this closure.

#to_ptr

Constructor Details

.new(ctype, args, abi = Fiddle::Function::DEFAULT, &block) ⇒ BlockCaller

Description

Construct a new BlockCaller object.

If there is an error in preparing the ffi_cif or ffi_prep_closure, then a RuntimeError will be raised.

Example

include Fiddle

cb = Closure::BlockCaller.new(TYPE_INT, [TYPE_INT]) do |one|
  one
end

func = Function.new(cb, [TYPE_INT], TYPE_INT)
[ GitHub ]

  
# File 'ext/fiddle/lib/fiddle/closure.rb', line 60

def initialize ctype, args, abi = Fiddle::Function::DEFAULT, &block
  super(ctype, args, abi)
  @block = block
end

Instance Method Details

#call(*args)

Calls the constructed BlockCaller, with Fiddle::Closure#args

For an example see .new

[ GitHub ]

  
# File 'ext/fiddle/lib/fiddle/closure.rb', line 69

def call *args
  @block.call(*args)
end