| //===-- 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> |
| #include <mutex> |
| |
| // Other libraries and framework includes |
| // Project includes |
| #include "lldb/Utility/ConstString.h" |
| #include "lldb/lldb-public.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; |
| std::recursive_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_ |