Module: GirFFI::ArgHelper

Defined in:
lib/gir_ffi/arg_helper.rb

Overview

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

Constant Summary collapse

OBJECT_STORE =
ObjectStore.new

Class Method Summary collapse

Class Method Details

.cast_from_pointer(type, it) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/gir_ffi/arg_helper.rb', line 27

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) ⇒ Object



62
63
64
# File 'lib/gir_ffi/arg_helper.rb', line 62

def self.cast_pointer_to_int32(ptr)
  cast_uint32_to_int32(ptr.address & 0xffffffff)
end

.cast_uint32_to_int32(val) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/gir_ffi/arg_helper.rb', line 54

def self.cast_uint32_to_int32(val)
  if val >= 0x80000000
    -(0x100000000 - val)
  else
    val
  end
end

.check_error(errpp) ⇒ Object

Raises:



16
17
18
19
# File 'lib/gir_ffi/arg_helper.rb', line 16

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) ⇒ Object



21
22
23
24
25
# File 'lib/gir_ffi/arg_helper.rb', line 21

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) ⇒ Object



12
13
14
# File 'lib/gir_ffi/arg_helper.rb', line 12

def self.ptr_to_utf8_length(ptr, len)
  ptr.null? ? nil : ptr.read_string(len)
end