Coverage Report

Created: 2026-05-06 07:53

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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