180814287SRaphael Isemann //===-- DataVisualization.cpp ---------------------------------------------===// 25548cb50SEnrico Granata // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 65548cb50SEnrico Granata // 75548cb50SEnrico Granata //===----------------------------------------------------------------------===// 85548cb50SEnrico Granata 95548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h" 105548cb50SEnrico Granata 115548cb50SEnrico Granata 125548cb50SEnrico Granata using namespace lldb; 135548cb50SEnrico Granata using namespace lldb_private; 145548cb50SEnrico Granata 15b9c1b51eSKate Stone static FormatManager &GetFormatManager() { 165548cb50SEnrico Granata static FormatManager g_format_manager; 175548cb50SEnrico Granata return g_format_manager; 185548cb50SEnrico Granata } 195548cb50SEnrico Granata 20b9c1b51eSKate Stone void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); } 215548cb50SEnrico Granata 22b9c1b51eSKate Stone uint32_t DataVisualization::GetCurrentRevision() { 235548cb50SEnrico Granata return GetFormatManager().GetCurrentRevision(); 245548cb50SEnrico Granata } 255548cb50SEnrico Granata 26b9c1b51eSKate Stone bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) { 27a29cb0baSEnrico Granata return GetFormatManager().ShouldPrintAsOneLiner(valobj); 28a29cb0baSEnrico Granata } 29a29cb0baSEnrico Granata 305548cb50SEnrico Granata lldb::TypeFormatImplSP 31b9c1b51eSKate Stone DataVisualization::GetFormat(ValueObject &valobj, 32b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 33852cc954SEnrico Granata return GetFormatManager().GetFormat(valobj, use_dynamic); 345548cb50SEnrico Granata } 355548cb50SEnrico Granata 365548cb50SEnrico Granata lldb::TypeFormatImplSP 37b9c1b51eSKate Stone DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) { 38852cc954SEnrico Granata return GetFormatManager().GetFormatForType(type_sp); 395548cb50SEnrico Granata } 405548cb50SEnrico Granata 415548cb50SEnrico Granata lldb::TypeSummaryImplSP 42b9c1b51eSKate Stone DataVisualization::GetSummaryFormat(ValueObject &valobj, 43b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 445548cb50SEnrico Granata return GetFormatManager().GetSummaryFormat(valobj, use_dynamic); 455548cb50SEnrico Granata } 465548cb50SEnrico Granata 475548cb50SEnrico Granata lldb::TypeSummaryImplSP 48b9c1b51eSKate Stone DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) { 495548cb50SEnrico Granata return GetFormatManager().GetSummaryForType(type_sp); 505548cb50SEnrico Granata } 515548cb50SEnrico Granata 525548cb50SEnrico Granata lldb::SyntheticChildrenSP 535548cb50SEnrico Granata DataVisualization::GetSyntheticChildren(ValueObject &valobj, 54b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 555548cb50SEnrico Granata return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic); 565548cb50SEnrico Granata } 575548cb50SEnrico Granata 585548cb50SEnrico Granata lldb::TypeFilterImplSP 59b9c1b51eSKate Stone DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) { 605548cb50SEnrico Granata return GetFormatManager().GetFilterForType(type_sp); 615548cb50SEnrico Granata } 625548cb50SEnrico Granata 635548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP 64b9c1b51eSKate Stone DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) { 655548cb50SEnrico Granata return GetFormatManager().GetSyntheticForType(type_sp); 665548cb50SEnrico Granata } 675548cb50SEnrico Granata 68b9c1b51eSKate Stone bool DataVisualization::AnyMatches( 69b9c1b51eSKate Stone ConstString type_name, TypeCategoryImpl::FormatCategoryItems items, 70b9c1b51eSKate Stone bool only_enabled, const char **matching_category, 71b9c1b51eSKate Stone TypeCategoryImpl::FormatCategoryItems *matching_type) { 72b9c1b51eSKate Stone return GetFormatManager().AnyMatches(type_name, items, only_enabled, 73b9c1b51eSKate Stone matching_category, matching_type); 745548cb50SEnrico Granata } 755548cb50SEnrico Granata 760e4c4821SAdrian Prantl bool DataVisualization::Categories::GetCategory(ConstString category, 77b9c1b51eSKate Stone lldb::TypeCategoryImplSP &entry, 78b9c1b51eSKate Stone bool allow_create) { 795548cb50SEnrico Granata entry = GetFormatManager().GetCategory(category, allow_create); 80248a1305SKonrad Kleine return (entry.get() != nullptr); 815548cb50SEnrico Granata } 825548cb50SEnrico Granata 83b9c1b51eSKate Stone bool DataVisualization::Categories::GetCategory( 84b9c1b51eSKate Stone lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) { 85b9c1b51eSKate Stone if (LanguageCategory *lang_category = 86b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(language)) 879eeabff0SEnrico Granata entry = lang_category->GetCategory(); 889eeabff0SEnrico Granata return (entry.get() != nullptr); 899eeabff0SEnrico Granata } 909eeabff0SEnrico Granata 910e4c4821SAdrian Prantl void DataVisualization::Categories::Add(ConstString category) { 925548cb50SEnrico Granata GetFormatManager().GetCategory(category); 935548cb50SEnrico Granata } 945548cb50SEnrico Granata 950e4c4821SAdrian Prantl bool DataVisualization::Categories::Delete(ConstString category) { 965548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 975548cb50SEnrico Granata return GetFormatManager().DeleteCategory(category); 985548cb50SEnrico Granata } 995548cb50SEnrico Granata 100b9c1b51eSKate Stone void DataVisualization::Categories::Clear() { 1015548cb50SEnrico Granata GetFormatManager().ClearCategories(); 1025548cb50SEnrico Granata } 1035548cb50SEnrico Granata 1040e4c4821SAdrian Prantl void DataVisualization::Categories::Clear(ConstString category) { 105b9c1b51eSKate Stone GetFormatManager().GetCategory(category)->Clear( 106b9c1b51eSKate Stone eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary); 1075548cb50SEnrico Granata } 1085548cb50SEnrico Granata 1090e4c4821SAdrian Prantl void DataVisualization::Categories::Enable(ConstString category, 110b9c1b51eSKate Stone TypeCategoryMap::Position pos) { 1115548cb50SEnrico Granata if (GetFormatManager().GetCategory(category)->IsEnabled()) 1125548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 11389618a7cSDavide Italiano GetFormatManager().EnableCategory(category, pos, {}); 1145548cb50SEnrico Granata } 1155548cb50SEnrico Granata 116b9c1b51eSKate Stone void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) { 117b9c1b51eSKate Stone if (LanguageCategory *lang_category = 118b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(lang_type)) 119964211f2SEnrico Granata lang_category->Enable(); 120964211f2SEnrico Granata } 121964211f2SEnrico Granata 1220e4c4821SAdrian Prantl void DataVisualization::Categories::Disable(ConstString category) { 123a6682a41SJonas Devlieghere if (GetFormatManager().GetCategory(category)->IsEnabled()) 1245548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1255548cb50SEnrico Granata } 1265548cb50SEnrico Granata 127b9c1b51eSKate Stone void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) { 128b9c1b51eSKate Stone if (LanguageCategory *lang_category = 129b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(lang_type)) 130964211f2SEnrico Granata lang_category->Disable(); 131964211f2SEnrico Granata } 132964211f2SEnrico Granata 133b9c1b51eSKate Stone void DataVisualization::Categories::Enable( 134b9c1b51eSKate Stone const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) { 135b9c1b51eSKate Stone if (category.get()) { 1365548cb50SEnrico Granata if (category->IsEnabled()) 1375548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1385548cb50SEnrico Granata GetFormatManager().EnableCategory(category, pos); 1395548cb50SEnrico Granata } 1405548cb50SEnrico Granata } 1415548cb50SEnrico Granata 142b9c1b51eSKate Stone void DataVisualization::Categories::Disable( 143b9c1b51eSKate Stone const lldb::TypeCategoryImplSP &category) { 144a6682a41SJonas Devlieghere if (category.get() && category->IsEnabled()) 1455548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1465548cb50SEnrico Granata } 1475548cb50SEnrico Granata 148b9c1b51eSKate Stone void DataVisualization::Categories::EnableStar() { 149e7687adcSEnrico Granata GetFormatManager().EnableAllCategories(); 150e7687adcSEnrico Granata } 151e7687adcSEnrico Granata 152b9c1b51eSKate Stone void DataVisualization::Categories::DisableStar() { 153e7687adcSEnrico Granata GetFormatManager().DisableAllCategories(); 154e7687adcSEnrico Granata } 155e7687adcSEnrico Granata 156b9c1b51eSKate Stone void DataVisualization::Categories::ForEach( 157b9c1b51eSKate Stone TypeCategoryMap::ForEachCallback callback) { 158b56d0103SEnrico Granata GetFormatManager().ForEachCategory(callback); 159b56d0103SEnrico Granata } 160b56d0103SEnrico Granata 161b9c1b51eSKate Stone uint32_t DataVisualization::Categories::GetCount() { 1625548cb50SEnrico Granata return GetFormatManager().GetCategoriesCount(); 1635548cb50SEnrico Granata } 1645548cb50SEnrico Granata 1655548cb50SEnrico Granata lldb::TypeCategoryImplSP 166b9c1b51eSKate Stone DataVisualization::Categories::GetCategoryAtIndex(size_t index) { 1675548cb50SEnrico Granata return GetFormatManager().GetCategoryAtIndex(index); 1685548cb50SEnrico Granata } 1695548cb50SEnrico Granata 170b9c1b51eSKate Stone bool DataVisualization::NamedSummaryFormats::GetSummaryFormat( 1710e4c4821SAdrian Prantl ConstString type, lldb::TypeSummaryImplSP &entry) { 172b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().Get(type, entry); 1735548cb50SEnrico Granata } 1745548cb50SEnrico Granata 175b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::Add( 1760e4c4821SAdrian Prantl ConstString type, const lldb::TypeSummaryImplSP &entry) { 177*4d489e9fSRaphael Isemann GetFormatManager().GetNamedSummaryContainer().Add(type, entry); 1785548cb50SEnrico Granata } 1795548cb50SEnrico Granata 1800e4c4821SAdrian Prantl bool DataVisualization::NamedSummaryFormats::Delete(ConstString type) { 181b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().Delete(type); 1825548cb50SEnrico Granata } 1835548cb50SEnrico Granata 184b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::Clear() { 185b72a501dSEnrico Granata GetFormatManager().GetNamedSummaryContainer().Clear(); 1865548cb50SEnrico Granata } 1875548cb50SEnrico Granata 188b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::ForEach( 189*4d489e9fSRaphael Isemann std::function<bool(const TypeMatcher &, const lldb::TypeSummaryImplSP &)> 190b9c1b51eSKate Stone callback) { 1913de08c5fSEnrico Granata GetFormatManager().GetNamedSummaryContainer().ForEach(callback); 1925548cb50SEnrico Granata } 1935548cb50SEnrico Granata 194b9c1b51eSKate Stone uint32_t DataVisualization::NamedSummaryFormats::GetCount() { 195b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().GetCount(); 1965548cb50SEnrico Granata } 197