class GLib::Array
Overrides for GArray, GLib’s automatically growing array. It should not be necessary to create objects of this class from Ruby directly.
Attributes
Public Class Methods
Source
# File lib/ffi-glib/array.rb, line 29 def self.calculated_element_size(type) ffi_type = GirFFI::TypeMap.type_specification_to_ffi_type(type) FFI.type_size(ffi_type) end
@api private
Source
# File lib/ffi-glib/array.rb, line 24 def self.from_enumerable(elmtype, arr) new(elmtype).tap { |it| it.append_vals arr } end
@api private
Source
# File lib/ffi-glib/array.rb, line 17 def initialize(type) @element_type = type ptr = Lib.g_array_new(0, 0, calculated_element_size) store_pointer(ptr) end
Public Instance Methods
Source
# File lib/ffi-glib/array.rb, line 35 def append_vals(ary) bytes = GirFFI::InPointer.from_array element_type, ary Lib.g_array_append_vals(self, bytes, ary.length) self end
@override
Source
# File lib/ffi-glib/array.rb, line 41 def each length.times do |idx| yield index(idx) end end
Source
# File lib/ffi-glib/array.rb, line 51 def get_element_size Lib.g_array_get_element_size self end
Also aliased as: element_size
Source
# File lib/ffi-glib/array.rb, line 73 def index(idx) unless (0...length).cover? idx raise IndexError, "Index #{idx} outside of bounds 0..#{length - 1}" end item_ptr = data_ptr + idx * element_size convertor = GirFFI::ArrayElementConvertor.new element_type, item_ptr convertor.to_ruby_value end
Re-implementation of the g_array_index macro
Source
# File lib/ffi-glib/array.rb, line 62 def reset_typespec(typespec = nil) if typespec @element_type = typespec check_element_size_match else @element_type = guess_element_type end self end
@api private
Private Instance Methods
Source
# File lib/ffi-glib/array.rb, line 89 def calculated_element_size self.class.calculated_element_size element_type end
Source
# File lib/ffi-glib/array.rb, line 93 def check_element_size_match return if calculated_element_size == get_element_size warn "WARNING: Element sizes do not match" end
Source
# File lib/ffi-glib/array.rb, line 99 def guess_element_type case get_element_size when 1 then :uint8 when 2 then :uint16 when 4 then :uint32 when 8 then :uint64 end end