Added first version of DebugManager. Implemented draft of the rule engine
This commit is contained in:
Vendored
+43
@@ -0,0 +1,43 @@
|
||||
class FastCache:
|
||||
"""
|
||||
Simplest LRU cache
|
||||
"""
|
||||
|
||||
def __init__(self, max_size=256):
|
||||
self.max_size = max_size
|
||||
self.cache = {}
|
||||
self.lru = []
|
||||
|
||||
def put(self, key, value):
|
||||
if len(self.cache) == self.max_size:
|
||||
del self.cache[self.lru.pop(0)]
|
||||
|
||||
if key in self.cache:
|
||||
self.lru.remove(key)
|
||||
|
||||
self.cache[key] = value
|
||||
self.lru.append(key)
|
||||
|
||||
def get(self, key):
|
||||
try:
|
||||
return self.cache[key]
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
def evict_by_key(self, predicate):
|
||||
to_remove = []
|
||||
|
||||
for k, v in self.cache.items():
|
||||
if predicate(k):
|
||||
to_remove.append(k)
|
||||
|
||||
for k in to_remove:
|
||||
self.lru.remove(k)
|
||||
del self.cache[k]
|
||||
|
||||
def copy(self):
|
||||
return self.cache.copy()
|
||||
|
||||
def clear(self):
|
||||
self.cache.clear()
|
||||
self.lru.clear()
|
||||
Reference in New Issue
Block a user