tdengine-mapper-go/sync_map.go
2024-09-14 16:02:22 +08:00

41 lines
641 B
Go

package tdmap
import (
"sync"
)
type Map[T any, V any] struct {
sMap sync.Map
}
func (m *Map[T, V]) Store(key T, value V) {
m.sMap.Store(key, value)
}
func (m *Map[T, V]) Load(key T) (value V, ok bool) {
v, ok := m.sMap.Load(key)
if ok {
return v.(V), ok
}
return
}
func (m *Map[T, V]) Delete(key T) {
m.sMap.Delete(key)
}
func (m *Map[T, V]) Range(f func(T, V) bool) {
m.sMap.Range(func(key, value any) bool {
return f(key.(T), value.(V))
})
}
func (m *Map[T, V]) LoadOrStore(key T, value V) (actual V, loaded bool) {
_actual, loaded := m.sMap.LoadOrStore(key, value)
if loaded {
actual = _actual.(V)
}
return
}