| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 | package mappingimport (	"sync"	"sync/atomic")type Map[K comparable, V any] struct {	len   int32	store sync.Map}func (m *Map[K, V]) Load(key K) (value V, ok bool) {	v, ok := m.store.Load(key)	if !ok {		return	}	value, ok = v.(V)	return}func (m *Map[K, V]) Store(key K, value V) {	atomic.AddInt32(&m.len, 1)	m.store.Store(key, value)}func (m *Map[K, V]) Delete(key K) {	atomic.AddInt32(&m.len, -1)	m.store.Delete(key)}func (m *Map[K, V]) Range(f func(key K, value V) bool) {	m.store.Range(func(key, value interface{}) bool {		return f(key.(K), value.(V))	})}func (m *Map[K, V]) LoadOrStore(key K, value V) (actual V, loaded bool) {	v, loaded := m.store.LoadOrStore(key, value)	actual = v.(V)	if !loaded {		atomic.AddInt32(&m.len, 1)	}	return}func (m *Map[K, V]) LoadAndDelete(key K) (value V, loaded bool) {	v, loaded := m.store.LoadAndDelete(key)	value = v.(V)	if loaded {		atomic.AddInt32(&m.len, -1)	}	return}func (m *Map[K, V]) Swap(key K, value V) (actual V, swapped bool) {	v, swapped := m.store.Swap(key, value)	actual = v.(V)	return}func (m *Map[K, V]) Clear() {	m.store.Range(func(key, value interface{}) bool {		m.store.Delete(key)		return true	})	atomic.StoreInt32(&m.len, 0)}func (m *Map[K, V]) Len() int {	return int(atomic.LoadInt32(&m.len))}func (m *Map[K, V]) Exits(key K) bool {	_, ok := m.Load(key)	return ok}
 |