3#include <xrpl/beast/hash/uhash.h>
4#include <xrpl/beast/utility/instrumentation.h>
16template <
typename Key>
27 return ::beast::Uhash<>{}(key);
60 partition_map_type::iterator
ait{};
61 map_type::iterator
mit;
120 return !(lhs == rhs);
129 partition_map_type::iterator
ait{};
196 return !(lhs == rhs);
211 it.ait = it.map->end();
212 it.mit = it.map->back().end();
219 for (it.ait = it.map->begin(); it.ait != it.map->end(); ++it.ait)
221 if (it.ait->begin() == it.ait->end())
223 it.mit = it.ait->begin();
239 "xrpl::PartitionedUnorderedMap::PartitionedUnorderedMap : "
240 "nonzero partitions");
266 ConstIterator it(&
map_);
288 ConstIterator it(&
map_);
305 it.mit = it.ait->find(key);
306 if (it.mit == it.ait->end())
322 ConstIterator it(&
map_);
327 template <
class T,
class U>
331 auto const& key = std::get<0>(keyTuple);
334 auto [eit, inserted] = it.ait->emplace(
337 return {it, inserted};
340 template <
class T,
class U>
348 return {it, inserted};
362 it.ait = position.ait;
363 it.mit = position.ait->erase(position.mit);
365 while (it.mit == it.ait->end())
368 if (it.ait == it.map->
end())
370 it.mit = it.ait->begin();
Iterator find(key_type const &key)
void find(key_type const &key, T &it) const
ConstIterator begin() const
PartitionedUnorderedMap(std::optional< std::size_t > partitions=std::nullopt)
std::pair< Key const, mapped_type > value_type
ConstIterator cend() const
Value & operator[](Key const &key)
value_type const * const_pointer
std::size_t partitions() const
Iterator erase(ConstIterator position)
ConstIterator cbegin() const
std::size_t difference_type
std::size_t partitioner(Key const &key) const
std::unordered_map< key_type, mapped_type, hasher, key_equal, allocator_type > map_type
std::pair< Iterator, bool > emplace(std::piecewise_construct_t const &, T &&keyTuple, U &&valueTuple)
ConstIterator end() const
value_type const & const_reference
std::vector< map_type > partition_map_type
std::pair< Iterator, bool > emplace(T &&key, U &&val)
ConstIterator find(key_type const &key) const
partition_map_type & map()
T hardware_concurrency(T... args)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
std::size_t extract(uint256 const &key)
ConstIterator(partition_map_type *m)
std::forward_iterator_tag iterator_category
ConstIterator & operator++()
friend bool operator==(ConstIterator const &lhs, ConstIterator const &rhs)
partition_map_type::iterator ait
friend bool operator!=(ConstIterator const &lhs, ConstIterator const &rhs)
const_reference operator*() const
const_pointer operator->() const
ConstIterator(Iterator const &orig)
ConstIterator operator++(int)
reference operator*() const
std::forward_iterator_tag iterator_category
friend bool operator==(Iterator const &lhs, Iterator const &rhs)
partition_map_type::iterator ait
friend bool operator!=(Iterator const &lhs, Iterator const &rhs)
pointer operator->() const
Iterator(partition_map_type *m)