Søren Rasmussen
07a23c1845
Some checks reported errors
continuous-integration/drone/push Build encountered an error
41 lines
630 B
Go
41 lines
630 B
Go
package cbgo
|
|
|
|
import (
|
|
"sync"
|
|
"unsafe"
|
|
)
|
|
|
|
// ptrMap is a thread-safe map with pointer keys and generic values.
|
|
type ptrMap struct {
|
|
m map[unsafe.Pointer]interface{}
|
|
mtx sync.RWMutex
|
|
}
|
|
|
|
func newPtrMap() *ptrMap {
|
|
return &ptrMap{
|
|
m: map[unsafe.Pointer]interface{}{},
|
|
}
|
|
}
|
|
|
|
func (pm *ptrMap) find(p unsafe.Pointer) interface{} {
|
|
pm.mtx.RLock()
|
|
defer pm.mtx.RUnlock()
|
|
|
|
return pm.m[p]
|
|
}
|
|
|
|
func (pm *ptrMap) add(p unsafe.Pointer, itf interface{}) error {
|
|
pm.mtx.Lock()
|
|
defer pm.mtx.Unlock()
|
|
|
|
pm.m[p] = itf
|
|
|
|
return nil
|
|
}
|
|
|
|
func (pm *ptrMap) del(p unsafe.Pointer) {
|
|
pm.mtx.Lock()
|
|
defer pm.mtx.Unlock()
|
|
|
|
delete(pm.m, p)
|
|
}
|