Files
baalvpn/shared/tmap.go
2026-07-22 14:28:11 +02:00

48 lines
717 B
Go

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)
}
}