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-optional.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_OPTIONAL_H
6
#define MP_PROXY_TYPE_OPTIONAL_H
7
8
#include <mp/util.h>
9
10
namespace mp {
11
template <typename LocalType, typename Value, typename Output>
12
void CustomBuildField(TypeList<std::optional<LocalType>>,
13
    Priority<1>,
14
    InvokeContext& invoke_context,
15
    Value&& value,
16
    Output&& output)
17
0
{
18
0
    if (value) {
19
0
        output.setHas();
20
0
        BuildField(TypeList<LocalType>(), invoke_context, output, *std::forward<Value>(value));
21
0
    }
22
0
}
Unexecuted instantiation: void mp::CustomBuildField<unsigned long, std::optional<unsigned long> const&, mp::StructField<mp::Accessor<mp::mining_fields::BlockReservedWeight, 3>, ipc::capnp::messages::BlockCreateOptions::Builder>&>(mp::TypeList<std::optional<unsigned long>>, mp::Priority<1>, mp::InvokeContext&, std::optional<unsigned long> const&, mp::StructField<mp::Accessor<mp::mining_fields::BlockReservedWeight, 3>, ipc::capnp::messages::BlockCreateOptions::Builder>&)
Unexecuted instantiation: void mp::CustomBuildField<interfaces::BlockRef, std::optional<interfaces::BlockRef>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 22>, ipc::capnp::messages::Mining::GetTipResults::Builder>&>(mp::TypeList<std::optional<interfaces::BlockRef>>, mp::Priority<1>, mp::InvokeContext&, std::optional<interfaces::BlockRef>&&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 22>, ipc::capnp::messages::Mining::GetTipResults::Builder>&)
Unexecuted instantiation: void mp::CustomBuildField<interfaces::BlockRef, std::optional<interfaces::BlockRef>, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::Mining::WaitTipChangedResults::Builder>&>(mp::TypeList<std::optional<interfaces::BlockRef>>, mp::Priority<1>, mp::InvokeContext&, std::optional<interfaces::BlockRef>&&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, ipc::capnp::messages::Mining::WaitTipChangedResults::Builder>&)
Unexecuted instantiation: void mp::CustomBuildField<uint256, std::optional<uint256>&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Builder>&>(mp::TypeList<std::optional<uint256>>, mp::Priority<1>, mp::InvokeContext&, std::optional<uint256>&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Builder>&)
23
24
template <typename LocalType, typename Input, typename ReadDest>
25
decltype(auto) CustomReadField(TypeList<std::optional<LocalType>>,
26
    Priority<1>,
27
    InvokeContext& invoke_context,
28
    Input&& input,
29
    ReadDest&& read_dest)
30
0
{
31
0
    return read_dest.update([&](auto& value) {
32
0
        if (!CustomHasField(TypeList<LocalType>(), invoke_context, input)) {
33
0
            value.reset();
34
0
        } else if (value) {
35
0
            ReadField(TypeList<LocalType>(), invoke_context, input, ReadDestUpdate(*value));
36
0
        } else {
37
0
            ReadField(TypeList<LocalType>(), invoke_context, input,
38
0
                ReadDestEmplace(TypeList<LocalType>(), [&](auto&&... args) -> auto& {
39
0
                    value.emplace(std::forward<decltype(args)>(args)...);
40
0
                    return *value;
41
0
                }));
Unexecuted instantiation: auto& auto decltype(auto) mp::CustomReadField<interfaces::BlockRef, mp::StructField<mp::Accessor<mp::mining_fields::Result, 22>, capnp::Response<ipc::capnp::messages::Mining::GetTipResults>>, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>>(mp::TypeList<std::optional<interfaces::BlockRef>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 22>, capnp::Response<ipc::capnp::messages::Mining::GetTipResults>>&&, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>&&)::'lambda'(interfaces::BlockRef&)::operator()<std::optional<interfaces::BlockRef>>(interfaces::BlockRef&) const::'lambda'(auto&&...)::operator()<>(auto&&...) const
Unexecuted instantiation: auto& auto decltype(auto) mp::CustomReadField<interfaces::BlockRef, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>>(mp::TypeList<std::optional<interfaces::BlockRef>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::WaitTipChangedResults>>&&, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>&&)::'lambda'(interfaces::BlockRef&)::operator()<std::optional<interfaces::BlockRef>>(interfaces::BlockRef&) const::'lambda'(auto&&...)::operator()<>(auto&&...) const
Unexecuted instantiation: auto& auto decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::optional<uint256>>>(mp::TypeList<std::optional<uint256>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::optional<uint256>>&&)::'lambda'(uint256&)::operator()<std::optional<uint256>>(uint256&) const::'lambda'(auto&&...)::operator()<>(auto&&...) const
Unexecuted instantiation: auto& auto decltype(auto) mp::CustomReadField<unsigned long, mp::StructField<mp::Accessor<mp::mining_fields::BlockReservedWeight, 3>, ipc::capnp::messages::BlockCreateOptions::Reader const>, mp::ReadDestUpdate<std::optional<unsigned long>>>(mp::TypeList<std::optional<unsigned long>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::BlockReservedWeight, 3>, ipc::capnp::messages::BlockCreateOptions::Reader const>&&, mp::ReadDestUpdate<std::optional<unsigned long>>&&)::'lambda'(unsigned long&)::operator()<std::optional<unsigned long>>(unsigned long&) const::'lambda'(auto&&...)::operator()<unsigned long>(auto&&...) const
42
0
        }
43
0
    });
Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<interfaces::BlockRef, mp::StructField<mp::Accessor<mp::mining_fields::Result, 22>, capnp::Response<ipc::capnp::messages::Mining::GetTipResults>>, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>>(mp::TypeList<std::optional<interfaces::BlockRef>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 22>, capnp::Response<ipc::capnp::messages::Mining::GetTipResults>>&&, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>&&)::'lambda'(interfaces::BlockRef&)::operator()<std::optional<interfaces::BlockRef>>(interfaces::BlockRef&) const
Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<interfaces::BlockRef, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>>(mp::TypeList<std::optional<interfaces::BlockRef>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::WaitTipChangedResults>>&&, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>&&)::'lambda'(interfaces::BlockRef&)::operator()<std::optional<interfaces::BlockRef>>(interfaces::BlockRef&) const
Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::optional<uint256>>>(mp::TypeList<std::optional<uint256>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::optional<uint256>>&&)::'lambda'(uint256&)::operator()<std::optional<uint256>>(uint256&) const
Unexecuted instantiation: auto decltype(auto) mp::CustomReadField<unsigned long, mp::StructField<mp::Accessor<mp::mining_fields::BlockReservedWeight, 3>, ipc::capnp::messages::BlockCreateOptions::Reader const>, mp::ReadDestUpdate<std::optional<unsigned long>>>(mp::TypeList<std::optional<unsigned long>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::BlockReservedWeight, 3>, ipc::capnp::messages::BlockCreateOptions::Reader const>&&, mp::ReadDestUpdate<std::optional<unsigned long>>&&)::'lambda'(unsigned long&)::operator()<std::optional<unsigned long>>(unsigned long&) const
44
0
}
Unexecuted instantiation: decltype(auto) mp::CustomReadField<interfaces::BlockRef, mp::StructField<mp::Accessor<mp::mining_fields::Result, 22>, capnp::Response<ipc::capnp::messages::Mining::GetTipResults>>, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>>(mp::TypeList<std::optional<interfaces::BlockRef>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 22>, capnp::Response<ipc::capnp::messages::Mining::GetTipResults>>&&, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>&&)
Unexecuted instantiation: decltype(auto) mp::CustomReadField<interfaces::BlockRef, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::WaitTipChangedResults>>, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>>(mp::TypeList<std::optional<interfaces::BlockRef>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Result, 18>, capnp::Response<ipc::capnp::messages::Mining::WaitTipChangedResults>>&&, mp::ReadDestUpdate<std::optional<interfaces::BlockRef>>&&)
Unexecuted instantiation: decltype(auto) mp::CustomReadField<uint256, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>, mp::ReadDestUpdate<std::optional<uint256>>>(mp::TypeList<std::optional<uint256>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::Witness, 19>, ipc::capnp::messages::CoinbaseTx::Reader const>&&, mp::ReadDestUpdate<std::optional<uint256>>&&)
Unexecuted instantiation: decltype(auto) mp::CustomReadField<unsigned long, mp::StructField<mp::Accessor<mp::mining_fields::BlockReservedWeight, 3>, ipc::capnp::messages::BlockCreateOptions::Reader const>, mp::ReadDestUpdate<std::optional<unsigned long>>>(mp::TypeList<std::optional<unsigned long>>, mp::Priority<1>, mp::InvokeContext&, mp::StructField<mp::Accessor<mp::mining_fields::BlockReservedWeight, 3>, ipc::capnp::messages::BlockCreateOptions::Reader const>&&, mp::ReadDestUpdate<std::optional<unsigned long>>&&)
45
} // namespace mp
46
47
#endif // MP_PROXY_TYPE_OPTIONAL_H