class FFI::AutoPointer

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

Other tags:
    Note: -
    Note: - The safest, and therefore preferred, calling
    Note: -
    Note: - WARNING: passing a proc _may_ cause your pointer to never be

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
                if not proc.respond_to?(:call)
                  raise RuntimeError.new("proc must be callable")
                end
                CallableReleaser.new(ptr, proc)
              else
                if not self.class.respond_to?(:release)
                  raise RuntimeError.new("no release method defined")
                end
                DefaultReleaser.new(ptr, self.class)
              end
  ObjectSpace.define_finalizer(self, @releaser)
  self
end