blob: 14cf13d2f185dde017a976bd828271fe9b6140d9 [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
Enrico Granata5548cb52013-01-28 23:47:25 +000010#include "lldb/DataFormatters/DataVisualization.h"
Enrico Granata0a976142011-08-22 22:03:47 +000011
12// C Includes
13// C++ Includes
14// Other libraries and framework includes
15// Project includes
16
Enrico Granata0a976142011-08-22 22:03:47 +000017using namespace lldb;
18using namespace lldb_private;
19
20static FormatManager&
21GetFormatManager()
22{
23 static FormatManager g_format_manager;
24 return g_format_manager;
25}
26
27void
Enrico Granata4b49acc2011-08-22 23:45:15 +000028DataVisualization::ForceUpdate ()
Enrico Granata0a976142011-08-22 22:03:47 +000029{
30 GetFormatManager().Changed();
31}
32
33uint32_t
34DataVisualization::GetCurrentRevision ()
35{
36 return GetFormatManager().GetCurrentRevision();
37}
38
Enrico Granataa29cb0b2013-10-04 23:14:13 +000039bool
40DataVisualization::ShouldPrintAsOneLiner (ValueObject& valobj)
41{
42 return GetFormatManager().ShouldPrintAsOneLiner(valobj);
43}
44
Enrico Granata061858c2012-02-15 02:34:21 +000045lldb::TypeFormatImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000046DataVisualization::GetFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000047{
Enrico Granata852cc952013-10-08 19:03:22 +000048 return GetFormatManager().GetFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000049}
50
Enrico Granata061858c2012-02-15 02:34:21 +000051lldb::TypeFormatImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000052DataVisualization::GetFormatForType (lldb::TypeNameSpecifierImplSP type_sp)
Enrico Granata061858c2012-02-15 02:34:21 +000053{
Enrico Granata852cc952013-10-08 19:03:22 +000054 return GetFormatManager().GetFormatForType(type_sp);
Enrico Granata061858c2012-02-15 02:34:21 +000055}
56
57lldb::TypeSummaryImplSP
Enrico Granata852cc952013-10-08 19:03:22 +000058DataVisualization::GetSummaryFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000059{
Enrico Granata855cd902011-09-06 22:59:55 +000060 return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000061}
Enrico Granata855cd902011-09-06 22:59:55 +000062
Enrico Granataa777dc22012-05-08 21:49:57 +000063lldb::TypeSummaryImplSP
64DataVisualization::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp)
65{
66 return GetFormatManager().GetSummaryForType(type_sp);
67}
68
Jason Molenda7a9a72b2012-05-16 00:38:08 +000069#ifndef LLDB_DISABLE_PYTHON
Enrico Granata855cd902011-09-06 22:59:55 +000070lldb::SyntheticChildrenSP
Enrico Granata4b49acc2011-08-22 23:45:15 +000071DataVisualization::GetSyntheticChildren (ValueObject& valobj,
Enrico Granata855cd902011-09-06 22:59:55 +000072 lldb::DynamicValueType use_dynamic)
Enrico Granata0a976142011-08-22 22:03:47 +000073{
Enrico Granata855cd902011-09-06 22:59:55 +000074 return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
Enrico Granata0a976142011-08-22 22:03:47 +000075}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000076#endif
Enrico Granata0a976142011-08-22 22:03:47 +000077
Jason Molenda7a9a72b2012-05-16 00:38:08 +000078#ifndef LLDB_DISABLE_PYTHON
Enrico Granataa777dc22012-05-08 21:49:57 +000079lldb::SyntheticChildrenSP
80DataVisualization::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
81{
82 return GetFormatManager().GetSyntheticChildrenForType(type_sp);
83}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000084#endif
Enrico Granataa777dc22012-05-08 21:49:57 +000085
86lldb::TypeFilterImplSP
87DataVisualization::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
88{
89 return GetFormatManager().GetFilterForType(type_sp);
90}
91
Jason Molenda7a9a72b2012-05-16 00:38:08 +000092#ifndef LLDB_DISABLE_PYTHON
Enrico Granata5548cb52013-01-28 23:47:25 +000093lldb::ScriptedSyntheticChildrenSP
Enrico Granataa777dc22012-05-08 21:49:57 +000094DataVisualization::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
95{
96 return GetFormatManager().GetSyntheticForType(type_sp);
97}
Jason Molenda7a9a72b2012-05-16 00:38:08 +000098#endif
Enrico Granataa777dc22012-05-08 21:49:57 +000099
Enrico Granatac5827132014-09-05 20:45:07 +0000100lldb::TypeValidatorImplSP
101DataVisualization::GetValidator (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
102{
103 return GetFormatManager().GetValidator(valobj, use_dynamic);
104}
105
106lldb::TypeValidatorImplSP
107DataVisualization::GetValidatorForType (lldb::TypeNameSpecifierImplSP type_sp)
108{
109 return GetFormatManager().GetValidatorForType(type_sp);
110}
111
Enrico Granata0a976142011-08-22 22:03:47 +0000112bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000113DataVisualization::AnyMatches (ConstString type_name,
Enrico Granata061858c2012-02-15 02:34:21 +0000114 TypeCategoryImpl::FormatCategoryItems items,
Enrico Granata4b49acc2011-08-22 23:45:15 +0000115 bool only_enabled,
116 const char** matching_category,
Enrico Granata061858c2012-02-15 02:34:21 +0000117 TypeCategoryImpl::FormatCategoryItems* matching_type)
Enrico Granata0a976142011-08-22 22:03:47 +0000118{
119 return GetFormatManager().AnyMatches(type_name,
120 items,
121 only_enabled,
122 matching_category,
123 matching_type);
124}
125
126bool
Enrico Granata061858c2012-02-15 02:34:21 +0000127DataVisualization::Categories::GetCategory (const ConstString &category, lldb::TypeCategoryImplSP &entry,
128 bool allow_create)
Enrico Granata0a976142011-08-22 22:03:47 +0000129{
Enrico Granata061858c2012-02-15 02:34:21 +0000130 entry = GetFormatManager().GetCategory(category, allow_create);
131 return (entry.get() != NULL);
Enrico Granata0a976142011-08-22 22:03:47 +0000132}
133
Enrico Granata9eeabff2015-10-29 22:18:05 +0000134bool
135DataVisualization::Categories::GetCategory (lldb::LanguageType language, lldb::TypeCategoryImplSP &entry)
136{
137 if (LanguageCategory *lang_category = GetFormatManager().GetCategoryForLanguage(language))
138 entry = lang_category->GetCategory();
139 return (entry.get() != nullptr);
140}
141
Enrico Granata0a976142011-08-22 22:03:47 +0000142void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000143DataVisualization::Categories::Add (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000144{
Enrico Granata9128ee22011-09-06 19:20:51 +0000145 GetFormatManager().GetCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000146}
147
148bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000149DataVisualization::Categories::Delete (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000150{
151 GetFormatManager().DisableCategory(category);
Enrico Granata4b49acc2011-08-22 23:45:15 +0000152 return GetFormatManager().DeleteCategory(category);
Enrico Granata0a976142011-08-22 22:03:47 +0000153}
154
155void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000156DataVisualization::Categories::Clear ()
Enrico Granata0a976142011-08-22 22:03:47 +0000157{
Enrico Granata4b49acc2011-08-22 23:45:15 +0000158 GetFormatManager().ClearCategories();
Enrico Granata0a976142011-08-22 22:03:47 +0000159}
160
161void
Enrico Granata061858c2012-02-15 02:34:21 +0000162DataVisualization::Categories::Clear (const ConstString &category)
Enrico Granata0a976142011-08-22 22:03:47 +0000163{
Enrico Granata9128ee22011-09-06 19:20:51 +0000164 GetFormatManager().GetCategory(category)->Clear(eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
Enrico Granata0a976142011-08-22 22:03:47 +0000165}
166
167void
Enrico Granata061858c2012-02-15 02:34:21 +0000168DataVisualization::Categories::Enable (const ConstString& category,
Enrico Granata5548cb52013-01-28 23:47:25 +0000169 TypeCategoryMap::Position pos)
Enrico Granata0a976142011-08-22 22:03:47 +0000170{
Enrico Granata061858c2012-02-15 02:34:21 +0000171 if (GetFormatManager().GetCategory(category)->IsEnabled())
Enrico Granata0a976142011-08-22 22:03:47 +0000172 GetFormatManager().DisableCategory(category);
Enrico Granatafa6b2782015-09-17 00:14:50 +0000173 GetFormatManager().EnableCategory(category, pos, std::initializer_list<lldb::LanguageType>());
Enrico Granata061858c2012-02-15 02:34:21 +0000174}
175
176void
Enrico Granata964211f2015-09-04 22:07:48 +0000177DataVisualization::Categories::Enable (lldb::LanguageType lang_type)
178{
179 if (LanguageCategory* lang_category = GetFormatManager().GetCategoryForLanguage(lang_type))
180 lang_category->Enable();
181}
182
183void
Enrico Granata061858c2012-02-15 02:34:21 +0000184DataVisualization::Categories::Disable (const ConstString& category)
185{
186 if (GetFormatManager().GetCategory(category)->IsEnabled() == true)
187 GetFormatManager().DisableCategory(category);
188}
189
190void
Enrico Granata964211f2015-09-04 22:07:48 +0000191DataVisualization::Categories::Disable (lldb::LanguageType lang_type)
192{
193 if (LanguageCategory* lang_category = GetFormatManager().GetCategoryForLanguage(lang_type))
194 lang_category->Disable();
195}
196
197void
Enrico Granata061858c2012-02-15 02:34:21 +0000198DataVisualization::Categories::Enable (const lldb::TypeCategoryImplSP& category,
Enrico Granata5548cb52013-01-28 23:47:25 +0000199 TypeCategoryMap::Position pos)
Enrico Granata061858c2012-02-15 02:34:21 +0000200{
201 if (category.get())
202 {
203 if (category->IsEnabled())
204 GetFormatManager().DisableCategory(category);
205 GetFormatManager().EnableCategory(category, pos);
Enrico Granata0a976142011-08-22 22:03:47 +0000206 }
207}
208
209void
Enrico Granata061858c2012-02-15 02:34:21 +0000210DataVisualization::Categories::Disable (const lldb::TypeCategoryImplSP& category)
Enrico Granata0a976142011-08-22 22:03:47 +0000211{
Enrico Granata061858c2012-02-15 02:34:21 +0000212 if (category.get() && category->IsEnabled() == true)
Enrico Granata0a976142011-08-22 22:03:47 +0000213 GetFormatManager().DisableCategory(category);
214}
215
216void
Enrico Granatae7687ad2014-10-03 01:48:32 +0000217DataVisualization::Categories::EnableStar ()
218{
219 GetFormatManager().EnableAllCategories ();
220}
221
222void
223DataVisualization::Categories::DisableStar ()
224{
225 GetFormatManager().DisableAllCategories();
226}
227
228void
Enrico Granatab56d0102015-11-14 05:44:23 +0000229DataVisualization::Categories::ForEach (TypeCategoryMap::ForEachCallback callback)
230{
231 GetFormatManager().ForEachCategory(callback);
232}
233
Enrico Granata0a976142011-08-22 22:03:47 +0000234uint32_t
Enrico Granata4b49acc2011-08-22 23:45:15 +0000235DataVisualization::Categories::GetCount ()
Enrico Granata0a976142011-08-22 22:03:47 +0000236{
Enrico Granata4b49acc2011-08-22 23:45:15 +0000237 return GetFormatManager().GetCategoriesCount();
Enrico Granata0a976142011-08-22 22:03:47 +0000238}
239
Enrico Granata061858c2012-02-15 02:34:21 +0000240lldb::TypeCategoryImplSP
Enrico Granata5548cb52013-01-28 23:47:25 +0000241DataVisualization::Categories::GetCategoryAtIndex (size_t index)
Enrico Granata061858c2012-02-15 02:34:21 +0000242{
243 return GetFormatManager().GetCategoryAtIndex(index);
244}
245
Enrico Granata0a976142011-08-22 22:03:47 +0000246bool
Enrico Granata061858c2012-02-15 02:34:21 +0000247DataVisualization::NamedSummaryFormats::GetSummaryFormat (const ConstString &type, lldb::TypeSummaryImplSP &entry)
Enrico Granata0a976142011-08-22 22:03:47 +0000248{
Enrico Granatab72a5012013-12-20 09:38:13 +0000249 return GetFormatManager().GetNamedSummaryContainer().Get(type,entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000250}
251
252void
Enrico Granata061858c2012-02-15 02:34:21 +0000253DataVisualization::NamedSummaryFormats::Add (const ConstString &type, const lldb::TypeSummaryImplSP &entry)
Enrico Granata0a976142011-08-22 22:03:47 +0000254{
Enrico Granatab72a5012013-12-20 09:38:13 +0000255 GetFormatManager().GetNamedSummaryContainer().Add(FormatManager::GetValidTypeName(type),entry);
Enrico Granata0a976142011-08-22 22:03:47 +0000256}
257
258bool
Enrico Granata4b49acc2011-08-22 23:45:15 +0000259DataVisualization::NamedSummaryFormats::Delete (const ConstString &type)
Enrico Granata0a976142011-08-22 22:03:47 +0000260{
Enrico Granatab72a5012013-12-20 09:38:13 +0000261 return GetFormatManager().GetNamedSummaryContainer().Delete(type);
Enrico Granata0a976142011-08-22 22:03:47 +0000262}
263
264void
Enrico Granata4b49acc2011-08-22 23:45:15 +0000265DataVisualization::NamedSummaryFormats::Clear ()
Enrico Granata0a976142011-08-22 22:03:47 +0000266{
Enrico Granatab72a5012013-12-20 09:38:13 +0000267 GetFormatManager().GetNamedSummaryContainer().Clear();
Enrico Granata0a976142011-08-22 22:03:47 +0000268}
269
270void
Enrico Granata3de08c52015-11-18 19:42:44 +0000271DataVisualization::NamedSummaryFormats::ForEach (std::function<bool(ConstString, const lldb::TypeSummaryImplSP&)> callback)
Enrico Granata0a976142011-08-22 22:03:47 +0000272{
Enrico Granata3de08c52015-11-18 19:42:44 +0000273 GetFormatManager().GetNamedSummaryContainer().ForEach(callback);
Enrico Granata0a976142011-08-22 22:03:47 +0000274}
275
276uint32_t
Enrico Granata4b49acc2011-08-22 23:45:15 +0000277DataVisualization::NamedSummaryFormats::GetCount ()
Enrico Granata0a976142011-08-22 22:03:47 +0000278{
Enrico Granatab72a5012013-12-20 09:38:13 +0000279 return GetFormatManager().GetNamedSummaryContainer().GetCount();
Enrico Granata4b49acc2011-08-22 23:45:15 +0000280}