LLDB  mainline
FormatCache.h
Go to the documentation of this file.
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 
17 #include "lldb/lldb-public.h"
18 
19 namespace lldb_private {
20 class FormatCache {
21 private:
22  struct Entry {
23  private:
24  bool m_format_cached : 1;
25  bool m_summary_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 
57 public:
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
A class that represents a running process on the host machine.
void Set(lldb::TypeFormatImplSP)
Definition: FormatCache.cpp:39
std::recursive_mutex m_mutex
Definition: FormatCache.h:50
void Get(lldb::TypeFormatImplSP &)
Definition: FormatCache.cpp:27
lldb::TypeFormatImplSP m_format_sp
Definition: FormatCache.h:28
A uniqued constant string class.
Definition: ConstString.h:40
std::map< ConstString, Entry > CacheMap
Definition: FormatCache.h:48
lldb::SyntheticChildrenSP m_synthetic_sp
Definition: FormatCache.h:30
Entry & GetEntry(ConstString type)
Definition: FormatCache.cpp:54
lldb::TypeSummaryImplSP m_summary_sp
Definition: FormatCache.h:29