lru

package
v1.1.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 15, 2023 License: MIT Imports: 3 Imported by: 20

Documentation

Overview

Package list implements a doubly linked list.

To iterate over a list (where l is a *List):

for e := l.Front(); e != nil; e = e.Next() {
	// do something with e.Value
}

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Cache

type Cache[K comparable, V cache.Value] struct {
	// contains filtered or unexported fields
}

Cache provides a generic thread-safe lru cache that can be used for storing filters, blocks, etc.

func NewCache

func NewCache[K comparable, V cache.Value](capacity uint64) *Cache[K, V]

NewCache return a cache with specified capacity, the cache's size can't exceed that given capacity.

func (*Cache[K, V]) Delete added in v1.1.1

func (c *Cache[K, V]) Delete(key K)

Delete removes an item from the cache.

func (*Cache[K, V]) Get

func (c *Cache[K, V]) Get(key K) (V, error)

Get will return value for a given key, making the element the most recently accessed item in the process. Will return nil if the key isn't found.

func (*Cache[K, V]) Len

func (c *Cache[K, V]) Len() int

Len returns number of elements in the cache.

func (*Cache[K, V]) LoadAndDelete added in v1.1.1

func (c *Cache[K, V]) LoadAndDelete(key K) (V, bool)

LoadAndDelete queries an item and deletes it from the cache using the specified key.

func (*Cache[K, V]) Put

func (c *Cache[K, V]) Put(key K, value V) (bool, error)

Put inserts a given (key,value) pair into the cache, if the key already exists, it will replace value and update it to be most recent item in cache. The return value indicates whether items had to be evicted to make room for the new element.

func (*Cache[K, V]) Range added in v1.1.1

func (c *Cache[K, V]) Range(visitor func(K, V) bool)

Range iterates the cache without any ordering.

func (*Cache[K, V]) RangeFIFO added in v1.1.2

func (c *Cache[K, V]) RangeFIFO(visitor func(K, V) bool)

RangeFIFO iterates the items with FIFO order, behaving like a queue.

func (*Cache[K, V]) RangeFILO added in v1.1.2

func (c *Cache[K, V]) RangeFILO(visitor func(K, V) bool)

RangeFILO iterates the items with FILO order, behaving like a stack.

type Element added in v1.1.0

type Element[V any] struct {

	// The value stored with this element.
	Value V
	// contains filtered or unexported fields
}

Element is an element of a linked list.

func (*Element[V]) Next added in v1.1.0

func (e *Element[V]) Next() *Element[V]

Next returns the next list element or nil.

func (*Element[V]) Prev added in v1.1.0

func (e *Element[V]) Prev() *Element[V]

Prev returns the previous list element or nil.

type List added in v1.1.0

type List[V any] struct {
	// contains filtered or unexported fields
}

List represents a doubly linked list. The zero value for List is an empty list ready to use.

func NewList added in v1.1.0

func NewList[V any]() *List[V]

NewList returns an initialized list.

func (*List[V]) Back added in v1.1.0

func (l *List[V]) Back() *Element[V]

Back returns the last element of list l or nil if the list is empty.

func (*List[V]) Front added in v1.1.0

func (l *List[V]) Front() *Element[V]

Front returns the first element of list l or nil if the list is empty.

func (*List[V]) Init added in v1.1.0

func (l *List[V]) Init() *List[V]

Init initializes or clears list l.

func (*List[V]) InsertAfter added in v1.1.0

func (l *List[V]) InsertAfter(v V, mark *Element[V]) *Element[V]

InsertAfter inserts a new element e with value v immediately after mark and returns e. If mark is not an element of l, the list is not modified. The mark must not be nil.

func (*List[V]) InsertBefore added in v1.1.0

func (l *List[V]) InsertBefore(v V, mark *Element[V]) *Element[V]

InsertBefore inserts a new element e with value v immediately before mark and returns e. If mark is not an element of l, the list is not modified. The mark must not be nil.

func (*List[V]) Len added in v1.1.0

func (l *List[V]) Len() int

Len returns the number of elements of list l. The complexity is O(1).

func (*List[V]) MoveAfter added in v1.1.0

func (l *List[V]) MoveAfter(e, mark *Element[V])

MoveAfter moves element e to its new position after mark. If e or mark is not an element of l, or e == mark, the list is not modified. The element and mark must not be nil.

func (*List[V]) MoveBefore added in v1.1.0

func (l *List[V]) MoveBefore(e, mark *Element[V])

MoveBefore moves element e to its new position before mark. If e or mark is not an element of l, or e == mark, the list is not modified. The element and mark must not be nil.

func (*List[V]) MoveToBack added in v1.1.0

func (l *List[V]) MoveToBack(e *Element[V])

MoveToBack moves element e to the back of list l. If e is not an element of l, the list is not modified. The element must not be nil.

func (*List[V]) MoveToFront added in v1.1.0

func (l *List[V]) MoveToFront(e *Element[V])

MoveToFront moves element e to the front of list l. If e is not an element of l, the list is not modified. The element must not be nil.

func (*List[V]) PushBack added in v1.1.0

func (l *List[V]) PushBack(v V) *Element[V]

PushBack inserts a new element e with value v at the back of list l and returns e.

func (*List[V]) PushBackList added in v1.1.0

func (l *List[V]) PushBackList(other *List[V])

PushBackList inserts a copy of another list at the back of list l. The lists l and other may be the same. They must not be nil.

func (*List[V]) PushFront added in v1.1.0

func (l *List[V]) PushFront(v V) *Element[V]

PushFront inserts a new element e with value v at the front of list l and returns e.

func (*List[V]) PushFrontList added in v1.1.0

func (l *List[V]) PushFrontList(other *List[V])

PushFrontList inserts a copy of another list at the front of list l. The lists l and other may be the same. They must not be nil.

func (*List[V]) Remove added in v1.1.0

func (l *List[V]) Remove(e *Element[V]) any

Remove removes e from l if e is an element of list l. It returns the element value e.Value. The element must not be nil.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL