1 //===-- DataVisualization.cpp ---------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8
9 #include "lldb/DataFormatters/DataVisualization.h"
10
11
12 using namespace lldb;
13 using namespace lldb_private;
14
GetFormatManager()15 static FormatManager &GetFormatManager() {
16 static FormatManager g_format_manager;
17 return g_format_manager;
18 }
19
ForceUpdate()20 void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); }
21
GetCurrentRevision()22 uint32_t DataVisualization::GetCurrentRevision() {
23 return GetFormatManager().GetCurrentRevision();
24 }
25
ShouldPrintAsOneLiner(ValueObject & valobj)26 bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) {
27 return GetFormatManager().ShouldPrintAsOneLiner(valobj);
28 }
29
30 lldb::TypeFormatImplSP
GetFormat(ValueObject & valobj,lldb::DynamicValueType use_dynamic)31 DataVisualization::GetFormat(ValueObject &valobj,
32 lldb::DynamicValueType use_dynamic) {
33 return GetFormatManager().GetFormat(valobj, use_dynamic);
34 }
35
36 lldb::TypeFormatImplSP
GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp)37 DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) {
38 return GetFormatManager().GetFormatForType(type_sp);
39 }
40
41 lldb::TypeSummaryImplSP
GetSummaryFormat(ValueObject & valobj,lldb::DynamicValueType use_dynamic)42 DataVisualization::GetSummaryFormat(ValueObject &valobj,
43 lldb::DynamicValueType use_dynamic) {
44 return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
45 }
46
47 lldb::TypeSummaryImplSP
GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp)48 DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) {
49 return GetFormatManager().GetSummaryForType(type_sp);
50 }
51
52 lldb::SyntheticChildrenSP
GetSyntheticChildren(ValueObject & valobj,lldb::DynamicValueType use_dynamic)53 DataVisualization::GetSyntheticChildren(ValueObject &valobj,
54 lldb::DynamicValueType use_dynamic) {
55 return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
56 }
57
58 lldb::TypeFilterImplSP
GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp)59 DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) {
60 return GetFormatManager().GetFilterForType(type_sp);
61 }
62
63 lldb::ScriptedSyntheticChildrenSP
GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp)64 DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) {
65 return GetFormatManager().GetSyntheticForType(type_sp);
66 }
67
AnyMatches(ConstString type_name,TypeCategoryImpl::FormatCategoryItems items,bool only_enabled,const char ** matching_category,TypeCategoryImpl::FormatCategoryItems * matching_type)68 bool DataVisualization::AnyMatches(
69 ConstString type_name, TypeCategoryImpl::FormatCategoryItems items,
70 bool only_enabled, const char **matching_category,
71 TypeCategoryImpl::FormatCategoryItems *matching_type) {
72 return GetFormatManager().AnyMatches(type_name, items, only_enabled,
73 matching_category, matching_type);
74 }
75
GetCategory(ConstString category,lldb::TypeCategoryImplSP & entry,bool allow_create)76 bool DataVisualization::Categories::GetCategory(ConstString category,
77 lldb::TypeCategoryImplSP &entry,
78 bool allow_create) {
79 entry = GetFormatManager().GetCategory(category, allow_create);
80 return (entry.get() != nullptr);
81 }
82
GetCategory(lldb::LanguageType language,lldb::TypeCategoryImplSP & entry)83 bool DataVisualization::Categories::GetCategory(
84 lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) {
85 if (LanguageCategory *lang_category =
86 GetFormatManager().GetCategoryForLanguage(language))
87 entry = lang_category->GetCategory();
88 return (entry.get() != nullptr);
89 }
90
Add(ConstString category)91 void DataVisualization::Categories::Add(ConstString category) {
92 GetFormatManager().GetCategory(category);
93 }
94
Delete(ConstString category)95 bool DataVisualization::Categories::Delete(ConstString category) {
96 GetFormatManager().DisableCategory(category);
97 return GetFormatManager().DeleteCategory(category);
98 }
99
Clear()100 void DataVisualization::Categories::Clear() {
101 GetFormatManager().ClearCategories();
102 }
103
Clear(ConstString category)104 void DataVisualization::Categories::Clear(ConstString category) {
105 GetFormatManager().GetCategory(category)->Clear(
106 eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
107 }
108
Enable(ConstString category,TypeCategoryMap::Position pos)109 void DataVisualization::Categories::Enable(ConstString category,
110 TypeCategoryMap::Position pos) {
111 if (GetFormatManager().GetCategory(category)->IsEnabled())
112 GetFormatManager().DisableCategory(category);
113 GetFormatManager().EnableCategory(category, pos, {});
114 }
115
Enable(lldb::LanguageType lang_type)116 void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) {
117 if (LanguageCategory *lang_category =
118 GetFormatManager().GetCategoryForLanguage(lang_type))
119 lang_category->Enable();
120 }
121
Disable(ConstString category)122 void DataVisualization::Categories::Disable(ConstString category) {
123 if (GetFormatManager().GetCategory(category)->IsEnabled())
124 GetFormatManager().DisableCategory(category);
125 }
126
Disable(lldb::LanguageType lang_type)127 void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) {
128 if (LanguageCategory *lang_category =
129 GetFormatManager().GetCategoryForLanguage(lang_type))
130 lang_category->Disable();
131 }
132
Enable(const lldb::TypeCategoryImplSP & category,TypeCategoryMap::Position pos)133 void DataVisualization::Categories::Enable(
134 const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) {
135 if (category.get()) {
136 if (category->IsEnabled())
137 GetFormatManager().DisableCategory(category);
138 GetFormatManager().EnableCategory(category, pos);
139 }
140 }
141
Disable(const lldb::TypeCategoryImplSP & category)142 void DataVisualization::Categories::Disable(
143 const lldb::TypeCategoryImplSP &category) {
144 if (category.get() && category->IsEnabled())
145 GetFormatManager().DisableCategory(category);
146 }
147
EnableStar()148 void DataVisualization::Categories::EnableStar() {
149 GetFormatManager().EnableAllCategories();
150 }
151
DisableStar()152 void DataVisualization::Categories::DisableStar() {
153 GetFormatManager().DisableAllCategories();
154 }
155
ForEach(TypeCategoryMap::ForEachCallback callback)156 void DataVisualization::Categories::ForEach(
157 TypeCategoryMap::ForEachCallback callback) {
158 GetFormatManager().ForEachCategory(callback);
159 }
160
GetCount()161 uint32_t DataVisualization::Categories::GetCount() {
162 return GetFormatManager().GetCategoriesCount();
163 }
164
165 lldb::TypeCategoryImplSP
GetCategoryAtIndex(size_t index)166 DataVisualization::Categories::GetCategoryAtIndex(size_t index) {
167 return GetFormatManager().GetCategoryAtIndex(index);
168 }
169
GetSummaryFormat(ConstString type,lldb::TypeSummaryImplSP & entry)170 bool DataVisualization::NamedSummaryFormats::GetSummaryFormat(
171 ConstString type, lldb::TypeSummaryImplSP &entry) {
172 return GetFormatManager().GetNamedSummaryContainer().GetExact(type, entry);
173 }
174
Add(ConstString type,const lldb::TypeSummaryImplSP & entry)175 void DataVisualization::NamedSummaryFormats::Add(
176 ConstString type, const lldb::TypeSummaryImplSP &entry) {
177 GetFormatManager().GetNamedSummaryContainer().Add(type, entry);
178 }
179
Delete(ConstString type)180 bool DataVisualization::NamedSummaryFormats::Delete(ConstString type) {
181 return GetFormatManager().GetNamedSummaryContainer().Delete(type);
182 }
183
Clear()184 void DataVisualization::NamedSummaryFormats::Clear() {
185 GetFormatManager().GetNamedSummaryContainer().Clear();
186 }
187
ForEach(std::function<bool (const TypeMatcher &,const lldb::TypeSummaryImplSP &)> callback)188 void DataVisualization::NamedSummaryFormats::ForEach(
189 std::function<bool(const TypeMatcher &, const lldb::TypeSummaryImplSP &)>
190 callback) {
191 GetFormatManager().GetNamedSummaryContainer().ForEach(callback);
192 }
193
GetCount()194 uint32_t DataVisualization::NamedSummaryFormats::GetCount() {
195 return GetFormatManager().GetNamedSummaryContainer().GetCount();
196 }
197