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