33 #ifndef _IDENTT_UTILS_SHARED_PAIR_MAP_HPP_ 34 #define _IDENTT_UTILS_SHARED_PAIR_MAP_HPP_ 36 #include <unordered_map> 39 #include <boost/thread/locks.hpp> 40 #include <boost/thread/shared_mutex.hpp> 44 template<
class KeyT,
class LeftT,
class RightT>
47 using ValueT = std::pair<LeftT,RightT>;
48 using PairMapT = std::unordered_map<KeyT,ValueT>;
49 using LockT = boost::shared_mutex;
50 using WriteLockT = boost::unique_lock< LockT >;
51 using ReadLockT = boost::shared_lock< LockT >;
85 WriteLockT writelock(mutex_);
103 WriteLockT writelock(mutex_);
104 typename PairMapT::iterator it = t_.find(key);
105 if (it!=t_.end()) it.second.first = value;
106 else t_[key]=std::make_pair(value,RightT());
123 WriteLockT writelock(mutex_);
124 typename PairMapT::iterator it = t_.find(key);
125 if (it!=t_.end()) it.second.second = value;
126 else t_[key]=std::make_pair(LeftT(),value);
140 WriteLockT writelock(mutex_);
155 WriteLockT writelock(mutex_);
157 t_[p.first]=p.second;
172 WriteLockT writelock(mutex_);
174 t_[p.first]=p.second;
195 ReadLockT readlock(mutex_);
196 typename PairMapT::const_iterator it = t_.find(key);
197 bool stat = (it!=t_.end());
198 left= stat ? it.second.first : LeftT();
199 right= stat ? it.second.second : RightT();
218 bool GetValues(
const KeyT& key, LeftT& left, RightT& right)
220 ReadLockT readlock(mutex_);
221 typename PairMapT::const_iterator it = t_.find(key);
222 bool stat = (it!=t_.end());
223 left= stat ? it.second.first : LeftT();
224 right= stat ? it.second.second : RightT();
236 ReadLockT readlock(mutex_);
248 ReadLockT readlock(mutex_);
260 WriteLockT writelock(mutex_);
size_t GetSize()
GetSize: get size of set.
Definition: SharedPairMap.hpp:246
bool GetValues(const KeyT &key, LeftT &left, RightT &right)
GetValues : get values by address.
Definition: SharedPairMap.hpp:218
void AddMany(const PairMapT &m)
AddMany : add from map by address.
Definition: SharedPairMap.hpp:153
void Reset()
Reset: clear the set.
Definition: SharedPairMap.hpp:258
void Swap(PairMapT m)
Swap : swap from map.
Definition: SharedPairMap.hpp:138
void AddLeft(KeyT key, LeftT value)
AddLeft : add one value.
Definition: SharedPairMap.hpp:101
Definition: CryptoBase.hpp:49
PairMapT GetCopy()
GetCopy : get a copy of the map.
Definition: SharedPairMap.hpp:234
void AddMany(PairMapT &&m)
AddMany : add from map by lvalue ref.
Definition: SharedPairMap.hpp:170
Definition: SharedPairMap.hpp:45
virtual ~SharedPairMap()
destructor
Definition: SharedPairMap.hpp:69
void AddRight(KeyT key, RightT value)
AddRight : add one value.
Definition: SharedPairMap.hpp:121
bool GetValues(KeyT &&key, LeftT &left, RightT &right)
GetValues : get values.
Definition: SharedPairMap.hpp:193
SharedPairMap()
Constructor : default.
Definition: SharedPairMap.hpp:64
void AddOne(KeyT key, ValueT value)
AddOne : add one value.
Definition: SharedPairMap.hpp:83