41 lines
641 B
Go
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
|
|
}
|