首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Fiddle::CUnionEntity

Parent:Fiddle::CStructEntity

一个C联合式包装

公共类方法

malloc(types, func=nil) Show source

为所提供的类型分配一个C联合。

当实例被废物收集时,C函数func被调用。

代码语言:javascript
复制
# 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

返回与给定类型的联合所需的大小。

代码语言:javascript
复制
Fiddle::CUnionEntity.size(
  [ Fiddle::TYPE_DOUBLE,
    Fiddle::TYPE_INT,
    Fiddle::TYPE_CHAR,
    Fiddle::TYPE_VOIDP ]) #=> 8
代码语言:javascript
复制
# 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

使用给定的类型计算每个联合成员的必要偏移量

代码语言:javascript
复制
# 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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com