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  }