27 lines
487 B
Go
27 lines
487 B
Go
package echotron
|
|
|
|
import "sync"
|
|
|
|
type smap[K, V any] sync.Map
|
|
|
|
func (s *smap[K, V]) load(key K) (val V, ok bool) {
|
|
v, ok := (*sync.Map)(s).Load(key)
|
|
if !ok {
|
|
return
|
|
}
|
|
return v.(V), ok
|
|
}
|
|
|
|
func (s *smap[K, V]) store(key K, val V) {
|
|
(*sync.Map)(s).Store(key, val)
|
|
}
|
|
|
|
func (s *smap[K, V]) loadOrStore(key K, val V) (actual V, loaded bool) {
|
|
a, loaded := (*sync.Map)(s).LoadOrStore(key, val)
|
|
return a.(V), loaded
|
|
}
|
|
|
|
func (s *smap[K, V]) delete(key K) {
|
|
(*sync.Map)(s).Delete(key)
|
|
}
|