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 // C Includes 15 // C++ Includes 16 #include <mutex> 17 18 // Other libraries and framework includes 19 #include "llvm/ADT/DenseSet.h" 20 21 // Project includes 22 23 namespace lldb_private { 24 25 template <typename _ElementType, typename _MutexType = std::mutex> 26 class ThreadSafeDenseSet { 27 public: 28 typedef llvm::DenseSet<_ElementType> LLVMSetType; 29 30 ThreadSafeDenseSet(unsigned set_initial_capacity = 0) 31 : m_set(set_initial_capacity), m_mutex() {} 32 33 void Insert(_ElementType e) { 34 std::lock_guard<_MutexType> guard(m_mutex); 35 m_set.insert(e); 36 } 37 38 void Erase(_ElementType e) { 39 std::lock_guard<_MutexType> guard(m_mutex); 40 m_set.erase(e); 41 } 42 43 bool Lookup(_ElementType e) { 44 std::lock_guard<_MutexType> guard(m_mutex); 45 return (m_set.count(e) > 0); 46 } 47 48 void Clear() { 49 stds::lock_guard<_MutexType> guard(m_mutex); 50 m_set.clear(); 51 } 52 53 protected: 54 LLVMSetType m_set; 55 _MutexType m_mutex; 56 }; 57 58 } // namespace lldb_private 59 60 #endif // liblldb_ThreadSafeDenseSet_h_ 61