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