mercurial/util.py
changeset 18603 2251b3184e6e
parent 18537 ae60735e37d2
child 18614 b2586e2cc67a
equal deleted inserted replaced
18600:8ba520003ae0 18603:2251b3184e6e
   209             for i, v in enumerate(self):
   209             for i, v in enumerate(self):
   210                 if v == val:
   210                 if v == val:
   211                     del self[i]
   211                     del self[i]
   212                     break
   212                     break
   213 
   213 
       
   214 class lrucachedict(object):
       
   215     '''cache most recent gets from or sets to this dictionary'''
       
   216     def __init__(self, maxsize):
       
   217         self._cache = {}
       
   218         self._maxsize = maxsize
       
   219         self._order = deque()
       
   220 
       
   221     def __getitem__(self, key):
       
   222         value = self._cache[key]
       
   223         self._order.remove(key)
       
   224         self._order.append(key)
       
   225         return value
       
   226 
       
   227     def __setitem__(self, key, value):
       
   228         if key not in self._cache:
       
   229             if len(self._cache) >= self._maxsize:
       
   230                 del self._cache[self._order.popleft()]
       
   231         else:
       
   232             self._order.remove(key)
       
   233         self._cache[key] = value
       
   234         self._order.append(key)
       
   235 
       
   236     def __contains__(self, key):
       
   237         return key in self._cache
       
   238 
   214 def lrucachefunc(func):
   239 def lrucachefunc(func):
   215     '''cache most recent results of function calls'''
   240     '''cache most recent results of function calls'''
   216     cache = {}
   241     cache = {}
   217     order = deque()
   242     order = deque()
   218     if func.func_code.co_argcount == 1:
   243     if func.func_code.co_argcount == 1: