Show More
@@ -1464,8 +1464,23 b' class lrucachedict(object):' | |||||
1464 | # This should run after an insertion. It should only be called if total |
|
1464 | # This should run after an insertion. It should only be called if total | |
1465 | # cost limits are being enforced. |
|
1465 | # cost limits are being enforced. | |
1466 | # The most recently inserted node is never evicted. |
|
1466 | # The most recently inserted node is never evicted. | |
|
1467 | if len(self) <= 1 or self.totalcost <= self.maxcost: | |||
|
1468 | return | |||
|
1469 | ||||
|
1470 | # This is logically equivalent to calling popoldest() until we | |||
|
1471 | # free up enough cost. We don't do that since popoldest() needs | |||
|
1472 | # to walk the linked list and doing this in a loop would be | |||
|
1473 | # quadratic. So we find the first non-empty node and then | |||
|
1474 | # walk nodes until we free up enough capacity. | |||
|
1475 | n = self._head.prev | |||
|
1476 | while n.key is _notset: | |||
|
1477 | n = n.prev | |||
|
1478 | ||||
1467 | while len(self) > 1 and self.totalcost > self.maxcost: |
|
1479 | while len(self) > 1 and self.totalcost > self.maxcost: | |
1468 | self.popoldest() |
|
1480 | del self._cache[n.key] | |
|
1481 | self.totalcost -= n.cost | |||
|
1482 | n.markempty() | |||
|
1483 | n = n.prev | |||
1469 |
|
1484 | |||
1470 | def lrucachefunc(func): |
|
1485 | def lrucachefunc(func): | |
1471 | '''cache most recent results of function calls''' |
|
1486 | '''cache most recent results of function calls''' |
General Comments 0
You need to be logged in to leave comments.
Login now