A BaseCache implementation that caches by last access.
This cache works using a double-linked list and a dictionary/hashmap. Newly accessed elements are added to the front of the list while the dictionary maps the key to the list segment, allowing O(1) access. When the list is already "full", the last element gets removed. This allows all cache operations within O(1).
| Method | __init__ |
No summary |
| Method | clear |
Empty this cache. |
| Method | get |
Return the element that has been cached for this key. |
| Method | has |
Return True if an element is cached for the specific key. |
| Method | push |
Push an element for this key into this cache. |
| Method | remove |
If an element is cached for key, remove it from the cache. |
| Instance Variable | lock |
thread-safety lock |
| Instance Variable | max |
maximum size of cache in number of elements |
| Instance Variable | _key2element |
Undocumented |
| Instance Variable | _list |
Undocumented |
Inherited from BaseCache:
| Instance Variable | on |
a callable expecting two arguments (key, value) that will be called when an element leaves the cache |
pyzim.cache.BaseCache.__init__| Parameters | |
onNone | See BaseCache.__init__ |
maxint | maximum size of cache in number of elements |
pyzim.cache.BaseCache.clearEmpty this cache.
| Parameters | |
callbool | if nonzero (default), call BaseCache.on_leave for each element cleared |
pyzim.cache.BaseCache.getReturn the element that has been cached for this key.
| Parameters | |
| key:hashable | key for the element that should be returned |
| Returns | |
same as passed to BaseCache.push | the element |
| Raises | |
KeyError | if no element was cached for this key |
pyzim.cache.BaseCache.hasReturn True if an element is cached for the specific key.
| Parameters | |
| key:hashable | key of element that should be checked |
| Returns | |
bool | True if an element has been cached for this key |
pyzim.cache.BaseCache.pushPush an element for this key into this cache.
It is up for the cache to decide whether the element will actually be cached or not. If allow_replacement=False is set, no other element should be kicked from the cache.
Re-pushing an already cached element will not update the cached element.
| Parameters | |
| key:hashable | key which will be used to identify the element |
| element:any | element to cache |
allowbool | if this value is false, do not cache if this would kick another element from the cache |
| Returns | |
bool | True if the element is now cached, False otherwise |
pyzim.cache.BaseCache.removeIf an element is cached for key, remove it from the cache.
| Parameters | |
| key:hashable | key of element to remove |
callbool | if nonzero (default), call BaseCache.on_leave on the removed element |