Spaces:
Configuration error
Configuration error
| package xsync | |
| import ( | |
| "sync" | |
| ) | |
| type SyncedMap[K comparable, V any] struct { | |
| mu sync.RWMutex | |
| m map[K]V | |
| } | |
| func NewSyncedMap[K comparable, V any]() *SyncedMap[K, V] { | |
| return &SyncedMap[K, V]{ | |
| m: make(map[K]V), | |
| } | |
| } | |
| func (m *SyncedMap[K, V]) Map() map[K]V { | |
| m.mu.RLock() | |
| defer m.mu.RUnlock() | |
| return m.m | |
| } | |
| func (m *SyncedMap[K, V]) Get(key K) V { | |
| m.mu.RLock() | |
| defer m.mu.RUnlock() | |
| return m.m[key] | |
| } | |
| func (m *SyncedMap[K, V]) Keys() []K { | |
| m.mu.RLock() | |
| defer m.mu.RUnlock() | |
| keys := make([]K, 0, len(m.m)) | |
| for k := range m.m { | |
| keys = append(keys, k) | |
| } | |
| return keys | |
| } | |
| func (m *SyncedMap[K, V]) Values() []V { | |
| m.mu.RLock() | |
| defer m.mu.RUnlock() | |
| values := make([]V, 0, len(m.m)) | |
| for _, v := range m.m { | |
| values = append(values, v) | |
| } | |
| return values | |
| } | |
| func (m *SyncedMap[K, V]) Len() int { | |
| m.mu.RLock() | |
| defer m.mu.RUnlock() | |
| return len(m.m) | |
| } | |
| func (m *SyncedMap[K, V]) Iterate(f func(key K, value V) bool) { | |
| m.mu.RLock() | |
| defer m.mu.RUnlock() | |
| for k, v := range m.m { | |
| if !f(k, v) { | |
| break | |
| } | |
| } | |
| } | |
| func (m *SyncedMap[K, V]) Set(key K, value V) { | |
| m.mu.Lock() | |
| m.m[key] = value | |
| m.mu.Unlock() | |
| } | |
| func (m *SyncedMap[K, V]) Delete(key K) { | |
| m.mu.Lock() | |
| delete(m.m, key) | |
| m.mu.Unlock() | |
| } | |
| func (m *SyncedMap[K, V]) Exists(key K) bool { | |
| m.mu.RLock() | |
| defer m.mu.RUnlock() | |
| _, ok := m.m[key] | |
| return ok | |
| } | |