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