type.rb

Path: dl/type.rb
Last Update: Tue Apr 02 20:56:13 AUS Eastern Standard Time 2002

example:

 DLTYPE[INT][:rb2c]["arg0"] => "NUM2INT(arg0)"
 DLTYPE[DOUBLE][:c2rb]["r"] => "rb_float_new(r)"

Methods

num2types   tget   tpush   types2ctypes   types2num  

Constants

DLTYPE = { VOID = 0x00 => { :name => 'VOID', :rb2c => nil, :c2rb => nil, :ctype => "void", :stmem => "v", :sym => true, :cb => true, }, CHAR = 0x01 => { :name => 'CHAR', :rb2c => proc{|x| "NUM2CHR(#{x})"}, :c2rb => proc{|x| "CHR2FIX(#{x})"}, :ctype => "char", :stmem => "c", :sym => false, :cb => false, }, SHORT = 0x02 => { :name => 'SHORT', :rb2c => proc{|x| "FIX2INT(#{x})"}, :c2rb => proc{|x| "INT2FIX(#{x})"}, :ctype => "short", :stmem => "h", :sym => false, :cb => false, }, INT = 0x03 => { :name => 'INT', :rb2c => proc{|x| "NUM2INT(#{x})"}, :c2rb => proc{|x| "INT2NUM(#{x})"}, :ctype => "int", :stmem => "i", :sym => true, :cb => false, }, LONG = 0x04 => { :name => 'LONG', :rb2c => proc{|x| "NUM2INT(#{x})"}, :c2rb => proc{|x| "INT2NUM(#{x})"}, :ctype => "long", :stmem => "l", :sym => true, :cb => true, }, FLOAT = 0x05 => { :name => 'FLOAT', :rb2c => proc{|x| "(float)(RFLOAT(#{x})->value)"}, :c2rb => proc{|x| "rb_float_new((double)#{x})"}, :ctype => "float", :stmem => "f", :sym => false, :cb => false, }, DOUBLE = 0x06 => { :name => 'DOUBLE', :rb2c => proc{|x| "RFLOAT(#{x})->value"}, :c2rb => proc{|x| "rb_float_new(#{x})"}, :ctype => "double", :stmem => "d", :sym => true, :cb => true, }, VOIDP = 0x07 => { :name => 'VOIDP', :rb2c => proc{|x| "rb_dlptr2cptr(#{x})"}, :c2rb => proc{|x| "rb_dlptr_new(#{x},sizeof(void*),0)"}, :ctype => "void *", :stmem => "p", :sym => true, :cb => true, }, }   example:
 DLTYPE[INT][:rb2c]["arg0"] => "NUM2INT(arg0)"
 DLTYPE[DOUBLE][:c2rb]["r"] => "rb_float_new(r)"

Public Instance methods

[Source]

# File dl/type.rb, line 97
def num2types(num)
  ts = []
  i  = 0
  t = tget(num,i)
  while( (t != VOID && i > 0) || (i == 0) )
    ts.push(DLTYPE[t][:ctype])
    i += 1
    t = tget(num,i)
  end
  ts
end

[Source]

# File dl/type.rb, line 84
def tget(t, i)
  (t & (0x07 << (i * 3))) >> (i * 3)
end

[Source]

# File dl/type.rb, line 80
def tpush(t, x)
  (t << 3)|x
end

[Source]

# File dl/type.rb, line 109
def types2ctypes(types)
  res = []
  types.each{|t|
    res.push(DLTYPE[t][:ctype])
  }
  res
end

[Source]

# File dl/type.rb, line 88
def types2num(types)
  res = 0x00
  r = types.reverse
  r.each{|t|
    res = tpush(res,t)
  }
  res
end

[Validate]