Sha256: 56e16a677f1a797c16063ff9a5ca90767b3d55c88d97bc849e57ac9660c9cc1f

Contents?: true

Size: 1.17 KB

Versions: 4

Compression:

Stored size: 1.17 KB

Contents

require 'gir_ffi/sized_array'

module GirFFI
  module TypeMap
    sz = FFI.type_size(:size_t) * 8
    gtype_type = "uint#{sz}".to_sym

    TAG_TYPE_MAP = {
      :enum => :int32,
      :flags => :int32,
      :ghash => :pointer,
      :glist => :pointer,
      :gslist => :pointer,
      :strv => :pointer,
      :object => :pointer,
      :struct => :pointer,
      :error => :pointer,
      :ptr_array => :pointer,
      :array => :pointer,
      :c => GirFFI::SizedArray,
      :utf8 => :pointer,
      :GType => gtype_type,
      :gboolean => GLib::Boolean,
      :gunichar => :uint32,
      :gint8 => :int8,
      :guint8 => :uint8,
      :gint16 => :int16,
      :guint16 => :uint16,
      :gint => :int,
      :gint32 => :int32,
      :guint32 => :uint32,
      :gint64 => :int64,
      :guint64 => :uint64,
      :gfloat => :float,
      :gdouble => :double,
      :void => :void
    }

    def self.map_basic_type type
      sym = type.to_sym
      TAG_TYPE_MAP[sym] || sym
    end

    def self.type_specification_to_ffitype type
      case type
      when Module
        type.to_ffitype
      when Array
        type[0]
      else
        map_basic_type(type)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
gir_ffi-0.7.3 lib/gir_ffi/type_map.rb
gir_ffi-0.7.2 lib/gir_ffi/type_map.rb
gir_ffi-0.7.1 lib/gir_ffi/type_map.rb
gir_ffi-0.7.0 lib/gir_ffi/type_map.rb