From 7944920f2cb0e5470d0bbe7e76ced3c6a7197bb5 Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Sun, 7 Jun 2026 19:12:42 +0000 Subject: internal/mru: Add --- internal/mru/sync.go | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 internal/mru/sync.go (limited to 'internal/mru/sync.go') diff --git a/internal/mru/sync.go b/internal/mru/sync.go new file mode 100644 index 00000000..69fc3446 --- /dev/null +++ b/internal/mru/sync.go @@ -0,0 +1,31 @@ +package mru + +// Sync reconciles the order's membership to present. +// +// Surviving keys keep their relative recency order, +// absent keys are dropped, +// and newly present keys are appended after the survivors. +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)) + + for _, key := range keys { + if _, ok := present[key]; ok { + next = append(next, key) + seen[key] = struct{}{} + } + } + + for key := range present { + if _, ok := seen[key]; !ok { + next = append(next, key) + } + } + + order.snapshot.Store(&next) +} -- cgit v1.3.1-10-gc9f91