github.com/cs3org/reva/v2@v2.27.7/pkg/storage/utils/decomposedfs/mtimesyncedcache/map.go (about)

     1  package mtimesyncedcache
     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  func (m *Map[K, V]) Count() int {
    39  	l := 0
    40  	m.Range(func(_ K, _ V) bool {
    41  		l++
    42  		return true
    43  	})
    44  	return l
    45  }