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