diff options
author | Jay Hutchinson <jlhutch@gmail.com> | 2010-08-24 17:50:49 -0500 |
---|---|---|
committer | Jay Hutchinson <jlhutch@gmail.com> | 2010-08-24 17:50:49 -0500 |
commit | bec2a29890e5aba3f17ad423f1fea421555bd0e7 (patch) | |
tree | 884cd26870040a51899724cfb74c641b798e803e | |
parent | 0f589ae3197e0fb7e51375b04a68c8ae076643b7 (diff) | |
download | pylru-bec2a29890e5aba3f17ad423f1fea421555bd0e7.tar.gz |
Added a new class that wraps any dict-like data source and the lrucache into a single object.
-rw-r--r-- | lru.py | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -78,6 +78,7 @@ class lrucache(object): def __contains__(self, key): return key in self.table + # XXX Should this move the object to front of list? XXX def __getitem__(self, key): @@ -248,3 +249,43 @@ class lrucache(object): +# Wrapper using write-through semantics +class lruwrap(object): + def __init__(self, store, size): + self.cache = lrucache(size) + self.store = store + + def __len__(self): + return len(self.store) + + def clear(self): + self.cache.clear() + self.store.clear() + + def __contains__(self, key): + + if key in self.cache: + return True + if key in self.store: + return True + + return False + + def __getitem__(self, key): + try: + return self.cache[key] + except KeyError: + pass + + return self.store[key] # XXX Re-raise exception? + + def __setitem__(self, key, value): + self.cache[key] = value + self.store[key] = value + + def __delitem__(self, key): + try: + del self.cache[key] + except KeyError: + pass + del self.store[key] |