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