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) type
zoop.SuperClasses
zig
pub fn SuperClasses(comptime T: type) type
zoop.DirectSuperClasses
zig
pub fn DirectSuperClasses(comptime T: type) type
zoop.SuperRoute
zig
pub fn SuperRoute(comptime T: type, comptime Target: type) type
zoop.typeId
zig
pub fn typeId(any: anytype) u32
zoop.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) bool
zoop.isClass
zig
pub inline fn isClass(comptime T: type) bool
zoop.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
则清除之前设置的钩子函数