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