Methods
#
N
P
S
U
Included Modules
Class Public methods
[](*types)
# File ../ruby/ext/dl/lib/dl/pack.rb, line 66
def self.[](*types)
  new(types)
end
new(types)
# File ../ruby/ext/dl/lib/dl/pack.rb, line 70
def initialize(types)
  parse_types(types)
end
Instance Public methods
pack(ary)
# File ../ruby/ext/dl/lib/dl/pack.rb, line 78
def pack(ary)
  case SIZEOF_VOIDP
  when SIZEOF_LONG
    ary.pack(@template)
  when SIZEOF_LONG_LONG
    ary.pack(@template)
  else
    raise(RuntimeError, "sizeof(void*)?")
  end
end
size()
# File ../ruby/ext/dl/lib/dl/pack.rb, line 74
def size()
  @size
end
unpack(ary)
# File ../ruby/ext/dl/lib/dl/pack.rb, line 89
def unpack(ary)
  case SIZEOF_VOIDP
  when SIZEOF_LONG
    ary.join().unpack(@template)
  when SIZEOF_LONG_LONG
    ary.join().unpack(@template)
  else
    raise(RuntimeError, "sizeof(void*)?")
  end
end
Instance Private methods
parse_types(types)
# File ../ruby/ext/dl/lib/dl/pack.rb, line 102
def parse_types(types)
  @template = ""
  addr     = 0
  types.each{|t|
    orig_addr = addr
    if( t.is_a?(Array) )
      addr = align(orig_addr, ALIGN_MAP[TYPE_VOIDP])
    else
      addr = align(orig_addr, ALIGN_MAP[t])
    end
    d = addr - orig_addr
    if( d > 0 )
      @template << "x#{d}"
    end
    if( t.is_a?(Array) )
      @template << (PACK_MAP[t[0]] * t[1])
      addr += (SIZE_MAP[t[0]] * t[1])
    else
      @template << PACK_MAP[t]
      addr += SIZE_MAP[t]
    end
  }
  addr = align(addr, ALIGN_MAP[TYPE_VOIDP])
  @size = addr
end