File: sync_map_1_8.go

package info (click to toggle)
golang-github-aws-aws-sdk-go 1.49.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 312,636 kB
  • sloc: makefile: 120
file content (49 lines) | stat: -rw-r--r-- 774 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
//go:build !go1.9
// +build !go1.9

package crr

import (
	"sync"
)

type syncMap struct {
	container map[interface{}]interface{}
	lock      sync.RWMutex
}

func newSyncMap() syncMap {
	return syncMap{
		container: map[interface{}]interface{}{},
	}
}

func (m *syncMap) Load(key interface{}) (interface{}, bool) {
	m.lock.RLock()
	defer m.lock.RUnlock()

	v, ok := m.container[key]
	return v, ok
}

func (m *syncMap) Store(key interface{}, value interface{}) {
	m.lock.Lock()
	defer m.lock.Unlock()

	m.container[key] = value
}

func (m *syncMap) Delete(key interface{}) {
	m.lock.Lock()
	defer m.lock.Unlock()

	delete(m.container, key)
}

func (m *syncMap) Range(f func(interface{}, interface{}) bool) {
	for k, v := range m.container {
		if !f(k, v) {
			return
		}
	}
}