cbind.BindF
This commit is contained in:
@@ -29,7 +29,7 @@ import (
|
|||||||
|
|
||||||
func Timeout(d time.Duration) async.IO[async.Void] {
|
func Timeout(d time.Duration) async.IO[async.Void] {
|
||||||
return async.Async(func(resolve func(async.Void)) {
|
return async.Async(func(resolve func(async.Void)) {
|
||||||
t, _ := cbind.Bind[libuv.Timer](func() {
|
t, _ := cbind.BindF[libuv.Timer, libuv.TimerCb](func() {
|
||||||
resolve(async.Void{})
|
resolve(async.Void{})
|
||||||
})
|
})
|
||||||
r := libuv.InitTimer(async.Exec().L, t)
|
r := libuv.InitTimer(async.Exec().L, t)
|
||||||
|
|||||||
@@ -97,30 +97,58 @@ func Callback3[Base any, A any, B any, C any](b *Base, a A, c B, d C) {
|
|||||||
* @param call The Go function to bind.
|
* @param call The Go function to bind.
|
||||||
* @return The data pointer and the C callback function.
|
* @return The data pointer and the C callback function.
|
||||||
*/
|
*/
|
||||||
func Bind[T any](call func()) (p *T, fn Cb[T]) {
|
func Bind[T any](call func()) (p *T, cb Cb[T]) {
|
||||||
bb := &bind[T]{fn: func() { call() }}
|
bb := &bind[T]{fn: call}
|
||||||
p = (*T)(unsafe.Pointer(bb))
|
p = (*T)(unsafe.Pointer(bb))
|
||||||
fn = Callback[T]
|
cb = Callback[T]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func Bind1[T any, A any](call func(A)) (p *T, fn Cb1[T, A]) {
|
func BindF[T any, F ~func(*T)](call func()) (*T, F) {
|
||||||
bb := &bind1[T, A]{fn: func(a A) { call(a) }}
|
bb := &bind[T]{fn: call}
|
||||||
|
p := (*T)(unsafe.Pointer(bb))
|
||||||
|
fn := Callback[T]
|
||||||
|
return p, *(*F)(unsafe.Pointer(&fn))
|
||||||
|
}
|
||||||
|
|
||||||
|
func Bind1[T any, A any](call func(A)) (p *T, cb Cb1[T, A]) {
|
||||||
|
bb := &bind1[T, A]{fn: call}
|
||||||
p = (*T)(unsafe.Pointer(bb))
|
p = (*T)(unsafe.Pointer(bb))
|
||||||
fn = Callback1[T, A]
|
cb = Callback1[T, A]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func Bind2[T any, A any, B any](call func(A, B)) (p *T, fn Cb2[T, A, B]) {
|
func Bind1F[T any, A any, F ~func(A)](call func(A)) (*T, F) {
|
||||||
bb := &bind2[T, A, B]{fn: func(a A, b B) { call(a, b) }}
|
bb := &bind1[T, A]{fn: call}
|
||||||
|
p := (*T)(unsafe.Pointer(bb))
|
||||||
|
fn := Callback1[T, A]
|
||||||
|
return p, *(*F)(unsafe.Pointer(&fn))
|
||||||
|
}
|
||||||
|
|
||||||
|
func Bind2[T any, A any, B any](call func(A, B)) (p *T, cb Cb2[T, A, B]) {
|
||||||
|
bb := &bind2[T, A, B]{fn: call}
|
||||||
p = (*T)(unsafe.Pointer(bb))
|
p = (*T)(unsafe.Pointer(bb))
|
||||||
fn = Callback2[T, A, B]
|
cb = Callback2[T, A, B]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func Bind3[T any, A any, B any, C any](call func(A, B, C), a A, b B, c C) (p *T, fn Cb3[T, A, B, C]) {
|
func Bind2F[T any, A any, B any, F ~func(A, B)](call func(A, B)) (*T, F) {
|
||||||
bb := &bind3[T, A, B, C]{fn: func(a A, b B, c C) { call(a, b, c) }}
|
bb := &bind2[T, A, B]{fn: call}
|
||||||
|
p := (*T)(unsafe.Pointer(bb))
|
||||||
|
fn := Callback2[T, A, B]
|
||||||
|
return p, *(*F)(unsafe.Pointer(&fn))
|
||||||
|
}
|
||||||
|
|
||||||
|
func Bind3[T any, A any, B any, C any](call func(A, B, C), a A, b B, c C) (p *T, cb Cb3[T, A, B, C]) {
|
||||||
|
bb := &bind3[T, A, B, C]{fn: call}
|
||||||
p = (*T)(unsafe.Pointer(bb))
|
p = (*T)(unsafe.Pointer(bb))
|
||||||
fn = Callback3[T, A, B, C]
|
cb = Callback3[T, A, B, C]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Bind3F[T any, A any, B any, C any, F ~func(A, B, C)](call func(A, B, C), a A, b B, c C) (*T, F) {
|
||||||
|
bb := &bind3[T, A, B, C]{fn: call}
|
||||||
|
p := (*T)(unsafe.Pointer(bb))
|
||||||
|
fn := Callback3[T, A, B, C]
|
||||||
|
return p, *(*F)(unsafe.Pointer(&fn))
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user