blob: 8799c59103e2be29bba0d10e437a9f264edab57a [file] [log] [blame]
Enrico Granata0a976142011-08-22 22:03:47 +00001//===-- 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
Daniel Malea93a64302012-12-05 00:20:57 +000010#include "lldb/lldb-python.h"
11
Enrico Granata5548cb52013-01-28 23:47:25 +000012#include "lldb/DataFormatters/DataVisualization.h"
Enrico Granata0a976142011-08-22 22:03:47 +000013
14// C Includes
15// C++ Includes
16// Other libraries and framework includes
17// Project includes
18
19#include "lldb/Core/Debugger.h"
20
21using namespace lldb;
22using namespace lldb_private;
23
24static FormatManager&
25GetFormatManager()
26{
27 static FormatManager g_format_manager;
28 return g_format_manager;
29}
30
31void
Enrico Granata4b49acc2011-08-22 23:45:15 +000032DataVisualization::ForceUpdate ()
Enrico Granata0a976142011-08-22 22:03:47 +000033{
34 GetFormatManager().Changed();
35}
36
37uint32_t
38DataVisualization::GetCurrentRevision ()
39{
40 return GetFormatManager().GetCurrentRevision();
41}
42
Enrico Granataa29cb0b2013-10-04 23:14:13 +000043bool
44DataVisualization::ShouldPrintAsOneLiner (ValueObject& valobj)
45{
46 return GetFormatManager().ShouldPrintAsOneLiner(valobj);
47}
48
Enrico Granata061858c2012-02-15 02:34:21 +000049lldb::TypeFormatImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000050DataVisualization::GetFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000051{
Enrico Granata852cc952013-10-08 19:03:22 +000052 return GetFormatManager().GetFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000053}
54
Enrico Granata061858c2012-02-15 02:34:21 +000055lldb::TypeFormatImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000056DataVisualization::GetFormatForType (lldb::TypeNameSpecifierImplSP type_sp)
Enrico Granata061858c2012-02-15 02:34:21 +000057{
Enrico Granata852cc952013-10-08 19:03:22 +000058 return GetFormatManager().GetFormatForType(type_sp);
Enrico Granata061858c2012-02-15 02:34:21 +000059}
60
61lldb::TypeSummaryImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000062DataVisualization::GetSummaryFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000063{
Enrico Granata855cd902011-09-06 22:59:55 +000064 return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000065}
Enrico Granata855cd902011-09-06 22:59:55 +000066
Enrico Granataa777dc22012-05-08 21:49:57 +000067lldb::TypeSummaryImplSP
68DataVisualization::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp)
69{
70 return GetFormatManager().GetSummaryForType(type_sp);
71}
72
Jason Molenda7a9a72b2012-05-16 00:38:08 +000073#ifndef LLDB_DISABLE_PYTHON
Enrico Granata855cd902011-09-06 22:59:55 +000074lldb::SyntheticChildrenSP
Enrico Granata4b49acc2011-08-22 23:45:15 +000075DataVisualization::GetSyntheticChildren (ValueObject& valobj,
Enrico Granata855cd902011-09-06 22:59:55 +000076 lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000077{
Enrico Granata855cd902011-09-06 22:59:55 +000078 return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000079}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000080#endif
Enrico Granata0a976142011-08-22 22:03:47 +000081
Jason Molenda7a9a72b2012-05-16 00:38:08 +000082#ifndef LLDB_DISABLE_PYTHON
Enrico Granataa777dc22012-05-08 21:49:57 +000083lldb::SyntheticChildrenSP
84DataVisualization::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
85{
86 return GetFormatManager().GetSyntheticChildrenForType(type_sp);
87}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000088#endif
Enrico Granataa777dc22012-05-08 21:49:57 +000089
90lldb::TypeFilterImplSP
91DataVisualization::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
92{
93 return GetFormatManager().GetFilterForType(type_sp);
94}
95
Jason Molenda7a9a72b2012-05-16 00:38:08 +000096#ifndef LLDB_DISABLE_PYTHON
Enrico Granata5548cb52013-01-28 23:47:25 +000097lldb::ScriptedSyntheticChildrenSP
Enrico Granataa777dc22012-05-08 21:49:57 +000098DataVisualization::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
99{
100 return GetFormatManager().GetSyntheticForType(type_sp);
101}
Jason Molenda7a9a72b2012-05-16 00:38:08 +0000102#endif
Enrico Granataa777dc22012-05-08 21:49:57 +0000103
Enrico Granatac5827132014-09-05 20:45:07 +0000104lldb::TypeValidatorImplSP
105DataVisualization::GetValidator (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
106{
107 return GetFormatManager().GetValidator(valobj, use_dynamic);
108}
109
110lldb::TypeValidatorImplSP
111DataVisualization::GetValidatorForType (lldb::TypeNameSpecifierImplSP type_sp)
112{
113 return GetFormatManager().GetValidatorForType(type_sp);
114}
115
Enrico Granata0a976142011-08-22 22:03:47 +0000116bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000117DataVisualization::AnyMatches (ConstString type_name,
Enrico Granata061858c2012-02-15 02:34:21 +0000118 TypeCategoryImpl::FormatCategoryItems items,
Enrico Granata4b49acc2011-08-22 23:45:15 +0000119 bool only_enabled,
120 const char** matching_category,
Enrico Granata061858c2012-02-15 02:34:21 +0000121 TypeCategoryImpl::FormatCategoryItems* matching_type)
Enrico Granata0a976142011-08-22 22:03:47 +0000122{
123 return GetFormatManager().AnyMatches(type_name,
124 items,
125 only_enabled,
126 matching_category,
127 matching_type);
128}
129
130bool
Enrico Granata061858c2012-02-15 02:34:21 +0000131DataVisualization::Categories::GetCategory (const ConstString &category, lldb::TypeCategoryImplSP &entry,
132 bool allow_create)
Enrico Granata0a976142011-08-22 22:03:47 +0000133{
Enrico Granata061858c2012-02-15 02:34:21 +0000134 entry = GetFormatManager().GetCategory(category, allow_create);
135 return (entry.get() != NULL);
Enrico Granata0a976142011-08-22 22:03:47 +0000136}
137
138void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000139DataVisualization::Categories::Add (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000140{
Enrico Granata9128ee22011-09-06 19:20:51 +0000141 GetFormatManager().GetCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000142}
143
144bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000145DataVisualization::Categories::Delete (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000146{
147 GetFormatManager().DisableCategory(category);
Enrico Granata4b49acc2011-08-22 23:45:15 +0000148 return GetFormatManager().DeleteCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000149}
150
151void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000152DataVisualization::Categories::Clear ()
Enrico Granata0a976142011-08-22 22:03:47 +0000153{
Enrico Granata4b49acc2011-08-22 23:45:15 +0000154 GetFormatManager().ClearCategories();
Enrico Granata0a976142011-08-22 22:03:47 +0000155}
156
157void
Enrico Granata061858c2012-02-15 02:34:21 +0000158DataVisualization::Categories::Clear (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000159{
Enrico Granata9128ee22011-09-06 19:20:51 +0000160 GetFormatManager().GetCategory(category)->Clear(eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
Enrico Granata0a976142011-08-22 22:03:47 +0000161}
162
163void
Enrico Granata061858c2012-02-15 02:34:21 +0000164DataVisualization::Categories::Enable (const ConstString& category,
Enrico Granata5548cb52013-01-28 23:47:25 +0000165 TypeCategoryMap::Position pos)
Enrico Granata0a976142011-08-22 22:03:47 +0000166{
Enrico Granata061858c2012-02-15 02:34:21 +0000167 if (GetFormatManager().GetCategory(category)->IsEnabled())
Enrico Granata0a976142011-08-22 22:03:47 +0000168 GetFormatManager().DisableCategory(category);
Enrico Granata061858c2012-02-15 02:34:21 +0000169 GetFormatManager().EnableCategory(category, pos);
170}
171
172void
173DataVisualization::Categories::Disable (const ConstString& category)
174{
175 if (GetFormatManager().GetCategory(category)->IsEnabled() == true)
176 GetFormatManager().DisableCategory(category);
177}
178
179void
180DataVisualization::Categories::Enable (const lldb::TypeCategoryImplSP& category,
Enrico Granata5548cb52013-01-28 23:47:25 +0000181 TypeCategoryMap::Position pos)
Enrico Granata061858c2012-02-15 02:34:21 +0000182{
183 if (category.get())
184 {
185 if (category->IsEnabled())
186 GetFormatManager().DisableCategory(category);
187 GetFormatManager().EnableCategory(category, pos);
Enrico Granata0a976142011-08-22 22:03:47 +0000188 }
189}
190
191void
Enrico Granata061858c2012-02-15 02:34:21 +0000192DataVisualization::Categories::Disable (const lldb::TypeCategoryImplSP& category)
Enrico Granata0a976142011-08-22 22:03:47 +0000193{
Enrico Granata061858c2012-02-15 02:34:21 +0000194 if (category.get() && category->IsEnabled() == true)
Enrico Granata0a976142011-08-22 22:03:47 +0000195 GetFormatManager().DisableCategory(category);
196}
197
198void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000199DataVisualization::Categories::LoopThrough (FormatManager::CategoryCallback callback, void* callback_baton)
Enrico Granata0a976142011-08-22 22:03:47 +0000200{
201 GetFormatManager().LoopThroughCategories(callback, callback_baton);
202}
203
204uint32_t
Enrico Granata4b49acc2011-08-22 23:45:15 +0000205DataVisualization::Categories::GetCount ()
Enrico Granata0a976142011-08-22 22:03:47 +0000206{
Enrico Granata4b49acc2011-08-22 23:45:15 +0000207 return GetFormatManager().GetCategoriesCount();
Enrico Granata0a976142011-08-22 22:03:47 +0000208}
209
Enrico Granata061858c2012-02-15 02:34:21 +0000210lldb::TypeCategoryImplSP
Enrico Granata5548cb52013-01-28 23:47:25 +0000211DataVisualization::Categories::GetCategoryAtIndex (size_t index)
Enrico Granata061858c2012-02-15 02:34:21 +0000212{
213 return GetFormatManager().GetCategoryAtIndex(index);
214}
215
Enrico Granata0a976142011-08-22 22:03:47 +0000216bool
Enrico Granata061858c2012-02-15 02:34:21 +0000217DataVisualization::NamedSummaryFormats::GetSummaryFormat (const ConstString &type, lldb::TypeSummaryImplSP &entry)
Enrico Granata0a976142011-08-22 22:03:47 +0000218{
Enrico Granatab72a5012013-12-20 09:38:13 +0000219 return GetFormatManager().GetNamedSummaryContainer().Get(type,entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000220}
221
222void
Enrico Granata061858c2012-02-15 02:34:21 +0000223DataVisualization::NamedSummaryFormats::Add (const ConstString &type, const lldb::TypeSummaryImplSP &entry)
Enrico Granata0a976142011-08-22 22:03:47 +0000224{
Enrico Granatab72a5012013-12-20 09:38:13 +0000225 GetFormatManager().GetNamedSummaryContainer().Add(FormatManager::GetValidTypeName(type),entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000226}
227
228bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000229DataVisualization::NamedSummaryFormats::Delete (const ConstString &type)
Enrico Granata0a976142011-08-22 22:03:47 +0000230{
Enrico Granatab72a5012013-12-20 09:38:13 +0000231 return GetFormatManager().GetNamedSummaryContainer().Delete(type);
Enrico Granata0a976142011-08-22 22:03:47 +0000232}
233
234void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000235DataVisualization::NamedSummaryFormats::Clear ()
Enrico Granata0a976142011-08-22 22:03:47 +0000236{
Enrico Granatab72a5012013-12-20 09:38:13 +0000237 GetFormatManager().GetNamedSummaryContainer().Clear();
Enrico Granata0a976142011-08-22 22:03:47 +0000238}
239
240void
Enrico Granata061858c2012-02-15 02:34:21 +0000241DataVisualization::NamedSummaryFormats::LoopThrough (TypeSummaryImpl::SummaryCallback callback, void* callback_baton)
Enrico Granata0a976142011-08-22 22:03:47 +0000242{
Enrico Granatab72a5012013-12-20 09:38:13 +0000243 GetFormatManager().GetNamedSummaryContainer().LoopThrough(callback, callback_baton);
Enrico Granata0a976142011-08-22 22:03:47 +0000244}
245
246uint32_t
Enrico Granata4b49acc2011-08-22 23:45:15 +0000247DataVisualization::NamedSummaryFormats::GetCount ()
Enrico Granata0a976142011-08-22 22:03:47 +0000248{
Enrico Granatab72a5012013-12-20 09:38:13 +0000249 return GetFormatManager().GetNamedSummaryContainer().GetCount();
Enrico Granata4b49acc2011-08-22 23:45:15 +0000250}