1b9c1b51eSKate Stone //===-- DataVisualization.cpp ---------------------------------------*- C++
2b9c1b51eSKate 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 
145548cb50SEnrico Granata using namespace lldb;
155548cb50SEnrico Granata using namespace lldb_private;
165548cb50SEnrico Granata 
17b9c1b51eSKate Stone static FormatManager &GetFormatManager() {
185548cb50SEnrico Granata   static FormatManager g_format_manager;
195548cb50SEnrico Granata   return g_format_manager;
205548cb50SEnrico Granata }
215548cb50SEnrico Granata 
22b9c1b51eSKate Stone void DataVisualization::ForceUpdate() { GetFormatManager().Changed(); }
235548cb50SEnrico Granata 
24b9c1b51eSKate Stone uint32_t DataVisualization::GetCurrentRevision() {
255548cb50SEnrico Granata   return GetFormatManager().GetCurrentRevision();
265548cb50SEnrico Granata }
275548cb50SEnrico Granata 
28b9c1b51eSKate Stone bool DataVisualization::ShouldPrintAsOneLiner(ValueObject &valobj) {
29a29cb0baSEnrico Granata   return GetFormatManager().ShouldPrintAsOneLiner(valobj);
30a29cb0baSEnrico Granata }
31a29cb0baSEnrico Granata 
325548cb50SEnrico Granata lldb::TypeFormatImplSP
33b9c1b51eSKate Stone DataVisualization::GetFormat(ValueObject &valobj,
34b9c1b51eSKate Stone                              lldb::DynamicValueType use_dynamic) {
35852cc954SEnrico Granata   return GetFormatManager().GetFormat(valobj, use_dynamic);
365548cb50SEnrico Granata }
375548cb50SEnrico Granata 
385548cb50SEnrico Granata lldb::TypeFormatImplSP
39b9c1b51eSKate Stone DataVisualization::GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp) {
40852cc954SEnrico Granata   return GetFormatManager().GetFormatForType(type_sp);
415548cb50SEnrico Granata }
425548cb50SEnrico Granata 
435548cb50SEnrico Granata lldb::TypeSummaryImplSP
44b9c1b51eSKate Stone DataVisualization::GetSummaryFormat(ValueObject &valobj,
45b9c1b51eSKate Stone                                     lldb::DynamicValueType use_dynamic) {
465548cb50SEnrico Granata   return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
475548cb50SEnrico Granata }
485548cb50SEnrico Granata 
495548cb50SEnrico Granata lldb::TypeSummaryImplSP
50b9c1b51eSKate Stone DataVisualization::GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp) {
515548cb50SEnrico Granata   return GetFormatManager().GetSummaryForType(type_sp);
525548cb50SEnrico Granata }
535548cb50SEnrico Granata 
545548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON
555548cb50SEnrico Granata lldb::SyntheticChildrenSP
565548cb50SEnrico Granata DataVisualization::GetSyntheticChildren(ValueObject &valobj,
57b9c1b51eSKate Stone                                         lldb::DynamicValueType use_dynamic) {
585548cb50SEnrico Granata   return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
595548cb50SEnrico Granata }
605548cb50SEnrico Granata #endif
615548cb50SEnrico Granata 
625548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON
63b9c1b51eSKate Stone lldb::SyntheticChildrenSP DataVisualization::GetSyntheticChildrenForType(
64b9c1b51eSKate Stone     lldb::TypeNameSpecifierImplSP type_sp) {
655548cb50SEnrico Granata   return GetFormatManager().GetSyntheticChildrenForType(type_sp);
665548cb50SEnrico Granata }
675548cb50SEnrico Granata #endif
685548cb50SEnrico Granata 
695548cb50SEnrico Granata lldb::TypeFilterImplSP
70b9c1b51eSKate Stone DataVisualization::GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp) {
715548cb50SEnrico Granata   return GetFormatManager().GetFilterForType(type_sp);
725548cb50SEnrico Granata }
735548cb50SEnrico Granata 
745548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON
755548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP
76b9c1b51eSKate Stone DataVisualization::GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp) {
775548cb50SEnrico Granata   return GetFormatManager().GetSyntheticForType(type_sp);
785548cb50SEnrico Granata }
795548cb50SEnrico Granata #endif
805548cb50SEnrico Granata 
81c582713cSEnrico Granata lldb::TypeValidatorImplSP
82b9c1b51eSKate Stone DataVisualization::GetValidator(ValueObject &valobj,
83b9c1b51eSKate Stone                                 lldb::DynamicValueType use_dynamic) {
84c582713cSEnrico Granata   return GetFormatManager().GetValidator(valobj, use_dynamic);
85c582713cSEnrico Granata }
86c582713cSEnrico Granata 
87c582713cSEnrico Granata lldb::TypeValidatorImplSP
88b9c1b51eSKate Stone DataVisualization::GetValidatorForType(lldb::TypeNameSpecifierImplSP type_sp) {
89c582713cSEnrico Granata   return GetFormatManager().GetValidatorForType(type_sp);
90c582713cSEnrico Granata }
91c582713cSEnrico Granata 
92b9c1b51eSKate Stone bool DataVisualization::AnyMatches(
93b9c1b51eSKate Stone     ConstString type_name, TypeCategoryImpl::FormatCategoryItems items,
94b9c1b51eSKate Stone     bool only_enabled, const char **matching_category,
95b9c1b51eSKate Stone     TypeCategoryImpl::FormatCategoryItems *matching_type) {
96b9c1b51eSKate Stone   return GetFormatManager().AnyMatches(type_name, items, only_enabled,
97b9c1b51eSKate Stone                                        matching_category, matching_type);
985548cb50SEnrico Granata }
995548cb50SEnrico Granata 
100b9c1b51eSKate Stone bool DataVisualization::Categories::GetCategory(const ConstString &category,
101b9c1b51eSKate Stone                                                 lldb::TypeCategoryImplSP &entry,
102b9c1b51eSKate Stone                                                 bool allow_create) {
1035548cb50SEnrico Granata   entry = GetFormatManager().GetCategory(category, allow_create);
1045548cb50SEnrico Granata   return (entry.get() != NULL);
1055548cb50SEnrico Granata }
1065548cb50SEnrico Granata 
107b9c1b51eSKate Stone bool DataVisualization::Categories::GetCategory(
108b9c1b51eSKate Stone     lldb::LanguageType language, lldb::TypeCategoryImplSP &entry) {
109b9c1b51eSKate Stone   if (LanguageCategory *lang_category =
110b9c1b51eSKate Stone           GetFormatManager().GetCategoryForLanguage(language))
1119eeabff0SEnrico Granata     entry = lang_category->GetCategory();
1129eeabff0SEnrico Granata   return (entry.get() != nullptr);
1139eeabff0SEnrico Granata }
1149eeabff0SEnrico Granata 
115b9c1b51eSKate Stone void DataVisualization::Categories::Add(const ConstString &category) {
1165548cb50SEnrico Granata   GetFormatManager().GetCategory(category);
1175548cb50SEnrico Granata }
1185548cb50SEnrico Granata 
119b9c1b51eSKate Stone bool DataVisualization::Categories::Delete(const ConstString &category) {
1205548cb50SEnrico Granata   GetFormatManager().DisableCategory(category);
1215548cb50SEnrico Granata   return GetFormatManager().DeleteCategory(category);
1225548cb50SEnrico Granata }
1235548cb50SEnrico Granata 
124b9c1b51eSKate Stone void DataVisualization::Categories::Clear() {
1255548cb50SEnrico Granata   GetFormatManager().ClearCategories();
1265548cb50SEnrico Granata }
1275548cb50SEnrico Granata 
128b9c1b51eSKate Stone void DataVisualization::Categories::Clear(const ConstString &category) {
129b9c1b51eSKate Stone   GetFormatManager().GetCategory(category)->Clear(
130b9c1b51eSKate Stone       eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
1315548cb50SEnrico Granata }
1325548cb50SEnrico Granata 
133b9c1b51eSKate Stone void DataVisualization::Categories::Enable(const ConstString &category,
134b9c1b51eSKate Stone                                            TypeCategoryMap::Position pos) {
1355548cb50SEnrico Granata   if (GetFormatManager().GetCategory(category)->IsEnabled())
1365548cb50SEnrico Granata     GetFormatManager().DisableCategory(category);
137b9c1b51eSKate Stone   GetFormatManager().EnableCategory(
138b9c1b51eSKate Stone       category, pos, std::initializer_list<lldb::LanguageType>());
1395548cb50SEnrico Granata }
1405548cb50SEnrico Granata 
141b9c1b51eSKate Stone void DataVisualization::Categories::Enable(lldb::LanguageType lang_type) {
142b9c1b51eSKate Stone   if (LanguageCategory *lang_category =
143b9c1b51eSKate Stone           GetFormatManager().GetCategoryForLanguage(lang_type))
144964211f2SEnrico Granata     lang_category->Enable();
145964211f2SEnrico Granata }
146964211f2SEnrico Granata 
147b9c1b51eSKate Stone void DataVisualization::Categories::Disable(const ConstString &category) {
148*a6682a41SJonas Devlieghere   if (GetFormatManager().GetCategory(category)->IsEnabled())
1495548cb50SEnrico Granata     GetFormatManager().DisableCategory(category);
1505548cb50SEnrico Granata }
1515548cb50SEnrico Granata 
152b9c1b51eSKate Stone void DataVisualization::Categories::Disable(lldb::LanguageType lang_type) {
153b9c1b51eSKate Stone   if (LanguageCategory *lang_category =
154b9c1b51eSKate Stone           GetFormatManager().GetCategoryForLanguage(lang_type))
155964211f2SEnrico Granata     lang_category->Disable();
156964211f2SEnrico Granata }
157964211f2SEnrico Granata 
158b9c1b51eSKate Stone void DataVisualization::Categories::Enable(
159b9c1b51eSKate Stone     const lldb::TypeCategoryImplSP &category, TypeCategoryMap::Position pos) {
160b9c1b51eSKate Stone   if (category.get()) {
1615548cb50SEnrico Granata     if (category->IsEnabled())
1625548cb50SEnrico Granata       GetFormatManager().DisableCategory(category);
1635548cb50SEnrico Granata     GetFormatManager().EnableCategory(category, pos);
1645548cb50SEnrico Granata   }
1655548cb50SEnrico Granata }
1665548cb50SEnrico Granata 
167b9c1b51eSKate Stone void DataVisualization::Categories::Disable(
168b9c1b51eSKate Stone     const lldb::TypeCategoryImplSP &category) {
169*a6682a41SJonas Devlieghere   if (category.get() && category->IsEnabled())
1705548cb50SEnrico Granata     GetFormatManager().DisableCategory(category);
1715548cb50SEnrico Granata }
1725548cb50SEnrico Granata 
173b9c1b51eSKate Stone void DataVisualization::Categories::EnableStar() {
174e7687adcSEnrico Granata   GetFormatManager().EnableAllCategories();
175e7687adcSEnrico Granata }
176e7687adcSEnrico Granata 
177b9c1b51eSKate Stone void DataVisualization::Categories::DisableStar() {
178e7687adcSEnrico Granata   GetFormatManager().DisableAllCategories();
179e7687adcSEnrico Granata }
180e7687adcSEnrico Granata 
181b9c1b51eSKate Stone void DataVisualization::Categories::ForEach(
182b9c1b51eSKate Stone     TypeCategoryMap::ForEachCallback callback) {
183b56d0103SEnrico Granata   GetFormatManager().ForEachCategory(callback);
184b56d0103SEnrico Granata }
185b56d0103SEnrico Granata 
186b9c1b51eSKate Stone uint32_t DataVisualization::Categories::GetCount() {
1875548cb50SEnrico Granata   return GetFormatManager().GetCategoriesCount();
1885548cb50SEnrico Granata }
1895548cb50SEnrico Granata 
1905548cb50SEnrico Granata lldb::TypeCategoryImplSP
191b9c1b51eSKate Stone DataVisualization::Categories::GetCategoryAtIndex(size_t index) {
1925548cb50SEnrico Granata   return GetFormatManager().GetCategoryAtIndex(index);
1935548cb50SEnrico Granata }
1945548cb50SEnrico Granata 
195b9c1b51eSKate Stone bool DataVisualization::NamedSummaryFormats::GetSummaryFormat(
196b9c1b51eSKate Stone     const ConstString &type, lldb::TypeSummaryImplSP &entry) {
197b72a501dSEnrico Granata   return GetFormatManager().GetNamedSummaryContainer().Get(type, entry);
1985548cb50SEnrico Granata }
1995548cb50SEnrico Granata 
200b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::Add(
201b9c1b51eSKate Stone     const ConstString &type, const lldb::TypeSummaryImplSP &entry) {
202b9c1b51eSKate Stone   GetFormatManager().GetNamedSummaryContainer().Add(
203b9c1b51eSKate Stone       FormatManager::GetValidTypeName(type), entry);
2045548cb50SEnrico Granata }
2055548cb50SEnrico Granata 
206b9c1b51eSKate Stone bool DataVisualization::NamedSummaryFormats::Delete(const ConstString &type) {
207b72a501dSEnrico Granata   return GetFormatManager().GetNamedSummaryContainer().Delete(type);
2085548cb50SEnrico Granata }
2095548cb50SEnrico Granata 
210b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::Clear() {
211b72a501dSEnrico Granata   GetFormatManager().GetNamedSummaryContainer().Clear();
2125548cb50SEnrico Granata }
2135548cb50SEnrico Granata 
214b9c1b51eSKate Stone void DataVisualization::NamedSummaryFormats::ForEach(
215b9c1b51eSKate Stone     std::function<bool(ConstString, const lldb::TypeSummaryImplSP &)>
216b9c1b51eSKate Stone         callback) {
2173de08c5fSEnrico Granata   GetFormatManager().GetNamedSummaryContainer().ForEach(callback);
2185548cb50SEnrico Granata }
2195548cb50SEnrico Granata 
220b9c1b51eSKate Stone uint32_t DataVisualization::NamedSummaryFormats::GetCount() {
221b72a501dSEnrico Granata   return GetFormatManager().GetNamedSummaryContainer().GetCount();
2225548cb50SEnrico Granata }
223