class GLib::PtrArray
Overrides for GPtrArray, GLib’s automatically growing array of pointers.
Constants
- POINTER_SIZE
Attributes
Public Class Methods
Source
# File lib/ffi-glib/ptr_array.rb, line 33 def self.add(array, data) array.add data end
Source
# File lib/ffi-glib/ptr_array.rb, line 29 def self.from_enumerable(type, arr) new(type).tap { |it| it.add_array arr } end
Source
# File lib/ffi-glib/ptr_array.rb, line 24 def initialize(type) @element_type = type store_pointer Lib.g_ptr_array_new end
Public Instance Methods
Source
# File lib/ffi-glib/ptr_array.rb, line 42 def add(data) ptr = GirFFI::InPointer.from element_type, data Lib.g_ptr_array_add self, ptr end
Source
# File lib/ffi-glib/ptr_array.rb, line 47 def add_array(ary) ary.each { |item| add item } end
Source
# File lib/ffi-glib/ptr_array.rb, line 58 def each length.times do |idx| yield index(idx) end end
Source
# File lib/ffi-glib/ptr_array.rb, line 52 def index(idx) item_ptr = item_pointer(idx) convertor = GirFFI::ArrayElementConvertor.new convert_element_type, item_ptr convertor.to_ruby_value end
Re-implementation of the g_ptrarray_index macro
Source
# File lib/ffi-glib/ptr_array.rb, line 37 def reset_typespec(typespec) @element_type = typespec self end
Private Instance Methods
Source
# File lib/ffi-glib/ptr_array.rb, line 80 def check_bounds(idx) unless (0...length).cover? idx raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}" end end
Source
# File lib/ffi-glib/ptr_array.rb, line 86 def convert_element_type case element_type when :utf8 :utf8 when GirFFI::ObjectBase element_type else [:pointer, element_type] end end
Source
# File lib/ffi-glib/ptr_array.rb, line 74 def item_pointer(idx) check_bounds(idx) data_ptr + idx * element_size end