Map-like structure allowing RCU keyset updates. More...
#include <userver/rcu/rcu_map.hpp>
Classes | |
struct | InsertReturnTypeImpl |
Public Types | |
using | ValuePtr = std::shared_ptr< Value > |
using | Iterator = RcuMapIterator< Key, Value, Value > |
using | ConstValuePtr = std::shared_ptr< const Value > |
using | ConstIterator = RcuMapIterator< Key, Value, const Value > |
using | RawMap = std::unordered_map< Key, ValuePtr > |
using | Snapshot = std::unordered_map< Key, ConstValuePtr > |
using | InsertReturnType = InsertReturnTypeImpl< ValuePtr > |
Public Member Functions | |
RcuMap (const RcuMap &)=delete | |
RcuMap (RcuMap &&)=delete | |
RcuMap & | operator= (const RcuMap &)=delete |
RcuMap & | operator= (RcuMap &&)=delete |
size_t | SizeApprox () const |
Returns an estimated size of the map at some point in time. | |
const ConstValuePtr | operator[] (const Key &) const |
Returns a readonly value pointer by its key if exists. | |
const ValuePtr | operator[] (const Key &) |
Returns a modifiable value pointer by key if exists or default-creates one. | |
InsertReturnType | Insert (const Key &key, ValuePtr value) |
Inserts a new element into the container if there is no element with the key in the container. Returns a pair consisting of a pointer to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place. | |
template<typename... Args> | |
InsertReturnType | Emplace (const Key &key, Args &&... args) |
Inserts a new element into the container constructed in-place with the given args if there is no element with the key in the container. Returns a pair consisting of a pointer to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place. | |
template<typename... Args> | |
InsertReturnType | TryEmplace (const Key &key, Args &&... args) |
If a key equivalent to key already exists in the container, does nothing. Otherwise, behaves like Emplace except that the element is constructed as `std::make_shared<Value>(std::piecewise_construct, std::forward_as_tuple(key), std::forward_as_tuple(std::forward<Args>(args)...))`. Returns a pair consisting of a pointer to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place. | |
template<typename RawKey > | |
void | InsertOrAssign (RawKey &&key, ValuePtr value) |
If a key equivalent to key already exists in the container, replaces the associated value. Otherwise, inserts a new pair into the map. | |
const ConstValuePtr | Get (const Key &) const |
Returns a readonly value pointer by its key or an empty pointer. | |
const ValuePtr | Get (const Key &) |
Returns a modifiable value pointer by key or an empty pointer. | |
bool | Erase (const Key &) |
Removes a key from the map. | |
ValuePtr | Pop (const Key &) |
Removes a key from the map returning its value. | |
void | Clear () |
Resets the map to an empty state. | |
void | Assign (RawMap new_map) |
Replace current data by data from new_map . | |
rcu::WritablePtr< RawMap > | StartWrite () |
Starts a transaction, used to perform a series of arbitrary changes to the map. | |
Snapshot | GetSnapshot () const |
Returns a readonly copy of the map. | |
template<typename... Args> | |
RcuMap< K, V >::InsertReturnType | Emplace (const K &key, Args &&... args) |
template<typename... Args> | |
RcuMap< K, V >::InsertReturnType | TryEmplace (const K &key, Args &&... args) |
Iteration support | |
Keyset is fixed at the start of the iteration and is not affected by concurrent changes. | |
ConstIterator | begin () const |
ConstIterator | end () const |
Iterator | begin () |
Iterator | end () |
Map-like structure allowing RCU keyset updates.
Only keyset changes are thread-safe in scope of this class. Values are stored in shared_ptr
s and are not copied during keyset change. The map itself is implemented as rcu::Variable, so every keyset change (e.g. insert or erase) triggers the whole map copying.
Definition at line 81 of file rcu_map.hpp.
using rcu::RcuMap< Key, Value >::ConstIterator = RcuMapIterator<Key, Value, const Value> |
Definition at line 93 of file rcu_map.hpp.
using rcu::RcuMap< Key, Value >::ConstValuePtr = std::shared_ptr<const Value> |
Definition at line 92 of file rcu_map.hpp.
using rcu::RcuMap< Key, Value >::InsertReturnType = InsertReturnTypeImpl<ValuePtr> |
Definition at line 96 of file rcu_map.hpp.
using rcu::RcuMap< Key, Value >::Iterator = RcuMapIterator<Key, Value, Value> |
Definition at line 91 of file rcu_map.hpp.
using rcu::RcuMap< Key, Value >::RawMap = std::unordered_map<Key, ValuePtr> |
Definition at line 94 of file rcu_map.hpp.
using rcu::RcuMap< Key, Value >::Snapshot = std::unordered_map<Key, ConstValuePtr> |
Definition at line 95 of file rcu_map.hpp.
using rcu::RcuMap< Key, Value >::ValuePtr = std::shared_ptr<Value> |
Definition at line 90 of file rcu_map.hpp.
void rcu::RcuMap< K, V >::Assign | ( | RawMap | new_map | ) |
Replace current data by data from new_map
.
Definition at line 370 of file rcu_map.hpp.
RcuMap< K, V >::Iterator rcu::RcuMap< K, V >::begin |
Definition at line 221 of file rcu_map.hpp.
RcuMap< K, V >::ConstIterator rcu::RcuMap< K, V >::begin |
Definition at line 207 of file rcu_map.hpp.
void rcu::RcuMap< K, V >::Clear |
Resets the map to an empty state.
Definition at line 365 of file rcu_map.hpp.
RcuMap< K, V >::InsertReturnType rcu::RcuMap< Key, Value >::Emplace | ( | const K & | key, |
Args &&... | args | ||
) |
Definition at line 285 of file rcu_map.hpp.
InsertReturnType rcu::RcuMap< Key, Value >::Emplace | ( | const Key & | key, |
Args &&... | args | ||
) |
Inserts a new element into the container constructed in-place with the given args if there is no element with the key in the container. Returns a pair consisting of a pointer to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.
RcuMap< K, V >::Iterator rcu::RcuMap< K, V >::end |
Definition at line 228 of file rcu_map.hpp.
RcuMap< K, V >::ConstIterator rcu::RcuMap< K, V >::end |
Definition at line 214 of file rcu_map.hpp.
bool rcu::RcuMap< K, V >::Erase | ( | const Key & | ) |
Removes a key from the map.
Definition at line 343 of file rcu_map.hpp.
RcuMap< K, V >::Snapshot rcu::RcuMap< K, V >::GetSnapshot |
Returns a readonly copy of the map.
{begin(), end()}
construct, preferable for long-running operations. Definition at line 380 of file rcu_map.hpp.
RcuMap< K, V >::InsertReturnType rcu::RcuMap< K, V >::Insert | ( | const Key & | key, |
ValuePtr | value | ||
) |
Inserts a new element into the container if there is no element with the key in the container. Returns a pair consisting of a pointer to the inserted element, or the already-existing element if no insertion happened, and a bool denoting whether the insertion took place.
Definition at line 275 of file rcu_map.hpp.
void rcu::RcuMap< Key, Value >::InsertOrAssign | ( | RawKey && | key, |
RcuMap< Key, Value >::ValuePtr | value | ||
) |
If a key equivalent to key
already exists in the container, replaces the associated value. Otherwise, inserts a new pair into the map.
Definition at line 326 of file rcu_map.hpp.
const ValuePtr rcu::RcuMap< Key, Value >::operator[] | ( | const Key & | ) |
Returns a modifiable value pointer by key if exists or default-creates one.
const ConstValuePtr rcu::RcuMap< Key, Value >::operator[] | ( | const Key & | ) | const |
Returns a readonly value pointer by its key if exists.
MissingKeyException | if the key is not present |
RcuMap< K, V >::ValuePtr rcu::RcuMap< K, V >::Pop | ( | const Key & | ) |
Removes a key from the map returning its value.
Definition at line 355 of file rcu_map.hpp.
size_t rcu::RcuMap< K, V >::SizeApprox |
Returns an estimated size of the map at some point in time.
Definition at line 235 of file rcu_map.hpp.
rcu::WritablePtr< typename RcuMap< K, V >::RawMap > rcu::RcuMap< K, V >::StartWrite |
Starts a transaction, used to perform a series of arbitrary changes to the map.
The map is copied. Don't forget to Commit
to apply the changes.
Definition at line 375 of file rcu_map.hpp.
RcuMap< K, V >::InsertReturnType rcu::RcuMap< Key, Value >::TryEmplace | ( | const K & | key, |
Args &&... | args | ||
) |
Definition at line 306 of file rcu_map.hpp.