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)
33# include <unordered_set>
34#elif __GLIBCXX__ > 20080305
35# include <tr1/unordered_set>
37# include <ext/hash_set>
42template <
class KeyType,
43#if __cplusplus >= 201103L || defined(_LIBCPP_VERSION)
44 class HashFunction = std::hash<KeyType>,
45 class EqualKey = std::equal_to<KeyType>>
46class 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>>
50class LockHashSet :
public std::tr1::unordered_set<KeyType, HashFunction, EqualKey>
52 class HashFunction = gnu_cxx_::hash<KeyType>,
53 class EqualKey = std::equal_to<KeyType>>
54class
LockHashSet :
public gnu_cxx_::hash_set<KeyType, HashFunction, EqualKey>
87template <
class KeyType,
class HashFunction,
class EqualKey>
95template <
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),
110template <
class KeyType,
class HashFunction,
class EqualKey>
116template <
class KeyType,
class HashFunction,
class EqualKey>
126template <
class KeyType,
class HashFunction,
class EqualKey>
130 return mutex_->try_lock();
134template <
class KeyType,
class HashFunction,
class EqualKey>
138 return mutex_->unlock();
144template <
class KeyType,
class HashFunction,
class EqualKey>
157template <
typename KeyType,
class HashFunction,
class EqualKey>
170template <
typename KeyType,
class HashFunction,
class EqualKey>
179 for (i = ll.begin(); i != ll.end(); ++i) {
LockHashSet()
Constructor.
void insert_locked(const KeyType &x)
Insert element to hash set with lock protection.
virtual ~LockHashSet()
Destructor.
void lock() const
Lock set.
RefPtr< Mutex > mutex() const
Get access to the internal mutex.
void unlock() const
Unlock set.
LockHashSet(const LockHashSet< KeyType, HashFunction, EqualKey > &lh)
Copy constructor.
bool try_lock() const
Try to lock set.
LockHashSet< KeyType, HashFunction, EqualKey > & operator=(const LockHashSet< KeyType, HashFunction, EqualKey > &ll)
Copy values from another LockHashSet.
Mutex mutual exclusion lock.
RefPtr<> is a reference-counting shared smartpointer.
Fawkes library namespace.