aboutsummaryrefslogtreecommitdiff
path: root/internal/lru/remove.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-06 04:43:03 +0800
committerGravatar Runxi Yu2026-03-06 04:43:03 +0800
commitfec8b64975f952e2fa5fa8478b09dced87f0fa7b (patch)
tree358cea12d4f20d6821202f040aeb9be58eb878a7 /internal/lru/remove.go
parentformat/commitgraph/bloom: Add commit-graph bloom filters (diff)
signatureNo signature
internal/lru: Split
Diffstat (limited to 'internal/lru/remove.go')
-rw-r--r--internal/lru/remove.go31
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
+}