callback.mx raw
1 //go:build wasm
2 //:build wasm
3
4 package callback
5
6 type entry struct {
7 fn interface{}
8 once bool
9 }
10
11 var table = map[int32]entry{}
12 var nextID int32 = 1
13
14 func register(fn interface{}, once bool) (n int32) {
15 id := nextID
16 nextID++
17 table[id] = entry{fn, once}
18 return id
19 }
20
21 func lookup(id int32) (interface{}, bool) {
22 e, ok := table[id]
23 if !ok {
24 return nil, false
25 }
26 if e.once {
27 delete(table, id)
28 }
29 return e.fn, true
30 }
31
32 func Release(id int32) {
33 delete(table, id)
34 }
35
36 func Register0(fn func()) (n int32) { return register(fn, false) }
37 func Register0Once(fn func()) (n int32) { return register(fn, true) }
38 func RegisterS(fn func(string)) (n int32) { return register(fn, false) }
39 func RegisterSOnce(fn func(string)) (n int32) { return register(fn, true) }
40 func RegisterB(fn func(bool)) (n int32) { return register(fn, false) }
41 func RegisterBOnce(fn func(bool)) (n int32) { return register(fn, true) }
42 func RegisterI(fn func(int32)) (n int32) { return register(fn, false) }
43 func RegisterIOnce(fn func(int32)) (n int32) { return register(fn, true) }
44
45 func RegisterIS(fn func(int32, string)) (n int32) { return register(fn, false) }
46 func RegisterISOnce(fn func(int32, string)) (n int32) { return register(fn, true) }
47 func RegisterIIS(fn func(int32, int32, string)) (n int32) { return register(fn, false) }
48 func RegisterIISOnce(fn func(int32, int32, string)) (n int32) { return register(fn, true) }
49 func RegisterSS(fn func(string, string)) (n int32) { return register(fn, false) }
50 func RegisterSSOnce(fn func(string, string)) (n int32) { return register(fn, true) }
51 func Register6I(fn func(int32, int32, int32, int32, int32, int32)) (n int32) { return register(fn, false) }
52 func Register6IOnce(fn func(int32, int32, int32, int32, int32, int32)) (n int32) { return register(fn, true) }
53 func RegisterII(fn func(int32, int32)) (n int32) { return register(fn, false) }
54 func RegisterIIOnce(fn func(int32, int32)) (n int32) { return register(fn, true) }
55 func RegisterIII(fn func(int32, int32, int32)) (n int32) { return register(fn, false) }
56 func RegisterIIIOnce(fn func(int32, int32, int32)) (n int32) { return register(fn, true) }
57 func RegisterBytes(fn func([]byte)) (n int32) { return register(fn, false) }
58 func RegisterBytesOnce(fn func([]byte)) (n int32) { return register(fn, true) }
59