Coverage Report

Created: 2022-01-22 13:19

/Users/buildslave/jenkins/workspace/coverage/llvm-project/lldb/include/lldb/DataFormatters/TypeCategoryMap.h
Line
Count
Source (jump to first uncovered line)
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/FormattersContainer.h"
21
#include "lldb/DataFormatters/TypeCategory.h"
22
23
namespace lldb_private {
24
class TypeCategoryMap {
25
private:
26
  typedef ConstString KeyType;
27
  typedef TypeCategoryImpl ValueType;
28
  typedef ValueType::SharedPointer ValueSP;
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
43
  TypeCategoryMap(IFormatChangeListener *lst);
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,
73
             TypeCategoryImpl::FormatCategoryItems items =
74
                 TypeCategoryImpl::ALL_ITEM_TYPES,
75
             bool only_enabled = true, const char **matching_category = nullptr,
76
             TypeCategoryImpl::FormatCategoryItems *matching_type = nullptr);
77
78
46
  uint32_t GetCount() { return m_map.size(); }
79
80
  template <typename ImplSP> void Get(FormattersMatchData &, ImplSP &);
81
82
private:
83
  class delete_matching_categories {
84
    lldb::TypeCategoryImplSP ptr;
85
86
  public:
87
    delete_matching_categories(lldb::TypeCategoryImplSP p)
88
74
        : ptr(std::move(p)) {}
89
90
298
    bool operator()(const lldb::TypeCategoryImplSP &other) {
91
298
      return ptr.get() == other.get();
92
298
    }
93
  };
94
95
  std::recursive_mutex m_map_mutex;
96
  IFormatChangeListener *listener;
97
98
  MapType m_map;
99
  ActiveCategoriesList m_active_categories;
100
101
0
  MapType &map() { return m_map; }
102
103
0
  ActiveCategoriesList &active_list() { return m_active_categories; }
104
105
0
  std::recursive_mutex &mutex() { return m_map_mutex; }
106
107
  friend class FormattersContainer<ValueType>;
108
  friend class FormatManager;
109
};
110
} // namespace lldb_private
111
112
#endif // LLDB_DATAFORMATTERS_TYPECATEGORYMAP_H