1f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===-- FormatCache.h ---------------------------------------------*- C++ -*-===// 2f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 3f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// The LLVM Compiler Infrastructure 4f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 5f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// This file is distributed under the University of Illinois Open Source 6f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// License. See LICENSE.TXT for details. 7f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// 8f509c5ec066599a3399fced39ea36996184939e8Enrico Granata//===----------------------------------------------------------------------===// 9f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 10f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#ifndef lldb_FormatCache_h_ 11f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#define lldb_FormatCache_h_ 12f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 13f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// C Includes 14f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// C++ Includes 15f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include <map> 16f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 17f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// Other libraries and framework includes 18f509c5ec066599a3399fced39ea36996184939e8Enrico Granata// Project includes 19f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/lldb-public.h" 20f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/Core/ConstString.h" 21f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#include "lldb/DataFormatters/FormatClasses.h" 22f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 23f509c5ec066599a3399fced39ea36996184939e8Enrico Granatanamespace lldb_private { 24f509c5ec066599a3399fced39ea36996184939e8Enrico Granataclass FormatCache 25f509c5ec066599a3399fced39ea36996184939e8Enrico Granata{ 26f509c5ec066599a3399fced39ea36996184939e8Enrico Granataprivate: 27f509c5ec066599a3399fced39ea36996184939e8Enrico Granata struct Entry 28f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 29f509c5ec066599a3399fced39ea36996184939e8Enrico Granata private: 30f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool m_summary_cached : 1; 31f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool m_synthetic_cached : 1; 32f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 33f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::TypeSummaryImplSP m_summary_sp; 34f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::SyntheticChildrenSP m_synthetic_sp; 35f509c5ec066599a3399fced39ea36996184939e8Enrico Granata public: 36f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Entry (); 378aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala Entry (const Entry& rhs); 38f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Entry (lldb::TypeSummaryImplSP); 39f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Entry (lldb::SyntheticChildrenSP); 40f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Entry (lldb::TypeSummaryImplSP,lldb::SyntheticChildrenSP); 41f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 428aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala Entry& operator= (const Entry& rhs); 438aaa52329ade20107fe28af7085b0a1f395816a8Todd Fiala 44f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 45f509c5ec066599a3399fced39ea36996184939e8Enrico Granata IsSummaryCached (); 46f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 47f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 48f509c5ec066599a3399fced39ea36996184939e8Enrico Granata IsSyntheticCached (); 49f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 50f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::TypeSummaryImplSP 51f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSummary (); 52f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 53f509c5ec066599a3399fced39ea36996184939e8Enrico Granata lldb::SyntheticChildrenSP 54f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSynthetic (); 55f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 56f509c5ec066599a3399fced39ea36996184939e8Enrico Granata void 57f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SetSummary (lldb::TypeSummaryImplSP); 58f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 59f509c5ec066599a3399fced39ea36996184939e8Enrico Granata void 60f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SetSynthetic (lldb::SyntheticChildrenSP); 61f509c5ec066599a3399fced39ea36996184939e8Enrico Granata }; 62f509c5ec066599a3399fced39ea36996184939e8Enrico Granata typedef std::map<ConstString,Entry> CacheMap; 63f509c5ec066599a3399fced39ea36996184939e8Enrico Granata CacheMap m_map; 64f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Mutex m_mutex; 65f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 66f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint64_t m_cache_hits; 67f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint64_t m_cache_misses; 68f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 69f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Entry& 70f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetEntry (const ConstString& type); 71f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 72f509c5ec066599a3399fced39ea36996184939e8Enrico Granatapublic: 73f509c5ec066599a3399fced39ea36996184939e8Enrico Granata FormatCache (); 74f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 75f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 76f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp); 77f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 78f509c5ec066599a3399fced39ea36996184939e8Enrico Granata bool 79f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp); 80f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 81f509c5ec066599a3399fced39ea36996184939e8Enrico Granata void 82f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp); 83f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 84f509c5ec066599a3399fced39ea36996184939e8Enrico Granata void 85f509c5ec066599a3399fced39ea36996184939e8Enrico Granata SetSynthetic (const ConstString& type,lldb::SyntheticChildrenSP& synthetic_sp); 86f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 87f509c5ec066599a3399fced39ea36996184939e8Enrico Granata void 88f509c5ec066599a3399fced39ea36996184939e8Enrico Granata Clear (); 89f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 90f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint64_t 91f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetCacheHits () 92f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 93f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_cache_hits; 94f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 95f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 96f509c5ec066599a3399fced39ea36996184939e8Enrico Granata uint64_t 97f509c5ec066599a3399fced39ea36996184939e8Enrico Granata GetCacheMisses () 98f509c5ec066599a3399fced39ea36996184939e8Enrico Granata { 99f509c5ec066599a3399fced39ea36996184939e8Enrico Granata return m_cache_misses; 100f509c5ec066599a3399fced39ea36996184939e8Enrico Granata } 101f509c5ec066599a3399fced39ea36996184939e8Enrico Granata}; 102f509c5ec066599a3399fced39ea36996184939e8Enrico Granata} // namespace lldb_private 103f509c5ec066599a3399fced39ea36996184939e8Enrico Granata 104f509c5ec066599a3399fced39ea36996184939e8Enrico Granata#endif // lldb_FormatCache_h_ 105