15548cb50SEnrico Granata //===-- DataVisualization.cpp ---------------------------------------*- C++ -*-===//
25548cb50SEnrico Granata //
35548cb50SEnrico Granata //                     The LLVM Compiler Infrastructure
45548cb50SEnrico Granata //
55548cb50SEnrico Granata // This file is distributed under the University of Illinois Open Source
65548cb50SEnrico Granata // License. See LICENSE.TXT for details.
75548cb50SEnrico Granata //
85548cb50SEnrico Granata //===----------------------------------------------------------------------===//
95548cb50SEnrico Granata 
105548cb50SEnrico Granata #include "lldb/lldb-python.h"
115548cb50SEnrico Granata 
125548cb50SEnrico Granata #include "lldb/DataFormatters/DataVisualization.h"
135548cb50SEnrico Granata 
145548cb50SEnrico Granata // C Includes
155548cb50SEnrico Granata // C++ Includes
165548cb50SEnrico Granata // Other libraries and framework includes
175548cb50SEnrico Granata // Project includes
185548cb50SEnrico Granata 
195548cb50SEnrico Granata #include "lldb/Core/Debugger.h"
205548cb50SEnrico Granata 
215548cb50SEnrico Granata using namespace lldb;
225548cb50SEnrico Granata using namespace lldb_private;
235548cb50SEnrico Granata 
245548cb50SEnrico Granata static FormatManager&
255548cb50SEnrico Granata GetFormatManager()
265548cb50SEnrico Granata {
275548cb50SEnrico Granata     static FormatManager g_format_manager;
285548cb50SEnrico Granata     return g_format_manager;
295548cb50SEnrico Granata }
305548cb50SEnrico Granata 
315548cb50SEnrico Granata void
325548cb50SEnrico Granata DataVisualization::ForceUpdate ()
335548cb50SEnrico Granata {
345548cb50SEnrico Granata     GetFormatManager().Changed();
355548cb50SEnrico Granata }
365548cb50SEnrico Granata 
375548cb50SEnrico Granata uint32_t
385548cb50SEnrico Granata DataVisualization::GetCurrentRevision ()
395548cb50SEnrico Granata {
405548cb50SEnrico Granata     return GetFormatManager().GetCurrentRevision();
415548cb50SEnrico Granata }
425548cb50SEnrico Granata 
43*a29cb0baSEnrico Granata bool
44*a29cb0baSEnrico Granata DataVisualization::ShouldPrintAsOneLiner (ValueObject& valobj)
45*a29cb0baSEnrico Granata {
46*a29cb0baSEnrico Granata     return GetFormatManager().ShouldPrintAsOneLiner(valobj);
47*a29cb0baSEnrico Granata }
48*a29cb0baSEnrico Granata 
495548cb50SEnrico Granata lldb::TypeFormatImplSP
505548cb50SEnrico Granata DataVisualization::ValueFormats::GetFormat (ValueObject& valobj, lldb::DynamicValueType use_dynamic)
515548cb50SEnrico Granata {
525548cb50SEnrico Granata     lldb::TypeFormatImplSP entry;
535548cb50SEnrico Granata     GetFormatManager().GetValueNavigator().Get(valobj, entry, use_dynamic);
545548cb50SEnrico Granata     return entry;
555548cb50SEnrico Granata }
565548cb50SEnrico Granata 
575548cb50SEnrico Granata lldb::TypeFormatImplSP
585548cb50SEnrico Granata DataVisualization::ValueFormats::GetFormat (const ConstString &type)
595548cb50SEnrico Granata {
605548cb50SEnrico Granata     lldb::TypeFormatImplSP entry;
615548cb50SEnrico Granata     GetFormatManager().GetValueNavigator().Get(type, entry);
625548cb50SEnrico Granata     return entry;
635548cb50SEnrico Granata }
645548cb50SEnrico Granata 
655548cb50SEnrico Granata void
665548cb50SEnrico Granata DataVisualization::ValueFormats::Add (const ConstString &type, const lldb::TypeFormatImplSP &entry)
675548cb50SEnrico Granata {
685548cb50SEnrico Granata     GetFormatManager().GetValueNavigator().Add(FormatManager::GetValidTypeName(type),entry);
695548cb50SEnrico Granata }
705548cb50SEnrico Granata 
715548cb50SEnrico Granata bool
725548cb50SEnrico Granata DataVisualization::ValueFormats::Delete (const ConstString &type)
735548cb50SEnrico Granata {
745548cb50SEnrico Granata     return GetFormatManager().GetValueNavigator().Delete(type);
755548cb50SEnrico Granata }
765548cb50SEnrico Granata 
775548cb50SEnrico Granata void
785548cb50SEnrico Granata DataVisualization::ValueFormats::Clear ()
795548cb50SEnrico Granata {
805548cb50SEnrico Granata     GetFormatManager().GetValueNavigator().Clear();
815548cb50SEnrico Granata }
825548cb50SEnrico Granata 
835548cb50SEnrico Granata void
845548cb50SEnrico Granata DataVisualization::ValueFormats::LoopThrough (TypeFormatImpl::ValueCallback callback, void* callback_baton)
855548cb50SEnrico Granata {
865548cb50SEnrico Granata     GetFormatManager().GetValueNavigator().LoopThrough(callback, callback_baton);
875548cb50SEnrico Granata }
885548cb50SEnrico Granata 
895548cb50SEnrico Granata size_t
905548cb50SEnrico Granata DataVisualization::ValueFormats::GetCount ()
915548cb50SEnrico Granata {
925548cb50SEnrico Granata     return GetFormatManager().GetValueNavigator().GetCount();
935548cb50SEnrico Granata }
945548cb50SEnrico Granata 
955548cb50SEnrico Granata lldb::TypeNameSpecifierImplSP
965548cb50SEnrico Granata DataVisualization::ValueFormats::GetTypeNameSpecifierForFormatAtIndex (size_t index)
975548cb50SEnrico Granata {
985548cb50SEnrico Granata     return GetFormatManager().GetValueNavigator().GetTypeNameSpecifierAtIndex(index);
995548cb50SEnrico Granata }
1005548cb50SEnrico Granata 
1015548cb50SEnrico Granata lldb::TypeFormatImplSP
1025548cb50SEnrico Granata DataVisualization::ValueFormats::GetFormatAtIndex (size_t index)
1035548cb50SEnrico Granata {
1045548cb50SEnrico Granata     return GetFormatManager().GetValueNavigator().GetAtIndex(index);
1055548cb50SEnrico Granata }
1065548cb50SEnrico Granata 
1075548cb50SEnrico Granata lldb::TypeSummaryImplSP
1085548cb50SEnrico Granata DataVisualization::GetSummaryFormat (ValueObject& valobj,
1095548cb50SEnrico Granata                                      lldb::DynamicValueType use_dynamic)
1105548cb50SEnrico Granata {
1115548cb50SEnrico Granata     return GetFormatManager().GetSummaryFormat(valobj, use_dynamic);
1125548cb50SEnrico Granata }
1135548cb50SEnrico Granata 
1145548cb50SEnrico Granata lldb::TypeSummaryImplSP
1155548cb50SEnrico Granata DataVisualization::GetSummaryForType (lldb::TypeNameSpecifierImplSP type_sp)
1165548cb50SEnrico Granata {
1175548cb50SEnrico Granata     return GetFormatManager().GetSummaryForType(type_sp);
1185548cb50SEnrico Granata }
1195548cb50SEnrico Granata 
1205548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON
1215548cb50SEnrico Granata lldb::SyntheticChildrenSP
1225548cb50SEnrico Granata DataVisualization::GetSyntheticChildren (ValueObject& valobj,
1235548cb50SEnrico Granata                                          lldb::DynamicValueType use_dynamic)
1245548cb50SEnrico Granata {
1255548cb50SEnrico Granata     return GetFormatManager().GetSyntheticChildren(valobj, use_dynamic);
1265548cb50SEnrico Granata }
1275548cb50SEnrico Granata #endif
1285548cb50SEnrico Granata 
1295548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON
1305548cb50SEnrico Granata lldb::SyntheticChildrenSP
1315548cb50SEnrico Granata DataVisualization::GetSyntheticChildrenForType (lldb::TypeNameSpecifierImplSP type_sp)
1325548cb50SEnrico Granata {
1335548cb50SEnrico Granata     return GetFormatManager().GetSyntheticChildrenForType(type_sp);
1345548cb50SEnrico Granata }
1355548cb50SEnrico Granata #endif
1365548cb50SEnrico Granata 
1375548cb50SEnrico Granata lldb::TypeFilterImplSP
1385548cb50SEnrico Granata DataVisualization::GetFilterForType (lldb::TypeNameSpecifierImplSP type_sp)
1395548cb50SEnrico Granata {
1405548cb50SEnrico Granata     return GetFormatManager().GetFilterForType(type_sp);
1415548cb50SEnrico Granata }
1425548cb50SEnrico Granata 
1435548cb50SEnrico Granata #ifndef LLDB_DISABLE_PYTHON
1445548cb50SEnrico Granata lldb::ScriptedSyntheticChildrenSP
1455548cb50SEnrico Granata DataVisualization::GetSyntheticForType (lldb::TypeNameSpecifierImplSP type_sp)
1465548cb50SEnrico Granata {
1475548cb50SEnrico Granata     return GetFormatManager().GetSyntheticForType(type_sp);
1485548cb50SEnrico Granata }
1495548cb50SEnrico Granata #endif
1505548cb50SEnrico Granata 
1515548cb50SEnrico Granata bool
1525548cb50SEnrico Granata DataVisualization::AnyMatches (ConstString type_name,
1535548cb50SEnrico Granata                                TypeCategoryImpl::FormatCategoryItems items,
1545548cb50SEnrico Granata                                bool only_enabled,
1555548cb50SEnrico Granata                                const char** matching_category,
1565548cb50SEnrico Granata                                TypeCategoryImpl::FormatCategoryItems* matching_type)
1575548cb50SEnrico Granata {
1585548cb50SEnrico Granata     return GetFormatManager().AnyMatches(type_name,
1595548cb50SEnrico Granata                                          items,
1605548cb50SEnrico Granata                                          only_enabled,
1615548cb50SEnrico Granata                                          matching_category,
1625548cb50SEnrico Granata                                          matching_type);
1635548cb50SEnrico Granata }
1645548cb50SEnrico Granata 
1655548cb50SEnrico Granata bool
1665548cb50SEnrico Granata DataVisualization::Categories::GetCategory (const ConstString &category, lldb::TypeCategoryImplSP &entry,
1675548cb50SEnrico Granata                                             bool allow_create)
1685548cb50SEnrico Granata {
1695548cb50SEnrico Granata     entry = GetFormatManager().GetCategory(category, allow_create);
1705548cb50SEnrico Granata     return (entry.get() != NULL);
1715548cb50SEnrico Granata }
1725548cb50SEnrico Granata 
1735548cb50SEnrico Granata void
1745548cb50SEnrico Granata DataVisualization::Categories::Add (const ConstString &category)
1755548cb50SEnrico Granata {
1765548cb50SEnrico Granata     GetFormatManager().GetCategory(category);
1775548cb50SEnrico Granata }
1785548cb50SEnrico Granata 
1795548cb50SEnrico Granata bool
1805548cb50SEnrico Granata DataVisualization::Categories::Delete (const ConstString &category)
1815548cb50SEnrico Granata {
1825548cb50SEnrico Granata     GetFormatManager().DisableCategory(category);
1835548cb50SEnrico Granata     return GetFormatManager().DeleteCategory(category);
1845548cb50SEnrico Granata }
1855548cb50SEnrico Granata 
1865548cb50SEnrico Granata void
1875548cb50SEnrico Granata DataVisualization::Categories::Clear ()
1885548cb50SEnrico Granata {
1895548cb50SEnrico Granata     GetFormatManager().ClearCategories();
1905548cb50SEnrico Granata }
1915548cb50SEnrico Granata 
1925548cb50SEnrico Granata void
1935548cb50SEnrico Granata DataVisualization::Categories::Clear (const ConstString &category)
1945548cb50SEnrico Granata {
1955548cb50SEnrico Granata     GetFormatManager().GetCategory(category)->Clear(eFormatCategoryItemSummary | eFormatCategoryItemRegexSummary);
1965548cb50SEnrico Granata }
1975548cb50SEnrico Granata 
1985548cb50SEnrico Granata void
1995548cb50SEnrico Granata DataVisualization::Categories::Enable (const ConstString& category,
2005548cb50SEnrico Granata                                        TypeCategoryMap::Position pos)
2015548cb50SEnrico Granata {
2025548cb50SEnrico Granata     if (GetFormatManager().GetCategory(category)->IsEnabled())
2035548cb50SEnrico Granata         GetFormatManager().DisableCategory(category);
2045548cb50SEnrico Granata     GetFormatManager().EnableCategory(category, pos);
2055548cb50SEnrico Granata }
2065548cb50SEnrico Granata 
2075548cb50SEnrico Granata void
2085548cb50SEnrico Granata DataVisualization::Categories::Disable (const ConstString& category)
2095548cb50SEnrico Granata {
2105548cb50SEnrico Granata     if (GetFormatManager().GetCategory(category)->IsEnabled() == true)
2115548cb50SEnrico Granata         GetFormatManager().DisableCategory(category);
2125548cb50SEnrico Granata }
2135548cb50SEnrico Granata 
2145548cb50SEnrico Granata void
2155548cb50SEnrico Granata DataVisualization::Categories::Enable (const lldb::TypeCategoryImplSP& category,
2165548cb50SEnrico Granata                                        TypeCategoryMap::Position pos)
2175548cb50SEnrico Granata {
2185548cb50SEnrico Granata     if (category.get())
2195548cb50SEnrico Granata     {
2205548cb50SEnrico Granata         if (category->IsEnabled())
2215548cb50SEnrico Granata             GetFormatManager().DisableCategory(category);
2225548cb50SEnrico Granata         GetFormatManager().EnableCategory(category, pos);
2235548cb50SEnrico Granata     }
2245548cb50SEnrico Granata }
2255548cb50SEnrico Granata 
2265548cb50SEnrico Granata void
2275548cb50SEnrico Granata DataVisualization::Categories::Disable (const lldb::TypeCategoryImplSP& category)
2285548cb50SEnrico Granata {
2295548cb50SEnrico Granata     if (category.get() && category->IsEnabled() == true)
2305548cb50SEnrico Granata         GetFormatManager().DisableCategory(category);
2315548cb50SEnrico Granata }
2325548cb50SEnrico Granata 
2335548cb50SEnrico Granata void
2345548cb50SEnrico Granata DataVisualization::Categories::LoopThrough (FormatManager::CategoryCallback callback, void* callback_baton)
2355548cb50SEnrico Granata {
2365548cb50SEnrico Granata     GetFormatManager().LoopThroughCategories(callback, callback_baton);
2375548cb50SEnrico Granata }
2385548cb50SEnrico Granata 
2395548cb50SEnrico Granata uint32_t
2405548cb50SEnrico Granata DataVisualization::Categories::GetCount ()
2415548cb50SEnrico Granata {
2425548cb50SEnrico Granata     return GetFormatManager().GetCategoriesCount();
2435548cb50SEnrico Granata }
2445548cb50SEnrico Granata 
2455548cb50SEnrico Granata lldb::TypeCategoryImplSP
2465548cb50SEnrico Granata DataVisualization::Categories::GetCategoryAtIndex (size_t index)
2475548cb50SEnrico Granata {
2485548cb50SEnrico Granata     return GetFormatManager().GetCategoryAtIndex(index);
2495548cb50SEnrico Granata }
2505548cb50SEnrico Granata 
2515548cb50SEnrico Granata bool
2525548cb50SEnrico Granata DataVisualization::NamedSummaryFormats::GetSummaryFormat (const ConstString &type, lldb::TypeSummaryImplSP &entry)
2535548cb50SEnrico Granata {
2545548cb50SEnrico Granata     return GetFormatManager().GetNamedSummaryNavigator().Get(type,entry);
2555548cb50SEnrico Granata }
2565548cb50SEnrico Granata 
2575548cb50SEnrico Granata void
2585548cb50SEnrico Granata DataVisualization::NamedSummaryFormats::Add (const ConstString &type, const lldb::TypeSummaryImplSP &entry)
2595548cb50SEnrico Granata {
2605548cb50SEnrico Granata     GetFormatManager().GetNamedSummaryNavigator().Add(FormatManager::GetValidTypeName(type),entry);
2615548cb50SEnrico Granata }
2625548cb50SEnrico Granata 
2635548cb50SEnrico Granata bool
2645548cb50SEnrico Granata DataVisualization::NamedSummaryFormats::Delete (const ConstString &type)
2655548cb50SEnrico Granata {
2665548cb50SEnrico Granata     return GetFormatManager().GetNamedSummaryNavigator().Delete(type);
2675548cb50SEnrico Granata }
2685548cb50SEnrico Granata 
2695548cb50SEnrico Granata void
2705548cb50SEnrico Granata DataVisualization::NamedSummaryFormats::Clear ()
2715548cb50SEnrico Granata {
2725548cb50SEnrico Granata     GetFormatManager().GetNamedSummaryNavigator().Clear();
2735548cb50SEnrico Granata }
2745548cb50SEnrico Granata 
2755548cb50SEnrico Granata void
2765548cb50SEnrico Granata DataVisualization::NamedSummaryFormats::LoopThrough (TypeSummaryImpl::SummaryCallback callback, void* callback_baton)
2775548cb50SEnrico Granata {
2785548cb50SEnrico Granata     GetFormatManager().GetNamedSummaryNavigator().LoopThrough(callback, callback_baton);
2795548cb50SEnrico Granata }
2805548cb50SEnrico Granata 
2815548cb50SEnrico Granata uint32_t
2825548cb50SEnrico Granata DataVisualization::NamedSummaryFormats::GetCount ()
2835548cb50SEnrico Granata {
2845548cb50SEnrico Granata     return GetFormatManager().GetNamedSummaryNavigator().GetCount();
2855548cb50SEnrico Granata }
286