5#ifndef MP_PROXY_TYPE_MAP_H
6#define MP_PROXY_TYPE_MAP_H
13template <
typename KeyLocalType,
typename ValueLocalType,
typename Value,
typename Output>
21 auto list = output.init(value.size());
23 for (
const auto& elem : value) {
25 ListOutput<
typename decltype(list)::Builds>(list, i), elem);
40template <
class Map,
class Tuple1,
class Tuple2>
43 const std::piecewise_construct_t&,
47 if constexpr (std::tuple_size_v<std::remove_reference_t<Tuple1>> == 0) {
49 return m.emplace(std::piecewise_construct,
50 std::forward_as_tuple(
typename Map::key_type{}),
51 std::forward<Tuple2>(t2));
53 return m.emplace(std::piecewise_construct,
54 std::forward<Tuple1>(t1),
55 std::forward<Tuple2>(t2));
59template <
typename KeyLocalType,
typename ValueLocalType,
typename Input,
typename ReadDest>
66 return read_dest.update([&](
auto& value) {
67 auto data = input.get();
69 for (
auto item : data) {
70 ReadField(
TypeList<std::pair<const KeyLocalType, ValueLocalType>>(), invoke_context,
73 TypeList<std::pair<const KeyLocalType, ValueLocalType>>(), [&](
auto&&...
args) ->
auto& {
Functions to serialize / deserialize common bitcoin types.
void BuildField(TypeList< LocalTypes... >, Context &context, Output &&output, Values &&... values)
auto EmplacePiecewiseSafe(Map &m, const std::piecewise_construct_t &, Tuple1 &&t1, Tuple2 &&t2)
decltype(auto) CustomReadField(TypeList< LocalType >, Priority< 1 >, InvokeContext &invoke_context, Input &&input, ReadDest &&read_dest)
Class< Types..., std::remove_reference_t< Args >... > Make(Args &&... args)
decltype(auto) ReadField(TypeList< LocalTypes... >, InvokeContext &invoke_context, Input &&input, Args &&... args)
void CustomBuildField(TypeList< LocalType >, Priority< 1 >, InvokeContext &invoke_context, Value &&value, Output &&output)
Generic utility functions used by capnp code.