1*061da546Spatrick""" 2*061da546SpatrickObjective-C runtime wrapper for use by LLDB Python formatters 3*061da546Spatrick 4*061da546SpatrickPart of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*061da546SpatrickSee https://llvm.org/LICENSE.txt for license information. 6*061da546SpatrickSPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*061da546Spatrick""" 8*061da546Spatrickimport lldb.formatters.metrics 9*061da546Spatrick 10*061da546Spatrick 11*061da546Spatrickclass Cache: 12*061da546Spatrick 13*061da546Spatrick def __init__(self): 14*061da546Spatrick self.data = {} 15*061da546Spatrick self.statistics = lldb.formatters.metrics.Metrics() 16*061da546Spatrick self.statistics.add_metric('hit') 17*061da546Spatrick self.statistics.add_metric('miss') 18*061da546Spatrick 19*061da546Spatrick def look_for_key(self, key): 20*061da546Spatrick if key in self.data: 21*061da546Spatrick return True 22*061da546Spatrick return False 23*061da546Spatrick 24*061da546Spatrick def add_item(self, key, value, ok_to_replace=True): 25*061da546Spatrick if not(ok_to_replace) and self.look_for_key(key): 26*061da546Spatrick return False 27*061da546Spatrick self.data[key] = value 28*061da546Spatrick return True 29*061da546Spatrick 30*061da546Spatrick def get_value(self, key, default=None): 31*061da546Spatrick if self.look_for_key(key): 32*061da546Spatrick self.statistics.metric_hit('hit', key) 33*061da546Spatrick return self.data[key] 34*061da546Spatrick else: 35*061da546Spatrick self.statistics.metric_hit('miss', key) 36*061da546Spatrick return default 37