Coverage Report

Created: 2023-09-30 09:22

/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/FormatClasses.h"
21
#include "lldb/DataFormatters/FormattersContainer.h"
22
#include "lldb/DataFormatters/TypeCategory.h"
23
24
namespace lldb_private {
25
class TypeCategoryMap {
26
private:
27
  typedef std::list<lldb::TypeCategoryImplSP> ActiveCategoriesList;
28
  typedef ActiveCategoriesList::iterator ActiveCategoriesIterator;
29
30
public:
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
31
  uint32_t GetCount() { return m_map.size(); }
76
77
  template <typename ImplSP> void Get(FormattersMatchData &, ImplSP &);
78
79
private:
80
  class delete_matching_categories {
81
    lldb::TypeCategoryImplSP ptr;
82
83
  public:
84
    delete_matching_categories(lldb::TypeCategoryImplSP p)
85
52
        : ptr(std::move(p)) {}
86
87
210
    bool operator()(const lldb::TypeCategoryImplSP &other) {
88
210
      return ptr.get() == other.get();
89
210
    }
90
  };
91
92
  std::recursive_mutex m_map_mutex;
93
  IFormatChangeListener *listener;
94
95
  MapType m_map;
96
  ActiveCategoriesList m_active_categories;
97
98
0
  MapType &map() { return m_map; }
99
100
0
  ActiveCategoriesList &active_list() { return m_active_categories; }
101
102
0
  std::recursive_mutex &mutex() { return m_map_mutex; }
103
};
104
} // namespace lldb_private
105
106
#endif // LLDB_DATAFORMATTERS_TYPECATEGORYMAP_H