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