1b9c1b51eSKate Stone //===-- DataVisualization.cpp ---------------------------------------*- C++ 2b9c1b51eSKate Stone //-*-===// 35548cb50SEnrico Granata // 4*2946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*2946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 6*2946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 75548cb50SEnrico Granata // 85548cb50SEnrico Granata //===----------------------------------------------------------------------===// 95548cb50SEnrico Granata 105548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h" 115548cb50SEnrico Granata 125548cb50SEnrico Granata 135548cb50SEnrico Granata using namespace lldb; 145548cb50SEnrico Granata using namespace lldb_private; 155548cb50SEnrico Granata 16b9c1b51eSKate Stone static FormatManager &GetFormatManager() { 175548cb50SEnrico Granata static FormatManager g_format_manager; 185548cb50SEnrico Granata return g_format_manager; 195548cb50SEnrico Granata } 205548cb50SEnrico Granata 21b9c1b51eSKate Stone void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); } 225548cb50SEnrico Granata 23b9c1b51eSKate Stone uint32_t DataVisualization::GetCurrentRevision() { 245548cb50SEnrico Granata return GetFormatManager().GetCurrentRevision(); 255548cb50SEnrico Granata } 265548cb50SEnrico Granata 27b9c1b51eSKate Stone bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) { 28a29cb0baSEnrico Granata return GetFormatManager().ShouldPrintAsOneLiner(valobj); 29a29cb0baSEnrico Granata } 30a29cb0baSEnrico Granata 315548cb50SEnrico Granata lldb::TypeFormatImplSP 32b9c1b51eSKate Stone DataVisualization::GetFormat(ValueObject &valobj, 33b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 34852cc954SEnrico Granata return GetFormatManager().GetFormat(valobj, use_dynamic); 355548cb50SEnrico Granata } 365548cb50SEnrico Granata 375548cb50SEnrico Granata lldb::TypeFormatImplSP 38b9c1b51eSKate Stone DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) { 39852cc954SEnrico Granata return GetFormatManager().GetFormatForType(type_sp); 405548cb50SEnrico Granata } 415548cb50SEnrico Granata 425548cb50SEnrico Granata lldb::TypeSummaryImplSP 43b9c1b51eSKate Stone DataVisualization::GetSummaryFormat(ValueObject &valobj, 44b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 455548cb50SEnrico Granata return GetFormatManager().GetSummaryFormat(valobj, use_dynamic); 465548cb50SEnrico Granata } 475548cb50SEnrico Granata 485548cb50SEnrico Granata lldb::TypeSummaryImplSP 49b9c1b51eSKate Stone DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) { 505548cb50SEnrico Granata return GetFormatManager().GetSummaryForType(type_sp); 515548cb50SEnrico Granata } 525548cb50SEnrico Granata 535548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 545548cb50SEnrico Granata lldb::SyntheticChildrenSP 555548cb50SEnrico Granata DataVisualization::GetSyntheticChildren(ValueObject &valobj, 56b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 575548cb50SEnrico Granata return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic); 585548cb50SEnrico Granata } 595548cb50SEnrico Granata #endif 605548cb50SEnrico Granata 615548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 62b9c1b51eSKate Stone lldb::SyntheticChildrenSP DataVisualization::GetSyntheticChildrenForType( 63b9c1b51eSKate Stone lldb::TypeNameSpecifierImplSP type_sp) { 645548cb50SEnrico Granata return GetFormatManager().GetSyntheticChildrenForType(type_sp); 655548cb50SEnrico Granata } 665548cb50SEnrico Granata #endif 675548cb50SEnrico Granata 685548cb50SEnrico Granata lldb::TypeFilterImplSP 69b9c1b51eSKate Stone DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) { 705548cb50SEnrico Granata return GetFormatManager().GetFilterForType(type_sp); 715548cb50SEnrico Granata } 725548cb50SEnrico Granata 735548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 745548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP 75b9c1b51eSKate Stone DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) { 765548cb50SEnrico Granata return GetFormatManager().GetSyntheticForType(type_sp); 775548cb50SEnrico Granata } 785548cb50SEnrico Granata #endif 795548cb50SEnrico Granata 80c582713cSEnrico Granata lldb::TypeValidatorImplSP 81b9c1b51eSKate Stone DataVisualization::GetValidator(ValueObject &valobj, 82b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 83c582713cSEnrico Granata return GetFormatManager().GetValidator(valobj, use_dynamic); 84c582713cSEnrico Granata } 85c582713cSEnrico Granata 86c582713cSEnrico Granata lldb::TypeValidatorImplSP 87b9c1b51eSKate Stone DataVisualization::GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp) { 88c582713cSEnrico Granata return GetFormatManager().GetValidatorForType(type_sp); 89c582713cSEnrico Granata } 90c582713cSEnrico Granata 91b9c1b51eSKate Stone bool DataVisualization::AnyMatches( 92b9c1b51eSKate Stone ConstString type_name, TypeCategoryImpl::FormatCategoryItems items, 93b9c1b51eSKate Stone bool only_enabled, const char **matching_category, 94b9c1b51eSKate Stone TypeCategoryImpl::FormatCategoryItems *matching_type) { 95b9c1b51eSKate Stone return GetFormatManager().AnyMatches(type_name, items, only_enabled, 96b9c1b51eSKate Stone matching_category, matching_type); 975548cb50SEnrico Granata } 985548cb50SEnrico Granata 99b9c1b51eSKate Stone bool DataVisualization::Categories::GetCategory(const ConstString &category, 100b9c1b51eSKate Stone lldb::TypeCategoryImplSP &entry, 101b9c1b51eSKate Stone bool allow_create) { 1025548cb50SEnrico Granata entry = GetFormatManager().GetCategory(category, allow_create); 1035548cb50SEnrico Granata return (entry.get() != NULL); 1045548cb50SEnrico Granata } 1055548cb50SEnrico Granata 106b9c1b51eSKate Stone bool DataVisualization::Categories::GetCategory( 107b9c1b51eSKate Stone lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) { 108b9c1b51eSKate Stone if (LanguageCategory *lang_category = 109b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(language)) 1109eeabff0SEnrico Granata entry = lang_category->GetCategory(); 1119eeabff0SEnrico Granata return (entry.get() != nullptr); 1129eeabff0SEnrico Granata } 1139eeabff0SEnrico Granata 114b9c1b51eSKate Stone void DataVisualization::Categories::Add(const ConstString &category) { 1155548cb50SEnrico Granata GetFormatManager().GetCategory(category); 1165548cb50SEnrico Granata } 1175548cb50SEnrico Granata 118b9c1b51eSKate Stone bool DataVisualization::Categories::Delete(const ConstString &category) { 1195548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1205548cb50SEnrico Granata return GetFormatManager().DeleteCategory(category); 1215548cb50SEnrico Granata } 1225548cb50SEnrico Granata 123b9c1b51eSKate Stone void DataVisualization::Categories::Clear() { 1245548cb50SEnrico Granata GetFormatManager().ClearCategories(); 1255548cb50SEnrico Granata } 1265548cb50SEnrico Granata 127b9c1b51eSKate Stone void DataVisualization::Categories::Clear(const ConstString &category) { 128b9c1b51eSKate Stone GetFormatManager().GetCategory(category)->Clear( 129b9c1b51eSKate Stone eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary); 1305548cb50SEnrico Granata } 1315548cb50SEnrico Granata 132b9c1b51eSKate Stone void DataVisualization::Categories::Enable(const ConstString &category, 133b9c1b51eSKate Stone TypeCategoryMap::Position pos) { 1345548cb50SEnrico Granata if (GetFormatManager().GetCategory(category)->IsEnabled()) 1355548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 136b9c1b51eSKate Stone GetFormatManager().EnableCategory( 137b9c1b51eSKate Stone category, pos, std::initializer_list<lldb::LanguageType>()); 1385548cb50SEnrico Granata } 1395548cb50SEnrico Granata 140b9c1b51eSKate Stone void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) { 141b9c1b51eSKate Stone if (LanguageCategory *lang_category = 142b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(lang_type)) 143964211f2SEnrico Granata lang_category->Enable(); 144964211f2SEnrico Granata } 145964211f2SEnrico Granata 146b9c1b51eSKate Stone void DataVisualization::Categories::Disable(const ConstString &category) { 147a6682a41SJonas Devlieghere if (GetFormatManager().GetCategory(category)->IsEnabled()) 1485548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1495548cb50SEnrico Granata } 1505548cb50SEnrico Granata 151b9c1b51eSKate Stone void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) { 152b9c1b51eSKate Stone if (LanguageCategory *lang_category = 153b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(lang_type)) 154964211f2SEnrico Granata lang_category->Disable(); 155964211f2SEnrico Granata } 156964211f2SEnrico Granata 157b9c1b51eSKate Stone void DataVisualization::Categories::Enable( 158b9c1b51eSKate Stone const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) { 159b9c1b51eSKate Stone if (category.get()) { 1605548cb50SEnrico Granata if (category->IsEnabled()) 1615548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1625548cb50SEnrico Granata GetFormatManager().EnableCategory(category, pos); 1635548cb50SEnrico Granata } 1645548cb50SEnrico Granata } 1655548cb50SEnrico Granata 166b9c1b51eSKate Stone void DataVisualization::Categories::Disable( 167b9c1b51eSKate Stone const lldb::TypeCategoryImplSP &category) { 168a6682a41SJonas Devlieghere if (category.get() && category->IsEnabled()) 1695548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1705548cb50SEnrico Granata } 1715548cb50SEnrico Granata 172b9c1b51eSKate Stone void DataVisualization::Categories::EnableStar() { 173e7687adcSEnrico Granata GetFormatManager().EnableAllCategories(); 174e7687adcSEnrico Granata } 175e7687adcSEnrico Granata 176b9c1b51eSKate Stone void DataVisualization::Categories::DisableStar() { 177e7687adcSEnrico Granata GetFormatManager().DisableAllCategories(); 178e7687adcSEnrico Granata } 179e7687adcSEnrico Granata 180b9c1b51eSKate Stone void DataVisualization::Categories::ForEach( 181b9c1b51eSKate Stone TypeCategoryMap::ForEachCallback callback) { 182b56d0103SEnrico Granata GetFormatManager().ForEachCategory(callback); 183b56d0103SEnrico Granata } 184b56d0103SEnrico Granata 185b9c1b51eSKate Stone uint32_t DataVisualization::Categories::GetCount() { 1865548cb50SEnrico Granata return GetFormatManager().GetCategoriesCount(); 1875548cb50SEnrico Granata } 1885548cb50SEnrico Granata 1895548cb50SEnrico Granata lldb::TypeCategoryImplSP 190b9c1b51eSKate Stone DataVisualization::Categories::GetCategoryAtIndex(size_t index) { 1915548cb50SEnrico Granata return GetFormatManager().GetCategoryAtIndex(index); 1925548cb50SEnrico Granata } 1935548cb50SEnrico Granata 194b9c1b51eSKate Stone bool DataVisualization::NamedSummaryFormats::GetSummaryFormat( 195b9c1b51eSKate Stone const ConstString &type, lldb::TypeSummaryImplSP &entry) { 196b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().Get(type, entry); 1975548cb50SEnrico Granata } 1985548cb50SEnrico Granata 199b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::Add( 200b9c1b51eSKate Stone const ConstString &type, const lldb::TypeSummaryImplSP &entry) { 201b9c1b51eSKate Stone GetFormatManager().GetNamedSummaryContainer().Add( 202b9c1b51eSKate Stone FormatManager::GetValidTypeName(type), entry); 2035548cb50SEnrico Granata } 2045548cb50SEnrico Granata 205b9c1b51eSKate Stone bool DataVisualization::NamedSummaryFormats::Delete(const ConstString &type) { 206b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().Delete(type); 2075548cb50SEnrico Granata } 2085548cb50SEnrico Granata 209b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::Clear() { 210b72a501dSEnrico Granata GetFormatManager().GetNamedSummaryContainer().Clear(); 2115548cb50SEnrico Granata } 2125548cb50SEnrico Granata 213b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::ForEach( 214b9c1b51eSKate Stone std::function<bool(ConstString, const lldb::TypeSummaryImplSP &)> 215b9c1b51eSKate Stone callback) { 2163de08c5fSEnrico Granata GetFormatManager().GetNamedSummaryContainer().ForEach(callback); 2175548cb50SEnrico Granata } 2185548cb50SEnrico Granata 219b9c1b51eSKate Stone uint32_t DataVisualization::NamedSummaryFormats::GetCount() { 220b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().GetCount(); 2215548cb50SEnrico Granata } 222