Bitcoin Core 29.99.0
P2P Digital Currency
type-tuple.h
Go to the documentation of this file.
1// Copyright (c) 2025 The Bitcoin Core developers
2// Distributed under the MIT software license, see the accompanying
3// file COPYING or http://www.opensource.org/licenses/mit-license.php.
4
5#ifndef MP_PROXY_TYPE_TUPLE_H
6#define MP_PROXY_TYPE_TUPLE_H
7
8#include <mp/util.h>
9
10namespace mp {
11// TODO: Should generalize this to work with arbitrary length tuples, not just length 2-tuples.
12template <typename KeyLocalType, typename ValueLocalType, typename Value, typename Output>
13void CustomBuildField(TypeList<std::tuple<KeyLocalType, ValueLocalType>>,
15 InvokeContext& invoke_context,
16 Value&& value,
17 Output&& output)
18{
19 auto pair = output.init();
20 using Accessors = typename ProxyStruct<typename decltype(pair)::Builds>::Accessors;
21 BuildField(TypeList<KeyLocalType>(), invoke_context, Make<StructField, std::tuple_element_t<0, Accessors>>(pair), std::get<0>(value));
22 BuildField(TypeList<ValueLocalType>(), invoke_context, Make<StructField, std::tuple_element_t<1, Accessors>>(pair), std::get<1>(value));
23}
24
25// TODO: Should generalize this to work with arbitrary length tuples, not just length 2-tuples.
26template <typename KeyLocalType, typename ValueLocalType, typename Input, typename ReadDest>
27decltype(auto) CustomReadField(TypeList<std::tuple<KeyLocalType, ValueLocalType>>,
29 InvokeContext& invoke_context,
30 Input&& input,
31 ReadDest&& read_dest)
32{
33 return read_dest.update([&](auto& value) {
34 const auto& pair = input.get();
35 using Struct = ProxyStruct<typename Decay<decltype(pair)>::Reads>;
36 using Accessors = typename Struct::Accessors;
37 ReadField(TypeList<KeyLocalType>(), invoke_context, Make<StructField, std::tuple_element_t<0, Accessors>>(pair),
38 ReadDestUpdate(std::get<0>(value)));
39 ReadField(TypeList<ValueLocalType>(), invoke_context, Make<StructField, std::tuple_element_t<1, Accessors>>(pair),
40 ReadDestUpdate(std::get<1>(value)));
41 });
42}
43} // namespace mp
44
45#endif // MP_PROXY_TYPE_TUPLE_H
Functions to serialize / deserialize common bitcoin types.
Definition: common-types.h:57
void BuildField(TypeList< LocalTypes... >, Context &context, Output &&output, Values &&... values)
Definition: proxy-types.h:175
decltype(auto) CustomReadField(TypeList< LocalType >, Priority< 1 >, InvokeContext &invoke_context, Input &&input, ReadDest &&read_dest)
Overload multiprocess library's CustomReadField hook to allow any object with an Unserialize method t...
Definition: common-types.h:83
Class< Types..., std::remove_reference_t< Args >... > Make(Args &&... args)
Construct a template class value by deducing template arguments from the types of constructor argumen...
Definition: util.h:46
decltype(auto) ReadField(TypeList< LocalTypes... >, Args &&... args)
Definition: proxy-types.h:145
std::decay_t< T > Decay
Type helper abbreviating std::decay.
Definition: util.h:86
void CustomBuildField(TypeList< LocalType >, Priority< 1 >, InvokeContext &invoke_context, Value &&value, Output &&output)
Overload multiprocess library's CustomBuildField hook to allow any serializable object to be stored i...
Definition: common-types.h:63
Function parameter type for prioritizing overloaded function calls that would otherwise be ambiguous.
Definition: util.h:109
Mapping from capnp struct type to struct traits (specializations are generated by proxy-codegen....
Definition: proxy.h:34
Destination parameter type that can be passed to ReadField function as an alternative to ReadDestEmpl...
Definition: proxy-types.h:120
Generic utility functions used by capnp code.
Definition: util.h:33