text/cache/lru.go
Functions
func Clear
func (l *lruList[K]) Clear() {
l.head = nil
l.tail = nil
l.len = 0
}
func Len
Len returns the number of nodes in the list.
func (l *lruList[K]) Len() int {
return l.len
}
func MoveToFront
MoveToFront moves an existing node to the front (most recently used).
func (l *lruList[K]) MoveToFront(node *lruNode[K]) {
if node == nil || node == l.head {
return
}
// Remove from current position
l.unlink(node)
// Insert at front
node.prev = nil
node.next = l.head
if l.head != nil {
l.head.prev = node
}
l.head = node
if l.tail == nil {
l.tail = node
}
l.len++
}
func Oldest
Oldest returns the key of the least recently used node without removing it.
Returns zero value and false if list is empty.
func (l *lruList[K]) Oldest() (K, bool) {
if l.tail == nil {
var zero K
return zero, false
}
return l.tail.key, true
}
func PushFront
PushFront adds a new node at the front (most recently used).
Returns the created node for later access.
func (l *lruList[K]) PushFront(key K) *lruNode[K] {
node := &lruNode[K]{key: key}
if l.head == nil {
// Empty list
l.head = node
l.tail = node
} else {
// Insert at front
node.next = l.head
l.head.prev = node
l.head = node
}
l.len++
return node
}
func Remove
Remove removes a node from the list.
func (l *lruList[K]) Remove(node *lruNode[K]) {
if node == nil {
return
}
l.unlink(node)
}
func RemoveOldest
RemoveOldest removes and returns the key of the least recently used node.
Returns zero value and false if list is empty.
func (l *lruList[K]) RemoveOldest() (K, bool) {
if l.tail == nil {
var zero K
return zero, false
}
node := l.tail
l.unlink(node)
return node.key, true
}
Clear removes all nodes from the list.