From 94669f9b0484fa178ec398b0212ede52d3d6767b Mon Sep 17 00:00:00 2001 From: Gavin Nishizawa Date: Mon, 30 Oct 2023 12:02:29 -0700 Subject: [PATCH] add generic SyncMap lib --- lib/syncmap/syncmap.go | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 lib/syncmap/syncmap.go diff --git a/lib/syncmap/syncmap.go b/lib/syncmap/syncmap.go new file mode 100644 index 000000000..8dbb2ef1b --- /dev/null +++ b/lib/syncmap/syncmap.go @@ -0,0 +1,40 @@ +package syncmap + +import "sync" + +type SyncMap[K comparable, V any] struct { + _map *sync.Map +} + +func New[K comparable, V any]() SyncMap[K, V] { + return SyncMap[K, V]{ + _map: &sync.Map{}, + } +} + +func (sm SyncMap[K, V]) Set(key K, value V) { + sm._map.Store(key, value) +} + +func (sm SyncMap[K, V]) GetWithStatus(key K) (value V, ok bool) { + v, has := sm._map.Load(key) + if !has { + return value, false + } + return v.(V), true +} + +func (sm SyncMap[K, V]) Get(key K) (value V) { + v, _ := sm.GetWithStatus(key) + return v +} + +func (sm SyncMap[K, V]) Delete(key K) { + sm._map.Delete(key) +} + +func (sm SyncMap[K, V]) Range(f func(key K, value V) bool) { + sm._map.Range(func(k, v any) bool { + return f(k.(K), v.(V)) + }) +}