module GirFFI::ArgHelper

Helper module containing methods used during argument conversion in generated methods.

Constants

OBJECT_STORE

Public Class Methods

cast_from_pointer(type, it) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 48
def self.cast_from_pointer(type, it)
  case type
  when :utf8, :filename
    it.to_utf8
  when :gint32, :gint8
    cast_pointer_to_int32 it
  when Class
    type.wrap it
  when :guint32
    it.address
  when Array
    main_type, subtype = *type
    raise "Unexpected main type #{main_type}" if main_type != :pointer
    case subtype
    when Array
      container_type, *element_type = *subtype
      raise "Unexpected container type #{container_type}" if container_type != :ghash
      GLib::HashTable.wrap(element_type, it)
    else
      raise "Unexpected subtype #{subtype}"
    end

  else
    raise "Don't know how to cast #{type}"
  end
end
cast_pointer_to_int32(ptr) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 83
def self.cast_pointer_to_int32(ptr)
  cast_uint32_to_int32(ptr.address & 0xffffffff)
end
cast_uint32_to_int32(val) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 75
def self.cast_uint32_to_int32(val)
  if val >= 0x80000000
    -(0x100000000 - val)
  else
    val
  end
end
check_error(errpp) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 37
def self.check_error(errpp)
  err = GLib::Error.wrap(errpp.read_pointer)
  raise GLibError, err if err
end
check_fixed_array_size(size, arr, name) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 42
def self.check_fixed_array_size(size, arr, name)
  unless arr.size == size
    raise ArgumentError, "#{name} should have size #{size}"
  end
end
ptr_to_utf8_length(ptr, len) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 33
def self.ptr_to_utf8_length(ptr, len)
  ptr.null? ? nil : ptr.read_string(len)
end