Class DL::Stack
In: dl/lib/dl/stack.rb
Parent: Object

Methods

[]   new   pack   size   types   unpack  

Constants

ALIGN_MAP = { TYPE_VOIDP => ALIGN_VOIDP, TYPE_CHAR => ALIGN_VOIDP, TYPE_SHORT => ALIGN_VOIDP, TYPE_INT => ALIGN_VOIDP, TYPE_LONG => ALIGN_VOIDP, TYPE_LONG_LONG => ALIGN_LONG_LONG, TYPE_FLOAT => ALIGN_FLOAT, TYPE_DOUBLE => ALIGN_DOUBLE, }
PACK_MAP = { TYPE_VOIDP => ((SIZEOF_VOIDP == SIZEOF_LONG_LONG)? "q" : "l!"), TYPE_CHAR => "c", TYPE_SHORT => "s!", TYPE_INT => "i!", TYPE_LONG => "l!", TYPE_LONG_LONG => "q", TYPE_FLOAT => "f", TYPE_DOUBLE => "d", }
SIZE_MAP = { TYPE_VOIDP => SIZEOF_VOIDP, TYPE_CHAR => SIZEOF_CHAR, TYPE_SHORT => SIZEOF_SHORT, TYPE_INT => SIZEOF_INT, TYPE_LONG => SIZEOF_LONG, TYPE_LONG_LONG => SIZEOF_LONG_LONG, TYPE_FLOAT => SIZEOF_FLOAT, TYPE_DOUBLE => SIZEOF_DOUBLE, }
ALIGN_MAP = { TYPE_VOIDP => ALIGN_VOIDP, TYPE_CHAR => ALIGN_VOIDP, TYPE_SHORT => ALIGN_VOIDP, TYPE_INT => ALIGN_VOIDP, TYPE_LONG => ALIGN_VOIDP, TYPE_FLOAT => ALIGN_FLOAT, TYPE_DOUBLE => ALIGN_DOUBLE, }
PACK_MAP = { TYPE_VOIDP => ((SIZEOF_VOIDP == SIZEOF_LONG_LONG)? "q" : "l!"), TYPE_CHAR => "c", TYPE_SHORT => "s!", TYPE_INT => "i!", TYPE_LONG => "l!", TYPE_FLOAT => "f", TYPE_DOUBLE => "d", }
SIZE_MAP = { TYPE_VOIDP => SIZEOF_VOIDP, TYPE_CHAR => SIZEOF_CHAR, TYPE_SHORT => SIZEOF_SHORT, TYPE_INT => SIZEOF_INT, TYPE_LONG => SIZEOF_LONG, TYPE_FLOAT => SIZEOF_FLOAT, TYPE_DOUBLE => SIZEOF_DOUBLE, }

Public Class methods

[Source]

# File dl/lib/dl/stack.rb, line 5
    def Stack.[](*types)
      Stack.new(types)
    end

[Source]

# File dl/lib/dl/stack.rb, line 9
    def initialize(types)
      parse_types(types)
    end

Public Instance methods

[Source]

# File dl/lib/dl/stack.rb, line 21
    def pack(ary)
      case SIZEOF_VOIDP
      when SIZEOF_LONG
        ary.pack(@template).unpack('l!*')
      when SIZEOF_LONG
        ary.pack(@template).unpack('q*')
      else
        raise(RuntimeError, "sizeof(void*)?")
      end
    end

[Source]

# File dl/lib/dl/stack.rb, line 13
    def size()
      @size
    end

[Source]

# File dl/lib/dl/stack.rb, line 17
    def types()
      @types
    end

[Source]

# File dl/lib/dl/stack.rb, line 32
    def unpack(ary)
      case SIZEOF_VOIDP
      when SIZEOF_LONG
        ary.pack('l!*').unpack(@template)
      when SIZEOF_LONG_LONG
        ary.pack('q*').unpack(@template)
      else
        raise(RuntimeError, "sizeof(void*)?")
      end
    end

[Validate]