1 //===-- DataVisualization.cpp ---------------------------------------*- 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 #include "lldb/DataFormatters/DataVisualization.h"
11 
12 // C Includes
13 // C++ Includes
14 // Other libraries and framework includes
15 // Project includes
16 
17 #include "lldb/Core/Debugger.h"
18 
19 using namespace lldb;
20 using namespace lldb_private;
21 
22 static FormatManager&
23 GetFormatManager()
24 {
25     static FormatManager g_format_manager;
26     return g_format_manager;
27 }
28 
29 void
30 DataVisualization::ForceUpdate ()
31 {
32     GetFormatManager().Changed();
33 }
34 
35 uint32_t
36 DataVisualization::GetCurrentRevision ()
37 {
38     return GetFormatManager().GetCurrentRevision();
39 }
40 
41 bool
42 DataVisualization::ShouldPrintAsOneLiner (ValueObject& valobj)
43 {
44     return GetFormatManager().ShouldPrintAsOneLiner(valobj);
45 }
46 
47 lldb::TypeFormatImplSP
48 DataVisualization::GetFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
49 {
50     return GetFormatManager().GetFormat(valobj, use_dynamic);
51 }
52 
53 lldb::TypeFormatImplSP
54 DataVisualization::GetFormatForType (lldb::TypeNameSpecifierImplSP type_sp)
55 {
56     return GetFormatManager().GetFormatForType(type_sp);
57 }
58 
59 lldb::TypeSummaryImplSP
60 DataVisualization::GetSummaryFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
61 {
62     return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
63 }
64 
65 lldb::TypeSummaryImplSP
66 DataVisualization::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp)
67 {
68     return GetFormatManager().GetSummaryForType(type_sp);
69 }
70 
71 #ifndef LLDB_DISABLE_PYTHON
72 lldb::SyntheticChildrenSP
73 DataVisualization::GetSyntheticChildren (ValueObject& valobj,
74                                          lldb::DynamicValueType use_dynamic)
75 {
76     return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
77 }
78 #endif
79 
80 #ifndef LLDB_DISABLE_PYTHON
81 lldb::SyntheticChildrenSP
82 DataVisualization::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
83 {
84     return GetFormatManager().GetSyntheticChildrenForType(type_sp);
85 }
86 #endif
87 
88 lldb::TypeFilterImplSP
89 DataVisualization::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
90 {
91     return GetFormatManager().GetFilterForType(type_sp);
92 }
93 
94 #ifndef LLDB_DISABLE_PYTHON
95 lldb::ScriptedSyntheticChildrenSP
96 DataVisualization::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
97 {
98     return GetFormatManager().GetSyntheticForType(type_sp);
99 }
100 #endif
101 
102 lldb::TypeValidatorImplSP
103 DataVisualization::GetValidator (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
104 {
105     return GetFormatManager().GetValidator(valobj, use_dynamic);
106 }
107 
108 lldb::TypeValidatorImplSP
109 DataVisualization::GetValidatorForType (lldb::TypeNameSpecifierImplSP type_sp)
110 {
111     return GetFormatManager().GetValidatorForType(type_sp);
112 }
113 
114 bool
115 DataVisualization::AnyMatches (ConstString type_name,
116                                TypeCategoryImpl::FormatCategoryItems items,
117                                bool only_enabled,
118                                const char** matching_category,
119                                TypeCategoryImpl::FormatCategoryItems* matching_type)
120 {
121     return GetFormatManager().AnyMatches(type_name,
122                                          items,
123                                          only_enabled,
124                                          matching_category,
125                                          matching_type);
126 }
127 
128 bool
129 DataVisualization::Categories::GetCategory (const ConstString &category, lldb::TypeCategoryImplSP &entry,
130                                             bool allow_create)
131 {
132     entry = GetFormatManager().GetCategory(category, allow_create);
133     return (entry.get() != NULL);
134 }
135 
136 void
137 DataVisualization::Categories::Add (const ConstString &category)
138 {
139     GetFormatManager().GetCategory(category);
140 }
141 
142 bool
143 DataVisualization::Categories::Delete (const ConstString &category)
144 {
145     GetFormatManager().DisableCategory(category);
146     return GetFormatManager().DeleteCategory(category);
147 }
148 
149 void
150 DataVisualization::Categories::Clear ()
151 {
152     GetFormatManager().ClearCategories();
153 }
154 
155 void
156 DataVisualization::Categories::Clear (const ConstString &category)
157 {
158     GetFormatManager().GetCategory(category)->Clear(eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
159 }
160 
161 void
162 DataVisualization::Categories::Enable (const ConstString& category,
163                                        TypeCategoryMap::Position pos)
164 {
165     if (GetFormatManager().GetCategory(category)->IsEnabled())
166         GetFormatManager().DisableCategory(category);
167     GetFormatManager().EnableCategory(category, pos, std::initializer_list<lldb::LanguageType>());
168 }
169 
170 void
171 DataVisualization::Categories::Enable (lldb::LanguageType lang_type)
172 {
173     if (LanguageCategory* lang_category = GetFormatManager().GetCategoryForLanguage(lang_type))
174         lang_category->Enable();
175 }
176 
177 void
178 DataVisualization::Categories::Disable (const ConstString& category)
179 {
180     if (GetFormatManager().GetCategory(category)->IsEnabled() == true)
181         GetFormatManager().DisableCategory(category);
182 }
183 
184 void
185 DataVisualization::Categories::Disable (lldb::LanguageType lang_type)
186 {
187     if (LanguageCategory* lang_category = GetFormatManager().GetCategoryForLanguage(lang_type))
188         lang_category->Disable();
189 }
190 
191 void
192 DataVisualization::Categories::Enable (const lldb::TypeCategoryImplSP& category,
193                                        TypeCategoryMap::Position pos)
194 {
195     if (category.get())
196     {
197         if (category->IsEnabled())
198             GetFormatManager().DisableCategory(category);
199         GetFormatManager().EnableCategory(category, pos);
200     }
201 }
202 
203 void
204 DataVisualization::Categories::Disable (const lldb::TypeCategoryImplSP& category)
205 {
206     if (category.get() && category->IsEnabled() == true)
207         GetFormatManager().DisableCategory(category);
208 }
209 
210 void
211 DataVisualization::Categories::EnableStar ()
212 {
213     GetFormatManager().EnableAllCategories ();
214 }
215 
216 void
217 DataVisualization::Categories::DisableStar ()
218 {
219     GetFormatManager().DisableAllCategories();
220 }
221 
222 void
223 DataVisualization::Categories::LoopThrough (FormatManager::CategoryCallback callback, void* callback_baton)
224 {
225     GetFormatManager().LoopThroughCategories(callback, callback_baton);
226 }
227 
228 uint32_t
229 DataVisualization::Categories::GetCount ()
230 {
231     return GetFormatManager().GetCategoriesCount();
232 }
233 
234 lldb::TypeCategoryImplSP
235 DataVisualization::Categories::GetCategoryAtIndex (size_t index)
236 {
237     return GetFormatManager().GetCategoryAtIndex(index);
238 }
239 
240 bool
241 DataVisualization::NamedSummaryFormats::GetSummaryFormat (const ConstString &type, lldb::TypeSummaryImplSP &entry)
242 {
243     return GetFormatManager().GetNamedSummaryContainer().Get(type,entry);
244 }
245 
246 void
247 DataVisualization::NamedSummaryFormats::Add (const ConstString &type, const lldb::TypeSummaryImplSP &entry)
248 {
249     GetFormatManager().GetNamedSummaryContainer().Add(FormatManager::GetValidTypeName(type),entry);
250 }
251 
252 bool
253 DataVisualization::NamedSummaryFormats::Delete (const ConstString &type)
254 {
255     return GetFormatManager().GetNamedSummaryContainer().Delete(type);
256 }
257 
258 void
259 DataVisualization::NamedSummaryFormats::Clear ()
260 {
261     GetFormatManager().GetNamedSummaryContainer().Clear();
262 }
263 
264 void
265 DataVisualization::NamedSummaryFormats::LoopThrough (TypeSummaryImpl::SummaryCallback callback, void* callback_baton)
266 {
267     GetFormatManager().GetNamedSummaryContainer().LoopThrough(callback, callback_baton);
268 }
269 
270 uint32_t
271 DataVisualization::NamedSummaryFormats::GetCount ()
272 {
273     return GetFormatManager().GetNamedSummaryContainer().GetCount();
274 }
275