aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/internal/concurrent/hashtriemap.go16
-rw-r--r--src/internal/concurrent/hashtriemap_test.go12
-rw-r--r--src/unique/handle.go2
3 files changed, 16 insertions, 14 deletions
diff --git a/src/internal/concurrent/hashtriemap.go b/src/internal/concurrent/hashtriemap.go
index 5e31023494..4f7e730d4f 100644
--- a/src/internal/concurrent/hashtriemap.go
+++ b/src/internal/concurrent/hashtriemap.go
@@ -270,13 +270,15 @@ func (ht *HashTrieMap[K, V]) CompareAndDelete(key K, old V) (deleted bool) {
return true
}
-// Enumerate produces all key-value pairs in the map. The enumeration does
-// not represent any consistent snapshot of the map, but is guaranteed
-// to visit each unique key-value pair only once. It is safe to operate
-// on the tree during iteration. No particular enumeration order is
-// guaranteed.
-func (ht *HashTrieMap[K, V]) Enumerate(yield func(key K, value V) bool) {
- ht.iter(ht.root, yield)
+// All returns an iter.Seq2 that produces all key-value pairs in the map.
+// The enumeration does not represent any consistent snapshot of the map,
+// but is guaranteed to visit each unique key-value pair only once. It is
+// safe to operate on the tree during iteration. No particular enumeration
+// order is guaranteed.
+func (ht *HashTrieMap[K, V]) All() func(yield func(K, V) bool) {
+ return func(yield func(key K, value V) bool) {
+ ht.iter(ht.root, yield)
+ }
}
func (ht *HashTrieMap[K, V]) iter(i *indirect[K, V], yield func(key K, value V) bool) bool {
diff --git a/src/internal/concurrent/hashtriemap_test.go b/src/internal/concurrent/hashtriemap_test.go
index 96f134c293..e233824c0f 100644
--- a/src/internal/concurrent/hashtriemap_test.go
+++ b/src/internal/concurrent/hashtriemap_test.go
@@ -119,17 +119,17 @@ func testHashTrieMap(t *testing.T, newMap func() *HashTrieMap[string, int]) {
}
}
})
- t.Run("Enumerate", func(t *testing.T) {
+ t.Run("All", func(t *testing.T) {
m := newMap()
- testEnumerate(t, m, testDataMap(testData[:]), func(_ string, _ int) bool {
+ testAll(t, m, testDataMap(testData[:]), func(_ string, _ int) bool {
return true
})
})
- t.Run("EnumerateDelete", func(t *testing.T) {
+ t.Run("AllDelete", func(t *testing.T) {
m := newMap()
- testEnumerate(t, m, testDataMap(testData[:]), func(s string, i int) bool {
+ testAll(t, m, testDataMap(testData[:]), func(s string, i int) bool {
expectDeleted(t, s, i)(m.CompareAndDelete(s, i))
return true
})
@@ -200,12 +200,12 @@ func testHashTrieMap(t *testing.T, newMap func() *HashTrieMap[string, int]) {
})
}
-func testEnumerate[K, V comparable](t *testing.T, m *HashTrieMap[K, V], testData map[K]V, yield func(K, V) bool) {
+func testAll[K, V comparable](t *testing.T, m *HashTrieMap[K, V], testData map[K]V, yield func(K, V) bool) {
for k, v := range testData {
expectStored(t, k, v)(m.LoadOrStore(k, v))
}
visited := make(map[K]int)
- m.Enumerate(func(key K, got V) bool {
+ m.All()(func(key K, got V) bool {
want, ok := testData[key]
if !ok {
t.Errorf("unexpected key %v in map", key)
diff --git a/src/unique/handle.go b/src/unique/handle.go
index 4d9669162f..0842ae3185 100644
--- a/src/unique/handle.go
+++ b/src/unique/handle.go
@@ -126,7 +126,7 @@ func addUniqueMap[T comparable](typ *abi.Type) *uniqueMap[T] {
cleanupFuncs = append(cleanupFuncs, func() {
// Delete all the entries whose weak references are nil and clean up
// deleted entries.
- m.Enumerate(func(key T, wp weak.Pointer[T]) bool {
+ m.All()(func(key T, wp weak.Pointer[T]) bool {
if wp.Strong() == nil {
m.CompareAndDelete(key, wp)
}