module Yadriggy::C::CFI

@api private C Function Interface

Public Class Methods

c_type(type) click to toggle source

@param [Type] type @return [Symbol] type name for FFI

# File lib/yadriggy/c/ffi.rb, line 282
def self.c_type(type)
  type = type.supertype if InstanceType.role(type)
  if type == RubyClass::Integer || type == Integer
    :int32
  elsif type == RubyClass::Float || type == Float
    :double
  elsif type == CType::Void
    :void
  elsif type == RubyClass::String || type == String
    :string
  elsif type == CType::Float32Type || type == CType::Float32
    :float
  else
    raise "bad type #{type}" if ArrayType.role(type).nil?
    :pointer
  end
end
c_type_name(type) click to toggle source

@param [Type] type @return [String] type name in C.

# File lib/yadriggy/c/ffi.rb, line 261
def self.c_type_name(type)
  type = type.supertype if InstanceType.role(type)
  if type == RubyClass::Integer || type == Integer
    'int32_t'
  elsif type == RubyClass::Float || type == Float
    'double'
  elsif type == CType::Void
    'void'
  elsif type == RubyClass::String || type == String
    'char*'
  elsif type == CType::Float32Type || type == CType::Float32
    'float'
  else
    at = ArrayType.role(type)
    raise "bad type #{type.inspect}" if at.nil?
    "#{c_type_name(at.element_type)}*"
  end
end
param_types(method_type) click to toggle source
# File lib/yadriggy/c/ffi.rb, line 249
def self.param_types(method_type)
  method_type.params.map do |t|
    c_type(t)
  end
end
return_type(method_type) click to toggle source
# File lib/yadriggy/c/ffi.rb, line 255
def self.return_type(method_type)
  c_type(method_type.result_type)
end