24 #ifndef _CORE_UTILS_LOCK_HASHSET_H_
25 #define _CORE_UTILS_LOCK_HASHSET_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_set>
34 #elif __GLIBCXX__ > 20080305
35 # include <tr1/unordered_set>
37 # include <ext/hash_set>
42 template <
class KeyType,
43 #if __cplusplus >= 201103L || defined(_LIBCPP_VERSION)
44 class HashFunction = std::hash<KeyType>,
45 class EqualKey = std::equal_to<KeyType>>
46 class LockHashSet :
public std::unordered_set<KeyType, HashFunction, EqualKey>
47 #elif __GLIBCXX__ > 20080305
48 class HashFunction = std::tr1::hash<KeyType>,
49 class EqualKey = std::equal_to<KeyType>>
50 class LockHashSet :
public std::tr1::unordered_set<KeyType, HashFunction, EqualKey>
52 class HashFunction = gnu_cxx_::hash<KeyType>,
53 class EqualKey = std::equal_to<KeyType>>
54 class
LockHashSet :
public gnu_cxx_::hash_set<KeyType, HashFunction, EqualKey>
87 template <
class KeyType,
class HashFunction,
class EqualKey>
95 template <
class KeyType,
class HashFunction,
class EqualKey>
98 #if __cplusplus >= 201103L || defined(_LIBCPP_VERSION)
99 : std::unordered_set<KeyType, HashFunction, EqualKey>::unordered_set(lh),
100 #elif __GLIBCXX__ > 20080305
101 : std::tr1::unordered_set<KeyType, HashFunction, EqualKey>::unordered_set(lh),
103 : gnu_cxx_::hash_set<KeyType, HashFunction, EqualKey>::hash_set(lh),
110 template <
class KeyType,
class HashFunction,
class EqualKey>
116 template <
class KeyType,
class HashFunction,
class EqualKey>
126 template <
class KeyType,
class HashFunction,
class EqualKey>
130 return mutex_->try_lock();
134 template <
class KeyType,
class HashFunction,
class EqualKey>
138 return mutex_->unlock();
144 template <
class KeyType,
class HashFunction,
class EqualKey>
157 template <
typename KeyType,
class HashFunction,
class EqualKey>
170 template <
typename KeyType,
class HashFunction,
class EqualKey>
179 for (i = ll.begin(); i != ll.end(); ++i) {