diff options
Diffstat (limited to 'vendor/github.com/proglottis/gpgme/callbacks.go')
-rw-r--r-- | vendor/github.com/proglottis/gpgme/callbacks.go | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/vendor/github.com/proglottis/gpgme/callbacks.go b/vendor/github.com/proglottis/gpgme/callbacks.go new file mode 100644 index 000000000..d1dc610d4 --- /dev/null +++ b/vendor/github.com/proglottis/gpgme/callbacks.go @@ -0,0 +1,42 @@ +package gpgme + +import ( + "sync" +) + +var callbacks struct { + sync.Mutex + m map[uintptr]interface{} + c uintptr +} + +func callbackAdd(v interface{}) uintptr { + callbacks.Lock() + defer callbacks.Unlock() + if callbacks.m == nil { + callbacks.m = make(map[uintptr]interface{}) + } + callbacks.c++ + ret := callbacks.c + callbacks.m[ret] = v + return ret +} + +func callbackLookup(c uintptr) interface{} { + callbacks.Lock() + defer callbacks.Unlock() + ret := callbacks.m[c] + if ret == nil { + panic("callback pointer not found") + } + return ret +} + +func callbackDelete(c uintptr) { + callbacks.Lock() + defer callbacks.Unlock() + if callbacks.m[c] == nil { + panic("callback pointer not found") + } + delete(callbacks.m, c) +} |