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>
30 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)
31 # include <tr1/unordered_set>
33 # include <ext/hash_set>
39 template <
class KeyType,
40 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)
41 class HashFunction = std::tr1::hash<KeyType>,
42 class EqualKey = std::equal_to<KeyType> >
43 class LockHashSet :
public std::tr1::unordered_set<KeyType, HashFunction, EqualKey>
45 class HashFunction = __gnu_cxx::hash<KeyType>,
46 class EqualKey = std::equal_to<KeyType> >
47 class
LockHashSet :
public __gnu_cxx::hash_set<KeyType, HashFunction, EqualKey>
83 template <
class KeyType,
class HashFunction,
class EqualKey>
85 : __mutex(new
Mutex())
92 template <
class KeyType,
class HashFunction,
class EqualKey>
94 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 2)
95 : std::tr1::unordered_set<KeyType, HashFunction, EqualKey>::unordered_set(lh),
97 : __gnu_cxx::hash_set<KeyType, HashFunction, EqualKey>::hash_set(lh),
104 template <
class KeyType,
class HashFunction,
class EqualKey>
110 template <
class KeyType,
class HashFunction,
class EqualKey>
121 template <
class KeyType,
class HashFunction,
class EqualKey>
125 return __mutex->try_lock();
130 template <
class KeyType,
class HashFunction,
class EqualKey>
134 return __mutex->unlock();
141 template <
class KeyType,
class HashFunction,
class EqualKey>
155 template <
typename KeyType,
class HashFunction,
class EqualKey>
168 template <
typename KeyType,
class HashFunction,
class EqualKey>
177 for (i = ll.begin(); i != ll.end(); ++i) {