thread safe map
This commit is contained in:
47
shared/tmap.go
Normal file
47
shared/tmap.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package shared
|
||||
|
||||
import "sync"
|
||||
|
||||
type TMap[K comparable, V any] struct {
|
||||
data map[K]V
|
||||
mu sync.RWMutex
|
||||
}
|
||||
|
||||
func NewTMap[K comparable, V any]() TMap[K, V] {
|
||||
return TMap[K, V]{
|
||||
data: map[K]V{},
|
||||
}
|
||||
}
|
||||
|
||||
func (m *TMap[K, V]) Get(k K) V {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
return m.data[k]
|
||||
}
|
||||
|
||||
func (m *TMap[K, V]) GetOK(k K) (V, bool) {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
v, ok := m.data[k]
|
||||
return v, ok
|
||||
}
|
||||
|
||||
func (m *TMap[K, V]) Set(k K, v V) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
m.data[k] = v
|
||||
}
|
||||
|
||||
func (m *TMap[K, V]) Delete(k K) {
|
||||
m.mu.Lock()
|
||||
defer m.mu.Unlock()
|
||||
delete(m.data, k)
|
||||
}
|
||||
|
||||
func (m *TMap[K, V]) ForEach(f func(k K, v V)) {
|
||||
m.mu.RLock()
|
||||
defer m.mu.RUnlock()
|
||||
for k, v := range m.data {
|
||||
f(k, v)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user