class GLib::HashTable

Overrides for GHashTable, GLib's hash table implementation.

Attributes

key_type[R]
value_type[R]

Public Class Methods

from_enumerable(typespec, hash) click to toggle source

@api private

# File lib/ffi-glib/hash_table.rb, line 23
def self.from_enumerable(typespec, hash)
  ghash = new(*typespec)
  hash.each do |key, val|
    ghash.insert key, val
  end
  ghash
end
new(key_type, value_type) click to toggle source
# File lib/ffi-glib/hash_table.rb, line 15
def initialize(key_type, value_type)
  @key_type = key_type
  @value_type = value_type
  store_pointer Lib.g_hash_table_new(
    hash_function_for_key_type, equality_function_for_key_type)
end

Public Instance Methods

each() { |key, val| ... } click to toggle source
# File lib/ffi-glib/hash_table.rb, line 31
def each
  prc = proc do |keyptr, valptr, _userdata|
    key = GirFFI::ArgHelper.cast_from_pointer key_type, keyptr
    val = GirFFI::ArgHelper.cast_from_pointer value_type, valptr
    yield key, val
  end
  callback = GLib::HFunc.from prc
  ::GLib::Lib.g_hash_table_foreach to_ptr, callback, nil
end
insert(key, value) click to toggle source

@override

# File lib/ffi-glib/hash_table.rb, line 46
def insert(key, value)
  keyptr = GirFFI::InPointer.from key_type, key
  valptr = GirFFI::InPointer.from value_type, value
  ::GLib::Lib.g_hash_table_insert to_ptr, keyptr, valptr
end
reset_typespec(typespec) click to toggle source

@api private

# File lib/ffi-glib/hash_table.rb, line 53
def reset_typespec(typespec)
  @key_type, @value_type = *typespec
  self
end
to_hash() click to toggle source
# File lib/ffi-glib/hash_table.rb, line 41
def to_hash
  Hash[to_a]
end

Private Instance Methods

equality_function_for_key_type() click to toggle source
# File lib/ffi-glib/hash_table.rb, line 69
def equality_function_for_key_type
  case @key_type
  when :utf8
    FFI::Function.new(:int,
                      [:pointer, :pointer],
                      find_support_function("g_str_equal"))
  end
end
find_support_function(name) click to toggle source
# File lib/ffi-glib/hash_table.rb, line 78
def find_support_function(name)
  lib = ::GLib::Lib.ffi_libraries.first
  lib.find_function(name)
end
hash_function_for_key_type() click to toggle source
# File lib/ffi-glib/hash_table.rb, line 60
def hash_function_for_key_type
  case @key_type
  when :utf8
    FFI::Function.new(:uint,
                      [:pointer],
                      find_support_function("g_str_hash"))
  end
end