21#include <unordered_map>
22#include <unordered_set>
27#include <userver/utils/constexpr_indices.hpp>
28#include <userver/utils/lazy_prvalue.hpp>
29#include <userver/utils/meta.hpp>
30#include <userver/utils/strong_typedef.hpp>
32#include <userver/dump/common.hpp>
33#include <userver/dump/meta.hpp>
34#include <userver/dump/meta_containers.hpp>
35#include <userver/dump/operations.hpp>
42template <
typename L,
typename R,
typename AP1,
typename AP2,
typename AP3>
47namespace multi_index {
49template <
typename Value,
typename IndexSpecifierList,
typename Allocator>
50class multi_index_container;
55using multi_index::multi_index_container;
60USERVER_NAMESPACE_BEGIN
66template <
typename L,
typename R,
typename... Args>
67using BoostBimap = boost::bimap<L, R, Args...>;
69template <
typename L,
typename R,
typename... Args>
70using BoostBimapLeftKey =
typename BoostBimap<L, R, Args...>::left_key_type;
72template <
typename L,
typename R,
typename... Args>
73using BoostBimapRightKey =
typename BoostBimap<L, R, Args...>::right_key_type;
76auto ReadLazyPrvalue(
Reader& reader) {
77 return utils::LazyPrvalue([&reader] {
return reader.Read<T>(); });
80[[noreturn]]
void ThrowInvalidVariantIndex(
const std::type_info& type,
83template <
typename VariantType>
84VariantType ReadVariant(
Reader& reader, std::size_t index) {
85 static constexpr auto VariantSize = std::variant_size_v<VariantType>;
86 std::optional<VariantType> result;
88 utils::WithConstexprIndex<VariantSize>(index, [&](
auto index_constant) {
89 static constexpr auto kIndex =
decltype(index_constant)::value;
90 using Alternative = std::variant_alternative_t<kIndex, VariantType>;
92 result.emplace(std::in_place_index<kIndex>, reader.Read<Alternative>());
95 return std::move(*result);
127template <
typename T,
typename U>
135template <
typename T,
typename U>
158template <
typename...
Args>
166template <
typename...
Args>
236template <
typename L,
typename R,
typename...
Args>
249template <
typename L,
typename R,
typename...
Args>
277template <
typename T,
typename Index,
typename Alloc>
288template <
typename T,
typename Index,
typename Alloc>