1//===-- FormatCache.h ---------------------------------------------*- C++
2//-*-===//
3//
4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5// See https://llvm.org/LICENSE.txt for license information.
6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef LLDB_DATAFORMATTERS_FORMATCACHE_H
11#define LLDB_DATAFORMATTERS_FORMATCACHE_H
12
13#include <map>
14#include <mutex>
15
16#include "lldb/Utility/ConstString.h"
17#include "lldb/lldb-public.h"
18
19namespace lldb_private {
20class FormatCache {
21private:
22 struct Entry {
23 private:
24 bool m_format_cached : 1;
25 bool m_summary_cached : 1;
26 bool m_synthetic_cached : 1;
27
28 lldb::TypeFormatImplSP m_format_sp;
29 lldb::TypeSummaryImplSP m_summary_sp;
30 lldb::SyntheticChildrenSP m_synthetic_sp;
31
32 public:
33 Entry();
34
35 template<typename ImplSP> bool IsCached();
36 bool IsFormatCached();
37 bool IsSummaryCached();
38 bool IsSyntheticCached();
39
40 void Get(lldb::TypeFormatImplSP &);
41 void Get(lldb::TypeSummaryImplSP &);
42 void Get(lldb::SyntheticChildrenSP &);
43
44 void Set(lldb::TypeFormatImplSP);
45 void Set(lldb::TypeSummaryImplSP);
46 void Set(lldb::SyntheticChildrenSP);
47 };
48 typedef std::map<ConstString, Entry> CacheMap;
49 CacheMap m_map;
50 std::recursive_mutex m_mutex;
51
52 uint64_t m_cache_hits = 0;
53 uint64_t m_cache_misses = 0;
54
55 Entry &GetEntry(ConstString type);
56
57public:
58 FormatCache() = default;
59
60 template <typename ImplSP> bool Get(ConstString type, ImplSP &format_impl_sp);
61 void Set(ConstString type, lldb::TypeFormatImplSP &format_sp);
62 void Set(ConstString type, lldb::TypeSummaryImplSP &summary_sp);
63 void Set(ConstString type, lldb::SyntheticChildrenSP &synthetic_sp);
64
65 void Clear();
66
67 uint64_t GetCacheHits() { return m_cache_hits; }
68
69 uint64_t GetCacheMisses() { return m_cache_misses; }
70};
71
72} // namespace lldb_private
73
74#endif // LLDB_DATAFORMATTERS_FORMATCACHE_H
75