This is the last piece of work for "formats in categories": we now cache formats as well as summaries and synthetics

llvm-svn: 192928
diff --git a/lldb/source/DataFormatters/FormatCache.cpp b/lldb/source/DataFormatters/FormatCache.cpp
index af7b1c3..3721f18 100644
--- a/lldb/source/DataFormatters/FormatCache.cpp
+++ b/lldb/source/DataFormatters/FormatCache.cpp
@@ -22,33 +22,55 @@
 using namespace lldb_private;
 
 FormatCache::Entry::Entry () :
+m_format_cached(false),
 m_summary_cached(false),
 m_synthetic_cached(false),
+m_format_sp(),
 m_summary_sp(),
 m_synthetic_sp()
 {}
 
-FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp) :
+FormatCache::Entry::Entry (lldb::TypeFormatImplSP format_sp) :
+m_summary_cached(false),
 m_synthetic_cached(false),
+m_summary_sp(),
+m_synthetic_sp()
+{
+    SetFormat (format_sp);
+}
+
+FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp) :
+m_format_cached(false),
+m_synthetic_cached(false),
+m_format_sp(),
 m_synthetic_sp()
 {
     SetSummary (summary_sp);
 }
 
 FormatCache::Entry::Entry (lldb::SyntheticChildrenSP synthetic_sp) :
+m_format_cached(false),
 m_summary_cached(false),
+m_format_sp(),
 m_summary_sp()
 {
     SetSynthetic (synthetic_sp);
 }
 
-FormatCache::Entry::Entry (lldb::TypeSummaryImplSP summary_sp,lldb::SyntheticChildrenSP synthetic_sp)
+FormatCache::Entry::Entry (lldb::TypeFormatImplSP format_sp, lldb::TypeSummaryImplSP summary_sp, lldb::SyntheticChildrenSP synthetic_sp)
 {
+    SetFormat (format_sp);
     SetSummary (summary_sp);
     SetSynthetic (synthetic_sp);
 }
 
 bool
+FormatCache::Entry::IsFormatCached ()
+{
+    return m_format_cached;
+}
+
+bool
 FormatCache::Entry::IsSummaryCached ()
 {
     return m_summary_cached;
@@ -60,6 +82,12 @@
     return m_synthetic_cached;
 }
 
+lldb::TypeFormatImplSP
+FormatCache::Entry::GetFormat ()
+{
+    return m_format_sp;
+}
+
 lldb::TypeSummaryImplSP
 FormatCache::Entry::GetSummary ()
 {
@@ -73,6 +101,13 @@
 }
 
 void
+FormatCache::Entry::SetFormat (lldb::TypeFormatImplSP format_sp)
+{
+    m_format_cached = true;
+    m_format_sp = format_sp;
+}
+
+void
 FormatCache::Entry::SetSummary (lldb::TypeSummaryImplSP summary_sp)
 {
     m_summary_cached = true;
@@ -107,6 +142,26 @@
 }
 
 bool
+FormatCache::GetFormat (const ConstString& type,lldb::TypeFormatImplSP& format_sp)
+{
+    Mutex::Locker lock(m_mutex);
+    auto entry = GetEntry(type);
+    if (entry.IsSummaryCached())
+    {
+#ifdef LLDB_CONFIGURATION_DEBUG
+        m_cache_hits++;
+#endif
+        format_sp = entry.GetFormat();
+        return true;
+    }
+#ifdef LLDB_CONFIGURATION_DEBUG
+    m_cache_misses++;
+#endif
+    format_sp.reset();
+    return false;
+}
+
+bool
 FormatCache::GetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp)
 {
     Mutex::Locker lock(m_mutex);
@@ -147,6 +202,13 @@
 }
 
 void
+FormatCache::SetFormat (const ConstString& type,lldb::TypeFormatImplSP& format_sp)
+{
+    Mutex::Locker lock(m_mutex);
+    GetEntry(type).SetFormat(format_sp);
+}
+
+void
 FormatCache::SetSummary (const ConstString& type,lldb::TypeSummaryImplSP& summary_sp)
 {
     Mutex::Locker lock(m_mutex);