# File lib/nice-ffi/opaquestruct.rb, line 69
  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