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

element_type[R]

Public Class Methods

calculated_element_size(type) click to toggle source

@api private

# File lib/ffi-glib/array.rb, line 28
def self.calculated_element_size(type)
  ffi_type = GirFFI::TypeMap.type_specification_to_ffi_type(type)
  FFI.type_size(ffi_type)
end
from_enumerable(elmtype, it) click to toggle source

@api private

# File lib/ffi-glib/array.rb, line 23
def self.from_enumerable(elmtype, it)
  new(elmtype).tap { |arr| arr.append_vals it }
end
new(type) click to toggle source
# File lib/ffi-glib/array.rb, line 16
def initialize(type)
  @element_type = type
  ptr = Lib.g_array_new(0, 0, calculated_element_size)
  store_pointer(ptr)
end

Public Instance Methods

==(other) click to toggle source
# File lib/ffi-glib/array.rb, line 56
def ==(other)
  to_a == other.to_a
end
append_vals(ary) click to toggle source

@override

# File lib/ffi-glib/array.rb, line 34
def append_vals(ary)
  bytes = GirFFI::InPointer.from_array element_type, ary
  Lib.g_array_append_vals(self, bytes, ary.length)
  self
end
each() { |index(idx)| ... } click to toggle source
# File lib/ffi-glib/array.rb, line 40
def each
  length.times do |idx|
    yield index(idx)
  end
end
element_size()
Alias for: get_element_size
get_element_size() click to toggle source
# File lib/ffi-glib/array.rb, line 50
def get_element_size
  Lib.g_array_get_element_size self
end
Also aliased as: element_size
length() click to toggle source
# File lib/ffi-glib/array.rb, line 46
def length
  @struct[:len]
end
reset_typespec(typespec = nil) click to toggle source

@api private

# File lib/ffi-glib/array.rb, line 61
def reset_typespec(typespec = nil)
  if typespec
    @element_type = typespec
    check_element_size_match
  else
    @element_type = guess_element_type
  end
  self
end

Private Instance Methods

calculated_element_size() click to toggle source
# File lib/ffi-glib/array.rb, line 77
def calculated_element_size
  self.class.calculated_element_size element_type
end
check_element_size_match() click to toggle source
# File lib/ffi-glib/array.rb, line 81
def check_element_size_match
  unless calculated_element_size == get_element_size
    warn 'WARNING: Element sizes do not match'
  end
end
data_ptr() click to toggle source
# File lib/ffi-glib/array.rb, line 73
def data_ptr
  @struct[:data]
end
guess_element_type() click to toggle source
# File lib/ffi-glib/array.rb, line 87
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