zoop
zoop.Fn
zig
pub fn Fn(comptime T: type) type参数:
T: Class
返回:一个 tuple, 包含通过调用 T 和其所有父类的 Fn 函数返回的所有 Method
例子:
zig
const SomeClass = struct {
pub const extends = .{BaseClass}
pub usingnamespace zoop.Fn(@This());
}zoop.Api
zig
pub fn Api(comptime I: type) type功能:计算I的 所有 ApiMethod, 参考 Api 原理
参数:
I: Interface
返回:一个 tuple, 包含通过调用 I 和其所有父接口的 Api 函数返回的所有 ApiMethod
例子:
zig
pub const ISome = struct {
pub const extends = .{IBase}
pub usingnamespace zoop.Api(@This());
}zoop.DefVtable
zig
pub fn DefVtable(comptime I: type, comptime APIs: type) type功能:计算 I 的 Vtable
参数:
I: InterfaceAPIs: 一个 zig struct,包含I定义的函数接口的指针数据
返回:一个 zig struct,包含 I 和其父接口定义的函数接口的指针数据
例子:
zig
pub const ISome = struct {
pub const extends = .{IBase}
pub const Vtable = zoop.DefVtable(@This(), struct {
someFunc1: *fn const(*anyopaque) void,
someFunc2: *fn const(*anyopaque) void,
});
}zoop.Mixin
zig
pub fn Mixin(comptime T: type) type功能:计算T的 Mixin 数据类型, 参考 Mixin 设计
参数:
T: Class
返回:T的 Mixin 数据类型
例子:
zig
const SomeClass = struct {
mixin: zoop.Mixin(@This()),
}zoop.Method
zig
pub const Method = tuple.Init;功能:同 tuple.Init
例子:
zig
pub const Some = struct {
pub fn Fn(comptime T: type) type {
return zoop.Method(.{
struct {
pub fn someFunc(this: *T) void { _ = this; }
},
});
}
}zoop.Interfaces
zig
pub fn Interfaces(comptime T: type) typezoop.SuperClasses
zig
pub fn SuperClasses(comptime T: type) typezoop.DirectSuperClasses
zig
pub fn DirectSuperClasses(comptime T: type) typezoop.SuperRoute
zig
pub fn SuperRoute(comptime T: type, comptime Target: type) typezoop.typeId
zig
pub fn typeId(any: anytype) u32zoop.typeInfo
zig
pub fn typeInfo(any: anytype) *const TypeInfo功能:获取 any 的 TypeInfo
参数:
返回:any 的 TypeInfo
例子:
zig
const t = std.testing;
var obj = try Some.new(t.allocator);
defer obj.destroy();
var iface = o.as(zoop.IObject).?;
try t.expect(zoop.typeInfo(obj) == zoop.typeInfo(iface));
try t.expect(zoop.typeInfo(obj) == zoop.typeInfo(Some));zoop.metaInfo
zig
pub fn metaInfo(any: anytype) *const MetaInfo功能:获取 any 的 MetaInfo
参数:
返回:any 的 MetaInfo
例子:
zig
const t = std.testing;
var obj = try Some.new(t.allocator);
defer obj.destroy();
var iface = o.as(zoop.IObject).?;
try t.expect(zoop.metaInfo(obj) == zoop.metaInfo(iface));zoop.isRootPtr
zig
pub inline fn isRootPtr(ptr: anytype) bool {功能:判断 ptr 是否等于 rootptr
参数:
ptr: Class 实例指针
返回:ptr 等于 rootptr 返回 true 否则 false
例子:
zig
const t = std.testing;
var sub = try SubClass.new(t.allocator);
defer sub.destroy();
var base = sub.cast(BaseClass);
try t.expect(zoop.isRootPtr(sub) == true);
try t.expect(zoop.isRootPtr(base) == false);zoop.isInterface
zig
pub inline fn isInterface(comptime T: type) boolzoop.isClass
zig
pub inline fn isClass(comptime T: type) boolzoop.mixinName
zig
pub fn mixinName(comptime T: type) []const u8功能:计算 T 在 MixinData 中的名字
参数:
T: Class
返回:T 在 MixinData 中的名字
例子:
zig
const t = std.testing;
try t.expectEqualStrings(zoop.mixinName(mymod.SomeClass), "mymod_SomeClass");zoop.mixinName0
zig
pub fn mixinName0(comptime T: type) [:0]const u8功能:同 mixinName,区别是返回0结尾的字符串
zoop.setHook
zig
pub const HookFunc = *const fn (obj: IObject) void;
pub fn setHook(new_hook: ?HookFunc, destroy_hook: ?HookFunc) void功能:设置监视对象创建和销毁的钩子函数
参数:
new_hook:对象创建钩子函数,传入null则清除之前设置的钩子函数destroy_hook:对象销毁钩子函数,传入null则清除之前设置的钩子函数
