1 # -*- coding: utf-8 -*-
2 # taken from http://code.activestate.com/recipes/252524-length-limited-o1-lru-cache-implementation/
4 from func import synchronized
9 __slots__ = ['prev', 'next', 'me']
10 def __init__(self, prev, me):
17 Implementation of a length-limited O(1) LRU queue.
18 Built for and used by PyPE:
19 http://pype.sourceforge.net
20 Copyright 2003 Josiah Carlson.
22 def __init__(self, count, pairs=[]):
23 self._lock = threading.RLock()
24 self.count = max(count, 1)
28 for key, value in pairs:
32 def __contains__(self, obj):
36 def __getitem__(self, obj):
42 def __setitem__(self, obj, val):
45 nobj = LRUNode(self.last, (obj, val))
46 if self.first is None:
52 if len(self.d) > self.count:
53 if self.first == self.last:
65 def __delitem__(self, obj):
68 nobj.prev.next = nobj.next
70 self.first = nobj.next
72 nobj.next.prev = nobj.prev
80 while cur is not None:
92 while cur is not None:
102 def itervalues(self):
103 for i,j in self.iteritems():
122 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: