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