1 //===-- ThreadSafeDenseSet.h ------------------------------------------*- C++ 2 //-*-===// 3 // 4 // The LLVM Compiler Infrastructure 5 // 6 // This file is distributed under the University of Illinois Open Source 7 // License. See LICENSE.TXT for details. 8 // 9 //===----------------------------------------------------------------------===// 10 11 #ifndef liblldb_ThreadSafeDenseSet_h_ 12 #define liblldb_ThreadSafeDenseSet_h_ 13 14 #include <mutex> 15 16 #include "llvm/ADT/DenseSet.h" 17 18 19 namespace lldb_private { 20 21 template <typename _ElementType, typename _MutexType = std::mutex> 22 class ThreadSafeDenseSet { 23 public: 24 typedef llvm::DenseSet<_ElementType> LLVMSetType; 25 26 ThreadSafeDenseSet(unsigned set_initial_capacity = 0) 27 : m_set(set_initial_capacity), m_mutex() {} 28 29 void Insert(_ElementType e) { 30 std::lock_guard<_MutexType> guard(m_mutex); 31 m_set.insert(e); 32 } 33 34 void Erase(_ElementType e) { 35 std::lock_guard<_MutexType> guard(m_mutex); 36 m_set.erase(e); 37 } 38 39 bool Lookup(_ElementType e) { 40 std::lock_guard<_MutexType> guard(m_mutex); 41 return (m_set.count(e) > 0); 42 } 43 44 void Clear() { 45 std::lock_guard<_MutexType> guard(m_mutex); 46 m_set.clear(); 47 } 48 49 protected: 50 LLVMSetType m_set; 51 _MutexType m_mutex; 52 }; 53 54 } // namespace lldb_private 55 56 #endif // liblldb_ThreadSafeDenseSet_h_ 57