module GirFFI::ArgHelper

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

Constants

OBJECT_STORE

Public Class Methods

cast_from_pointer(type, ptr) click to toggle source

NOTE: Only used in List, SList and HashTable classes. TODO: Stop using basic types and instead cast type to an ITypeInfo look-alike.

# File lib/gir_ffi/arg_helper.rb, line 26
def self.cast_from_pointer(type, ptr)
  case type
  when Symbol
    cast_from_simple_type_pointer(type, ptr)
  when Class
    type.wrap ptr
  when Array
    cast_from_complex_type_pointer(type, ptr)
  end
end
cast_pointer_to_int32(ptr) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 45
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 37
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 14
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 19
def self.check_fixed_array_size(size, arr, name)
  raise ArgumentError, "#{name} should have size #{size}" unless arr.size.equal? size
end
store(obj) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 49
def self.store(obj)
  OBJECT_STORE.store(obj)
end

Private Class Methods

cast_from_complex_type_pointer(type, ptr) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 66
def self.cast_from_complex_type_pointer(type, ptr)
  main_type, (container_type, *element_type) = *type
  case main_type
  when :pointer
    case container_type
    when :ghash
      return GLib::HashTable.wrap(element_type, ptr)
    end
  end
  raise "Don't know how to cast #{type}"
end
cast_from_simple_type_pointer(type, ptr) click to toggle source
# File lib/gir_ffi/arg_helper.rb, line 53
def self.cast_from_simple_type_pointer(type, ptr)
  case type
  when :utf8, :filename
    ptr.to_utf8
  when :gint32, :gint8
    cast_pointer_to_int32 ptr
  when :guint32
    ptr.address
  else
    raise "Don't know how to cast #{type}"
  end
end