Smalltalk 如何在Squeak FFI中定义联合类型
我想与对某些结构字段使用某种联合类型的库进行接口,例如:Smalltalk 如何在Squeak FFI中定义联合类型,smalltalk,ffi,squeak,Smalltalk,Ffi,Squeak,我想与对某些结构字段使用某种联合类型的库进行接口,例如: typedef struct { H5L_type_t type; /* Type of link */ hbool_t corder_valid; /* Indicate if creation order is valid */ int64_t corder; /* Cr
typedef struct {
H5L_type_t type; /* Type of link */
hbool_t corder_valid; /* Indicate if creation order is valid */
int64_t corder; /* Creation order */
H5T_cset_t cset; /* Character set of link name */
union {
haddr_t address; /* Address hard link points to */
size_t val_size; /* Size of a soft link or UD link value */
} u;
} H5L_info_t;
我在Squeak FFI中没有看到任何形式的支持
我应该自己确定最长的成员大小并坚持吗?因此,在仔细检查源代码后,我可以看出Squeak FFI不支持union 这种情况不一定会持续下去,因此我发布了Squeak FFI的更新,以支持工会。
看
ExternalUnion
与ExternalStructure
(作为子类)共享基本相同的代码,只是它使用常量字节偏移量
和max:
运算符来累积总字节大小,而不是在迭代字段时使用+
运算符递增的字节偏移量
。非常适合外部对象
的层次结构。我同意将ExternalUnion
作为ExternalStructure
的特例来阅读是有用的。C标准如何谈论工会?这些解释是否与结构有关?将ExternalStructure子类化是避免FFI插件更改的必要技巧。但如果我们愿意,我们也可以改变。