Class: Fiddle::CUnionEntity

Inherits:
CStructEntity show all
Includes:
PackInfo
Defined in:
ext/fiddle/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, read, #ref, #size, #size=, #to_i, #to_int, to_ptr, #to_s, #to_str, #to_value, write

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


521
522
523
524
525
526
527
528
529
# File 'ext/fiddle/lib/fiddle/struct.rb', line 521

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



533
534
535
536
537
# File 'ext/fiddle/lib/fiddle/struct.rb', line 533

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