diff options
| author | 2026-06-12 10:04:31 +0000 | |
|---|---|---|
| committer | 2026-06-12 10:04:31 +0000 | |
| commit | 7202af0cfdea1c0b0686ceb39433fcfd2cfdc2e8 (patch) | |
| tree | e65b245d540f6571ea0b89e7ecdd34c0c936f5a8 | |
| parent | internal/mmap: Add tests (diff) | |
internal/mru: Append keys before the survivors
| -rw-r--r-- | internal/mru/sync.go | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/internal/mru/sync.go b/internal/mru/sync.go index 69fc3446..f10da5f4 100644 --- a/internal/mru/sync.go +++ b/internal/mru/sync.go @@ -4,25 +4,32 @@ package mru // // Surviving keys keep their relative recency order, // absent keys are dropped, -// and newly present keys are appended after the survivors. +// and newly present keys are placed before the survivors, +// since new members are presumed recently used. func (order *Order[K]) Sync(present map[K]struct{}) { order.mu.Lock() defer order.mu.Unlock() keys := order.Keys() - next := make([]K, 0, len(present)) - seen := make(map[K]struct{}, len(present)) + survivors := make(map[K]struct{}, len(present)) for _, key := range keys { if _, ok := present[key]; ok { - next = append(next, key) - seen[key] = struct{}{} + survivors[key] = struct{}{} } } + next := make([]K, 0, len(present)) + for key := range present { - if _, ok := seen[key]; !ok { + if _, ok := survivors[key]; !ok { + next = append(next, key) + } + } + + for _, key := range keys { + if _, ok := survivors[key]; ok { next = append(next, key) } } |
