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