github.com/devseccon/trivy@v0.47.1-0.20231123133102-bd902a0bd996/pkg/x/sync/sync.go (about) 1 package sync 2 3 import "sync" 4 5 type Map[K comparable, V any] struct { 6 m sync.Map 7 } 8 9 func (m *Map[K, V]) Delete(key K) { m.m.Delete(key) } 10 11 func (m *Map[K, V]) Load(key K) (value V, ok bool) { 12 v, ok := m.m.Load(key) 13 if !ok { 14 return value, ok 15 } 16 return v.(V), ok 17 } 18 19 func (m *Map[K, V]) LoadAndDelete(key K) (value V, loaded bool) { 20 v, loaded := m.m.LoadAndDelete(key) 21 if !loaded { 22 return value, loaded 23 } 24 return v.(V), loaded 25 } 26 27 func (m *Map[K, V]) LoadOrStore(key K, value V) (actual V, loaded bool) { 28 a, loaded := m.m.LoadOrStore(key, value) 29 return a.(V), loaded 30 } 31 32 func (m *Map[K, V]) Range(f func(key K, value V) bool) { 33 m.m.Range(func(key, value any) bool { return f(key.(K), value.(V)) }) 34 } 35 36 func (m *Map[K, V]) Store(key K, value V) { m.m.Store(key, value) } 37 38 // Len returns the length of the map 39 func (m *Map[K, V]) Len() int { 40 var i int 41 m.m.Range(func(k, v interface{}) bool { 42 i++ 43 return true 44 }) 45 return i 46 }