1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
//===-- FormatCache.h ---------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
#ifndef lldb_FormatCache_h_
#define lldb_FormatCache_h_
// C Includes
// C++ Includes
#include <map>
// Other libraries and framework includes
// Project includes
#include "lldb/lldb-public.h"
#include "lldb/Core/ConstString.h"
#include "lldb/Host/Mutex.h"
namespace lldb_private {
class FormatCache
{
private:
struct Entry
{
private:
bool m_format_cached : 1;
bool m_summary_cached : 1;
bool m_synthetic_cached : 1;
bool m_validator_cached : 1;
lldb::TypeFormatImplSP m_format_sp;
lldb::TypeSummaryImplSP m_summary_sp;
lldb::SyntheticChildrenSP m_synthetic_sp;
lldb::TypeValidatorImplSP m_validator_sp;
public:
Entry ();
Entry (lldb::TypeFormatImplSP);
Entry (lldb::TypeSummaryImplSP);
Entry (lldb::SyntheticChildrenSP);
Entry (lldb::TypeValidatorImplSP);
Entry (lldb::TypeFormatImplSP,lldb::TypeSummaryImplSP,lldb::SyntheticChildrenSP,lldb::TypeValidatorImplSP);
bool
IsFormatCached ();
bool
IsSummaryCached ();
bool
IsSyntheticCached ();
bool
IsValidatorCached ();
lldb::TypeFormatImplSP
GetFormat ();
lldb::TypeSummaryImplSP
GetSummary ();
lldb::SyntheticChildrenSP
GetSynthetic ();
lldb::TypeValidatorImplSP
GetValidator ();
void
SetFormat (lldb::TypeFormatImplSP);
void
SetSummary (lldb::TypeSummaryImplSP);
void
SetSynthetic (lldb::SyntheticChildrenSP);
void
SetValidator (lldb::TypeValidatorImplSP);
};
typedef std::map<ConstString,Entry> CacheMap;
CacheMap m_map;
Mutex m_mutex;
uint64_t m_cache_hits;
uint64_t m_cache_misses;
Entry&
GetEntry (const ConstString& type);
public:
FormatCache ();
bool
GetFormat (const ConstString& type,lldb::TypeFormatImplSP& format_sp);
bool
GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp);
bool
GetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp);
bool
GetValidator (const ConstString& type,lldb::TypeValidatorImplSP& summary_sp);
void
SetFormat (const ConstString& type,lldb::TypeFormatImplSP& format_sp);
void
SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp);
void
SetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp);
void
SetValidator (const ConstString& type,lldb::TypeValidatorImplSP& synthetic_sp);
void
Clear ();
uint64_t
GetCacheHits ()
{
return m_cache_hits;
}
uint64_t
GetCacheMisses ()
{
return m_cache_misses;
}
};
} // namespace lldb_private
#endif // lldb_FormatCache_h_
|