Types
EmptyLruCacheError = object of LruCacheError
LruCache[K; T] = ref object capacity: int list: DoublyLinkedList[Node[K, T]] table: Table[K, DoublyLinkedNode[Node[K, T]]]
LruCacheError = object of CatchableError
Procs
proc `[]=`[K, T](cache: LruCache[K, T]; key: K; val: T) {....raises: [Defect].}
- Put value v in cache with key k. Remove least recently used value from cache if length exceeds capacity.
proc `[]`[K, T](cache: LruCache[K, T]; key: K): T {....raises: [Defect, KeyError], raises: [Defect].}
- Read value from cache by key and update recentness Raise KeyError if key is not in cache.
proc capacity=[K, T](cache: LruCache[K, T]; capacity: int) {....raises: [Defect].}
- Resize the maximum capacity of cache
proc capacity[K, T](cache: LruCache[K, T]): int {....raises: [Defect].}
- Get the maximum capacity of cache
proc contains[K, T](cache: LruCache[K, T]; key: K): bool {....raises: [Defect].}
- Check whether key in cache. Does NOT update recentness.
proc del[K, T](cache: LruCache[K, T]; key: K): Option[T] {....raises: [Defect].}
- Delete key in cache and return the value. Returns nil if key is not in cache.
proc getLruKey[K, T](cache: LruCache[K, T]): K {. ...raises: [Defect, EmptyLruCacheError], raises: [Defect].}
- Return least recently used key. Raise EmptyLruCacheError if cache is empty.
proc getLruValue[K, T](cache: LruCache[K, T]): T {. ...raises: [Defect, EmptyLruCacheError], raises: [Defect].}
- Return least recently used value. Raise EmptyLruCacheError if cache is empty.
proc getMruKey[K, T](cache: LruCache[K, T]): K {. ...raises: [Defect, EmptyLruCacheError], raises: [Defect].}
- Return most recently used key. Raise EmptyLruCacheError if cache is empty.
proc getMruValue[K, T](cache: LruCache[K, T]): T {. ...raises: [Defect, EmptyLruCacheError], raises: [Defect].}
- Return most recently used value. Raise EmptyLruCacheError if cache is empty.
proc getOption[K, T](cache: LruCache[K, T]; key: K): Option[T] {. ...raises: [Defect].}
- Similar to get, but return None if key is not in cache or else return Some(value) and update recentness
proc getOrDefault[K, T](cache: LruCache[K, T]; key: K; val: T): T {. ...raises: [Defect].}
- Similar to get, but return val if key is not in cache
proc getOrPut[K, T](cache: LruCache[K, T]; key: K; val: T): T {....raises: [Defect].}
- Similar to get, but put and return val if key is not in cache
proc isEmpty[K, T](cache: LruCache[K, T]): bool {.inline, ...raises: [Defect].}
- Equivalent to cache.len == 0
proc isFull[K, T](cache: LruCache[K, T]): bool {.inline, ...raises: [Defect].}
- Equivalent to cache.len == cache.capacity Raise EmptyLruCacheError if cache is empty.
proc newLruCache[K, T](capacity: int): LruCache[K, T] {....raises: [Defect].}
- Create a new Least-Recently-Used (LRU) cache that store the last capacity-accessed items.
proc peek[K, T](cache: LruCache[K, T]; key: K): T {....raises: [Defect, KeyError], raises: [Defect].}
- Read value by key, but NOT update recentness. Raise KeyError if key is not in cache.
proc put[K, T](cache: LruCache[K, T]; key: K; val: T): T {....raises: [Defect].}
- Alias of cache[key] = val
proc removeLru[K, T](cache: LruCache[K, T]): T {. ...raises: [Defect, EmptyLruCacheError], raises: [Defect].}
- Return least recently used key value pair as tuple. Raise EmptyLruCacheError if cache is empty.