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