]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - contrib/llvm/tools/lldb/include/lldb/DataFormatters/TypeCategory.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / contrib / llvm / tools / lldb / include / lldb / DataFormatters / TypeCategory.h
1 //===-- TypeCategory.h -------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef lldb_TypeCategory_h_
11 #define lldb_TypeCategory_h_
12
13 // C Includes
14 // C++ Includes
15
16 // Other libraries and framework includes
17 // Project includes
18 #include "lldb/lldb-public.h"
19 #include "lldb/lldb-enumerations.h"
20
21 #include "lldb/DataFormatters/FormatNavigator.h"
22
23 namespace lldb_private {    
24     class TypeCategoryImpl
25     {
26     private:
27         
28         typedef FormatNavigator<ConstString, TypeSummaryImpl> SummaryNavigator;
29         typedef FormatNavigator<lldb::RegularExpressionSP, TypeSummaryImpl> RegexSummaryNavigator;
30         
31         typedef FormatNavigator<ConstString, TypeFilterImpl> FilterNavigator;
32         typedef FormatNavigator<lldb::RegularExpressionSP, TypeFilterImpl> RegexFilterNavigator;
33         
34 #ifndef LLDB_DISABLE_PYTHON
35         typedef FormatNavigator<ConstString, ScriptedSyntheticChildren> SynthNavigator;
36         typedef FormatNavigator<lldb::RegularExpressionSP, ScriptedSyntheticChildren> RegexSynthNavigator;
37 #endif // #ifndef LLDB_DISABLE_PYTHON
38         
39         typedef SummaryNavigator::MapType SummaryMap;
40         typedef RegexSummaryNavigator::MapType RegexSummaryMap;
41         typedef FilterNavigator::MapType FilterMap;
42         typedef RegexFilterNavigator::MapType RegexFilterMap;
43 #ifndef LLDB_DISABLE_PYTHON
44         typedef SynthNavigator::MapType SynthMap;
45         typedef RegexSynthNavigator::MapType RegexSynthMap;
46 #endif // #ifndef LLDB_DISABLE_PYTHON
47         
48     public:
49         
50         typedef uint16_t FormatCategoryItems;
51         static const uint16_t ALL_ITEM_TYPES = UINT16_MAX;
52         
53         typedef SummaryNavigator::SharedPointer SummaryNavigatorSP;
54         typedef RegexSummaryNavigator::SharedPointer RegexSummaryNavigatorSP;
55         typedef FilterNavigator::SharedPointer FilterNavigatorSP;
56         typedef RegexFilterNavigator::SharedPointer RegexFilterNavigatorSP;
57 #ifndef LLDB_DISABLE_PYTHON
58         typedef SynthNavigator::SharedPointer SynthNavigatorSP;
59         typedef RegexSynthNavigator::SharedPointer RegexSynthNavigatorSP;
60 #endif // #ifndef LLDB_DISABLE_PYTHON
61         
62         TypeCategoryImpl (IFormatChangeListener* clist,
63                           ConstString name);
64         
65         SummaryNavigatorSP
66         GetSummaryNavigator ()
67         {
68             return SummaryNavigatorSP(m_summary_nav);
69         }
70         
71         RegexSummaryNavigatorSP
72         GetRegexSummaryNavigator ()
73         {
74             return RegexSummaryNavigatorSP(m_regex_summary_nav);
75         }
76         
77         FilterNavigatorSP
78         GetFilterNavigator ()
79         {
80             return FilterNavigatorSP(m_filter_nav);
81         }
82         
83         RegexFilterNavigatorSP
84         GetRegexFilterNavigator ()
85         {
86             return RegexFilterNavigatorSP(m_regex_filter_nav);
87         }
88         
89         SummaryNavigator::MapValueType
90         GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp);
91         
92         FilterNavigator::MapValueType
93         GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp);
94         
95 #ifndef LLDB_DISABLE_PYTHON
96         SynthNavigator::MapValueType
97         GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp);
98 #endif
99         
100         lldb::TypeNameSpecifierImplSP
101         GetTypeNameSpecifierForSummaryAtIndex (size_t index);
102         
103         SummaryNavigator::MapValueType
104         GetSummaryAtIndex (size_t index);
105         
106         FilterNavigator::MapValueType
107         GetFilterAtIndex (size_t index);
108         
109         lldb::TypeNameSpecifierImplSP
110         GetTypeNameSpecifierForFilterAtIndex (size_t index);
111         
112 #ifndef LLDB_DISABLE_PYTHON
113         SynthNavigatorSP
114         GetSyntheticNavigator ()
115         {
116             return SynthNavigatorSP(m_synth_nav);
117         }
118         
119         RegexSynthNavigatorSP
120         GetRegexSyntheticNavigator ()
121         {
122             return RegexSynthNavigatorSP(m_regex_synth_nav);
123         }
124         
125         SynthNavigator::MapValueType
126         GetSyntheticAtIndex (size_t index);
127         
128         lldb::TypeNameSpecifierImplSP
129         GetTypeNameSpecifierForSyntheticAtIndex (size_t index);
130         
131 #endif // #ifndef LLDB_DISABLE_PYTHON
132         
133         bool
134         IsEnabled () const
135         {
136             return m_enabled;
137         }
138         
139         uint32_t
140         GetEnabledPosition()
141         {
142             if (m_enabled == false)
143                 return UINT32_MAX;
144             else
145                 return m_enabled_position;
146         }
147         
148         bool
149         Get (ValueObject& valobj,
150              lldb::TypeSummaryImplSP& entry,
151              lldb::DynamicValueType use_dynamic,
152              uint32_t* reason = NULL);
153         
154         bool
155         Get (ValueObject& valobj,
156              lldb::SyntheticChildrenSP& entry,
157              lldb::DynamicValueType use_dynamic,
158              uint32_t* reason = NULL);
159         
160         void
161         Clear (FormatCategoryItems items = ALL_ITEM_TYPES);
162         
163         bool
164         Delete (ConstString name,
165                 FormatCategoryItems items = ALL_ITEM_TYPES);
166         
167         uint32_t
168         GetCount (FormatCategoryItems items = ALL_ITEM_TYPES);
169         
170         const char*
171         GetName ()
172         {
173             return m_name.GetCString();
174         }
175         
176         bool
177         AnyMatches (ConstString type_name,
178                     FormatCategoryItems items = ALL_ITEM_TYPES,
179                     bool only_enabled = true,
180                     const char** matching_category = NULL,
181                     FormatCategoryItems* matching_type = NULL);
182         
183         typedef std::shared_ptr<TypeCategoryImpl> SharedPointer;
184         
185     private:
186         SummaryNavigator::SharedPointer m_summary_nav;
187         RegexSummaryNavigator::SharedPointer m_regex_summary_nav;
188         FilterNavigator::SharedPointer m_filter_nav;
189         RegexFilterNavigator::SharedPointer m_regex_filter_nav;
190 #ifndef LLDB_DISABLE_PYTHON
191         SynthNavigator::SharedPointer m_synth_nav;
192         RegexSynthNavigator::SharedPointer m_regex_synth_nav;
193 #endif // #ifndef LLDB_DISABLE_PYTHON
194         
195         bool m_enabled;
196         
197         IFormatChangeListener* m_change_listener;
198         
199         Mutex m_mutex;
200         
201         ConstString m_name;
202         
203         uint32_t m_enabled_position;
204         
205         void
206         Enable (bool value, uint32_t position);
207         
208         void
209         Disable ()
210         {
211             Enable(false, UINT32_MAX);
212         }
213         
214         friend class TypeCategoryMap;
215         
216         friend class FormatNavigator<ConstString, TypeSummaryImpl>;
217         friend class FormatNavigator<lldb::RegularExpressionSP, TypeSummaryImpl>;
218         
219         friend class FormatNavigator<ConstString, TypeFilterImpl>;
220         friend class FormatNavigator<lldb::RegularExpressionSP, TypeFilterImpl>;
221         
222 #ifndef LLDB_DISABLE_PYTHON
223         friend class FormatNavigator<ConstString, ScriptedSyntheticChildren>;
224         friend class FormatNavigator<lldb::RegularExpressionSP, ScriptedSyntheticChildren>;
225 #endif // #ifndef LLDB_DISABLE_PYTHON
226     };
227     
228 } // namespace lldb_private
229
230 #endif  // lldb_TypeCategory_h_