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