/tmp/bitcoin/src/ipc/libmultiprocess/include/mp/type-chrono.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_CHRONO_H |
6 | | #define MP_PROXY_TYPE_CHRONO_H |
7 | | |
8 | | #include <mp/util.h> |
9 | | |
10 | | #include <chrono> |
11 | | |
12 | | namespace mp { |
13 | | //! Overload CustomBuildField and CustomReadField to serialize std::chrono |
14 | | //! parameters and return values as numbers. |
15 | | template <class Rep, class Period, typename Value, typename Output> |
16 | | void CustomBuildField(TypeList<std::chrono::duration<Rep, Period>>, Priority<1>, InvokeContext& invoke_context, Value&& value, |
17 | | Output&& output) |
18 | 0 | { |
19 | 0 | static_assert(std::numeric_limits<decltype(output.get())>::lowest() <= std::numeric_limits<Rep>::lowest(), |
20 | 0 | "capnp type does not have enough range to hold lowest std::chrono::duration value"); |
21 | 0 | static_assert(std::numeric_limits<decltype(output.get())>::max() >= std::numeric_limits<Rep>::max(), |
22 | 0 | "capnp type does not have enough range to hold highest std::chrono::duration value"); |
23 | 0 | output.set(value.count()); |
24 | 0 | } Unexecuted instantiation: void mp::CustomBuildField<double, std::ratio<1l, 1000l>, std::chrono::duration<double, std::ratio<1l, 1000l>>, mp::StructField<mp::Accessor<mp::mining_fields::Timeout, 1>, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>>(mp::TypeList<std::chrono::duration<double, std::ratio<1l, 1000l>>>, mp::Priority<1>, mp::InvokeContext&, std::chrono::duration<double, std::ratio<1l, 1000l>>&&, mp::StructField<mp::Accessor<mp::mining_fields::Timeout, 1>, capnp::Request<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&) Unexecuted instantiation: void mp::CustomBuildField<double, std::ratio<1l, 1000l>, std::chrono::duration<double, std::ratio<1l, 1000l>>&, mp::StructField<mp::Accessor<mp::mining_fields::Timeout, 3>, ipc::capnp::messages::BlockWaitOptions::Builder>&>(mp::TypeList<std::chrono::duration<double, std::ratio<1l, 1000l>>>, mp::Priority<1>, mp::InvokeContext&, std::chrono::duration<double, std::ratio<1l, 1000l>>&, mp::StructField<mp::Accessor<mp::mining_fields::Timeout, 3>, ipc::capnp::messages::BlockWaitOptions::Builder>&) |
25 | | |
26 | | template <class Rep, class Period, typename Input, typename ReadDest> |
27 | | decltype(auto) CustomReadField(TypeList<std::chrono::duration<Rep, Period>>, Priority<1>, InvokeContext& invoke_context, |
28 | | Input&& input, ReadDest&& read_dest) |
29 | 0 | { |
30 | 0 | return read_dest.construct(input.get()); |
31 | 0 | } Unexecuted instantiation: decltype(auto) mp::CustomReadField<double, std::ratio<1l, 1000l>, mp::StructField<mp::Accessor<mp::mining_fields::Timeout, 1>, ipc::capnp::messages::Mining::WaitTipChangedParams::Reader const>, mp::ReadDestEmplace<std::chrono::duration<double, std::ratio<1l, 1000l>>, void mp::PassField<mp::Accessor<mp::mining_fields::Timeout, 1>, std::chrono::duration<double, std::ratio<1l, 1000l>>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>, uint256>(mp::Priority<0>, mp::TypeList<std::chrono::duration<double, std::ratio<1l, 1000l>>>, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&, mp::TypeList<>&&, uint256&&)::'lambda'(auto&&...)>>(mp::TypeList<std::chrono::duration<double, std::chrono::duration<double, std::ratio<1l, 1000l>>>>, mp::Priority<1>, mp::InvokeContext&, mp::ServerInvokeContext<mp::ProxyServer<ipc::capnp::messages::Mining>, capnp::CallContext<ipc::capnp::messages::Mining::WaitTipChangedParams, ipc::capnp::messages::Mining::WaitTipChangedResults>>&&, mp::ServerRet<mp::Accessor<mp::mining_fields::Result, 18>, mp::ServerCall> const&) Unexecuted instantiation: decltype(auto) mp::CustomReadField<double, std::ratio<1l, 1000l>, mp::StructField<mp::Accessor<mp::mining_fields::Timeout, 3>, ipc::capnp::messages::BlockWaitOptions::Reader const>, mp::ReadDestUpdate<std::chrono::duration<double, std::ratio<1l, 1000l>>>>(mp::TypeList<std::chrono::duration<double, std::ratio<1l, 1000l>>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Timeout, 3>, ipc::capnp::messages::BlockWaitOptions::Reader const>&&, mp::ReadDestUpdate<std::chrono::duration<double, std::ratio<1l, 1000l>>>&&) |
32 | | } // namespace mp |
33 | | |
34 | | #endif // MP_PROXY_TYPE_CHRONO_H |