aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-12 10:04:31 +0000
committerGravatar Runxi Yu2026-06-12 10:04:31 +0000
commit7202af0cfdea1c0b0686ceb39433fcfd2cfdc2e8 (patch)
treee65b245d540f6571ea0b89e7ecdd34c0c936f5a8
parentinternal/mmap: Add tests (diff)
internal/mru: Append keys before the survivors
-rw-r--r--internal/mru/sync.go19
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)
}
}