Class: Fiddle::CUnionEntity

Inherits:
CStructEntity show all
Includes:
PackInfo
Defined in:
lib/fiddle/struct.rb

Overview

A pointer to a C union

Constant Summary

Constants included from PackInfo

PackInfo::ALIGN_MAP, PackInfo::PACK_MAP, PackInfo::SIZE_MAP

Class Method Summary collapse

Instance Method Summary collapse

Methods included from PackInfo

align

Methods inherited from CStructEntity

#[], #[]=, alignment, #assign_names, #initialize, malloc, #to_s

Methods included from ValueUtil

#signed_value, #unsigned_value, #wrap_arg, #wrap_args

Methods inherited from Pointer

#+, #+@, #-, #-@, #<=>, #==, [], #[], #[]=, #call_free, #eql?, #free, #free=, #freed?, #initialize, #inspect, malloc, #null?, #ptr, #ref, #size, #size=, #to_i, #to_int, to_ptr, #to_s, #to_str, #to_value

Constructor Details

This class inherits a constructor from Fiddle::CStructEntity

Class Method Details

.size(types) ⇒ Object

Returns the size needed for the union with the given types.

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


450
451
452
453
454
455
456
457
458
# File 'lib/fiddle/struct.rb', line 450

def CUnionEntity.size(types)
  types.map { |type, count = 1|
    if type.respond_to?(:entity_class)
      type.size * count
    else
      PackInfo::SIZE_MAP[type] * count
    end
  }.max
end

Instance Method Details

#set_ctypes(types) ⇒ Object

Calculate the necessary offset and for each union member with the given types



462
463
464
465
466
# File 'lib/fiddle/struct.rb', line 462

def set_ctypes(types)
  @ctypes = types
  @offset = Array.new(types.length, 0)
  @size   = self.class.size types
end