podman
42 строки · 700.0 Байт
1package gpgme
2
3import (
4"sync"
5)
6
7var callbacks struct {
8sync.Mutex
9m map[uintptr]interface{}
10c uintptr
11}
12
13func callbackAdd(v interface{}) uintptr {
14callbacks.Lock()
15defer callbacks.Unlock()
16if callbacks.m == nil {
17callbacks.m = make(map[uintptr]interface{})
18}
19callbacks.c++
20ret := callbacks.c
21callbacks.m[ret] = v
22return ret
23}
24
25func callbackLookup(c uintptr) interface{} {
26callbacks.Lock()
27defer callbacks.Unlock()
28ret := callbacks.m[c]
29if ret == nil {
30panic("callback pointer not found")
31}
32return ret
33}
34
35func callbackDelete(c uintptr) {
36callbacks.Lock()
37defer callbacks.Unlock()
38if callbacks.m[c] == nil {
39panic("callback pointer not found")
40}
41delete(callbacks.m, c)
42}
43