Skip to content

zoop

zoop.Fn

zig
pub fn Fn(comptime T: type) type

功能:计算T的 所有 Method, 参考 Fn 原理

参数:

返回:一个 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 原理

参数:

返回:一个 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

功能:计算 IVtable

参数:

  • I: Interface
  • APIs: 一个 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

功能:计算TMixin 数据类型, 参考 Mixin 设计

参数:

返回:TMixin 数据类型

例子:

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

功能:获取包含 T 实现/继承的所有接口 (不包含 zoop.IObject)

参数:

返回:一个 tuple,包含 T 实现/继承的所有接口 (不包含 zoop.IObject)

zoop.SuperClasses

zig
pub fn SuperClasses(comptime T: type) type

功能:获取包含 T 所有直接或者间接的父类

参数:

返回:一个 tuple,包含 T 所有直接或者间接的父类

zoop.DirectSuperClasses

zig
pub fn DirectSuperClasses(comptime T: type) type

功能:获取包含 T 所有直接父类的 tuple

参数:

返回:一个 tuple,包含 T 所有直接父类

zoop.SuperRoute

zig
pub fn SuperRoute(comptime T: type, comptime Target: type) type

功能:计算继承树上从 TTarget 依次经过的所有类

参数:

返回:一个 tuple,包含继承树上从 TTarget 依次经过的所有类 (结果包含 Target 但不包含 T)

zoop.typeId

zig
pub fn typeId(any: anytype) u32

功能:获取 anytypeid

参数:

返回:anytypeid

zoop.typeInfo

zig
pub fn typeInfo(any: anytype) *const TypeInfo

功能:获取 anyTypeInfo

参数:

返回:anyTypeInfo

例子:

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

功能:获取 anyMetaInfo

参数:

返回:anyMetaInfo

例子:

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 等于 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

功能:判断 T 是否是 Interface

参数:

  • T: 任意 zig type

返回:TInterface 返回 true 否则 false

zoop.isClass

zig
pub inline fn isClass(comptime T: type) bool

功能:判断 T 是否是 Class

参数:

  • T: 任意 zig type

返回:TClass 返回 true 否则 false

zoop.mixinName

zig
pub fn mixinName(comptime T: type) []const u8

功能:计算 TMixinData 中的名字

参数:

返回:TMixinData 中的名字

例子:

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 则清除之前设置的钩子函数

基于 MIT 许可发布