58. ffi-ruby
def from_native(value, ctx=nil)
id =
if value.address & 0x0f == 0xe
value.address >> 8
else
rb_num2long rb_obj_id value
end
ObjectSpace._id2ref id
end
59. ffi-ruby
def to_native(obj, ctx=nil)
id = obj.__id__
case obj
when Symbol
FFI::Pointer.new id << 8 | 0xe
when Fixnum, FalseClass,
TrueClass, NilClass
FFI::Pointer.new id
else
FFI::Pointer.new id << 1
end
end