summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJay Hutchinson <jlhutch@gmail.com>2018-05-06 00:30:20 -0500
committerJay Hutchinson <jlhutch@gmail.com>2018-05-06 13:23:59 -0500
commitefe9c72e360f4be3b9d3a2daedbc28dde1f71c72 (patch)
treef2d100f80d277a7a5cc8ca41826e2e7904b9c735
parentd5b8b87e709b529d803a85408e1ca739613b8334 (diff)
downloadpylru-efe9c72e360f4be3b9d3a2daedbc28dde1f71c72.tar.gz
Added pop, popitem, and setdefault methods to lrucache class.
-rw-r--r--pylru.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/pylru.py b/pylru.py
index 62eb801..ac8b133 100644
--- a/pylru.py
+++ b/pylru.py
@@ -188,6 +188,36 @@ class lrucache(object):
for key, value in kwargs.items():
self[key] = value
+ __defaultObj = object()
+ def pop(self, key, default=__defaultObj):
+ if key in self.table:
+ value = self.peek(key)
+ del self[key]
+ return value
+
+ if default is self.__defaultObj:
+ raise KeyError
+
+ return default
+
+ def popitem(self):
+ # Make sure the cache isn't empty.
+ if len(self) < 1:
+ raise KeyError
+
+ key = self.head.key
+ value = self.head.value
+ del self[key]
+
+ return key, value
+
+ def setdefault(self, key, default=None):
+ if key in self.table:
+ return self[key]
+
+ self[key] = default
+ return default
+
def __iter__(self):
# Return an iterator that returns the keys in the cache in order from
# the most recently to least recently used. Does not modify the cache's