LLDB  mainline
TypeCategoryMap.h
Go to the documentation of this file.
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 
22 
23 namespace lldb_private {
25 private:
29  typedef std::list<lldb::TypeCategoryImplSP> ActiveCategoriesList;
30  typedef ActiveCategoriesList::iterator ActiveCategoriesIterator;
31 
32 public:
33  typedef std::map<KeyType, ValueSP> MapType;
34  typedef MapType::iterator MapIterator;
35  typedef std::function<bool(const ValueSP &)> ForEachCallback;
36 
37  typedef uint32_t Position;
38 
39  static const Position First = 0;
40  static const Position Default = 1;
41  static const Position Last = UINT32_MAX;
42 
44 
45  void Add(KeyType name, const ValueSP &entry);
46 
47  bool Delete(KeyType name);
48 
49  bool Enable(KeyType category_name, Position pos = Default);
50 
51  bool Disable(KeyType category_name);
52 
53  bool Enable(ValueSP category, Position pos = Default);
54 
55  bool Disable(ValueSP category);
56 
57  void EnableAllCategories();
58 
59  void DisableAllCategories();
60 
61  void Clear();
62 
63  bool Get(KeyType name, ValueSP &entry);
64 
65  bool Get(uint32_t pos, ValueSP &entry);
66 
67  void ForEach(ForEachCallback callback);
68 
69  lldb::TypeCategoryImplSP GetAtIndex(uint32_t);
70 
71  bool
72  AnyMatches(ConstString type_name,
75  bool only_enabled = true, const char **matching_category = nullptr,
76  TypeCategoryImpl::FormatCategoryItems *matching_type = nullptr);
77 
78  uint32_t GetCount() { return m_map.size(); }
79 
80  template <typename ImplSP> void Get(FormattersMatchData &, ImplSP &);
81 
82 private:
84  lldb::TypeCategoryImplSP ptr;
85 
86  public:
87  delete_matching_categories(lldb::TypeCategoryImplSP p) : ptr(p) {}
88 
89  bool operator()(const lldb::TypeCategoryImplSP &other) {
90  return ptr.get() == other.get();
91  }
92  };
93 
94  std::recursive_mutex m_map_mutex;
96 
97  MapType m_map;
98  ActiveCategoriesList m_active_categories;
99 
100  MapType &map() { return m_map; }
101 
102  ActiveCategoriesList &active_list() { return m_active_categories; }
103 
104  std::recursive_mutex &mutex() { return m_map_mutex; }
105 
106  friend class FormattersContainer<KeyType, ValueType>;
107  friend class FormatManager;
108 };
109 } // namespace lldb_private
110 
111 #endif // LLDB_DATAFORMATTERS_TYPECATEGORYMAP_H
ValueType::SharedPointer ValueSP
A class that represents a running process on the host machine.
static const uint16_t ALL_ITEM_TYPES
Definition: TypeCategory.h:74
std::recursive_mutex m_map_mutex
static const Position First
ActiveCategoriesList::iterator ActiveCategoriesIterator
bool Disable(KeyType category_name)
std::shared_ptr< TypeCategoryImpl > SharedPointer
Definition: TypeCategory.h:318
TypeCategoryMap(IFormatChangeListener *lst)
ActiveCategoriesList m_active_categories
std::list< lldb::TypeCategoryImplSP > ActiveCategoriesList
static const Position Default
bool AnyMatches(ConstString type_name, TypeCategoryImpl::FormatCategoryItems items=TypeCategoryImpl::ALL_ITEM_TYPES, bool only_enabled=true, const char **matching_category=nullptr, TypeCategoryImpl::FormatCategoryItems *matching_type=nullptr)
#define UINT32_MAX
Definition: lldb-defines.h:31
std::function< bool(const ValueSP &)> ForEachCallback
lldb::TypeCategoryImplSP GetAtIndex(uint32_t)
ActiveCategoriesList & active_list()
void Add(KeyType name, const ValueSP &entry)
IFormatChangeListener * listener
std::map< KeyType, ValueSP > MapType
A uniqued constant string class.
Definition: ConstString.h:40
void ForEach(ForEachCallback callback)
static const Position Last
bool operator()(const lldb::TypeCategoryImplSP &other)
bool Get(KeyType name, ValueSP &entry)
bool Enable(KeyType category_name, Position pos=Default)
std::recursive_mutex & mutex()