tdengine-mapper-go/sync_map.go

41 lines
665 B
Go
Raw Normal View History

2024-09-14 15:57:03 +08:00
package tdmap
import (
"sync"
)
2024-09-18 16:51:30 +08:00
type SyncMap[T any, V any] struct {
sMap sync.Map
}
2024-09-18 16:51:30 +08:00
func (m *SyncMap[T, V]) Store(key T, value V) {
m.sMap.Store(key, value)
}
2024-09-18 16:51:30 +08:00
func (m *SyncMap[T, V]) Load(key T) (value V, ok bool) {
v, ok := m.sMap.Load(key)
if ok {
return v.(V), ok
}
return
}
2024-09-18 16:51:30 +08:00
func (m *SyncMap[T, V]) Delete(key T) {
m.sMap.Delete(key)
}
2024-09-18 16:51:30 +08:00
func (m *SyncMap[T, V]) Range(f func(T, V) bool) {
m.sMap.Range(func(key, value any) bool {
return f(key.(T), value.(V))
})
}
2024-09-18 16:51:30 +08:00
func (m *SyncMap[T, V]) LoadOrStore(key T, value V) (actual V, loaded bool) {
_actual, loaded := m.sMap.LoadOrStore(key, value)
if loaded {
actual = _actual.(V)
}
return
}