Skip to content

Commit 90144d1

Browse files
committed
[patch] add map length check function
Signed-off-by: kpango <[email protected]>
1 parent c32385f commit 90144d1

File tree

1 file changed

+17
-1
lines changed

1 file changed

+17
-1
lines changed

map.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,6 @@ func (m *Map[K, V]) CompareAndDelete(key K, old V) (deleted bool) {
285285
func (m *Map[K, V]) Range(f func(key K, value V) bool) {
286286
read := m.loadReadOnly()
287287
if read.amended {
288-
289288
m.mu.Lock()
290289
read = m.loadReadOnly()
291290
if read.amended {
@@ -308,6 +307,23 @@ func (m *Map[K, V]) Range(f func(key K, value V) bool) {
308307
}
309308
}
310309

310+
func (m *Map[K, V]) Len() int {
311+
read := m.loadReadOnly()
312+
if read.amended {
313+
m.mu.Lock()
314+
read = m.loadReadOnly()
315+
if read.amended {
316+
read = readOnly[K, V]{m: m.dirty}
317+
m.read.Store(&read)
318+
m.dirty = nil
319+
m.misses = 0
320+
}
321+
m.mu.Unlock()
322+
}
323+
324+
return len(read.m)
325+
}
326+
311327
func (m *Map[K, V]) missLocked() {
312328
m.misses++
313329
if m.misses < len(m.dirty) {

0 commit comments

Comments
 (0)