Sha256: a0c05c3d8a8ba8bc2aa0c29addabf58612abec7265251efab7cbc77a8b98e57c

Contents?: true

Size: 947 Bytes

Versions: 14

Compression:

Stored size: 947 Bytes

Contents

module GLib
  load_class :PtrArray

  # Overrides for GPtrArray, GLib's automatically growing array of
  # pointers.
  class PtrArray
    include Enumerable

    attr_accessor :element_type

    class << self
      remove_method :new
      # Remove stub generated by builder.
      remove_method :add if method_defined? :add
    end

    def self.new type
      wrap(Lib.g_ptr_array_new).tap {|it|
        it.element_type = type}
    end

    def self.add array, data
      array.add data
    end

    def add data
      ptr = GirFFI::InPointer.from element_type, data
      Lib.g_ptr_array_add self, ptr
    end

    # Re-implementation of the g_ptr_array_index macro
    def index idx
      sz = FFI.type_size :pointer
      ptr = @struct[:pdata].get_pointer(idx * sz)
      GirFFI::ArgHelper.cast_from_pointer(element_type, ptr)
    end

    def each
      @struct[:len].times.each do |idx|
        yield index(idx)
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
gir_ffi-0.6.3 lib/ffi-glib/ptr_array.rb
gir_ffi-0.6.2 lib/ffi-glib/ptr_array.rb
gir_ffi-0.6.1 lib/ffi-glib/ptr_array.rb
gir_ffi-0.6.0 lib/ffi-glib/ptr_array.rb
gir_ffi-0.5.2 lib/ffi-glib/ptr_array.rb
gir_ffi-0.5.1 lib/ffi-glib/ptr_array.rb
gir_ffi-0.5.0 lib/ffi-glib/ptr_array.rb
gir_ffi-0.4.3 lib/ffi-glib/ptr_array.rb
gir_ffi-0.4.2 lib/ffi-glib/ptr_array.rb
gir_ffi-0.4.1 lib/ffi-glib/ptr_array.rb
gir_ffi-0.4.0 lib/ffi-glib/ptr_array.rb
gir_ffi-0.3.2 lib/ffi-glib/ptr_array.rb
gir_ffi-0.3.1 lib/ffi-glib/ptr_array.rb
gir_ffi-0.3.0 lib/ffi-glib/ptr_array.rb