LLDB mainline
ThreadSafeDenseMap.h
Go to the documentation of this file.
1//===-- ThreadSafeDenseMap.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_UTILITY_THREADSAFEDENSEMAP_H
10#define LLDB_UTILITY_THREADSAFEDENSEMAP_H
11
12#include <mutex>
13
14#include "llvm/ADT/DenseMap.h"
15
16namespace lldb_private {
17
18template <typename _KeyType, typename _ValueType> class ThreadSafeDenseMap {
19public:
20 typedef llvm::DenseMap<_KeyType, _ValueType> LLVMMapType;
21
22 ThreadSafeDenseMap(unsigned map_initial_capacity = 0)
23 : m_map(map_initial_capacity), m_mutex() {}
24
25 void Insert(_KeyType k, _ValueType v) {
26 std::lock_guard<std::mutex> guard(m_mutex);
27 m_map.insert(std::make_pair(k, v));
28 }
29
30 void Erase(_KeyType k) {
31 std::lock_guard<std::mutex> guard(m_mutex);
32 m_map.erase(k);
33 }
34
35 _ValueType Lookup(_KeyType k) {
36 std::lock_guard<std::mutex> guard(m_mutex);
37 return m_map.lookup(k);
38 }
39
40 bool Lookup(_KeyType k, _ValueType &v) {
41 std::lock_guard<std::mutex> guard(m_mutex);
42 auto iter = m_map.find(k), end = m_map.end();
43 if (iter == end)
44 return false;
45 v = iter->second;
46 return true;
47 }
48
49 void Clear() {
50 std::lock_guard<std::mutex> guard(m_mutex);
51 m_map.clear();
52 }
53
54protected:
56 std::mutex m_mutex;
57};
58
59} // namespace lldb_private
60
61#endif // LLDB_UTILITY_THREADSAFEDENSEMAP_H
void Insert(_KeyType k, _ValueType v)
ThreadSafeDenseMap(unsigned map_initial_capacity=0)
llvm::DenseMap< _KeyType, _ValueType > LLVMMapType
bool Lookup(_KeyType k, _ValueType &v)
A class that represents a running process on the host machine.