5 """decorator to 'memoize' a function - caching its results"""
6 def decorating_function(f):
7 cache = {} # map from key to value
8 heap = [] # list of keys, in LRU heap
9 cursize = 0 # because len() is slow
15 _heappop = heapq.heappop
16 _heappush = heapq.heappush
20 if not _cache.has_key(key):
21 if _cursize == _maxsize:
23 (_,oldkey) = _heappop(_heap)
28 _cache[key] = f(*args)
29 _heappush(_heap,(_time(),key))
34 wrapper.__doc__ = f.__doc__
35 wrapper.__name__ = f.__name__
36 wrapper.hits = wrapper.misses = 0
38 return decorating_function