class FFI::AutoPointer

def self.from_native(val, ctx)

Returns:
  • (AutoPointer) -

Parameters:
  • ctx () -- not used. Please set +nil+.
  • ptr (Pointer) --

Overloads:
  • self.from_native(ptr, ctx)
def self.from_native(val, ctx)
  self.new(val)
end

def self.native_type

Raises:
  • (RuntimeError) - if class does not implement a +#release+ method

Returns:
  • (Type::POINTER) -
def self.native_type
  raise RuntimeError.new("no release method defined for #{self.inspect}") unless self.respond_to?(:release)
  Type::POINTER
end

def autorelease=(autorelease)

Returns:
  • (Boolean) - +autorelease+

Parameters:
  • autorelease (Boolean) --
def autorelease=(autorelease)
  @releaser.autorelease=(autorelease)
end

def autorelease?

Returns:
  • (Boolean) - +autorelease+
def autorelease?
  @releaser.autorelease
end

def free

Returns:
  • (nil) -
def free
  @releaser.free
end

def initialize(ptr, proc=nil, &block)

Other tags:
    Note: -
    Note: - The safest, and therefore preferred, calling
    Note: - WARNING: passing a block will cause your pointer to never be GC'd. This is bad.
    Note: - WARNING: passing a proc _may_ cause your pointer to never be GC'd, unless you're

Returns:
  • (self) -
  • (self) -
  • (self) -
  • (self) -

Parameters:
  • pointer (Pointer) --
  • pointer (Pointer) --
  • pointer (Pointer) --
  • method (Method) --
  • pointer (Pointer) --

Overloads:
  • initialize(pointer)
  • initialize(pointer) { |p| ... }
  • initialize(pointer, proc)
  • initialize(pointer, method)

Other tags:
    Yieldparam: p - +pointer+ passed to the block
def initialize(ptr, proc=nil, &block)
  super(ptr.type_size, ptr)
  raise TypeError, "Invalid pointer" if ptr.nil? || !ptr.kind_of?(Pointer) \
    || ptr.kind_of?(MemoryPointer) || ptr.kind_of?(AutoPointer)
  @releaser = if proc
                raise RuntimeError.new("proc must be callable") unless proc.respond_to?(:call)
                CallableReleaser.new(ptr, proc)
              else
                raise RuntimeError.new("no release method defined") unless self.class.respond_to?(:release)
                DefaultReleaser.new(ptr, self.class)
              end
  ObjectSpace.define_finalizer(self, @releaser)
  self
end