xref: /openbsd-src/gnu/llvm/lldb/examples/summaries/cocoa/cache.py (revision 061da546b983eb767bad15e67af1174fb0bcf31c)
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