aboutsummaryrefslogtreecommitdiff
path: root/internal/lru/remove.go
diff options
context:
space:
mode:
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
+}