LLDB mainline
FormatCache.cpp
Go to the documentation of this file.
1//===-- FormatCache.cpp ---------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9
10
11
13
14using namespace lldb;
15using namespace lldb_private;
16
18 : m_format_cached(false), m_summary_cached(false),
19 m_synthetic_cached(false) {}
20
21bool FormatCache::Entry::IsFormatCached() { return m_format_cached; }
22
23bool FormatCache::Entry::IsSummaryCached() { return m_summary_cached; }
24
25bool FormatCache::Entry::IsSyntheticCached() { return m_synthetic_cached; }
26
27void FormatCache::Entry::Get(lldb::TypeFormatImplSP &retval) {
28 retval = m_format_sp;
29}
30
31void FormatCache::Entry::Get(lldb::TypeSummaryImplSP &retval) {
32 retval = m_summary_sp;
33}
34
35void FormatCache::Entry::Get(lldb::SyntheticChildrenSP &retval) {
36 retval = m_synthetic_sp;
37}
38
39void FormatCache::Entry::Set(lldb::TypeFormatImplSP format_sp) {
40 m_format_cached = true;
41 m_format_sp = format_sp;
42}
43
44void FormatCache::Entry::Set(lldb::TypeSummaryImplSP summary_sp) {
45 m_summary_cached = true;
46 m_summary_sp = summary_sp;
47}
48
49void FormatCache::Entry::Set(lldb::SyntheticChildrenSP synthetic_sp) {
50 m_synthetic_cached = true;
51 m_synthetic_sp = synthetic_sp;
52}
53
55 auto i = m_map.find(type), e = m_map.end();
56 if (i != e)
57 return i->second;
58 m_map[type] = FormatCache::Entry();
59 return m_map[type];
60}
61
62namespace lldb_private {
63
64template<> bool FormatCache::Entry::IsCached<lldb::TypeFormatImplSP>() {
65 return IsFormatCached();
66}
67template<> bool FormatCache::Entry::IsCached<lldb::TypeSummaryImplSP> () {
68 return IsSummaryCached();
69}
70template<> bool FormatCache::Entry::IsCached<lldb::SyntheticChildrenSP>() {
71 return IsSyntheticCached();
72}
73
74} // namespace lldb_private
75
76template <typename ImplSP>
77bool FormatCache::Get(ConstString type, ImplSP &format_impl_sp) {
78 std::lock_guard<std::recursive_mutex> guard(m_mutex);
79 auto entry = GetEntry(type);
80 if (entry.IsCached<ImplSP>()) {
82 entry.Get(format_impl_sp);
83 return true;
84 }
86 format_impl_sp.reset();
87 return false;
88}
89
90/// Explicit instantiations for the three types.
91/// \{
92template bool
93FormatCache::Get<lldb::TypeFormatImplSP>(ConstString, lldb::TypeFormatImplSP &);
94template bool
95FormatCache::Get<lldb::TypeSummaryImplSP>(ConstString,
97template bool
98FormatCache::Get<lldb::SyntheticChildrenSP>(ConstString,
100/// \}
101
103 std::lock_guard<std::recursive_mutex> guard(m_mutex);
104 GetEntry(type).Set(format_sp);
105}
106
108 std::lock_guard<std::recursive_mutex> guard(m_mutex);
109 GetEntry(type).Set(summary_sp);
110}
111
113 lldb::SyntheticChildrenSP &synthetic_sp) {
114 std::lock_guard<std::recursive_mutex> guard(m_mutex);
115 GetEntry(type).Set(synthetic_sp);
116}
117
119 std::lock_guard<std::recursive_mutex> guard(m_mutex);
120 m_map.clear();
121}
A uniqued constant string class.
Definition: ConstString.h:40
Entry & GetEntry(ConstString type)
Definition: FormatCache.cpp:54
void Set(ConstString type, lldb::TypeFormatImplSP &format_sp)
std::recursive_mutex m_mutex
Definition: FormatCache.h:50
bool Get(ConstString type, ImplSP &format_impl_sp)
Definition: FormatCache.cpp:77
A class that represents a running process on the host machine.
Definition: SBAttachInfo.h:14
Definition: SBAddress.h:15
std::shared_ptr< lldb_private::TypeSummaryImpl > TypeSummaryImplSP
Definition: lldb-forward.h:450
std::shared_ptr< lldb_private::TypeFormatImpl > TypeFormatImplSP
Definition: lldb-forward.h:447
std::shared_ptr< lldb_private::SyntheticChildren > SyntheticChildrenSP
Definition: lldb-forward.h:420
void Set(lldb::TypeFormatImplSP)
Definition: FormatCache.cpp:39
Entry(Type t=Type::Invalid, const char *s=nullptr, const char *f=nullptr)
Definition: FormatEntity.h:149