30#ifndef HORIZON_CORE_MULTITHREADING_LOCKEDLOOKUPTABLE_HPP
31#define HORIZON_CORE_MULTITHREADING_LOCKEDLOOKUPTABLE_HPP
35#include <boost/thread/shared_mutex.hpp>
36#include <boost/thread.hpp>
42template <
typename Key,
typename Value,
typename Hash = std::hash<Key>>
54 for (
unsigned i = 0; i < num_buckets; ++i)
63 Value
at(Key
const &key, Value
const &default_value = Value())
const
68 void insert(
const Key &key,
const Value &value)
80 std::map<Key, Value> res;
82 for (
unsigned i = 0; i <
_buckets.size(); ++i) {
83 boost::unique_lock<boost::shared_mutex> lock(
_buckets[i]->_mutex);
98 std::size_t
count = 0;
100 for (
unsigned i = 0; i <
_buckets.size(); ++i) {
101 boost::unique_lock<boost::shared_mutex> lock(
_buckets[i]->_mutex);
114 for (
unsigned i = 0; i <
_buckets.size(); ++i) {
115 boost::unique_lock<boost::shared_mutex> lock(
_buckets[i]->_mutex);
121 std::vector<std::unique_ptr<bucket_type>>
_buckets;
138 Value
at(Key
const &key, Value
const &default_value)
140 boost::shared_lock<boost::shared_mutex> lock(
_mutex);
142 return (found_entry ==
data.end()) ? default_value : found_entry->second;
145 void insert(Key
const &key, Value
const &value)
147 boost::unique_lock<boost::shared_mutex> lock(
_mutex);
150 if (found_entry !=
data.end())
151 data.erase(found_entry);
158 boost::unique_lock<boost::shared_mutex> lock(
_mutex);
160 if (found_entry !=
data.end())
161 data.erase(found_entry);
170 return std::find_if(
data.begin(),
data.end(),
173 return item.first == key;
Definition: LockedLookupTable.hpp:131
bucket_data data
Definition: LockedLookupTable.hpp:164
void erase(Key const &key)
Definition: LockedLookupTable.hpp:156
void insert(Key const &key, Value const &value)
Definition: LockedLookupTable.hpp:145
Value at(Key const &key, Value const &default_value)
Definition: LockedLookupTable.hpp:138
bucket_data::iterator bucket_iterator
Definition: LockedLookupTable.hpp:136
bucket_iterator find_entry_for(Key const &key)
Definition: LockedLookupTable.hpp:168
std::vector< bucket_value > bucket_data
Definition: LockedLookupTable.hpp:133
boost::shared_mutex _mutex
Definition: LockedLookupTable.hpp:165
std::pair< Key, Value > bucket_value
Definition: LockedLookupTable.hpp:132
Definition: LockedLookupTable.hpp:44
void clear()
Definition: LockedLookupTable.hpp:112
Value const & operator[](Key &k)
Definition: LockedLookupTable.hpp:61
int max_collisions()
Definition: LockedLookupTable.hpp:94
void insert(const Key &key, const Value &value)
Definition: LockedLookupTable.hpp:68
Key key_type
Definition: LockedLookupTable.hpp:47
LockedLookupTable(unsigned num_buckets=19, const Hash &hasher_=Hash())
Definition: LockedLookupTable.hpp:51
Hash hash_type
Definition: LockedLookupTable.hpp:49
Hash hasher
Definition: LockedLookupTable.hpp:122
Value mapped_type
Definition: LockedLookupTable.hpp:48
Value at(Key const &key, Value const &default_value=Value()) const
Definition: LockedLookupTable.hpp:63
LockedLookupTable & operator=(const LockedLookupTable &other)=delete
std::size_t size()
Definition: LockedLookupTable.hpp:96
LockedLookupTable(const LockedLookupTable &other)=delete
bucket_type & get_bucket(Key const &key) const
Definition: LockedLookupTable.hpp:124
std::vector< std::unique_ptr< bucket_type > > _buckets
Definition: LockedLookupTable.hpp:121
void erase(const Key &key)
Definition: LockedLookupTable.hpp:73
std::map< Key, Value > get_map() const
Definition: LockedLookupTable.hpp:78
size_t count(GridTypeListContainer< SPECIFIC_TYPE > const &elements, SPECIFIC_TYPE *)
Definition: GridReferenceContainer.hpp:100