@@ -6,63 +6,21 @@ def __init__(self, limit):
66 raise ValueError ("Limit must be positive" )
77
88 self .limit = limit
9- < << << << HEAD
10- self .cache = {} # key -> node
11- self .head = None # Most recently used
12- self .tail = None # Least recently used
13-
14- # ---------------------
15- # Internal helpers
16- # ---------------------
17-
18- def _remove_node (self , node ):
19- if node .previous :
20- node .previous .next = node .next
21- else :
22- self .head = node .next
23-
24- if node .next :
25- node .next .previous = node .previous
26- else :
27- self .tail = node .previous
28-
29- node .previous = None
30- node .next = None
31-
32- def _add_to_head (self , node ):
33- node .next = self .head
34- node .previous = None
35-
36- if self .head :
37- self .head .previous = node
38- else :
39- self .tail = node
40-
41- self .head = node
42-
43- # ---------------------
44- # Public API
45- # ---------------------
46- == == == =
479 self .cache = OrderedDict ()
48- >> >> >> > fc65c37 (lru cache update )
4910
5011 def get (self , key ):
5112 if key not in self .cache :
5213 return None
53- # Move key to the end (most recently used)
14+
5415 value = self .cache .pop (key )
5516 self .cache [key ] = value
5617 return value
5718
5819 def set (self , key , value ):
5920 if key in self .cache :
60- # Update existing and move to end
6121 self .cache .pop (key )
6222
6323 elif len (self .cache ) >= self .limit :
64- # Remove least recently used (first item)
6524 self .cache .popitem (last = False )
6625
67- # Insert as most recently used
6826 self .cache [key ] = value
0 commit comments