Module: DL::PackInfo

Included in:
CStructEntity, CUnionEntity, Packer
Defined in:
lib/dl/pack.rb

Constant Summary collapse

ALIGN_MAP =
{
  TYPE_VOIDP => ALIGN_VOIDP,
  TYPE_CHAR  => ALIGN_CHAR,
  TYPE_SHORT => ALIGN_SHORT,
  TYPE_INT   => ALIGN_INT,
  TYPE_LONG  => ALIGN_LONG,
  TYPE_FLOAT => ALIGN_FLOAT,
  TYPE_DOUBLE => ALIGN_DOUBLE,
  -TYPE_CHAR  => ALIGN_CHAR,
  -TYPE_SHORT => ALIGN_SHORT,
  -TYPE_INT   => ALIGN_INT,
  -TYPE_LONG  => ALIGN_LONG,
}
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",
  -TYPE_CHAR  => "c",
  -TYPE_SHORT => "s!",
  -TYPE_INT   => "i!",
  -TYPE_LONG  => "l!",
}
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,
  -TYPE_CHAR  => SIZEOF_CHAR,
  -TYPE_SHORT => SIZEOF_SHORT,
  -TYPE_INT   => SIZEOF_INT,
  -TYPE_LONG  => SIZEOF_LONG,
}

Class Method Summary collapse

Class Method Details

.align(addr, align) ⇒ Object



52
53
54
55
56
57
58
59
# File 'lib/dl/pack.rb', line 52

def align(addr, align)
  d = addr % align
  if( d == 0 )
    addr
  else
    addr + (align - d)
  end
end