Method: Fiddle::CStructEntity.size

Defined in:
lib/fiddle/struct.rb

.size(types) ⇒ Object

Returns the offset for the packed sizes for the given types.

Fiddle::CStructEntity.size(
  [ Fiddle::TYPE_DOUBLE,
    Fiddle::TYPE_INT,
    Fiddle::TYPE_CHAR,
    Fiddle::TYPE_VOIDP ]) #=> 24


326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
# File 'lib/fiddle/struct.rb', line 326

def CStructEntity.size(types)
  offset = 0

  max_align = types.map { |type, count = 1|
    last_offset = offset

    if type.respond_to?(:entity_class)
      align = type.alignment
      type_size = type.size
    else
      align = PackInfo::ALIGN_MAP[type]
      type_size = PackInfo::SIZE_MAP[type]
    end
    offset = PackInfo.align(last_offset, align) +
             (type_size * count)

    align
  }.max

  PackInfo.align(offset, max_align)
end