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 15061da546Spatrick static FormatManager &GetFormatManager() { 16061da546Spatrick static FormatManager g_format_manager; 17061da546Spatrick return g_format_manager; 18061da546Spatrick } 19061da546Spatrick 20061da546Spatrick void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); } 21061da546Spatrick 22061da546Spatrick uint32_t DataVisualization::GetCurrentRevision() { 23061da546Spatrick return GetFormatManager().GetCurrentRevision(); 24061da546Spatrick } 25061da546Spatrick 26061da546Spatrick bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) { 27061da546Spatrick return GetFormatManager().ShouldPrintAsOneLiner(valobj); 28061da546Spatrick } 29061da546Spatrick 30061da546Spatrick lldb::TypeFormatImplSP 31061da546Spatrick DataVisualization::GetFormat(ValueObject &valobj, 32061da546Spatrick lldb::DynamicValueType use_dynamic) { 33061da546Spatrick return GetFormatManager().GetFormat(valobj, use_dynamic); 34061da546Spatrick } 35061da546Spatrick 36061da546Spatrick lldb::TypeFormatImplSP 37061da546Spatrick DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) { 38061da546Spatrick return GetFormatManager().GetFormatForType(type_sp); 39061da546Spatrick } 40061da546Spatrick 41061da546Spatrick lldb::TypeSummaryImplSP 42061da546Spatrick DataVisualization::GetSummaryFormat(ValueObject &valobj, 43061da546Spatrick lldb::DynamicValueType use_dynamic) { 44061da546Spatrick return GetFormatManager().GetSummaryFormat(valobj, use_dynamic); 45061da546Spatrick } 46061da546Spatrick 47061da546Spatrick lldb::TypeSummaryImplSP 48061da546Spatrick DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) { 49061da546Spatrick return GetFormatManager().GetSummaryForType(type_sp); 50061da546Spatrick } 51061da546Spatrick 52061da546Spatrick lldb::SyntheticChildrenSP 53061da546Spatrick DataVisualization::GetSyntheticChildren(ValueObject &valobj, 54061da546Spatrick lldb::DynamicValueType use_dynamic) { 55061da546Spatrick return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic); 56061da546Spatrick } 57061da546Spatrick 58061da546Spatrick lldb::TypeFilterImplSP 59061da546Spatrick DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) { 60061da546Spatrick return GetFormatManager().GetFilterForType(type_sp); 61061da546Spatrick } 62061da546Spatrick 63061da546Spatrick lldb::ScriptedSyntheticChildrenSP 64061da546Spatrick DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) { 65061da546Spatrick return GetFormatManager().GetSyntheticForType(type_sp); 66061da546Spatrick } 67061da546Spatrick 68061da546Spatrick bool DataVisualization::AnyMatches( 69061da546Spatrick ConstString type_name, TypeCategoryImpl::FormatCategoryItems items, 70061da546Spatrick bool only_enabled, const char **matching_category, 71061da546Spatrick TypeCategoryImpl::FormatCategoryItems *matching_type) { 72061da546Spatrick return GetFormatManager().AnyMatches(type_name, items, only_enabled, 73061da546Spatrick matching_category, matching_type); 74061da546Spatrick } 75061da546Spatrick 76061da546Spatrick bool DataVisualization::Categories::GetCategory(ConstString category, 77061da546Spatrick lldb::TypeCategoryImplSP &entry, 78061da546Spatrick bool allow_create) { 79061da546Spatrick entry = GetFormatManager().GetCategory(category, allow_create); 80061da546Spatrick return (entry.get() != nullptr); 81061da546Spatrick } 82061da546Spatrick 83061da546Spatrick bool DataVisualization::Categories::GetCategory( 84061da546Spatrick lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) { 85061da546Spatrick if (LanguageCategory *lang_category = 86061da546Spatrick GetFormatManager().GetCategoryForLanguage(language)) 87061da546Spatrick entry = lang_category->GetCategory(); 88061da546Spatrick return (entry.get() != nullptr); 89061da546Spatrick } 90061da546Spatrick 91061da546Spatrick void DataVisualization::Categories::Add(ConstString category) { 92061da546Spatrick GetFormatManager().GetCategory(category); 93061da546Spatrick } 94061da546Spatrick 95061da546Spatrick bool DataVisualization::Categories::Delete(ConstString category) { 96061da546Spatrick GetFormatManager().DisableCategory(category); 97061da546Spatrick return GetFormatManager().DeleteCategory(category); 98061da546Spatrick } 99061da546Spatrick 100061da546Spatrick void DataVisualization::Categories::Clear() { 101061da546Spatrick GetFormatManager().ClearCategories(); 102061da546Spatrick } 103061da546Spatrick 104061da546Spatrick void DataVisualization::Categories::Clear(ConstString category) { 105061da546Spatrick GetFormatManager().GetCategory(category)->Clear( 106061da546Spatrick eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary); 107061da546Spatrick } 108061da546Spatrick 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 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 122061da546Spatrick void DataVisualization::Categories::Disable(ConstString category) { 123061da546Spatrick if (GetFormatManager().GetCategory(category)->IsEnabled()) 124061da546Spatrick GetFormatManager().DisableCategory(category); 125061da546Spatrick } 126061da546Spatrick 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 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 142061da546Spatrick void DataVisualization::Categories::Disable( 143061da546Spatrick const lldb::TypeCategoryImplSP &category) { 144061da546Spatrick if (category.get() && category->IsEnabled()) 145061da546Spatrick GetFormatManager().DisableCategory(category); 146061da546Spatrick } 147061da546Spatrick 148061da546Spatrick void DataVisualization::Categories::EnableStar() { 149061da546Spatrick GetFormatManager().EnableAllCategories(); 150061da546Spatrick } 151061da546Spatrick 152061da546Spatrick void DataVisualization::Categories::DisableStar() { 153061da546Spatrick GetFormatManager().DisableAllCategories(); 154061da546Spatrick } 155061da546Spatrick 156061da546Spatrick void DataVisualization::Categories::ForEach( 157061da546Spatrick TypeCategoryMap::ForEachCallback callback) { 158061da546Spatrick GetFormatManager().ForEachCategory(callback); 159061da546Spatrick } 160061da546Spatrick 161061da546Spatrick uint32_t DataVisualization::Categories::GetCount() { 162061da546Spatrick return GetFormatManager().GetCategoriesCount(); 163061da546Spatrick } 164061da546Spatrick 165061da546Spatrick lldb::TypeCategoryImplSP 166061da546Spatrick DataVisualization::Categories::GetCategoryAtIndex(size_t index) { 167061da546Spatrick return GetFormatManager().GetCategoryAtIndex(index); 168061da546Spatrick } 169061da546Spatrick 170061da546Spatrick bool DataVisualization::NamedSummaryFormats::GetSummaryFormat( 171061da546Spatrick ConstString type, lldb::TypeSummaryImplSP &entry) { 172*be691f3bSpatrick return GetFormatManager().GetNamedSummaryContainer().GetExact(type, entry); 173061da546Spatrick } 174061da546Spatrick 175061da546Spatrick void DataVisualization::NamedSummaryFormats::Add( 176061da546Spatrick ConstString type, const lldb::TypeSummaryImplSP &entry) { 177*be691f3bSpatrick GetFormatManager().GetNamedSummaryContainer().Add(type, entry); 178061da546Spatrick } 179061da546Spatrick 180061da546Spatrick bool DataVisualization::NamedSummaryFormats::Delete(ConstString type) { 181061da546Spatrick return GetFormatManager().GetNamedSummaryContainer().Delete(type); 182061da546Spatrick } 183061da546Spatrick 184061da546Spatrick void DataVisualization::NamedSummaryFormats::Clear() { 185061da546Spatrick GetFormatManager().GetNamedSummaryContainer().Clear(); 186061da546Spatrick } 187061da546Spatrick 188061da546Spatrick void DataVisualization::NamedSummaryFormats::ForEach( 189*be691f3bSpatrick std::function<bool(const TypeMatcher &, const lldb::TypeSummaryImplSP &)> 190061da546Spatrick callback) { 191061da546Spatrick GetFormatManager().GetNamedSummaryContainer().ForEach(callback); 192061da546Spatrick } 193061da546Spatrick 194061da546Spatrick uint32_t DataVisualization::NamedSummaryFormats::GetCount() { 195061da546Spatrick return GetFormatManager().GetNamedSummaryContainer().GetCount(); 196061da546Spatrick } 197