class FFI::AutoPointer::Releaser

@abstract Base class for {AutoPointer}‘s releasers.

All subclasses of Releaser should define a +#release(ptr)+ method.

A releaser is an object in charge of release an {AutoPointer}.

Attributes

Public Class Methods

@param [Pointer] ptr @param [#call] proc @return [nil] A new instance of Releaser.

# File lib/ffi/autopointer.rb, line 123
def initialize(ptr, proc)
  @ptr = ptr
  @proc = proc
  @autorelease = true
end

Public Instance Methods

@param args Release pointer if autorelease is set.

# File lib/ffi/autopointer.rb, line 142
def call(*args)
  release(@ptr) if @autorelease && @ptr
end

@return [nil] Free pointer.

# File lib/ffi/autopointer.rb, line 131
def free
  if @ptr
    release(@ptr)
    @autorelease = false
    @ptr = nil
    @proc = nil
  end
end

Release ptr by using Proc or Method defined at ptr {AutoPointer#initialize initialization}.

@param [Pointer] ptr @return [nil]

# File lib/ffi/autopointer.rb, line 151
def release(ptr)
  @proc.call(ptr)
end