module Fiddley::Utils

Constants

SIZET_FORMAT

assumes short = 16bit, int = 32bit, long long = 64bit

SIZET_TYPE

Public Instance Methods

str2value(type, str) click to toggle source
# File lib/fiddley/utils.rb, line 71
                def str2value(type, str)
  case type
  when :char, :int8
    str.unpack1('c')
  when :uchar, :uint8
    str.unpack1('C')
  when :short, :int16
    str.unpack1('s')
  when :ushort, :uint16
    str.unpack1('S')
  when :int32
    str.unpack1('l')
  when :uint32
    str.unpack1('L')
  when :int
    str.unpack1('i!')
  when :uint
    str.unpack1('I!')
  when :bool
    str.unpack1('i!') != 0
  when :long
    str.unpack1('l!')
  when :ulong
    str.unpack1('L!')
  when :long_long, :int64
    str.unpack1('q')
  when :ulong_long, :uint64
    str.unpack1('Q')
  when :size_t
    str.unpack1(SIZET_FORMAT)
  when :float
    str.unpack1('f')
  when :double
    str.unpack1('d')
  when :string, :pointer
    str.unpack1('p')
  else
    raise RuntimeError, "unknown type #{type}"
  end
end
type2offset_size(type) click to toggle source
# File lib/fiddley/utils.rb, line 46
                def type2offset_size(type)
  case type
  when :char, :uchar, :int8, :uint8
    Fiddle::ALIGN_CHAR
  when :short, :ushort, :int16, :uint16
    Fiddle::ALIGN_SHORT
  when :int, :uint, :int32, :uint32, :bool
    Fiddle::ALIGN_INT
  when :long, :ulong
    Fiddle::ALIGN_LONG
  when :int64, :uint64, :long_long, :ulong_long
    Fiddle::ALIGN_LONG_LONG
  when :float
    Fiddle::ALIGN_FLOAT
  when :double
    Fiddle::ALIGN_DOUBLE
  when :size_t
    Fiddle::ALIGN_SIZE_T
  when :string, :pointer
    Fiddle::ALIGN_VOIDP
  else
    raise RuntimeError, "unknown type #{type}"
  end
end
type2size(type) click to toggle source
# File lib/fiddley/utils.rb, line 21
                def type2size(type)
  case type
  when :char, :uchar, :int8, :uint8
    Fiddle::SIZEOF_CHAR
  when :short, :ushort, :int16, :uint16
    Fiddle::SIZEOF_SHORT
  when :int, :uint, :int32, :uint32, :bool
    Fiddle::SIZEOF_INT
  when :long, :ulong
    Fiddle::SIZEOF_LONG
  when :int64, :uint64, :long_long, :ulong_long
    Fiddle::SIZEOF_LONG_LONG
  when :float
    Fiddle::SIZEOF_FLOAT
  when :double
    Fiddle::SIZEOF_DOUBLE
  when :size_t
    Fiddle::SIZEOF_SIZE_T
  when :string, :pointer
    Fiddle::SIZEOF_VOIDP
  else
    raise RuntimeError, "unknown type #{type}"
  end
end
type2str(type) click to toggle source
# File lib/fiddley/utils.rb, line 153
                def type2str(type)
  case type
  when :char, :int8
    "char"
  when :uchar, :uint8
    "unsigned char"
  when :short, :int16
    "short"
  when :ushort, :uint16
    "unsigned short"
  when :int, :int32
    "int"
  when :uint, :uint32
    "unsigned int"
  when :bool
    "int"
  when :long
    "long"
  when :ulong
    "unsigned long"
  when :long_long, :int64
    "long long"
  when :ulong_long, :uint64
    "unsigned long long"
  when :size_t
    SIZET_TYPE
  when :float
    "float"
  when :double
    "double"
  when :string, :pointer
    "void *"
  else
    if @enums && @enums.find{|e| type == e.tag}
      "int"
    else
      type.to_s
    end
  end
end
type2type(type) click to toggle source
# File lib/fiddley/utils.rb, line 194
                def type2type(type)
  case type
  when :char, :int8
    Fiddle::TYPE_CHAR
  when :uchar, :uint8
    -Fiddle::TYPE_CHAR
  when :short, :int16
    Fiddle::TYPE_SHORT
  when :ushort, :uint16
    -Fiddle::TYPE_SHORT
  when :int, :int32
    Fiddle::TYPE_INT
  when :uint, :uint32
    -Fiddle::TYPE_INT
  when :bool
    Fiddle::TYPE_INT
  when :long
    Fiddle::TYPE_LONG
  when :ulong
    -Fiddle::TYPE_LONG
  when :long_long, :int64
    Fiddle::TYPE_LONG_LONG
  when :ulong_long, :uint64
    -Fiddle::TYPE_LONG_LONG
  when :float
    Fiddle::TYPE_FLOAT
  when :double
    Fiddle::TYPE_DOUBLE
  when :size_t
    Fiddle::TYPE_SIZE_T
  when :string, :pointer
    Fiddle::TYPE_VOIDP
  when :void
    Fiddle::TYPE_VOID
  else
    raise RuntimeError, "unknown type #{type}"
  end
end
value2str(type, value) click to toggle source
# File lib/fiddley/utils.rb, line 112
                def value2str(type, value)
  case type
  when :char, :int8
    [value].pack('c')
  when :uchar, :uint8
    [value].pack('C')
  when :short, :int16
    [value].pack('s')
  when :ushort, :uint16
    [value].pack('S')
  when :int32
    [value].pack('l')
  when :uint32
    [value].pack('L')
  when :int
    [value].pack('i!')
  when :uint
    [value].pack('I!')
  when :bool
    [value ? 1 : 0].pack('i!')
  when :long
    [value].pack('l!')
  when :ulong
    [value].pack('L!')
  when :long_long, :int64
    [value].pack('q')
  when :ulong_long, :uint64
    [value].pack('Q')
  when :size_t
    [value].pack(SIZET_FORMAT)
  when :float
    [value].pack('f')
  when :double
    [value].pack('d')
  when :string, :pointer
    [value].pack('p')
  else
    raise RuntimeError, "unknown type #{type}"
  end
end