class GirFFI::Builders::PointerValueConvertor

Encapsulates knowledge about how to store values in pointers, and how to fetch values from pointers.

Attributes

type_spec[R]

Public Class Methods

new(type_spec) click to toggle source
# File lib/gir_ffi/builders/pointer_value_convertor.rb, line 8
def initialize(type_spec)
  @type_spec = type_spec
end

Public Instance Methods

pointer_to_value(ptr_exp, offset = 0) click to toggle source
# File lib/gir_ffi/builders/pointer_value_convertor.rb, line 12
def pointer_to_value(ptr_exp, offset = 0)
  case ffi_type_spec
  when Module
    "#{ffi_type_spec}.get_value_from_pointer(#{ptr_exp}, #{offset})"
  when Symbol
    "#{ptr_exp}.get_#{ffi_type_spec}(#{offset})"
  end
end
value_to_pointer(ptr_exp, value_exp, offset = 0) click to toggle source
# File lib/gir_ffi/builders/pointer_value_convertor.rb, line 21
def value_to_pointer(ptr_exp, value_exp, offset = 0)
  case ffi_type_spec
  when Module
    args = [value_exp, ptr_exp]
    args << offset unless offset == 0
    "#{ffi_type_spec}.copy_value_to_pointer(#{args.join(", ")})"
  when Symbol
    "#{ptr_exp}.put_#{ffi_type_spec} #{offset}, #{value_exp}"
  end
end

Private Instance Methods

ffi_type_spec() click to toggle source
# File lib/gir_ffi/builders/pointer_value_convertor.rb, line 36
def ffi_type_spec
  TypeMap.type_specification_to_ffi_type type_spec
end