Go to file
Tanguy 3ead7db4fe
Add lru.keys iterator (#6)
* Add lru.keys iterator
* Fix compilation on nim <1.4
* Add keys iterator test
2022-11-14 10:28:01 +01:00
docs Add lru.keys iterator (#6) 2022-11-14 10:28:01 +01:00
src Add lru.keys iterator (#6) 2022-11-14 10:28:01 +01:00
tests Add lru.keys iterator (#6) 2022-11-14 10:28:01 +01:00
.gitignore feat: add removeLru proc that returns removed LRU item 2022-02-18 19:25:45 +11:00
.release-it.json update release flow 2022-02-21 11:00:39 +11:00
README.md Update readme 2022-02-21 11:19:27 +11:00
lrucache.nimble Release 1.2.1 2022-02-21 11:20:21 +11:00

README.md

LRU cache

The standard implemenation of LRU cache (hash table + doubly-linked list). All operations are in time complexity of O(1). This implementation is not thread-safe.

Installation

$ nimble install lrucache

API

See api docs

Usage

# create a new LRU cache with initial capacity of 1 items
let cache = newLRUCache[int, string](1) 

cache[1] = "a"
cache[2] = "b"

# key 1 is not in cache, because key 1 is eldest and capacity is only 1
assert: 1 notin cache 
assert: 2 in cache

# increase capacity and add key 1 
cache.capacity = 2 
cache[1] = "a"
assert: 1 in cache
assert: 2 in cache

# update recentness of key 2 and add key 3, then key 1 will be discarded.
echo cache[2]
cache[3] = "c"
assert: 1 notin cache
assert: 2 in cache
assert: 3 in cache

lrucache devs - create a release

Put a personal access token named GITHUB_TOKEN in your environment with repo access. You can then release interactively using nimble release. This will provide options for creating a release commit, a tag, and a github release, and handle the push for you. You can also achieve this non-interactively with nimble release_patch, nimble release_minor, or nimble release_major. NOTE: if a GITHUB_TOKEN is not in your environment, but you have a git user configured for the current working directory with enough permissions for the repository, then likely the commit and tag push will work, but the release creation will fail.

# Launch interactive release process
nimble release
# Launch non-interactive release process for patch release
nimble release_patch
# Launch non-interactive release process for minor release
nimble release_minor
# Launch non-interactive release process for major release
nimble release_major