1 //===-- TypeCategory.h -------------------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef lldb_TypeCategory_h_
11 #define lldb_TypeCategory_h_
16 // Other libraries and framework includes
18 #include "lldb/lldb-public.h"
19 #include "lldb/lldb-enumerations.h"
21 #include "lldb/DataFormatters/FormatNavigator.h"
23 namespace lldb_private {
24 class TypeCategoryImpl
28 typedef FormatNavigator<ConstString, TypeSummaryImpl> SummaryNavigator;
29 typedef FormatNavigator<lldb::RegularExpressionSP, TypeSummaryImpl> RegexSummaryNavigator;
31 typedef FormatNavigator<ConstString, TypeFilterImpl> FilterNavigator;
32 typedef FormatNavigator<lldb::RegularExpressionSP, TypeFilterImpl> RegexFilterNavigator;
34 #ifndef LLDB_DISABLE_PYTHON
35 typedef FormatNavigator<ConstString, ScriptedSyntheticChildren> SynthNavigator;
36 typedef FormatNavigator<lldb::RegularExpressionSP, ScriptedSyntheticChildren> RegexSynthNavigator;
37 #endif // #ifndef LLDB_DISABLE_PYTHON
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
50 typedef uint16_t FormatCategoryItems;
51 static const uint16_t ALL_ITEM_TYPES = UINT16_MAX;
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
62 TypeCategoryImpl (IFormatChangeListener* clist,
66 GetSummaryNavigator ()
68 return SummaryNavigatorSP(m_summary_nav);
71 RegexSummaryNavigatorSP
72 GetRegexSummaryNavigator ()
74 return RegexSummaryNavigatorSP(m_regex_summary_nav);
80 return FilterNavigatorSP(m_filter_nav);
83 RegexFilterNavigatorSP
84 GetRegexFilterNavigator ()
86 return RegexFilterNavigatorSP(m_regex_filter_nav);
89 SummaryNavigator::MapValueType
90 GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp);
92 FilterNavigator::MapValueType
93 GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp);
95 #ifndef LLDB_DISABLE_PYTHON
96 SynthNavigator::MapValueType
97 GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp);
100 lldb::TypeNameSpecifierImplSP
101 GetTypeNameSpecifierForSummaryAtIndex (size_t index);
103 SummaryNavigator::MapValueType
104 GetSummaryAtIndex (size_t index);
106 FilterNavigator::MapValueType
107 GetFilterAtIndex (size_t index);
109 lldb::TypeNameSpecifierImplSP
110 GetTypeNameSpecifierForFilterAtIndex (size_t index);
112 #ifndef LLDB_DISABLE_PYTHON
114 GetSyntheticNavigator ()
116 return SynthNavigatorSP(m_synth_nav);
119 RegexSynthNavigatorSP
120 GetRegexSyntheticNavigator ()
122 return RegexSynthNavigatorSP(m_regex_synth_nav);
125 SynthNavigator::MapValueType
126 GetSyntheticAtIndex (size_t index);
128 lldb::TypeNameSpecifierImplSP
129 GetTypeNameSpecifierForSyntheticAtIndex (size_t index);
131 #endif // #ifndef LLDB_DISABLE_PYTHON
142 if (m_enabled == false)
145 return m_enabled_position;
149 Get (ValueObject& valobj,
150 lldb::TypeSummaryImplSP& entry,
151 lldb::DynamicValueType use_dynamic,
152 uint32_t* reason = NULL);
155 Get (ValueObject& valobj,
156 lldb::SyntheticChildrenSP& entry,
157 lldb::DynamicValueType use_dynamic,
158 uint32_t* reason = NULL);
161 Clear (FormatCategoryItems items = ALL_ITEM_TYPES);
164 Delete (ConstString name,
165 FormatCategoryItems items = ALL_ITEM_TYPES);
168 GetCount (FormatCategoryItems items = ALL_ITEM_TYPES);
173 return m_name.GetCString();
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);
183 typedef std::shared_ptr<TypeCategoryImpl> SharedPointer;
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
197 IFormatChangeListener* m_change_listener;
203 uint32_t m_enabled_position;
206 Enable (bool value, uint32_t position);
211 Enable(false, UINT32_MAX);
214 friend class TypeCategoryMap;
216 friend class FormatNavigator<ConstString, TypeSummaryImpl>;
217 friend class FormatNavigator<lldb::RegularExpressionSP, TypeSummaryImpl>;
219 friend class FormatNavigator<ConstString, TypeFilterImpl>;
220 friend class FormatNavigator<lldb::RegularExpressionSP, TypeFilterImpl>;
222 #ifndef LLDB_DISABLE_PYTHON
223 friend class FormatNavigator<ConstString, ScriptedSyntheticChildren>;
224 friend class FormatNavigator<lldb::RegularExpressionSP, ScriptedSyntheticChildren>;
225 #endif // #ifndef LLDB_DISABLE_PYTHON
228 } // namespace lldb_private
230 #endif // lldb_TypeCategory_h_