aboutsummaryrefslogtreecommitdiff
path: root/include/lldb/DataFormatters/FormatCache.h
blob: 645fbc7ddf10b98ffeaab0298ad8b2d9abdf5ed9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
//===-- 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/lldb-public.h"
#include "lldb/Core/ConstString.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_