/tmp/bitcoin/src/ipc/libmultiprocess/include/mp/type-interface.h
Line | Count | Source |
1 | | // Copyright (c) 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_INTERFACE_H |
6 | | #define MP_PROXY_TYPE_INTERFACE_H |
7 | | |
8 | | #include <mp/util.h> |
9 | | |
10 | | namespace mp { |
11 | | template <typename Interface, typename Impl> |
12 | | kj::Own<typename Interface::Server> MakeProxyServer(InvokeContext& context, std::shared_ptr<Impl> impl) |
13 | 10 | { |
14 | 10 | return kj::heap<ProxyServer<Interface>>(std::move(impl), context.connection); |
15 | 10 | } kj::Own<ipc::capnp::messages::Echo::Server, std::nullptr_t> mp::MakeProxyServer<ipc::capnp::messages::Echo, interfaces::Echo>(mp::InvokeContext&, std::shared_ptr<interfaces::Echo>) Line | Count | Source | 13 | 6 | { | 14 | 6 | return kj::heap<ProxyServer<Interface>>(std::move(impl), context.connection); | 15 | 6 | } |
Unexecuted instantiation: kj::Own<ipc::capnp::messages::Mining::Server, std::nullptr_t> mp::MakeProxyServer<ipc::capnp::messages::Mining, interfaces::Mining>(mp::InvokeContext&, std::shared_ptr<interfaces::Mining>) kj::Own<ipc::capnp::messages::Rpc::Server, std::nullptr_t> mp::MakeProxyServer<ipc::capnp::messages::Rpc, interfaces::Rpc>(mp::InvokeContext&, std::shared_ptr<interfaces::Rpc>) Line | Count | Source | 13 | 4 | { | 14 | 4 | return kj::heap<ProxyServer<Interface>>(std::move(impl), context.connection); | 15 | 4 | } |
Unexecuted instantiation: kj::Own<ipc::capnp::messages::BlockTemplate::Server, std::nullptr_t> mp::MakeProxyServer<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>(mp::InvokeContext&, std::shared_ptr<interfaces::BlockTemplate>) |
16 | | |
17 | | template <typename Interface, typename Impl> |
18 | | kj::Own<typename Interface::Server> CustomMakeProxyServer(InvokeContext& context, std::shared_ptr<Impl>&& impl) |
19 | 10 | { |
20 | 10 | return MakeProxyServer<Interface, Impl>(context, std::move(impl)); |
21 | 10 | } kj::Own<ipc::capnp::messages::Echo::Server, std::nullptr_t> mp::CustomMakeProxyServer<ipc::capnp::messages::Echo, interfaces::Echo>(mp::InvokeContext&, std::shared_ptr<interfaces::Echo>&&) Line | Count | Source | 19 | 6 | { | 20 | 6 | return MakeProxyServer<Interface, Impl>(context, std::move(impl)); | 21 | 6 | } |
Unexecuted instantiation: kj::Own<ipc::capnp::messages::Mining::Server, std::nullptr_t> mp::CustomMakeProxyServer<ipc::capnp::messages::Mining, interfaces::Mining>(mp::InvokeContext&, std::shared_ptr<interfaces::Mining>&&) kj::Own<ipc::capnp::messages::Rpc::Server, std::nullptr_t> mp::CustomMakeProxyServer<ipc::capnp::messages::Rpc, interfaces::Rpc>(mp::InvokeContext&, std::shared_ptr<interfaces::Rpc>&&) Line | Count | Source | 19 | 4 | { | 20 | 4 | return MakeProxyServer<Interface, Impl>(context, std::move(impl)); | 21 | 4 | } |
Unexecuted instantiation: kj::Own<ipc::capnp::messages::BlockTemplate::Server, std::nullptr_t> mp::CustomMakeProxyServer<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>(mp::InvokeContext&, std::shared_ptr<interfaces::BlockTemplate>&&) |
22 | | |
23 | | template <typename Impl, typename Value, typename Output> |
24 | | void CustomBuildField(TypeList<std::unique_ptr<Impl>>, |
25 | | Priority<1>, |
26 | | InvokeContext& invoke_context, |
27 | | Value&& value, |
28 | | Output&& output, |
29 | | typename Decay<decltype(output.get())>::Calls* enable = nullptr) |
30 | 10 | { |
31 | 10 | if (value) { |
32 | 10 | using Interface = typename decltype(output.get())::Calls; |
33 | 10 | output.set(CustomMakeProxyServer<Interface, Impl>(invoke_context, std::shared_ptr<Impl>(value.release()))); |
34 | 10 | } |
35 | 10 | } void mp::CustomBuildField<interfaces::Echo, std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, ipc::capnp::messages::Init::MakeEchoResults::Builder>&>(mp::TypeList<std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>>, mp::Priority<1>, mp::InvokeContext&, std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>&&, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, ipc::capnp::messages::Init::MakeEchoResults::Builder>&, std::decay<decltype(fp3.get())>::type::Calls*) Line | Count | Source | 30 | 6 | { | 31 | 6 | if (value) { | 32 | 6 | using Interface = typename decltype(output.get())::Calls; | 33 | 6 | output.set(CustomMakeProxyServer<Interface, Impl>(invoke_context, std::shared_ptr<Impl>(value.release()))); | 34 | 6 | } | 35 | 6 | } |
Unexecuted instantiation: void mp::CustomBuildField<interfaces::Mining, std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, ipc::capnp::messages::Init::MakeMiningResults::Builder>&>(mp::TypeList<std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>>, mp::Priority<1>, mp::InvokeContext&, std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>&&, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, ipc::capnp::messages::Init::MakeMiningResults::Builder>&, std::decay<decltype(fp3.get())>::type::Calls*) void mp::CustomBuildField<interfaces::Rpc, std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, ipc::capnp::messages::Init::MakeRpcResults::Builder>&>(mp::TypeList<std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>>, mp::Priority<1>, mp::InvokeContext&, std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>&&, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, ipc::capnp::messages::Init::MakeRpcResults::Builder>&, std::decay<decltype(fp3.get())>::type::Calls*) Line | Count | Source | 30 | 4 | { | 31 | 4 | if (value) { | 32 | 4 | using Interface = typename decltype(output.get())::Calls; | 33 | 4 | output.set(CustomMakeProxyServer<Interface, Impl>(invoke_context, std::shared_ptr<Impl>(value.release()))); | 34 | 4 | } | 35 | 4 | } |
Unexecuted instantiation: void mp::CustomBuildField<interfaces::BlockTemplate, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::Mining::CreateNewBlockResults::Builder>&>(mp::TypeList<std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>>, mp::Priority<1>, mp::InvokeContext&, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::Mining::CreateNewBlockResults::Builder>&, std::decay<decltype(fp3.get())>::type::Calls*) Unexecuted instantiation: void mp::CustomBuildField<interfaces::BlockTemplate, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::BlockTemplate::WaitNextResults::Builder>&>(mp::TypeList<std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>>, mp::Priority<1>, mp::InvokeContext&, std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>&&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::BlockTemplate::WaitNextResults::Builder>&, std::decay<decltype(fp3.get())>::type::Calls*) |
36 | | |
37 | | template <typename Impl, typename Value, typename Output> |
38 | | void CustomBuildField(TypeList<std::shared_ptr<Impl>>, |
39 | | Priority<2>, |
40 | | InvokeContext& invoke_context, |
41 | | Value&& value, |
42 | | Output&& output, |
43 | | typename Decay<decltype(output.get())>::Calls* enable = nullptr) |
44 | | { |
45 | | if (value) { |
46 | | using Interface = typename decltype(output.get())::Calls; |
47 | | output.set(CustomMakeProxyServer<Interface, Impl>(invoke_context, std::forward<Value>(value))); |
48 | | } |
49 | | } |
50 | | |
51 | | template <typename Impl, typename Output> |
52 | | void CustomBuildField(TypeList<Impl&>, |
53 | | Priority<1>, |
54 | | InvokeContext& invoke_context, |
55 | | Impl& value, |
56 | | Output&& output, |
57 | | typename decltype(output.get())::Calls* enable = nullptr) |
58 | | { |
59 | | // Disable deleter so proxy server object doesn't attempt to delete the |
60 | | // wrapped implementation when the proxy client is destroyed or |
61 | | // disconnected. |
62 | | using Interface = typename decltype(output.get())::Calls; |
63 | | output.set(CustomMakeProxyServer<Interface, Impl>(invoke_context, std::shared_ptr<Impl>(&value, [](Impl*){}))); |
64 | | } |
65 | | |
66 | | template <typename Interface, typename Impl> |
67 | | std::unique_ptr<Impl> MakeProxyClient(InvokeContext& context, typename Interface::Client&& client) |
68 | 10 | { |
69 | 10 | return std::make_unique<ProxyClient<Interface>>( |
70 | 10 | std::move(client), &context.connection, /* destroy_connection= */ false); |
71 | 10 | } std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>> mp::MakeProxyClient<ipc::capnp::messages::Echo, interfaces::Echo>(mp::InvokeContext&, ipc::capnp::messages::Echo::Client&&) Line | Count | Source | 68 | 6 | { | 69 | 6 | return std::make_unique<ProxyClient<Interface>>( | 70 | 6 | std::move(client), &context.connection, /* destroy_connection= */ false); | 71 | 6 | } |
Unexecuted instantiation: std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>> mp::MakeProxyClient<ipc::capnp::messages::Mining, interfaces::Mining>(mp::InvokeContext&, ipc::capnp::messages::Mining::Client&&) std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>> mp::MakeProxyClient<ipc::capnp::messages::Rpc, interfaces::Rpc>(mp::InvokeContext&, ipc::capnp::messages::Rpc::Client&&) Line | Count | Source | 68 | 4 | { | 69 | 4 | return std::make_unique<ProxyClient<Interface>>( | 70 | 4 | std::move(client), &context.connection, /* destroy_connection= */ false); | 71 | 4 | } |
Unexecuted instantiation: std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>> mp::MakeProxyClient<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>(mp::InvokeContext&, ipc::capnp::messages::BlockTemplate::Client&&) |
72 | | |
73 | | template <typename Interface, typename Impl> |
74 | | std::unique_ptr<Impl> CustomMakeProxyClient(InvokeContext& context, typename Interface::Client&& client) |
75 | 10 | { |
76 | 10 | return MakeProxyClient<Interface, Impl>(context, kj::mv(client)); |
77 | 10 | } std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>> mp::CustomMakeProxyClient<ipc::capnp::messages::Echo, interfaces::Echo>(mp::InvokeContext&, ipc::capnp::messages::Echo::Client&&) Line | Count | Source | 75 | 6 | { | 76 | 6 | return MakeProxyClient<Interface, Impl>(context, kj::mv(client)); | 77 | 6 | } |
Unexecuted instantiation: std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>> mp::CustomMakeProxyClient<ipc::capnp::messages::Mining, interfaces::Mining>(mp::InvokeContext&, ipc::capnp::messages::Mining::Client&&) std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>> mp::CustomMakeProxyClient<ipc::capnp::messages::Rpc, interfaces::Rpc>(mp::InvokeContext&, ipc::capnp::messages::Rpc::Client&&) Line | Count | Source | 75 | 4 | { | 76 | 4 | return MakeProxyClient<Interface, Impl>(context, kj::mv(client)); | 77 | 4 | } |
Unexecuted instantiation: std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>> mp::CustomMakeProxyClient<ipc::capnp::messages::BlockTemplate, interfaces::BlockTemplate>(mp::InvokeContext&, ipc::capnp::messages::BlockTemplate::Client&&) |
78 | | |
79 | | template <typename LocalType, typename Input, typename ReadDest> |
80 | | decltype(auto) CustomReadField(TypeList<std::unique_ptr<LocalType>>, |
81 | | Priority<1>, |
82 | | InvokeContext& invoke_context, |
83 | | Input&& input, |
84 | | ReadDest&& read_dest, |
85 | | typename Decay<decltype(input.get())>::Calls* enable = nullptr) |
86 | 10 | { |
87 | 10 | using Interface = typename Decay<decltype(input.get())>::Calls; |
88 | 10 | if (CustomHasField(TypeList<LocalType>(), invoke_context, input)) { |
89 | 10 | return read_dest.construct( |
90 | 10 | CustomMakeProxyClient<Interface, LocalType>(invoke_context, std::move(input.get()))); |
91 | 10 | } |
92 | 0 | return read_dest.construct(); |
93 | 10 | } decltype(auto) mp::CustomReadField<interfaces::Echo, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Init::MakeEchoResults>>, mp::ReadDestUpdate<std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>>>(mp::TypeList<std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Init::MakeEchoResults>>&&, mp::ReadDestUpdate<std::unique_ptr<interfaces::Echo, std::default_delete<interfaces::Echo>>>&&, std::decay<decltype(fp2.get())>::type::Calls*) Line | Count | Source | 86 | 6 | { | 87 | 6 | using Interface = typename Decay<decltype(input.get())>::Calls; | 88 | 6 | if (CustomHasField(TypeList<LocalType>(), invoke_context, input)) { | 89 | 6 | return read_dest.construct( | 90 | 6 | CustomMakeProxyClient<Interface, LocalType>(invoke_context, std::move(input.get()))); | 91 | 6 | } | 92 | 0 | return read_dest.construct(); | 93 | 6 | } |
Unexecuted instantiation: decltype(auto) mp::CustomReadField<interfaces::Mining, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Init::MakeMiningResults>>, mp::ReadDestUpdate<std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>>>(mp::TypeList<std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Init::MakeMiningResults>>&&, mp::ReadDestUpdate<std::unique_ptr<interfaces::Mining, std::default_delete<interfaces::Mining>>>&&, std::decay<decltype(fp2.get())>::type::Calls*) decltype(auto) mp::CustomReadField<interfaces::Rpc, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Init::MakeRpcResults>>, mp::ReadDestUpdate<std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>>>(mp::TypeList<std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::init_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Init::MakeRpcResults>>&&, mp::ReadDestUpdate<std::unique_ptr<interfaces::Rpc, std::default_delete<interfaces::Rpc>>>&&, std::decay<decltype(fp2.get())>::type::Calls*) Line | Count | Source | 86 | 4 | { | 87 | 4 | using Interface = typename Decay<decltype(input.get())>::Calls; | 88 | 4 | if (CustomHasField(TypeList<LocalType>(), invoke_context, input)) { | 89 | 4 | return read_dest.construct( | 90 | 4 | CustomMakeProxyClient<Interface, LocalType>(invoke_context, std::move(input.get()))); | 91 | 4 | } | 92 | 0 | return read_dest.construct(); | 93 | 4 | } |
Unexecuted instantiation: decltype(auto) mp::CustomReadField<interfaces::BlockTemplate, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::CreateNewBlockResults>>, mp::ReadDestUpdate<std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>>>(mp::TypeList<std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::CreateNewBlockResults>>&&, mp::ReadDestUpdate<std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>>&&, std::decay<decltype(fp2.get())>::type::Calls*) Unexecuted instantiation: decltype(auto) mp::CustomReadField<interfaces::BlockTemplate, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::WaitNextResults>>, mp::ReadDestUpdate<std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>>>(mp::TypeList<std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::BlockTemplate::WaitNextResults>>&&, mp::ReadDestUpdate<std::unique_ptr<interfaces::BlockTemplate, std::default_delete<interfaces::BlockTemplate>>>&&, std::decay<decltype(fp2.get())>::type::Calls*) |
94 | | |
95 | | template <typename LocalType, typename Input, typename ReadDest> |
96 | | decltype(auto) CustomReadField(TypeList<std::shared_ptr<LocalType>>, |
97 | | Priority<1>, |
98 | | InvokeContext& invoke_context, |
99 | | Input&& input, |
100 | | ReadDest&& read_dest, |
101 | | typename Decay<decltype(input.get())>::Calls* enable = nullptr) |
102 | | { |
103 | | using Interface = typename Decay<decltype(input.get())>::Calls; |
104 | | if (CustomHasField(TypeList<LocalType>(), invoke_context, input)) { |
105 | | return read_dest.construct( |
106 | | CustomMakeProxyClient<Interface, LocalType>(invoke_context, std::move(input.get()))); |
107 | | } |
108 | | return read_dest.construct(); |
109 | | } |
110 | | } // namespace mp |
111 | | |
112 | | #endif // MP_PROXY_TYPE_INTERFACE_H |