24 #ifndef __CORE_UTILS_LOCK_HASHMAP_H_ 25 #define __CORE_UTILS_LOCK_HASHMAP_H_ 27 #include <core/threading/mutex.h> 28 #include <core/utils/refptr.h> 30 #if __cplusplus >= 201103L || defined(_LIBCPP_VERSION) 31 # include <unordered_map> 32 # include <functional> 33 #elif __GLIBCXX__ > 20080305 34 # include <tr1/unordered_map> 36 # include <ext/hash_map> 42 template <
class KeyType,
44 #if __cplusplus >= 201103L || defined(_LIBCPP_VERSION) 45 class HashFunction = std::hash<KeyType>,
46 class EqualKey = std::equal_to<KeyType> >
47 class LockHashMap :
public std::unordered_map<KeyType, ValueType, HashFunction, EqualKey>
48 #elif __GLIBCXX__ > 20080305 49 class HashFunction = std::tr1::hash<KeyType>,
50 class EqualKey = std::equal_to<KeyType> >
51 class LockHashMap :
public std::tr1::unordered_map<KeyType, ValueType, HashFunction, EqualKey>
53 class HashFunction = __gnu_cxx::hash<KeyType>,
54 class EqualKey = std::equal_to<KeyType> >
55 class
LockHashMap :
public __gnu_cxx::hash_map<KeyType, ValueType, HashFunction, EqualKey>
89 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
91 : __mutex(new
Mutex())
99 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
101 #if __cplusplus >= 201103L || defined(_LIBCPP_VERSION) 102 : std::unordered_map<KeyType, ValueType, HashFunction, EqualKey>::unordered_map(lh)
103 #elif __GLIBCXX__ > 20080305 104 : std::tr1::unordered_map<KeyType, ValueType, HashFunction, EqualKey>::unordered_map(lh)
106 : __gnu_cxx::hash_map<KeyType, ValueType, HashFunction, EqualKey>::hash_map(lh)
108 , __mutex(
new Mutex())
114 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
121 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
132 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
141 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
153 template <
typename KeyType,
typename ValueType,
class HashFunction,
typename EqualKey>
167 template <
typename KeyType,
typename ValueType,
class HashFunction,
typename EqualKey>
176 for (i = ll.begin(); i != ll.end(); ++i) {
LockHashMap< KeyType, ValueType, HashFunction, EqualKey > & operator=(const LockHashMap< KeyType, ValueType, HashFunction, EqualKey > &ll)
Copy values from another LockHashMap.
RefPtr< Mutex > mutex() const
Get access to the internal mutex.
Fawkes library namespace.
LockHashMap()
Constructor.
virtual ~LockHashMap()
Destructor.
RefPtr<> is a reference-counting shared smartpointer.
bool try_lock() const
Try to lock map.
void unlock() const
Unlock map.
Mutex mutual exclusion lock.
void lock() const
Lock map.