def initialize( val, options={} )
options = {:autorelease => true}.merge!( options )
case val
when self.class
initialize( val.pointer, options )
when FFI::AutoPointer
@pointer = val
when FFI::Pointer
if val.is_a? FFI::MemoryPointer or val.is_a? FFI::Buffer
raise TypeError, "unsupported pointer type #{val.class.name}"
elsif val.null?
@pointer = val
else
@pointer = _make_autopointer( val, options[:autorelease] )
end
else
raise TypeError, "cannot create new #{self.class} from #{val.inspect}"
end
end