1 //===-- DataVisualization.h -------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLDB_DATAFORMATTERS_DATAVISUALIZATION_H
10 #define LLDB_DATAFORMATTERS_DATAVISUALIZATION_H
11 
12 #include "lldb/DataFormatters/FormatClasses.h"
13 #include "lldb/DataFormatters/FormatManager.h"
14 #include "lldb/Utility/ConstString.h"
15 
16 namespace lldb_private {
17 
18 // this class is the high-level front-end of LLDB Data Visualization code in
19 // FormatManager.h/cpp is the low-level implementation of this feature clients
20 // should refer to this class as the entry-point into the data formatters
21 // unless they have a good reason to bypass this and go to the backend
22 class DataVisualization {
23 public:
24   // use this call to force the FM to consider itself updated even when there
25   // is no apparent reason for that
26   static void ForceUpdate();
27 
28   static uint32_t GetCurrentRevision();
29 
30   static bool ShouldPrintAsOneLiner(ValueObject &valobj);
31 
32   static lldb::TypeFormatImplSP GetFormat(ValueObject &valobj,
33                                           lldb::DynamicValueType use_dynamic);
34 
35   static lldb::TypeFormatImplSP
36   GetFormatForType(lldb::TypeNameSpecifierImplSP type_sp);
37 
38   static lldb::TypeSummaryImplSP
39   GetSummaryFormat(ValueObject &valobj, lldb::DynamicValueType use_dynamic);
40 
41   static lldb::TypeSummaryImplSP
42   GetSummaryForType(lldb::TypeNameSpecifierImplSP type_sp);
43 
44   static lldb::TypeFilterImplSP
45   GetFilterForType(lldb::TypeNameSpecifierImplSP type_sp);
46 
47   static lldb::ScriptedSyntheticChildrenSP
48   GetSyntheticForType(lldb::TypeNameSpecifierImplSP type_sp);
49 
50   static lldb::SyntheticChildrenSP
51   GetSyntheticChildren(ValueObject &valobj, lldb::DynamicValueType use_dynamic);
52 
53   static bool
54   AnyMatches(const FormattersMatchCandidate &candidate_type,
55              TypeCategoryImpl::FormatCategoryItems items =
56                  TypeCategoryImpl::ALL_ITEM_TYPES,
57              bool only_enabled = true, const char **matching_category = nullptr,
58              TypeCategoryImpl::FormatCategoryItems *matching_type = nullptr);
59 
60   class NamedSummaryFormats {
61   public:
62     static bool GetSummaryFormat(ConstString type,
63                                  lldb::TypeSummaryImplSP &entry);
64 
65     static void Add(ConstString type,
66                     const lldb::TypeSummaryImplSP &entry);
67 
68     static bool Delete(ConstString type);
69 
70     static void Clear();
71 
72     static void ForEach(std::function<bool(const TypeMatcher &,
73                                            const lldb::TypeSummaryImplSP &)>
74                             callback);
75 
76     static uint32_t GetCount();
77   };
78 
79   class Categories {
80   public:
81     static bool GetCategory(ConstString category,
82                             lldb::TypeCategoryImplSP &entry,
83                             bool allow_create = true);
84 
85     static bool GetCategory(lldb::LanguageType language,
86                             lldb::TypeCategoryImplSP &entry);
87 
88     static void Add(ConstString category);
89 
90     static bool Delete(ConstString category);
91 
92     static void Clear();
93 
94     static void Clear(ConstString category);
95 
96     static void Enable(ConstString category,
97                        TypeCategoryMap::Position = TypeCategoryMap::Default);
98 
99     static void Enable(lldb::LanguageType lang_type);
100 
101     static void Disable(ConstString category);
102 
103     static void Disable(lldb::LanguageType lang_type);
104 
105     static void Enable(const lldb::TypeCategoryImplSP &category,
106                        TypeCategoryMap::Position = TypeCategoryMap::Default);
107 
108     static void Disable(const lldb::TypeCategoryImplSP &category);
109 
110     static void EnableStar();
111 
112     static void DisableStar();
113 
114     static void ForEach(TypeCategoryMap::ForEachCallback callback);
115 
116     static uint32_t GetCount();
117 
118     static lldb::TypeCategoryImplSP GetCategoryAtIndex(size_t);
119   };
120 };
121 
122 } // namespace lldb_private
123 
124 #endif // LLDB_DATAFORMATTERS_DATAVISUALIZATION_H
125