summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Hutchinson <jlhutch@gmail.com>2010-08-24 17:50:49 -0500
committerJay Hutchinson <jlhutch@gmail.com>2010-08-24 17:50:49 -0500
commitbec2a29890e5aba3f17ad423f1fea421555bd0e7 (patch)
tree884cd26870040a51899724cfb74c641b798e803e
parent0f589ae3197e0fb7e51375b04a68c8ae076643b7 (diff)
downloadpylru-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.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/lru.py b/lru.py
index e47834e..7b2fd99 100644
--- a/lru.py
+++ b/lru.py
@@ -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]