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>
31 #if __cplusplus >= 201103L || defined(_LIBCPP_VERSION)
32 # include <functional>
33 # include <unordered_map>
34 #elif __GLIBCXX__ > 20080305
35 # include <tr1/unordered_map>
37 # 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>
60 LockHashMap(
const LockHashMap<KeyType, ValueType, HashFunction, EqualKey> &lh);
86 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
94 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
97 #if __cplusplus >= 201103L || defined(_LIBCPP_VERSION)
98 : std::unordered_map<KeyType, ValueType, HashFunction, EqualKey>::unordered_map(lh)
99 #elif __GLIBCXX__ > 20080305
100 : std::tr1::unordered_map<KeyType, ValueType, HashFunction, EqualKey>::unordered_map(lh)
102 : gnu_cxx_::hash_map<KeyType, ValueType, HashFunction, EqualKey>::hash_map(lh)
110 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
116 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
126 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
130 return mutex_->try_lock();
134 template <
class KeyType,
class ValueType,
class HashFunction,
class EqualKey>
138 return mutex_->unlock();
145 template <
typename KeyType,
typename ValueType,
class HashFunction,
typename EqualKey>
158 template <
typename KeyType,
typename ValueType,
class HashFunction,
typename EqualKey>
167 for (i = ll.begin(); i != ll.end(); ++i) {