Fiddle::CUnionEntity
class Fiddle::CUnionEntity
Parent:Fiddle::CStructEntity
一个C联合式包装
公共类方法
malloc(types, func=nil) Show source
为所提供的类型分配一个C联合。
当实例被废物收集时,C函数func
被调用。
# File ext/fiddle/lib/fiddle/struct.rb, line 216
def CUnionEntity.malloc(types, func=nil)
addr = Fiddle.malloc(CUnionEntity.size(types))
CUnionEntity.new(addr, types, func)
end
size(types) Show source
返回与给定类型的联合所需的大小。
Fiddle::CUnionEntity.size(
[ Fiddle::TYPE_DOUBLE,
Fiddle::TYPE_INT,
Fiddle::TYPE_CHAR,
Fiddle::TYPE_VOIDP ]) #=> 8
# File ext/fiddle/lib/fiddle/struct.rb, line 228
def CUnionEntity.size(types)
types.map { |type, count = 1|
PackInfo::SIZE_MAP[type] * count
}.max
end
公共实例方法
set_ctypes(types) Show source
使用给定的类型计算每个联合成员的必要偏移量
# File ext/fiddle/lib/fiddle/struct.rb, line 236
def set_ctypes(types)
@ctypes = types
@offset = Array.new(types.length, 0)
@size = self.class.size types
end