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