]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - include/lldb/Core/ThreadSafeDenseMap.h
Import LLDB as of upstream SVN r225923 (git 2b588ecd)
[FreeBSD/FreeBSD.git] / include / lldb / Core / ThreadSafeDenseMap.h
1 //===-- ThreadSafeDenseMap.h ------------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef liblldb_ThreadSafeDenseMap_h_
11 #define liblldb_ThreadSafeDenseMap_h_
12
13 // C Includes
14 // C++ Includes
15
16 // Other libraries and framework includes
17 #include "llvm/ADT/DenseMap.h"
18
19 // Project includes
20 #include "lldb/Host/Mutex.h"
21
22 namespace lldb_private {
23     
24 template <typename _KeyType, typename _ValueType>
25 class ThreadSafeDenseMap
26 {
27 public:
28     typedef llvm::DenseMap<_KeyType,_ValueType> LLVMMapType;
29     
30     ThreadSafeDenseMap(unsigned map_initial_capacity = 0,
31                        Mutex::Type mutex_type = Mutex::eMutexTypeNormal) :
32         m_map(map_initial_capacity),
33         m_mutex(mutex_type)
34     {
35     }
36     
37     void
38     Insert (_KeyType k, _ValueType v)
39     {
40         Mutex::Locker locker(m_mutex);
41         m_map.insert(std::make_pair(k,v));
42     }
43     
44     void
45     Erase (_KeyType k)
46     {
47         Mutex::Locker locker(m_mutex);
48         m_map.erase(k);
49     }
50     
51     _ValueType
52     Lookup (_KeyType k)
53     {
54         Mutex::Locker locker(m_mutex);
55         return m_map.lookup(k);
56     }
57     
58 protected:
59     LLVMMapType m_map;
60     Mutex m_mutex;
61 };
62
63 } // namespace lldb_private
64
65 #endif  // liblldb_ThreadSafeSTLMap_h_