50 lines
774 B
Go
50 lines
774 B
Go
//go:build !go1.9
|
|
// +build !go1.9
|
|
|
|
package crr
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type syncMap struct {
|
|
container map[interface{}]interface{}
|
|
lock sync.RWMutex
|
|
}
|
|
|
|
func newSyncMap() syncMap {
|
|
return syncMap{
|
|
container: map[interface{}]interface{}{},
|
|
}
|
|
}
|
|
|
|
func (m *syncMap) Load(key interface{}) (interface{}, bool) {
|
|
m.lock.RLock()
|
|
defer m.lock.RUnlock()
|
|
|
|
v, ok := m.container[key]
|
|
return v, ok
|
|
}
|
|
|
|
func (m *syncMap) Store(key interface{}, value interface{}) {
|
|
m.lock.Lock()
|
|
defer m.lock.Unlock()
|
|
|
|
m.container[key] = value
|
|
}
|
|
|
|
func (m *syncMap) Delete(key interface{}) {
|
|
m.lock.Lock()
|
|
defer m.lock.Unlock()
|
|
|
|
delete(m.container, key)
|
|
}
|
|
|
|
func (m *syncMap) Range(f func(interface{}, interface{}) bool) {
|
|
for k, v := range m.container {
|
|
if !f(k, v) {
|
|
return
|
|
}
|
|
}
|
|
}
|