xref: /openbsd-src/gnu/llvm/lldb/source/DataFormatters/DataVisualization.cpp (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1dda28197Spatrick //===-- DataVisualization.cpp ---------------------------------------------===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9061da546Spatrick #include "lldb/DataFormatters/DataVisualization.h"
10061da546Spatrick 
11061da546Spatrick 
12061da546Spatrick using namespace lldb;
13061da546Spatrick using namespace lldb_private;
14061da546Spatrick 
GetFormatManager()15061da546Spatrick static FormatManager &GetFormatManager() {
16061da546Spatrick   static FormatManager g_format_manager;
17061da546Spatrick   return g_format_manager;
18061da546Spatrick }
19061da546Spatrick 
ForceUpdate()20061da546Spatrick void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); }
21061da546Spatrick 
GetCurrentRevision()22061da546Spatrick uint32_t DataVisualization::GetCurrentRevision() {
23061da546Spatrick   return GetFormatManager().GetCurrentRevision();
24061da546Spatrick }
25061da546Spatrick 
ShouldPrintAsOneLiner(ValueObject & valobj)26061da546Spatrick bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) {
27061da546Spatrick   return GetFormatManager().ShouldPrintAsOneLiner(valobj);
28061da546Spatrick }
29061da546Spatrick 
30061da546Spatrick lldb::TypeFormatImplSP
GetFormat(ValueObject & valobj,lldb::DynamicValueType use_dynamic)31061da546Spatrick DataVisualization::GetFormat(ValueObject &valobj,
32061da546Spatrick                              lldb::DynamicValueType use_dynamic) {
33061da546Spatrick   return GetFormatManager().GetFormat(valobj, use_dynamic);
34061da546Spatrick }
35061da546Spatrick 
36061da546Spatrick lldb::TypeFormatImplSP
GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp)37061da546Spatrick DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) {
38061da546Spatrick   return GetFormatManager().GetFormatForType(type_sp);
39061da546Spatrick }
40061da546Spatrick 
41061da546Spatrick lldb::TypeSummaryImplSP
GetSummaryFormat(ValueObject & valobj,lldb::DynamicValueType use_dynamic)42061da546Spatrick DataVisualization::GetSummaryFormat(ValueObject &valobj,
43061da546Spatrick                                     lldb::DynamicValueType use_dynamic) {
44061da546Spatrick   return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
45061da546Spatrick }
46061da546Spatrick 
47061da546Spatrick lldb::TypeSummaryImplSP
GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp)48061da546Spatrick DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) {
49061da546Spatrick   return GetFormatManager().GetSummaryForType(type_sp);
50061da546Spatrick }
51061da546Spatrick 
52061da546Spatrick lldb::SyntheticChildrenSP
GetSyntheticChildren(ValueObject & valobj,lldb::DynamicValueType use_dynamic)53061da546Spatrick DataVisualization::GetSyntheticChildren(ValueObject &valobj,
54061da546Spatrick                                         lldb::DynamicValueType use_dynamic) {
55061da546Spatrick   return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
56061da546Spatrick }
57061da546Spatrick 
58061da546Spatrick lldb::TypeFilterImplSP
GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp)59061da546Spatrick DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) {
60061da546Spatrick   return GetFormatManager().GetFilterForType(type_sp);
61061da546Spatrick }
62061da546Spatrick 
63061da546Spatrick lldb::ScriptedSyntheticChildrenSP
GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp)64061da546Spatrick DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) {
65061da546Spatrick   return GetFormatManager().GetSyntheticForType(type_sp);
66061da546Spatrick }
67061da546Spatrick 
AnyMatches(const FormattersMatchCandidate & candidate_type,TypeCategoryImpl::FormatCategoryItems items,bool only_enabled,const char ** matching_category,TypeCategoryImpl::FormatCategoryItems * matching_type)68061da546Spatrick bool DataVisualization::AnyMatches(
69*f6aab3d8Srobert     const FormattersMatchCandidate &candidate_type,
70*f6aab3d8Srobert     TypeCategoryImpl::FormatCategoryItems items, bool only_enabled,
71*f6aab3d8Srobert     const char **matching_category,
72061da546Spatrick     TypeCategoryImpl::FormatCategoryItems *matching_type) {
73*f6aab3d8Srobert   return GetFormatManager().AnyMatches(candidate_type, items, only_enabled,
74061da546Spatrick                                        matching_category, matching_type);
75061da546Spatrick }
76061da546Spatrick 
GetCategory(ConstString category,lldb::TypeCategoryImplSP & entry,bool allow_create)77061da546Spatrick bool DataVisualization::Categories::GetCategory(ConstString category,
78061da546Spatrick                                                 lldb::TypeCategoryImplSP &entry,
79061da546Spatrick                                                 bool allow_create) {
80061da546Spatrick   entry = GetFormatManager().GetCategory(category, allow_create);
81061da546Spatrick   return (entry.get() != nullptr);
82061da546Spatrick }
83061da546Spatrick 
GetCategory(lldb::LanguageType language,lldb::TypeCategoryImplSP & entry)84061da546Spatrick bool DataVisualization::Categories::GetCategory(
85061da546Spatrick     lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) {
86061da546Spatrick   if (LanguageCategory *lang_category =
87061da546Spatrick           GetFormatManager().GetCategoryForLanguage(language))
88061da546Spatrick     entry = lang_category->GetCategory();
89061da546Spatrick   return (entry.get() != nullptr);
90061da546Spatrick }
91061da546Spatrick 
Add(ConstString category)92061da546Spatrick void DataVisualization::Categories::Add(ConstString category) {
93061da546Spatrick   GetFormatManager().GetCategory(category);
94061da546Spatrick }
95061da546Spatrick 
Delete(ConstString category)96061da546Spatrick bool DataVisualization::Categories::Delete(ConstString category) {
97061da546Spatrick   GetFormatManager().DisableCategory(category);
98061da546Spatrick   return GetFormatManager().DeleteCategory(category);
99061da546Spatrick }
100061da546Spatrick 
Clear()101061da546Spatrick void DataVisualization::Categories::Clear() {
102061da546Spatrick   GetFormatManager().ClearCategories();
103061da546Spatrick }
104061da546Spatrick 
Clear(ConstString category)105061da546Spatrick void DataVisualization::Categories::Clear(ConstString category) {
106*f6aab3d8Srobert   GetFormatManager().GetCategory(category)->Clear(eFormatCategoryItemSummary);
107061da546Spatrick }
108061da546Spatrick 
Enable(ConstString category,TypeCategoryMap::Position pos)109061da546Spatrick void DataVisualization::Categories::Enable(ConstString category,
110061da546Spatrick                                            TypeCategoryMap::Position pos) {
111061da546Spatrick   if (GetFormatManager().GetCategory(category)->IsEnabled())
112061da546Spatrick     GetFormatManager().DisableCategory(category);
113061da546Spatrick   GetFormatManager().EnableCategory(category, pos, {});
114061da546Spatrick }
115061da546Spatrick 
Enable(lldb::LanguageType lang_type)116061da546Spatrick void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) {
117061da546Spatrick   if (LanguageCategory *lang_category =
118061da546Spatrick           GetFormatManager().GetCategoryForLanguage(lang_type))
119061da546Spatrick     lang_category->Enable();
120061da546Spatrick }
121061da546Spatrick 
Disable(ConstString category)122061da546Spatrick void DataVisualization::Categories::Disable(ConstString category) {
123061da546Spatrick   if (GetFormatManager().GetCategory(category)->IsEnabled())
124061da546Spatrick     GetFormatManager().DisableCategory(category);
125061da546Spatrick }
126061da546Spatrick 
Disable(lldb::LanguageType lang_type)127061da546Spatrick void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) {
128061da546Spatrick   if (LanguageCategory *lang_category =
129061da546Spatrick           GetFormatManager().GetCategoryForLanguage(lang_type))
130061da546Spatrick     lang_category->Disable();
131061da546Spatrick }
132061da546Spatrick 
Enable(const lldb::TypeCategoryImplSP & category,TypeCategoryMap::Position pos)133061da546Spatrick void DataVisualization::Categories::Enable(
134061da546Spatrick     const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) {
135061da546Spatrick   if (category.get()) {
136061da546Spatrick     if (category->IsEnabled())
137061da546Spatrick       GetFormatManager().DisableCategory(category);
138061da546Spatrick     GetFormatManager().EnableCategory(category, pos);
139061da546Spatrick   }
140061da546Spatrick }
141061da546Spatrick 
Disable(const lldb::TypeCategoryImplSP & category)142061da546Spatrick void DataVisualization::Categories::Disable(
143061da546Spatrick     const lldb::TypeCategoryImplSP &category) {
144061da546Spatrick   if (category.get() && category->IsEnabled())
145061da546Spatrick     GetFormatManager().DisableCategory(category);
146061da546Spatrick }
147061da546Spatrick 
EnableStar()148061da546Spatrick void DataVisualization::Categories::EnableStar() {
149061da546Spatrick   GetFormatManager().EnableAllCategories();
150061da546Spatrick }
151061da546Spatrick 
DisableStar()152061da546Spatrick void DataVisualization::Categories::DisableStar() {
153061da546Spatrick   GetFormatManager().DisableAllCategories();
154061da546Spatrick }
155061da546Spatrick 
ForEach(TypeCategoryMap::ForEachCallback callback)156061da546Spatrick void DataVisualization::Categories::ForEach(
157061da546Spatrick     TypeCategoryMap::ForEachCallback callback) {
158061da546Spatrick   GetFormatManager().ForEachCategory(callback);
159061da546Spatrick }
160061da546Spatrick 
GetCount()161061da546Spatrick uint32_t DataVisualization::Categories::GetCount() {
162061da546Spatrick   return GetFormatManager().GetCategoriesCount();
163061da546Spatrick }
164061da546Spatrick 
165061da546Spatrick lldb::TypeCategoryImplSP
GetCategoryAtIndex(size_t index)166061da546Spatrick DataVisualization::Categories::GetCategoryAtIndex(size_t index) {
167061da546Spatrick   return GetFormatManager().GetCategoryAtIndex(index);
168061da546Spatrick }
169061da546Spatrick 
GetSummaryFormat(ConstString type,lldb::TypeSummaryImplSP & entry)170061da546Spatrick bool DataVisualization::NamedSummaryFormats::GetSummaryFormat(
171061da546Spatrick     ConstString type, lldb::TypeSummaryImplSP &entry) {
172be691f3bSpatrick   return GetFormatManager().GetNamedSummaryContainer().GetExact(type, entry);
173061da546Spatrick }
174061da546Spatrick 
Add(ConstString type,const lldb::TypeSummaryImplSP & entry)175061da546Spatrick void DataVisualization::NamedSummaryFormats::Add(
176061da546Spatrick     ConstString type, const lldb::TypeSummaryImplSP &entry) {
177be691f3bSpatrick   GetFormatManager().GetNamedSummaryContainer().Add(type, entry);
178061da546Spatrick }
179061da546Spatrick 
Delete(ConstString type)180061da546Spatrick bool DataVisualization::NamedSummaryFormats::Delete(ConstString type) {
181061da546Spatrick   return GetFormatManager().GetNamedSummaryContainer().Delete(type);
182061da546Spatrick }
183061da546Spatrick 
Clear()184061da546Spatrick void DataVisualization::NamedSummaryFormats::Clear() {
185061da546Spatrick   GetFormatManager().GetNamedSummaryContainer().Clear();
186061da546Spatrick }
187061da546Spatrick 
ForEach(std::function<bool (const TypeMatcher &,const lldb::TypeSummaryImplSP &)> callback)188061da546Spatrick void DataVisualization::NamedSummaryFormats::ForEach(
189be691f3bSpatrick     std::function<bool(const TypeMatcher &, const lldb::TypeSummaryImplSP &)>
190061da546Spatrick         callback) {
191061da546Spatrick   GetFormatManager().GetNamedSummaryContainer().ForEach(callback);
192061da546Spatrick }
193061da546Spatrick 
GetCount()194061da546Spatrick uint32_t DataVisualization::NamedSummaryFormats::GetCount() {
195061da546Spatrick   return GetFormatManager().GetNamedSummaryContainer().GetCount();
196061da546Spatrick }
197