2007-05-20 Don Allingham <don@gramps-project.org>
* src/Lru.py: pylint fixes * src/DisplayState.py: pylint fixes * src/Errors.py: pylint fixes * src/DbState.py: pylint fixes svn: r8501
This commit is contained in:
55
src/Lru.py
55
src/Lru.py
@ -17,13 +17,23 @@
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
#
|
||||
|
||||
"""
|
||||
Least recently used algorithm
|
||||
"""
|
||||
|
||||
class Node:
|
||||
"""
|
||||
Node to be stored in the LRU structure
|
||||
"""
|
||||
def __init__(self, prev, me):
|
||||
self.prev = prev
|
||||
self.me = me
|
||||
self.next = None
|
||||
|
||||
class LRU: #Implementation of a length-limited O(1) LRU cache
|
||||
class LRU:
|
||||
"""
|
||||
Implementation of a length-limited O(1) LRU cache
|
||||
"""
|
||||
def __init__(self, count):
|
||||
self.count = max(count, 2)
|
||||
self.d = {}
|
||||
@ -31,12 +41,21 @@ class LRU: #Implementation of a length-limited O(1) LRU cache
|
||||
self.last = None
|
||||
|
||||
def __contains__(self, obj):
|
||||
"""
|
||||
Returns True if the object is contained in the LRU
|
||||
"""
|
||||
return obj in self.d
|
||||
|
||||
def __getitem__(self, obj):
|
||||
"""
|
||||
Returns item assocated with Obj
|
||||
"""
|
||||
return self.d[obj].me[1]
|
||||
|
||||
def __setitem__(self, obj, val):
|
||||
"""
|
||||
Sets the item in the LRU, removing an old entry if needed
|
||||
"""
|
||||
if obj in self.d:
|
||||
del self[obj]
|
||||
nobj = Node(self.last, (obj, val))
|
||||
@ -59,6 +78,9 @@ class LRU: #Implementation of a length-limited O(1) LRU cache
|
||||
del a
|
||||
|
||||
def __delitem__(self, obj):
|
||||
"""
|
||||
Delete the object from the LRU
|
||||
"""
|
||||
nobj = self.d[obj]
|
||||
if nobj.prev:
|
||||
nobj.prev.next = nobj.next
|
||||
@ -71,6 +93,9 @@ class LRU: #Implementation of a length-limited O(1) LRU cache
|
||||
del self.d[obj]
|
||||
|
||||
def __iter__(self):
|
||||
"""
|
||||
Iterate over the LRU
|
||||
"""
|
||||
cur = self.first
|
||||
while cur != None:
|
||||
cur2 = cur.next
|
||||
@ -79,6 +104,9 @@ class LRU: #Implementation of a length-limited O(1) LRU cache
|
||||
raise StopIteration
|
||||
|
||||
def iteritems(self):
|
||||
"""
|
||||
Return items in the LRU using a generator
|
||||
"""
|
||||
cur = self.first
|
||||
while cur != None:
|
||||
cur2 = cur.next
|
||||
@ -87,17 +115,32 @@ class LRU: #Implementation of a length-limited O(1) LRU cache
|
||||
raise StopIteration
|
||||
|
||||
def iterkeys(self):
|
||||
"""
|
||||
Return keys in the LRU using a generator
|
||||
"""
|
||||
return iter(self.d)
|
||||
|
||||
def itervalues(self):
|
||||
for i,j in self.iteritems():
|
||||
yield j
|
||||
"""
|
||||
Return items and keys in the LRU using a generator
|
||||
"""
|
||||
for data in self.iteritems():
|
||||
yield data[1]
|
||||
|
||||
def keys(self):
|
||||
return [i for i,j in self.iteritems()]
|
||||
"""
|
||||
Return all keys
|
||||
"""
|
||||
return [data[0] for data in self.iteritems()]
|
||||
|
||||
def values(self):
|
||||
return [j for i,j in self.iteritems()]
|
||||
"""
|
||||
Return all values
|
||||
"""
|
||||
return [data[1] for data in self.iteritems()]
|
||||
|
||||
def items(self):
|
||||
return [i for i in self.iteritems()]
|
||||
"""
|
||||
Return all items
|
||||
"""
|
||||
return [data[0] for data in self.iteritems()]
|
||||
|
Reference in New Issue
Block a user