Newer
Older
from collections import deque
class Cache(object):
'''
Helper class for cache computed values to reduce runtime
'''
def __init__(self, num_levels, size):
self.num_levels = num_levels
self.cache_map = [dict() for x in range(num_levels)]
self.cache_queue = [deque() for i in range(num_levels)]
self.size = size
def read_cache(self, level, data):
'''
Only read cache, no change to make
'''
if len(self.cache_map[level]) == 0 or data not in self.cache_map[level]:
return None
else:
return self.cache_map[level][data]
def write_cache(self, level, data, value):
'''
Only write cache, change map and queue
'''
assert len(self.cache_map[level]) == len(self.cache_queue[level])
self.cache_map[level][data] = value
self.cache_queue[level].append(data)
if len(self.cache_queue[level]) > self.size:
pop_ele = self.cache_queue[level].popleft()
del self.cache_map[level][pop_ele]