58 lines
932 B
Go
58 lines
932 B
Go
package aid
|
|
|
|
import (
|
|
"sync"
|
|
)
|
|
|
|
type GenericSyncMap[T any] struct {
|
|
m sync.Map
|
|
}
|
|
|
|
func (s *GenericSyncMap[T]) Set(key string, value *T) {
|
|
s.m.Store(key, value)
|
|
}
|
|
|
|
func (s *GenericSyncMap[T]) Get(key string) (*T, bool) {
|
|
v, ok := s.m.Load(key)
|
|
if !ok {
|
|
return nil, false
|
|
}
|
|
|
|
return v.(*T), true
|
|
}
|
|
|
|
func (s *GenericSyncMap[T]) MustGet(key string) *T {
|
|
v, ok := s.m.Load(key)
|
|
if !ok {
|
|
return nil
|
|
}
|
|
|
|
return v.(*T)
|
|
}
|
|
|
|
func (s *GenericSyncMap[T]) Delete(key string) {
|
|
s.m.Delete(key)
|
|
}
|
|
|
|
func (s *GenericSyncMap[T]) Range(f func(key string, value *T) bool) {
|
|
s.m.Range(func(key, value interface{}) bool {
|
|
return f(key.(string), value.(*T))
|
|
})
|
|
}
|
|
|
|
func (s *GenericSyncMap[T]) Has(key string) bool {
|
|
_, ok := s.Get(key)
|
|
return ok
|
|
}
|
|
|
|
// change the key of a value in the map
|
|
|
|
func (s *GenericSyncMap[T]) ChangeKey(oldKey, newKey string) {
|
|
v, ok := s.Get(oldKey)
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
s.Set(newKey, v)
|
|
s.Delete(oldKey)
|
|
} |