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 16 namespace lldb_private { 17 18 template <typename _KeyType, typename _ValueType> class ThreadSafeDenseMap { 19 public: 20 typedef llvm::DenseMap<_KeyType, _ValueType> LLVMMapType; 21 22 ThreadSafeDenseMap(unsigned map_initial_capacity = 0) m_map(map_initial_capacity)23 : m_map(map_initial_capacity), m_mutex() {} 24 Insert(_KeyType k,_ValueType v)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 Erase(_KeyType k)30 void Erase(_KeyType k) { 31 std::lock_guard<std::mutex> guard(m_mutex); 32 m_map.erase(k); 33 } 34 Lookup(_KeyType k)35 _ValueType Lookup(_KeyType k) { 36 std::lock_guard<std::mutex> guard(m_mutex); 37 return m_map.lookup(k); 38 } 39 Lookup(_KeyType k,_ValueType & v)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 Clear()49 void Clear() { 50 std::lock_guard<std::mutex> guard(m_mutex); 51 m_map.clear(); 52 } 53 54 protected: 55 LLVMMapType m_map; 56 std::mutex m_mutex; 57 }; 58 59 } // namespace lldb_private 60 61 #endif // LLDB_UTILITY_THREADSAFEDENSEMAP_H 62