diff options
| author | 2026-03-06 04:43:03 +0800 | |
|---|---|---|
| committer | 2026-03-06 04:43:03 +0800 | |
| commit | fec8b64975f952e2fa5fa8478b09dced87f0fa7b (patch) | |
| tree | 358cea12d4f20d6821202f040aeb9be58eb878a7 /internal/lru/remove.go | |
| parent | format/commitgraph/bloom: Add commit-graph bloom filters (diff) | |
| signature | No signature | |
internal/lru: Split
Diffstat (limited to 'internal/lru/remove.go')
| -rw-r--r-- | internal/lru/remove.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/internal/lru/remove.go b/internal/lru/remove.go new file mode 100644 index 00000000..79735edf --- /dev/null +++ b/internal/lru/remove.go @@ -0,0 +1,31 @@ +package lru + +import "container/list" + +// Remove deletes key from the cache. +func (cache *Cache[K, V]) Remove(key K) (V, bool) { + elem, ok := cache.items[key] + if !ok { + var zero V + + return zero, false + } + + ent := cache.removeElem(elem) + + return ent.value, true +} + +func (cache *Cache[K, V]) removeElem(elem *list.Element) *entry[K, V] { + //nolint:forcetypeassert + ent := elem.Value.(*entry[K, V]) + cache.lru.Remove(elem) + delete(cache.items, ent.key) + + cache.weight -= ent.weight + if cache.onEvict != nil { + cache.onEvict(ent.key, ent.value) + } + + return ent +} |
