1*b9c1b51eSKate Stone //===-- DataVisualization.cpp ---------------------------------------*- C++ 2*b9c1b51eSKate Stone //-*-===// 35548cb50SEnrico Granata // 45548cb50SEnrico Granata // The LLVM Compiler Infrastructure 55548cb50SEnrico Granata // 65548cb50SEnrico Granata // This file is distributed under the University of Illinois Open Source 75548cb50SEnrico Granata // License. See LICENSE.TXT for details. 85548cb50SEnrico Granata // 95548cb50SEnrico Granata //===----------------------------------------------------------------------===// 105548cb50SEnrico Granata 115548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h" 125548cb50SEnrico Granata 135548cb50SEnrico Granata // C Includes 145548cb50SEnrico Granata // C++ Includes 155548cb50SEnrico Granata // Other libraries and framework includes 165548cb50SEnrico Granata // Project includes 175548cb50SEnrico Granata 185548cb50SEnrico Granata using namespace lldb; 195548cb50SEnrico Granata using namespace lldb_private; 205548cb50SEnrico Granata 21*b9c1b51eSKate Stone static FormatManager &GetFormatManager() { 225548cb50SEnrico Granata static FormatManager g_format_manager; 235548cb50SEnrico Granata return g_format_manager; 245548cb50SEnrico Granata } 255548cb50SEnrico Granata 26*b9c1b51eSKate Stone void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); } 275548cb50SEnrico Granata 28*b9c1b51eSKate Stone uint32_t DataVisualization::GetCurrentRevision() { 295548cb50SEnrico Granata return GetFormatManager().GetCurrentRevision(); 305548cb50SEnrico Granata } 315548cb50SEnrico Granata 32*b9c1b51eSKate Stone bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) { 33a29cb0baSEnrico Granata return GetFormatManager().ShouldPrintAsOneLiner(valobj); 34a29cb0baSEnrico Granata } 35a29cb0baSEnrico Granata 365548cb50SEnrico Granata lldb::TypeFormatImplSP 37*b9c1b51eSKate Stone DataVisualization::GetFormat(ValueObject &valobj, 38*b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 39852cc954SEnrico Granata return GetFormatManager().GetFormat(valobj, use_dynamic); 405548cb50SEnrico Granata } 415548cb50SEnrico Granata 425548cb50SEnrico Granata lldb::TypeFormatImplSP 43*b9c1b51eSKate Stone DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) { 44852cc954SEnrico Granata return GetFormatManager().GetFormatForType(type_sp); 455548cb50SEnrico Granata } 465548cb50SEnrico Granata 475548cb50SEnrico Granata lldb::TypeSummaryImplSP 48*b9c1b51eSKate Stone DataVisualization::GetSummaryFormat(ValueObject &valobj, 49*b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 505548cb50SEnrico Granata return GetFormatManager().GetSummaryFormat(valobj, use_dynamic); 515548cb50SEnrico Granata } 525548cb50SEnrico Granata 535548cb50SEnrico Granata lldb::TypeSummaryImplSP 54*b9c1b51eSKate Stone DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) { 555548cb50SEnrico Granata return GetFormatManager().GetSummaryForType(type_sp); 565548cb50SEnrico Granata } 575548cb50SEnrico Granata 585548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 595548cb50SEnrico Granata lldb::SyntheticChildrenSP 605548cb50SEnrico Granata DataVisualization::GetSyntheticChildren(ValueObject &valobj, 61*b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 625548cb50SEnrico Granata return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic); 635548cb50SEnrico Granata } 645548cb50SEnrico Granata #endif 655548cb50SEnrico Granata 665548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 67*b9c1b51eSKate Stone lldb::SyntheticChildrenSP DataVisualization::GetSyntheticChildrenForType( 68*b9c1b51eSKate Stone lldb::TypeNameSpecifierImplSP type_sp) { 695548cb50SEnrico Granata return GetFormatManager().GetSyntheticChildrenForType(type_sp); 705548cb50SEnrico Granata } 715548cb50SEnrico Granata #endif 725548cb50SEnrico Granata 735548cb50SEnrico Granata lldb::TypeFilterImplSP 74*b9c1b51eSKate Stone DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) { 755548cb50SEnrico Granata return GetFormatManager().GetFilterForType(type_sp); 765548cb50SEnrico Granata } 775548cb50SEnrico Granata 785548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON 795548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP 80*b9c1b51eSKate Stone DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) { 815548cb50SEnrico Granata return GetFormatManager().GetSyntheticForType(type_sp); 825548cb50SEnrico Granata } 835548cb50SEnrico Granata #endif 845548cb50SEnrico Granata 85c582713cSEnrico Granata lldb::TypeValidatorImplSP 86*b9c1b51eSKate Stone DataVisualization::GetValidator(ValueObject &valobj, 87*b9c1b51eSKate Stone lldb::DynamicValueType use_dynamic) { 88c582713cSEnrico Granata return GetFormatManager().GetValidator(valobj, use_dynamic); 89c582713cSEnrico Granata } 90c582713cSEnrico Granata 91c582713cSEnrico Granata lldb::TypeValidatorImplSP 92*b9c1b51eSKate Stone DataVisualization::GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp) { 93c582713cSEnrico Granata return GetFormatManager().GetValidatorForType(type_sp); 94c582713cSEnrico Granata } 95c582713cSEnrico Granata 96*b9c1b51eSKate Stone bool DataVisualization::AnyMatches( 97*b9c1b51eSKate Stone ConstString type_name, TypeCategoryImpl::FormatCategoryItems items, 98*b9c1b51eSKate Stone bool only_enabled, const char **matching_category, 99*b9c1b51eSKate Stone TypeCategoryImpl::FormatCategoryItems *matching_type) { 100*b9c1b51eSKate Stone return GetFormatManager().AnyMatches(type_name, items, only_enabled, 101*b9c1b51eSKate Stone matching_category, matching_type); 1025548cb50SEnrico Granata } 1035548cb50SEnrico Granata 104*b9c1b51eSKate Stone bool DataVisualization::Categories::GetCategory(const ConstString &category, 105*b9c1b51eSKate Stone lldb::TypeCategoryImplSP &entry, 106*b9c1b51eSKate Stone bool allow_create) { 1075548cb50SEnrico Granata entry = GetFormatManager().GetCategory(category, allow_create); 1085548cb50SEnrico Granata return (entry.get() != NULL); 1095548cb50SEnrico Granata } 1105548cb50SEnrico Granata 111*b9c1b51eSKate Stone bool DataVisualization::Categories::GetCategory( 112*b9c1b51eSKate Stone lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) { 113*b9c1b51eSKate Stone if (LanguageCategory *lang_category = 114*b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(language)) 1159eeabff0SEnrico Granata entry = lang_category->GetCategory(); 1169eeabff0SEnrico Granata return (entry.get() != nullptr); 1179eeabff0SEnrico Granata } 1189eeabff0SEnrico Granata 119*b9c1b51eSKate Stone void DataVisualization::Categories::Add(const ConstString &category) { 1205548cb50SEnrico Granata GetFormatManager().GetCategory(category); 1215548cb50SEnrico Granata } 1225548cb50SEnrico Granata 123*b9c1b51eSKate Stone bool DataVisualization::Categories::Delete(const ConstString &category) { 1245548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1255548cb50SEnrico Granata return GetFormatManager().DeleteCategory(category); 1265548cb50SEnrico Granata } 1275548cb50SEnrico Granata 128*b9c1b51eSKate Stone void DataVisualization::Categories::Clear() { 1295548cb50SEnrico Granata GetFormatManager().ClearCategories(); 1305548cb50SEnrico Granata } 1315548cb50SEnrico Granata 132*b9c1b51eSKate Stone void DataVisualization::Categories::Clear(const ConstString &category) { 133*b9c1b51eSKate Stone GetFormatManager().GetCategory(category)->Clear( 134*b9c1b51eSKate Stone eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary); 1355548cb50SEnrico Granata } 1365548cb50SEnrico Granata 137*b9c1b51eSKate Stone void DataVisualization::Categories::Enable(const ConstString &category, 138*b9c1b51eSKate Stone TypeCategoryMap::Position pos) { 1395548cb50SEnrico Granata if (GetFormatManager().GetCategory(category)->IsEnabled()) 1405548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 141*b9c1b51eSKate Stone GetFormatManager().EnableCategory( 142*b9c1b51eSKate Stone category, pos, std::initializer_list<lldb::LanguageType>()); 1435548cb50SEnrico Granata } 1445548cb50SEnrico Granata 145*b9c1b51eSKate Stone void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) { 146*b9c1b51eSKate Stone if (LanguageCategory *lang_category = 147*b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(lang_type)) 148964211f2SEnrico Granata lang_category->Enable(); 149964211f2SEnrico Granata } 150964211f2SEnrico Granata 151*b9c1b51eSKate Stone void DataVisualization::Categories::Disable(const ConstString &category) { 1525548cb50SEnrico Granata if (GetFormatManager().GetCategory(category)->IsEnabled() == true) 1535548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1545548cb50SEnrico Granata } 1555548cb50SEnrico Granata 156*b9c1b51eSKate Stone void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) { 157*b9c1b51eSKate Stone if (LanguageCategory *lang_category = 158*b9c1b51eSKate Stone GetFormatManager().GetCategoryForLanguage(lang_type)) 159964211f2SEnrico Granata lang_category->Disable(); 160964211f2SEnrico Granata } 161964211f2SEnrico Granata 162*b9c1b51eSKate Stone void DataVisualization::Categories::Enable( 163*b9c1b51eSKate Stone const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) { 164*b9c1b51eSKate Stone if (category.get()) { 1655548cb50SEnrico Granata if (category->IsEnabled()) 1665548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1675548cb50SEnrico Granata GetFormatManager().EnableCategory(category, pos); 1685548cb50SEnrico Granata } 1695548cb50SEnrico Granata } 1705548cb50SEnrico Granata 171*b9c1b51eSKate Stone void DataVisualization::Categories::Disable( 172*b9c1b51eSKate Stone const lldb::TypeCategoryImplSP &category) { 1735548cb50SEnrico Granata if (category.get() && category->IsEnabled() == true) 1745548cb50SEnrico Granata GetFormatManager().DisableCategory(category); 1755548cb50SEnrico Granata } 1765548cb50SEnrico Granata 177*b9c1b51eSKate Stone void DataVisualization::Categories::EnableStar() { 178e7687adcSEnrico Granata GetFormatManager().EnableAllCategories(); 179e7687adcSEnrico Granata } 180e7687adcSEnrico Granata 181*b9c1b51eSKate Stone void DataVisualization::Categories::DisableStar() { 182e7687adcSEnrico Granata GetFormatManager().DisableAllCategories(); 183e7687adcSEnrico Granata } 184e7687adcSEnrico Granata 185*b9c1b51eSKate Stone void DataVisualization::Categories::ForEach( 186*b9c1b51eSKate Stone TypeCategoryMap::ForEachCallback callback) { 187b56d0103SEnrico Granata GetFormatManager().ForEachCategory(callback); 188b56d0103SEnrico Granata } 189b56d0103SEnrico Granata 190*b9c1b51eSKate Stone uint32_t DataVisualization::Categories::GetCount() { 1915548cb50SEnrico Granata return GetFormatManager().GetCategoriesCount(); 1925548cb50SEnrico Granata } 1935548cb50SEnrico Granata 1945548cb50SEnrico Granata lldb::TypeCategoryImplSP 195*b9c1b51eSKate Stone DataVisualization::Categories::GetCategoryAtIndex(size_t index) { 1965548cb50SEnrico Granata return GetFormatManager().GetCategoryAtIndex(index); 1975548cb50SEnrico Granata } 1985548cb50SEnrico Granata 199*b9c1b51eSKate Stone bool DataVisualization::NamedSummaryFormats::GetSummaryFormat( 200*b9c1b51eSKate Stone const ConstString &type, lldb::TypeSummaryImplSP &entry) { 201b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().Get(type, entry); 2025548cb50SEnrico Granata } 2035548cb50SEnrico Granata 204*b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::Add( 205*b9c1b51eSKate Stone const ConstString &type, const lldb::TypeSummaryImplSP &entry) { 206*b9c1b51eSKate Stone GetFormatManager().GetNamedSummaryContainer().Add( 207*b9c1b51eSKate Stone FormatManager::GetValidTypeName(type), entry); 2085548cb50SEnrico Granata } 2095548cb50SEnrico Granata 210*b9c1b51eSKate Stone bool DataVisualization::NamedSummaryFormats::Delete(const ConstString &type) { 211b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().Delete(type); 2125548cb50SEnrico Granata } 2135548cb50SEnrico Granata 214*b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::Clear() { 215b72a501dSEnrico Granata GetFormatManager().GetNamedSummaryContainer().Clear(); 2165548cb50SEnrico Granata } 2175548cb50SEnrico Granata 218*b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::ForEach( 219*b9c1b51eSKate Stone std::function<bool(ConstString, const lldb::TypeSummaryImplSP &)> 220*b9c1b51eSKate Stone callback) { 2213de08c5fSEnrico Granata GetFormatManager().GetNamedSummaryContainer().ForEach(callback); 2225548cb50SEnrico Granata } 2235548cb50SEnrico Granata 224*b9c1b51eSKate Stone uint32_t DataVisualization::NamedSummaryFormats::GetCount() { 225b72a501dSEnrico Granata return GetFormatManager().GetNamedSummaryContainer().GetCount(); 2265548cb50SEnrico Granata } 227