Class: Fiddle::CUnionEntity
- Inherits:
-
CStructEntity
- Object
- Pointer
- CStructEntity
- Fiddle::CUnionEntity
- 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
-
.size(types) ⇒ Object
Returns the size needed for the union with the given
types
.
Instance Method Summary collapse
-
#set_ctypes(types) ⇒ Object
Calculate the necessary offset and for each union member with the given
types
.
Methods included from PackInfo
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 |