diff options
| author | Hiro <laciferin@gmail.com> | 2024-01-03 00:10:58 +0000 |
|---|---|---|
| committer | Gopher Robot <gobot@golang.org> | 2024-02-01 15:34:22 +0000 |
| commit | 5b6cd3d0cbd3f3f0a645e37526fabe35a7e75319 (patch) | |
| tree | 70b282bd7b0fb3cf463948a0e94c8b980b580e5f /src/sync/map_reference_test.go | |
| parent | 2f6a25f4478905db5e169019bf9dc39ab2a50f89 (diff) | |
| download | go-5b6cd3d0cbd3f3f0a645e37526fabe35a7e75319.tar.xz | |
sync: add Map.Clear
Fixes #61696
Change-Id: I0a31afd3bc433fc84280d56f2798bda10da61eba
GitHub-Last-Rev: 17bedc864f1685178a42b59f7083677a6124f831
GitHub-Pull-Request: golang/go#61702
Reviewed-on: https://go-review.googlesource.com/c/go/+/515015
Auto-Submit: Bryan Mills <bcmills@google.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: qiulaidongfeng <2645477756@qq.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Diffstat (limited to 'src/sync/map_reference_test.go')
| -rw-r--r-- | src/sync/map_reference_test.go | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/sync/map_reference_test.go b/src/sync/map_reference_test.go index aa5ebf352f..283da0f3a9 100644 --- a/src/sync/map_reference_test.go +++ b/src/sync/map_reference_test.go @@ -13,7 +13,7 @@ import ( // mapInterface is the interface Map implements. type mapInterface interface { - Load(any) (any, bool) + Load(key any) (value any, ok bool) Store(key, value any) LoadOrStore(key, value any) (actual any, loaded bool) LoadAndDelete(key any) (value any, loaded bool) @@ -22,6 +22,7 @@ type mapInterface interface { CompareAndSwap(key, old, new any) (swapped bool) CompareAndDelete(key, old any) (deleted bool) Range(func(key, value any) (shouldContinue bool)) + Clear() } var ( @@ -144,6 +145,13 @@ func (m *RWMutexMap) Range(f func(key, value any) (shouldContinue bool)) { } } +func (m *RWMutexMap) Clear() { + m.mu.Lock() + defer m.mu.Unlock() + + clear(m.dirty) +} + // DeepCopyMap is an implementation of mapInterface using a Mutex and // atomic.Value. It makes deep copies of the map on every write to avoid // acquiring the Mutex in Load. @@ -269,3 +277,10 @@ func (m *DeepCopyMap) dirty() map[any]any { } return dirty } + +func (m *DeepCopyMap) Clear() { + m.mu.Lock() + defer m.mu.Unlock() + + m.clean.Store((map[any]any)(nil)) +} |
