unify "slot" construct
This commit is contained in:
34
src/core.zig
34
src/core.zig
@@ -38,40 +38,6 @@ const std = @import("std");
|
|||||||
// Things should be done in a thread-safe manner. Signal to a module that it should unload gracefully, and the
|
// Things should be done in a thread-safe manner. Signal to a module that it should unload gracefully, and the
|
||||||
// module signal when it can safely be unloaded.
|
// module signal when it can safely be unloaded.
|
||||||
|
|
||||||
pub fn CFunc(Function: type) type {
|
|
||||||
const Arguments = std.meta.ArgsTuple(Function);
|
|
||||||
const Return = @typeInfo(Function).@"fn".return_type.?;
|
|
||||||
return fn (*const Arguments, *Return) callconv(.c) void;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn hook(impl: anytype) CFunc(@TypeOf(impl)) {
|
|
||||||
const Function = @TypeOf(impl);
|
|
||||||
const Arguments = std.meta.ArgsTuple(Function);
|
|
||||||
const Return = @typeInfo(Function).@"fn".return_type.?;
|
|
||||||
|
|
||||||
return struct {
|
|
||||||
pub fn cimpl(args: *const Arguments, ret: *Return) callconv(.c) void {
|
|
||||||
ret.* = @call(.auto, impl, .{args.*});
|
|
||||||
}
|
|
||||||
}.cimpl;
|
|
||||||
}
|
|
||||||
|
|
||||||
// pub fn Func(PFunction: type) type {
|
|
||||||
// const CFunction = @typeInfo(PFunction).pointer.child;
|
|
||||||
// const F = @typeInfo(CFunction).@"fn";
|
|
||||||
// const PArgs = F.params[0].type.?;
|
|
||||||
// const PRet = F.params[1].type.?;
|
|
||||||
// const Args = @typeInfo(PArgs).pointer.child;
|
|
||||||
// const Ret = @typeInfo(PRet).pointer.child;
|
|
||||||
// return fn (Args) Ret;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// pub fn slot(cimpl: anytype) Func(@TypeOf(cimpl)) {
|
|
||||||
// return struct{
|
|
||||||
// pub fn impl(args: )
|
|
||||||
// }.impl;
|
|
||||||
// }
|
|
||||||
|
|
||||||
pub fn Slot(Function: type) type {
|
pub fn Slot(Function: type) type {
|
||||||
const Arguments = std.meta.ArgsTuple(Function);
|
const Arguments = std.meta.ArgsTuple(Function);
|
||||||
const Return = @typeInfo(Function).@"fn".return_type.?;
|
const Return = @typeInfo(Function).@"fn".return_type.?;
|
||||||
|
Reference in New Issue
Block a user