1//===-- TypeCategoryMap.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_TYPECATEGORYMAP_H
10#define LLDB_DATAFORMATTERS_TYPECATEGORYMAP_H
11
12#include <functional>
13#include <list>
14#include <map>
15#include <mutex>
16
17#include "lldb/lldb-enumerations.h"
18#include "lldb/lldb-public.h"
19
20#include "lldb/DataFormatters/FormatClasses.h"
21#include "lldb/DataFormatters/FormattersContainer.h"
22#include "lldb/DataFormatters/TypeCategory.h"
23
24namespace lldb_private {
25class TypeCategoryMap {
26private:
27 typedef std::list<lldb::TypeCategoryImplSP> ActiveCategoriesList;
28 typedef ActiveCategoriesList::iterator ActiveCategoriesIterator;
29
30public:
31 typedef ConstString KeyType;
32 typedef std::map<KeyType, lldb::TypeCategoryImplSP> MapType;
33 typedef MapType::iterator MapIterator;
34 typedef std::function<bool(const lldb::TypeCategoryImplSP &)> ForEachCallback;
35
36 typedef uint32_t Position;
37
38 static const Position First = 0;
39 static const Position Default = 1;
40 static const Position Last = UINT32_MAX;
41
42 TypeCategoryMap(IFormatChangeListener *lst);
43
44 void Add(KeyType name, const lldb::TypeCategoryImplSP &entry);
45
46 bool Delete(KeyType name);
47
48 bool Enable(KeyType category_name, Position pos = Default);
49
50 bool Disable(KeyType category_name);
51
52 bool Enable(lldb::TypeCategoryImplSP category, Position pos = Default);
53
54 bool Disable(lldb::TypeCategoryImplSP category);
55
56 void EnableAllCategories();
57
58 void DisableAllCategories();
59
60 void Clear();
61
62 bool Get(KeyType name, lldb::TypeCategoryImplSP &entry);
63
64 void ForEach(ForEachCallback callback);
65
66 lldb::TypeCategoryImplSP GetAtIndex(uint32_t);
67
68 bool
69 AnyMatches(const FormattersMatchCandidate &candidate_type,
70 TypeCategoryImpl::FormatCategoryItems items =
71 TypeCategoryImpl::ALL_ITEM_TYPES,
72 bool only_enabled = true, const char **matching_category = nullptr,
73 TypeCategoryImpl::FormatCategoryItems *matching_type = nullptr);
74
75 uint32_t GetCount() { return m_map.size(); }
76
77 template <typename ImplSP> void Get(FormattersMatchData &, ImplSP &);
78
79private:
80 class delete_matching_categories {
81 lldb::TypeCategoryImplSP ptr;
82
83 public:
84 delete_matching_categories(lldb::TypeCategoryImplSP p)
85 : ptr(std::move(p)) {}
86
87 bool operator()(const lldb::TypeCategoryImplSP &other) {
88 return ptr.get() == other.get();
89 }
90 };
91
92 std::recursive_mutex m_map_mutex;
93 IFormatChangeListener *listener;
94
95 MapType m_map;
96 ActiveCategoriesList m_active_categories;
97};
98} // namespace lldb_private
99
100#endif // LLDB_DATAFORMATTERS_TYPECATEGORYMAP_H
101

source code of lldb/include/lldb/DataFormatters/TypeCategoryMap.h