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 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 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 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 91 void DataVisualization::Categories::Add(ConstString category) { 92 GetFormatManager().GetCategory(category); 93 } 94 95 bool DataVisualization::Categories::Delete(ConstString category) { 96 GetFormatManager().DisableCategory(category); 97 return GetFormatManager().DeleteCategory(category); 98 } 99 100 void DataVisualization::Categories::Clear() { 101 GetFormatManager().ClearCategories(); 102 } 103 104 void DataVisualization::Categories::Clear(ConstString category) { 105 GetFormatManager().GetCategory(category)->Clear( 106 eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary); 107 } 108 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 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)->IsEnabled()) 124 GetFormatManager().DisableCategory(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(type, entry); 173 } 174 175 void DataVisualization::NamedSummaryFormats::Add( 176 ConstString type, const lldb::TypeSummaryImplSP &entry) { 177 GetFormatManager().GetNamedSummaryContainer().Add(type, entry); 178 } 179 180 bool DataVisualization::NamedSummaryFormats::Delete(ConstString type) { 181 return GetFormatManager().GetNamedSummaryContainer().Delete(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