blob: 6c055ab57f23795dbd1ef05c00a93614fc0b7c31 (
about) (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
package lru
// Add inserts or replaces key and marks it most-recently-used.
//
// Add returns false when the entry's weight exceeds MaxWeight even for an empty
// cache. In that case the cache is unchanged.
//
// Add panics if weightFn returns a negative weight.
func (cache *Cache[K, V]) Add(key K, value V) bool {
w := cache.weightFn(key, value)
if w < 0 {
panic("lru: negative entry weight")
}
if w > cache.maxWeight {
return false
}
if elem, ok := cache.items[key]; ok {
cache.removeElem(elem)
}
ent := &entry[K, V]{
key: key,
value: value,
weight: w,
}
elem := cache.lru.PushBack(ent)
cache.items[key] = elem
cache.weight += w
cache.evictOverBudget()
return true
}
|