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_FormatCache_h_
11#define lldb_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;
53  uint64_t m_cache_misses;
54
55  Entry &GetEntry(ConstString type);
56
57public:
58  FormatCache();
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_FormatCache_h_
75