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 | |
15 | static FormatManager &GetFormatManager() { |
16 | static FormatManager g_format_manager; |
17 | return g_format_manager; |
18 | } |
19 | |
20 | void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); } |
21 | |
22 | uint32_t DataVisualization::GetCurrentRevision() { |
23 | return GetFormatManager().GetCurrentRevision(); |
24 | } |
25 | |
26 | bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) { |
27 | return GetFormatManager().ShouldPrintAsOneLiner(valobj); |
28 | } |
29 | |
30 | lldb::TypeFormatImplSP |
31 | DataVisualization::GetFormat(ValueObject &valobj, |
32 | lldb::DynamicValueType use_dynamic) { |
33 | return GetFormatManager().GetFormat(valobj, use_dynamic); |
34 | } |
35 | |
36 | lldb::TypeFormatImplSP |
37 | DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) { |
38 | return GetFormatManager().GetFormatForType(type_sp); |
39 | } |
40 | |
41 | lldb::TypeSummaryImplSP |
42 | DataVisualization::GetSummaryFormat(ValueObject &valobj, |
43 | lldb::DynamicValueType use_dynamic) { |
44 | return GetFormatManager().GetSummaryFormat(valobj, use_dynamic); |
45 | } |
46 | |
47 | lldb::TypeSummaryImplSP |
48 | DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) { |
49 | return GetFormatManager().GetSummaryForType(type_sp); |
50 | } |
51 | |
52 | lldb::SyntheticChildrenSP |
53 | DataVisualization::GetSyntheticChildren(ValueObject &valobj, |
54 | lldb::DynamicValueType use_dynamic) { |
55 | return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic); |
56 | } |
57 | |
58 | lldb::TypeFilterImplSP |
59 | DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) { |
60 | return GetFormatManager().GetFilterForType(type_sp); |
61 | } |
62 | |
63 | lldb::ScriptedSyntheticChildrenSP |
64 | DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) { |
65 | return GetFormatManager().GetSyntheticForType(type_sp); |
66 | } |
67 | |
68 | bool DataVisualization::AnyMatches( |
69 | const FormattersMatchCandidate &candidate_type, |
70 | TypeCategoryImpl::FormatCategoryItems items, bool only_enabled, |
71 | const char **matching_category, |
72 | TypeCategoryImpl::FormatCategoryItems *matching_type) { |
73 | return GetFormatManager().AnyMatches(candidate_type, items, only_enabled, |
74 | matching_category, matching_type); |
75 | } |
76 | |
77 | bool DataVisualization::Categories::GetCategory(ConstString category, |
78 | lldb::TypeCategoryImplSP &entry, |
79 | bool allow_create) { |
80 | entry = GetFormatManager().GetCategory(category_name: category, can_create: allow_create); |
81 | return (entry.get() != nullptr); |
82 | } |
83 | |
84 | bool DataVisualization::Categories::GetCategory( |
85 | lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) { |
86 | if (LanguageCategory *lang_category = |
87 | GetFormatManager().GetCategoryForLanguage(lang_type: language)) |
88 | entry = lang_category->GetCategory(); |
89 | return (entry.get() != nullptr); |
90 | } |
91 | |
92 | void DataVisualization::Categories::Add(ConstString category) { |
93 | GetFormatManager().GetCategory(category_name: category); |
94 | } |
95 | |
96 | bool DataVisualization::Categories::Delete(ConstString category) { |
97 | GetFormatManager().DisableCategory(category_name: category); |
98 | return GetFormatManager().DeleteCategory(category_name: category); |
99 | } |
100 | |
101 | void DataVisualization::Categories::Clear() { |
102 | GetFormatManager().ClearCategories(); |
103 | } |
104 | |
105 | void DataVisualization::Categories::Clear(ConstString category) { |
106 | GetFormatManager().GetCategory(category_name: category)->Clear(items: eFormatCategoryItemSummary); |
107 | } |
108 | |
109 | void DataVisualization::Categories::Enable(ConstString category, |
110 | TypeCategoryMap::Position pos) { |
111 | if (GetFormatManager().GetCategory(category_name: category)->IsEnabled()) |
112 | GetFormatManager().DisableCategory(category_name: category); |
113 | GetFormatManager().EnableCategory(category_name: category, pos, lang: {}); |
114 | } |
115 | |
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 | |
122 | void DataVisualization::Categories::Disable(ConstString category) { |
123 | if (GetFormatManager().GetCategory(category_name: category)->IsEnabled()) |
124 | GetFormatManager().DisableCategory(category_name: category); |
125 | } |
126 | |
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 | |
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 | |
142 | void DataVisualization::Categories::Disable( |
143 | const lldb::TypeCategoryImplSP &category) { |
144 | if (category.get() && category->IsEnabled()) |
145 | GetFormatManager().DisableCategory(category); |
146 | } |
147 | |
148 | void DataVisualization::Categories::EnableStar() { |
149 | GetFormatManager().EnableAllCategories(); |
150 | } |
151 | |
152 | void DataVisualization::Categories::DisableStar() { |
153 | GetFormatManager().DisableAllCategories(); |
154 | } |
155 | |
156 | void DataVisualization::Categories::ForEach( |
157 | TypeCategoryMap::ForEachCallback callback) { |
158 | GetFormatManager().ForEachCategory(callback); |
159 | } |
160 | |
161 | uint32_t DataVisualization::Categories::GetCount() { |
162 | return GetFormatManager().GetCategoriesCount(); |
163 | } |
164 | |
165 | lldb::TypeCategoryImplSP |
166 | DataVisualization::Categories::GetCategoryAtIndex(size_t index) { |
167 | return GetFormatManager().GetCategoryAtIndex(index); |
168 | } |
169 | |
170 | bool DataVisualization::NamedSummaryFormats::GetSummaryFormat( |
171 | ConstString type, lldb::TypeSummaryImplSP &entry) { |
172 | return GetFormatManager().GetNamedSummaryContainer().GetExact(matcher: type, entry); |
173 | } |
174 | |
175 | void DataVisualization::NamedSummaryFormats::Add( |
176 | ConstString type, const lldb::TypeSummaryImplSP &entry) { |
177 | GetFormatManager().GetNamedSummaryContainer().Add(matcher: type, entry); |
178 | } |
179 | |
180 | bool DataVisualization::NamedSummaryFormats::Delete(ConstString type) { |
181 | return GetFormatManager().GetNamedSummaryContainer().Delete(matcher: type); |
182 | } |
183 | |
184 | void DataVisualization::NamedSummaryFormats::Clear() { |
185 | GetFormatManager().GetNamedSummaryContainer().Clear(); |
186 | } |
187 | |
188 | void DataVisualization::NamedSummaryFormats::ForEach( |
189 | std::function<bool(const TypeMatcher &, const lldb::TypeSummaryImplSP &)> |
190 | callback) { |
191 | GetFormatManager().GetNamedSummaryContainer().ForEach(callback); |
192 | } |
193 | |
194 | uint32_t DataVisualization::NamedSummaryFormats::GetCount() { |
195 | return GetFormatManager().GetNamedSummaryContainer().GetCount(); |
196 | } |
197 | |