class DL::CarriedFunction
Public Class Methods
new(cfunc, argtypes, n)
click to toggle source
Calls superclass method
DL::Function.new
# File ext/dl/lib/dl/func.rb, line 221 def initialize(cfunc, argtypes, n) super(cfunc, argtypes) @carrier = [] @index = n @mutex = Mutex.new end
Public Instance Methods
bind_at_call(&block)
click to toggle source
# File ext/dl/lib/dl/func.rb, line 236 def bind_at_call(&block) userdata = @carrier[-1] userdata[0].push(block) bind{|*args| ptr = args[@index] if( !ptr ) raise(RuntimeError, "The index of userdata should be lower than #{args.size}.") end userdata = dlunwrap(Integer(ptr)) args[@index] = userdata[1] userdata[0][0].call(*args) } @mutex.unlock() end
create_carrier(data)
click to toggle source
# File ext/dl/lib/dl/func.rb, line 228 def create_carrier(data) ary = [] userdata = [ary, data] @mutex.lock() @carrier.push(userdata) return dlwrap(userdata) end