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