Coverage Report

Created: 2026-07-14 18:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/bitcoin/src/util/string.h
Line
Count
Source
1
// Copyright (c) 2019-present 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 BITCOIN_UTIL_STRING_H
6
#define BITCOIN_UTIL_STRING_H
7
8
#include <algorithm>
9
#include <array>
10
#include <cstddef>
11
#include <cstdint>
12
#include <initializer_list>
13
#include <locale>
14
#include <optional>
15
#include <span>
16
#include <sstream>
17
#include <string>
18
#include <string_view>
19
#include <vector>
20
21
#include <attributes.h>
22
23
namespace util {
24
namespace detail {
25
template <unsigned num_params>
26
constexpr static void CheckNumFormatSpecifiers(const char* str)
27
0
{
28
0
    unsigned count_normal{0}; // Number of "normal" specifiers, like %s
29
0
    unsigned count_pos{0};    // Max number in positional specifier, like %8$s
30
0
    for (auto it{str}; *it != '\0'; ++it) {
31
0
        if (*it != '%' || *++it == '%') continue; // Skip escaped %%
32
0
33
0
        auto add_arg = [&] {
34
0
            unsigned maybe_num{0};
35
0
            while ('0' <= *it && *it <= '9') {
36
0
                maybe_num *= 10;
37
0
                maybe_num += *it - '0';
38
0
                ++it;
39
0
            }
40
0
41
0
            if (*it == '$') {
42
0
                ++it;
43
0
                // Positional specifier, like %8$s
44
0
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
0
                count_pos = std::max(count_pos, maybe_num);
46
0
            } else {
47
0
                // Non-positional specifier, like %s
48
0
                ++count_normal;
49
0
            }
50
0
        };
51
0
52
0
        // Increase argument count and consume positional specifier, if present.
53
0
        add_arg();
54
0
55
0
        // Consume flags.
56
0
        while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it;
57
0
58
0
        auto parse_size = [&] {
59
0
            if (*it == '*') {
60
0
                ++it;
61
0
                add_arg();
62
0
            } else {
63
0
                while ('0' <= *it && *it <= '9') ++it;
64
0
            }
65
0
        };
66
0
67
0
        // Consume dynamic or static width value.
68
0
        parse_size();
69
0
70
0
        // Consume dynamic or static precision value.
71
0
        if (*it == '.') {
72
0
            ++it;
73
0
            parse_size();
74
0
        }
75
0
76
0
        if (*it == '\0') throw "Format specifier incorrectly terminated by end of string";
77
0
78
0
        // Length and type in "[flags][width][.precision][length]type"
79
0
        // is not checked. Parsing continues with the next '%'.
80
0
    }
81
0
    if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!";
82
0
    unsigned count{count_normal | count_pos};
83
0
    if (num_params != count) throw "Format specifier count must match the argument count!";
84
0
}
Unexecuted instantiation: bitcoind.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: bitcoind.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: bitcoind.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: init.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: init.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: init.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: init.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: init.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: init.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: httprpc.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: httprpc.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: httprpc.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: base.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: base.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: dbwrapper.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: dbwrapper.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: dbwrapper.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: dbwrapper.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: banman.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: banman.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: banman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: addrdb.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: addrdb.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: addrdb.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: addrdb.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: txindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txindex.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: txospenderindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txospenderindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockfilter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: flatfile.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: flatfile.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: flatfile.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: coinstats.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: context.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mapport.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: mapport.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mapport.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*)
Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*)
Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: blockencodings.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockencodings.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockencodings.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*)
Unexecuted instantiation: headerssync.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: headerssync.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: headerssync.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: headerssync.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: netgroup.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: netgroup.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: abort.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: abort.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: blockmanager_args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockstorage.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockstorage.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockstorage.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*)
Unexecuted instantiation: blockstorage.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: blockstorage.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*)
Unexecuted instantiation: blockstorage.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: blockstorage.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: caches.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: caches.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: chainstate.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: chainstate.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: chainstatemanager_args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: chainstatemanager_args.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coins_view_args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: context.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: database_args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: eviction.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: interface_ui.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: interfaces.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: interfaces.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: interfaces.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: coin.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: kernel_notifications.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: mempool_args.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: mempool_args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mempool_persist.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mempool_persist.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: mempool_persist.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: mempool_persist.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: mempool_persist.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: mempool_persist_args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: miner.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: miner.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: miner.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: miner.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: tx_verify.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: tx_verify.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: mining_args.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: mining_args.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: peerman_args.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: peerman_args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: timeoffsets.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: timeoffsets.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txdownloadman_impl.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txdownloadman_impl.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txdownloadman_impl.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*)
Unexecuted instantiation: txdownloadman_impl.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: txorphanage.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txorphanage.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txorphanage.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: txorphanage.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: txreconciliation.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txreconciliation.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: noui.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: noui.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<18u>(char const*)
Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*)
Unexecuted instantiation: rbf.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: rbf.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: private_broadcast.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: private_broadcast.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rest.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: rest.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rest.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: mempool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mempool.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: mining.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: mining.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: node.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: node.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: output_script.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rawtransaction.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rawtransaction.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: psbt.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: psbt.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: server.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: server.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: server_util.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: server_util.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txoutproof.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: signet.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: signet.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: torcontrol.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: torcontrol.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: torcontrol.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: torcontrol.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: txdb.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txdb.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txdb.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: txdb.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: txrequest.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txrequest.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<12u>(char const*)
Unexecuted instantiation: sigcache.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: utxo_snapshot.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: utxo_snapshot.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: ephemeral_policy.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: truc_policy.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: truc_policy.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: interfaces.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: feebumper.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: feebumper.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: feebumper.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: feebumper.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: feebumper.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: db.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: db.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: load.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: load.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: load.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: load.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: receive.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: receive.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: receive.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: receive.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: transactions.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: transactions.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: transactions.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: transactions.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: export.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: export.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: export.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: export.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: addresses.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: addresses.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: addresses.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: addresses.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<20u>(char const*)
Unexecuted instantiation: coinselection.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coinselection.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coinselection.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: external_signer_scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: external_signer_scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: sqlite.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: sqlite.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: sqlite.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: migrate.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: migrate.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: migrate.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: chain.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: chainparams.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: chainparams.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: args.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: args.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*)
Unexecuted instantiation: args.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: bloom.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: config.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: config.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: config.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: license_info.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: license_info.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: messages.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: messages.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: netif.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: netif.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: pcp.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: pcp.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: pcp.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: pcp.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: pcp.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: settings.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: settings.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: system.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: core_io.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: core_io.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: core_io.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: external_signer.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: external_signer.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: run_command.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: common.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: common.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: common.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: common.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: common.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: key_io.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: key_io.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: net_permissions.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: net_permissions.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: net_types.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: net_types.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: netaddress.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: netaddress.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: netaddress.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: netbase.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: netbase.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: netbase.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: netbase.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: feerate.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: policy.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: policy.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: policy.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: protocol.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: protocol.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rawtransaction_util.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: rawtransaction_util.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: request.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: request.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: request.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: request.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: signingprovider.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: batchpriority.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: bip32.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: check.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*)
Unexecuted instantiation: check.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: exception.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: exception.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: exception.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: fs_helpers.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: fs_helpers.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: moneystr.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: sock.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: sock.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: sock.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: syserror.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: syserror.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: thread.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: time.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*)
Unexecuted instantiation: time.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: time.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*)
Unexecuted instantiation: logging.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: logging.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: logging.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: random.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: random.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: streams.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: clientversion.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: clientversion.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: block.cpp:void util::detail::CheckNumFormatSpecifiers<8u>(char const*)
Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: interpreter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
85
} // namespace detail
86
87
/**
88
 * @brief A wrapper for a compile-time partially validated format string
89
 *
90
 * This struct can be used to enforce partial compile-time validation of format
91
 * strings, to reduce the likelihood of tinyformat throwing exceptions at
92
 * run-time. Validation is partial to try and prevent the most common errors
93
 * while avoiding re-implementing the entire parsing logic.
94
 */
95
template <unsigned num_params>
96
struct ConstevalFormatString {
97
    const char* const fmt;
98
    consteval ConstevalFormatString(const char* str) : fmt{str} { detail::CheckNumFormatSpecifiers<num_params>(fmt); }
99
};
100
101
void ReplaceAll(std::string& in_out, const std::string& search, const std::string& substitute);
102
103
/** Split a string on any char found in separators, returning a vector.
104
 *
105
 * If sep does not occur in sp, a singleton with the entirety of sp is returned.
106
 *
107
 * @param[in] include_sep Whether to include the separator at the end of the left side of the splits.
108
 *
109
 * Note that this function does not care about braces, so splitting
110
 * "foo(bar(1),2),3) on ',' will return {"foo(bar(1)", "2)", "3)"}.
111
 *
112
 * If include_sep == true, splitting "foo(bar(1),2),3) on ','
113
 * will return:
114
 *  - foo(bar(1),
115
 *  - 2),
116
 *  - 3)
117
 */
118
template <typename T = std::span<const char>>
119
std::vector<T> Split(const std::span<const char>& sp, std::string_view separators, bool include_sep = false)
120
1.43M
{
121
1.43M
    std::vector<T> ret;
122
1.43M
    auto it = sp.begin();
123
1.43M
    auto start = it;
124
15.9M
    while (it != sp.end()) {
  Branch (124:12): [True: 3.77M, False: 768k]
  Branch (124:12): [True: 10.7M, False: 668k]
  Branch (124:12): [True: 0, False: 0]
125
14.4M
        if (separators.find(*it) != std::string::npos) {
  Branch (125:13): [True: 108, False: 3.77M]
  Branch (125:13): [True: 1.00M, False: 9.70M]
  Branch (125:13): [True: 0, False: 0]
126
1.00M
            if (include_sep) {
  Branch (126:17): [True: 0, False: 108]
  Branch (126:17): [True: 0, False: 1.00M]
  Branch (126:17): [True: 0, False: 0]
127
0
                ret.emplace_back(start, it + 1);
128
1.00M
            } else {
129
1.00M
                ret.emplace_back(start, it);
130
1.00M
            }
131
1.00M
            start = it + 1;
132
1.00M
        }
133
14.4M
        ++it;
134
14.4M
    }
135
1.43M
    ret.emplace_back(start, it);
136
1.43M
    return ret;
137
1.43M
}
std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > util::Split<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::span<char const, 18446744073709551615ul> const&, std::basic_string_view<char, std::char_traits<char> >, bool)
Line
Count
Source
120
768k
{
121
768k
    std::vector<T> ret;
122
768k
    auto it = sp.begin();
123
768k
    auto start = it;
124
4.54M
    while (it != sp.end()) {
  Branch (124:12): [True: 3.77M, False: 768k]
125
3.77M
        if (separators.find(*it) != std::string::npos) {
  Branch (125:13): [True: 108, False: 3.77M]
126
108
            if (include_sep) {
  Branch (126:17): [True: 0, False: 108]
127
0
                ret.emplace_back(start, it + 1);
128
108
            } else {
129
108
                ret.emplace_back(start, it);
130
108
            }
131
108
            start = it + 1;
132
108
        }
133
3.77M
        ++it;
134
3.77M
    }
135
768k
    ret.emplace_back(start, it);
136
768k
    return ret;
137
768k
}
std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > > util::Split<std::basic_string_view<char, std::char_traits<char> > >(std::span<char const, 18446744073709551615ul> const&, std::basic_string_view<char, std::char_traits<char> >, bool)
Line
Count
Source
120
668k
{
121
668k
    std::vector<T> ret;
122
668k
    auto it = sp.begin();
123
668k
    auto start = it;
124
11.3M
    while (it != sp.end()) {
  Branch (124:12): [True: 10.7M, False: 668k]
125
10.7M
        if (separators.find(*it) != std::string::npos) {
  Branch (125:13): [True: 1.00M, False: 9.70M]
126
1.00M
            if (include_sep) {
  Branch (126:17): [True: 0, False: 1.00M]
127
0
                ret.emplace_back(start, it + 1);
128
1.00M
            } else {
129
1.00M
                ret.emplace_back(start, it);
130
1.00M
            }
131
1.00M
            start = it + 1;
132
1.00M
        }
133
10.7M
        ++it;
134
10.7M
    }
135
668k
    ret.emplace_back(start, it);
136
668k
    return ret;
137
668k
}
Unexecuted instantiation: std::vector<std::span<char const, 18446744073709551615ul>, std::allocator<std::span<char const, 18446744073709551615ul> > > util::Split<std::span<char const, 18446744073709551615ul> >(std::span<char const, 18446744073709551615ul> const&, std::basic_string_view<char, std::char_traits<char> >, bool)
138
139
/** Split a string on every instance of sep, returning a vector.
140
 *
141
 * If sep does not occur in sp, a singleton with the entirety of sp is returned.
142
 *
143
 * Note that this function does not care about braces, so splitting
144
 * "foo(bar(1),2),3) on ',' will return {"foo(bar(1)", "2)", "3)"}.
145
 */
146
template <typename T = std::span<const char>>
147
std::vector<T> Split(const std::span<const char>& sp, char sep, bool include_sep = false)
148
768k
{
149
768k
    return Split<T>(sp, std::string_view{&sep, 1}, include_sep);
150
768k
}
std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > util::Split<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::span<char const, 18446744073709551615ul> const&, char, bool)
Line
Count
Source
148
768k
{
149
768k
    return Split<T>(sp, std::string_view{&sep, 1}, include_sep);
150
768k
}
Unexecuted instantiation: std::vector<std::span<char const, 18446744073709551615ul>, std::allocator<std::span<char const, 18446744073709551615ul> > > util::Split<std::span<char const, 18446744073709551615ul> >(std::span<char const, 18446744073709551615ul> const&, char, bool)
Unexecuted instantiation: std::vector<std::basic_string_view<char, std::char_traits<char> >, std::allocator<std::basic_string_view<char, std::char_traits<char> > > > util::Split<std::basic_string_view<char, std::char_traits<char> > >(std::span<char const, 18446744073709551615ul> const&, char, bool)
151
152
[[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, char sep)
153
768k
{
154
768k
    return Split<std::string>(str, sep);
155
768k
}
156
157
[[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, std::string_view separators)
158
0
{
159
0
    return Split<std::string>(str, separators);
160
0
}
161
162
[[nodiscard]] inline std::string_view TrimStringView(std::string_view str, std::string_view pattern = " \f\n\r\t\v")
163
1.67M
{
164
1.67M
    std::string::size_type front = str.find_first_not_of(pattern);
165
1.67M
    if (front == std::string::npos) {
  Branch (165:9): [True: 0, False: 1.67M]
166
0
        return {};
167
0
    }
168
1.67M
    std::string::size_type end = str.find_last_not_of(pattern);
169
1.67M
    return str.substr(front, end - front + 1);
170
1.67M
}
171
172
[[nodiscard]] inline std::string TrimString(std::string_view str, std::string_view pattern = " \f\n\r\t\v")
173
1.33M
{
174
1.33M
    return std::string(TrimStringView(str, pattern));
175
1.33M
}
176
177
[[nodiscard]] inline std::string_view RemoveSuffixView(std::string_view str, std::string_view suffix)
178
4.02M
{
179
4.02M
    if (str.ends_with(suffix)) {
  Branch (179:9): [True: 4.02M, False: 0]
180
4.02M
        return str.substr(0, str.size() - suffix.size());
181
4.02M
    }
182
0
    return str;
183
4.02M
}
184
185
[[nodiscard]] inline std::string_view RemovePrefixView(std::string_view str, std::string_view prefix)
186
0
{
187
0
    if (str.starts_with(prefix)) {
  Branch (187:9): [True: 0, False: 0]
188
0
        return str.substr(prefix.size());
189
0
    }
190
0
    return str;
191
0
}
192
193
[[nodiscard]] inline std::string RemovePrefix(std::string_view str, std::string_view prefix)
194
0
{
195
0
    return std::string(RemovePrefixView(str, prefix));
196
0
}
197
198
/**
199
 * Join all container items. Typically used to concatenate strings but accepts
200
 * containers with elements of any type.
201
 *
202
 * @param container The items to join
203
 * @param separator The separator
204
 * @param unary_op  Apply this operator to each item
205
 */
206
template <typename C, typename S, typename UnaryOp>
207
// NOLINTNEXTLINE(misc-no-recursion)
208
auto Join(const C& container, const S& separator, UnaryOp unary_op)
209
66.9k
{
210
66.9k
    decltype(unary_op(*container.begin())) ret;
211
66.9k
    bool first{true};
212
66.9k
    for (const auto& item : container) {
  Branch (212:27): [True: 324, False: 54]
  Branch (212:27): [True: 3.13k, False: 108]
  Branch (212:27): [True: 11.1k, False: 1.35k]
  Branch (212:27): [True: 27, False: 27]
  Branch (212:27): [True: 0, False: 64.3k]
  Branch (212:27): [True: 0, False: 0]
  Branch (212:27): [True: 1.78k, False: 594]
  Branch (212:27): [True: 0, False: 0]
  Branch (212:27): [True: 1.72k, False: 432]
  Branch (212:27): [True: 0, False: 0]
  Branch (212:27): [True: 81, False: 27]
213
18.2k
        if (!first) ret += separator;
  Branch (213:13): [True: 270, False: 54]
  Branch (213:13): [True: 3.02k, False: 108]
  Branch (213:13): [True: 9.80k, False: 1.35k]
  Branch (213:13): [True: 0, False: 27]
  Branch (213:13): [True: 0, False: 0]
  Branch (213:13): [True: 0, False: 0]
  Branch (213:13): [True: 1.18k, False: 594]
  Branch (213:13): [True: 0, False: 0]
  Branch (213:13): [True: 1.29k, False: 432]
  Branch (213:13): [True: 0, False: 0]
  Branch (213:13): [True: 54, False: 27]
214
18.2k
        ret += unary_op(item);
215
18.2k
        first = false;
216
18.2k
    }
217
66.9k
    return ret;
218
66.9k
}
auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [2], util::MakeUnorderedList(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1}>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [2], util::MakeUnorderedList(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)::{lambda(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)#1})
Line
Count
Source
209
54
{
210
54
    decltype(unary_op(*container.begin())) ret;
211
54
    bool first{true};
212
324
    for (const auto& item : container) {
  Branch (212:27): [True: 324, False: 54]
213
324
        if (!first) ret += separator;
  Branch (213:13): [True: 270, False: 54]
214
324
        ret += unary_op(item);
215
324
        first = false;
216
324
    }
217
54
    return ret;
218
54
}
auto util::Join<std::vector<LogCategory, std::allocator<LogCategory> >, char [3], BCLog::Logger::LogCategoriesString[abi:cxx11]() const::{lambda(LogCategory const&)#1}>(std::vector<LogCategory, std::allocator<LogCategory> > const&, char const (&) [3], BCLog::Logger::LogCategoriesString[abi:cxx11]() const::{lambda(LogCategory const&)#1})
Line
Count
Source
209
108
{
210
108
    decltype(unary_op(*container.begin())) ret;
211
108
    bool first{true};
212
3.13k
    for (const auto& item : container) {
  Branch (212:27): [True: 3.13k, False: 108]
213
3.13k
        if (!first) ret += separator;
  Branch (213:13): [True: 3.02k, False: 108]
214
3.13k
        ret += unary_op(item);
215
3.13k
        first = false;
216
3.13k
    }
217
108
    return ret;
218
108
}
auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3], util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3])::{lambda(auto:1 const&)#1}>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3], util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3])::{lambda(auto:1 const&)#1})
Line
Count
Source
209
1.35k
{
210
1.35k
    decltype(unary_op(*container.begin())) ret;
211
1.35k
    bool first{true};
212
11.1k
    for (const auto& item : container) {
  Branch (212:27): [True: 11.1k, False: 1.35k]
213
11.1k
        if (!first) ret += separator;
  Branch (213:13): [True: 9.80k, False: 1.35k]
214
11.1k
        ret += unary_op(item);
215
11.1k
        first = false;
216
11.1k
    }
217
1.35k
    return ret;
218
1.35k
}
blockfilter.cpp:auto util::Join<std::map<BlockFilterType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<BlockFilterType>, std::allocator<std::pair<BlockFilterType const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, char [3], ListBlockFilterTypes()::$_0>(std::map<BlockFilterType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<BlockFilterType>, std::allocator<std::pair<BlockFilterType const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&, char const (&) [3], ListBlockFilterTypes()::$_0)
Line
Count
Source
209
27
{
210
27
    decltype(unary_op(*container.begin())) ret;
211
27
    bool first{true};
212
27
    for (const auto& item : container) {
  Branch (212:27): [True: 27, False: 27]
213
27
        if (!first) ret += separator;
  Branch (213:13): [True: 0, False: 27]
214
27
        ret += unary_op(item);
215
27
        first = false;
216
27
    }
217
27
    return ret;
218
27
}
auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str, util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&)::{lambda(auto:1 const&)#1}>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&, util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&)::{lambda(auto:1 const&)#1})
Line
Count
Source
209
64.3k
{
210
64.3k
    decltype(unary_op(*container.begin())) ret;
211
64.3k
    bool first{true};
212
64.3k
    for (const auto& item : container) {
  Branch (212:27): [True: 0, False: 64.3k]
213
0
        if (!first) ret += separator;
  Branch (213:13): [True: 0, False: 0]
214
0
        ret += unary_op(item);
215
0
        first = false;
216
0
    }
217
64.3k
    return ret;
218
64.3k
}
Unexecuted instantiation: validation.cpp:auto util::Join<std::vector<int, std::allocator<int> >, char [3], ChainstateManager::ActivateSnapshot(AutoFile&, node::SnapshotMetadata const&, bool)::$_0>(std::vector<int, std::allocator<int> > const&, char const (&) [3], ChainstateManager::ActivateSnapshot(AutoFile&, node::SnapshotMetadata const&, bool)::$_0)
messages.cpp:auto util::Join<std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, FeeEstimateMode>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, FeeEstimateMode> > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, common::FeeModes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::$_0>(std::vector<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, FeeEstimateMode>, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, FeeEstimateMode> > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, common::FeeModes(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::$_0)
Line
Count
Source
209
594
{
210
594
    decltype(unary_op(*container.begin())) ret;
211
594
    bool first{true};
212
1.78k
    for (const auto& item : container) {
  Branch (212:27): [True: 1.78k, False: 594]
213
1.78k
        if (!first) ret += separator;
  Branch (213:13): [True: 1.18k, False: 594]
214
1.78k
        ret += unary_op(item);
215
1.78k
        first = false;
216
1.78k
    }
217
594
    return ret;
218
594
}
Unexecuted instantiation: auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [2], util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [2]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [2])::{lambda(auto:1 const&)#1}>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [2], util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [2]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [2])::{lambda(auto:1 const&)#1})
outputtype.cpp:auto util::Join<std::array<OutputType, 4ul>, char [3], FormatAllOutputTypes[abi:cxx11]()::$_0>(std::array<OutputType, 4ul> const&, char const (&) [3], FormatAllOutputTypes[abi:cxx11]()::$_0)
Line
Count
Source
209
432
{
210
432
    decltype(unary_op(*container.begin())) ret;
211
432
    bool first{true};
212
1.72k
    for (const auto& item : container) {
  Branch (212:27): [True: 1.72k, False: 432]
213
1.72k
        if (!first) ret += separator;
  Branch (213:13): [True: 1.29k, False: 432]
214
1.72k
        ret += unary_op(item);
215
1.72k
        first = false;
216
1.72k
    }
217
432
    return ret;
218
432
}
Unexecuted instantiation: util.cpp:auto util::Join<std::vector<RPCArg, std::allocator<RPCArg> >, char [2], RPCArg::ToString[abi:cxx11](bool) const::$_0>(std::vector<RPCArg, std::allocator<RPCArg> > const&, char const (&) [2], RPCArg::ToString[abi:cxx11](bool) const::$_0)
logging.cpp:auto util::Join<std::vector<util::log::Level, std::allocator<util::log::Level> >, char [3], BCLog::Logger::LogLevelsString[abi:cxx11]() const::$_0>(std::vector<util::log::Level, std::allocator<util::log::Level> > const&, char const (&) [3], BCLog::Logger::LogLevelsString[abi:cxx11]() const::$_0)
Line
Count
Source
209
27
{
210
27
    decltype(unary_op(*container.begin())) ret;
211
27
    bool first{true};
212
81
    for (const auto& item : container) {
  Branch (212:27): [True: 81, False: 27]
213
81
        if (!first) ret += separator;
  Branch (213:13): [True: 54, False: 27]
214
81
        ret += unary_op(item);
215
81
        first = false;
216
81
    }
217
27
    return ret;
218
27
}
219
220
template <typename C, typename S>
221
auto Join(const C& container, const S& separator)
222
65.7k
{
223
65.7k
    return Join(container, separator, [](const auto& i) { return i; });
auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3])::{lambda(auto:1 const&)#1}::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
Line
Count
Source
223
11.1k
    return Join(container, separator, [](const auto& i) { return i; });
Unexecuted instantiation: auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&)::{lambda(auto:1 const&)#1}::operator()<bilingual_str>(bilingual_str const&) const
Unexecuted instantiation: auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [2]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [2])::{lambda(auto:1 const&)#1}::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const
224
65.7k
}
auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3])
Line
Count
Source
222
1.35k
{
223
1.35k
    return Join(container, separator, [](const auto& i) { return i; });
224
1.35k
}
auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&)
Line
Count
Source
222
64.3k
{
223
64.3k
    return Join(container, separator, [](const auto& i) { return i; });
224
64.3k
}
Unexecuted instantiation: auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [2]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [2])
225
226
/**
227
 * Create an unordered multi-line list of items.
228
 */
229
inline std::string MakeUnorderedList(const std::vector<std::string>& items)
230
54
{
231
324
    return Join(items, "\n", [](const std::string& item) { return "- " + item; });
232
54
}
233
234
/**
235
 * Check if a string does not contain any embedded NUL (\0) characters
236
 */
237
[[nodiscard]] inline bool ContainsNoNUL(std::string_view str) noexcept
238
464k
{
239
5.11M
    for (auto c : str) {
  Branch (239:17): [True: 5.11M, False: 464k]
240
5.11M
        if (c == 0) return false;
  Branch (240:13): [True: 0, False: 5.11M]
241
5.11M
    }
242
464k
    return true;
243
464k
}
244
245
/**
246
 * Locale-independent version of std::to_string
247
 */
248
template <typename T>
249
std::string ToString(const T& t)
250
338k
{
251
338k
    std::ostringstream oss;
252
338k
    oss.imbue(std::locale::classic());
253
338k
    oss << t;
254
338k
    return oss.str();
255
338k
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<unsigned int>(unsigned int const&)
Line
Count
Source
250
108
{
251
108
    std::ostringstream oss;
252
108
    oss.imbue(std::locale::classic());
253
108
    oss << t;
254
108
    return oss.str();
255
108
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<unsigned long>(unsigned long const&)
Line
Count
Source
250
338k
{
251
338k
    std::ostringstream oss;
252
338k
    oss.imbue(std::locale::classic());
253
338k
    oss << t;
254
338k
    return oss.str();
255
338k
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<int>(int const&)
Line
Count
Source
250
27
{
251
27
    std::ostringstream oss;
252
27
    oss.imbue(std::locale::classic());
253
27
    oss << t;
254
27
    return oss.str();
255
27
}
Unexecuted instantiation: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<long>(long const&)
256
257
/**
258
 * Check whether a container begins with the given prefix.
259
 */
260
template <typename T1, size_t PREFIX_LEN>
261
[[nodiscard]] inline bool HasPrefix(const T1& obj,
262
                                const std::array<uint8_t, PREFIX_LEN>& prefix)
263
20.2M
{
264
20.2M
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 93.2k, False: 0]
  Branch (264:12): [True: 1.11M, False: 0]
  Branch (264:12): [True: 262k, False: 18.4E]
  Branch (264:12): [True: 218k, False: 0]
  Branch (264:12): [True: 3.37M, False: 0]
  Branch (264:12): [True: 11.5M, False: 18.4E]
  Branch (264:12): [True: 2.15M, False: 0]
  Branch (264:12): [True: 1.48M, False: 0]
265
20.2M
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 0, False: 93.2k]
  Branch (265:12): [True: 62, False: 1.11M]
  Branch (265:12): [True: 152k, False: 109k]
  Branch (265:12): [True: 0, False: 218k]
  Branch (265:12): [True: 358, False: 3.37M]
  Branch (265:12): [True: 1.54k, False: 11.5M]
  Branch (265:12): [True: 289, False: 2.15M]
  Branch (265:12): [True: 84, False: 1.48M]
266
20.2M
}
bool util::HasPrefix<prevector<16u, unsigned char, unsigned int, int>, 6ul>(prevector<16u, unsigned char, unsigned int, int> const&, std::array<unsigned char, 6ul> const&)
Line
Count
Source
263
93.2k
{
264
93.2k
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 93.2k, False: 0]
265
93.2k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 0, False: 93.2k]
266
93.2k
}
bool util::HasPrefix<prevector<16u, unsigned char, unsigned int, int>, 12ul>(prevector<16u, unsigned char, unsigned int, int> const&, std::array<unsigned char, 12ul> const&)
Line
Count
Source
263
1.11M
{
264
1.11M
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 1.11M, False: 0]
265
1.11M
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 62, False: 1.11M]
266
1.11M
}
bool util::HasPrefix<std::span<unsigned char const, 18446744073709551615ul>, 12ul>(std::span<unsigned char const, 18446744073709551615ul> const&, std::array<unsigned char, 12ul> const&)
Line
Count
Source
263
261k
{
264
261k
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 262k, False: 18.4E]
265
262k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 152k, False: 109k]
266
261k
}
bool util::HasPrefix<std::span<unsigned char const, 18446744073709551615ul>, 6ul>(std::span<unsigned char const, 18446744073709551615ul> const&, std::array<unsigned char, 6ul> const&)
Line
Count
Source
263
218k
{
264
218k
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 218k, False: 0]
265
218k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 0, False: 218k]
266
218k
}
bool util::HasPrefix<prevector<16u, unsigned char, unsigned int, int>, 2ul>(prevector<16u, unsigned char, unsigned int, int> const&, std::array<unsigned char, 2ul> const&)
Line
Count
Source
263
3.37M
{
264
3.37M
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 3.37M, False: 0]
265
3.37M
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 358, False: 3.37M]
266
3.37M
}
bool util::HasPrefix<prevector<16u, unsigned char, unsigned int, int>, 3ul>(prevector<16u, unsigned char, unsigned int, int> const&, std::array<unsigned char, 3ul> const&)
Line
Count
Source
263
11.5M
{
264
11.5M
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 11.5M, False: 18.4E]
265
11.5M
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 1.54k, False: 11.5M]
266
11.5M
}
bool util::HasPrefix<prevector<16u, unsigned char, unsigned int, int>, 4ul>(prevector<16u, unsigned char, unsigned int, int> const&, std::array<unsigned char, 4ul> const&)
Line
Count
Source
263
2.15M
{
264
2.15M
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 2.15M, False: 0]
265
2.15M
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 289, False: 2.15M]
266
2.15M
}
bool util::HasPrefix<prevector<16u, unsigned char, unsigned int, int>, 8ul>(prevector<16u, unsigned char, unsigned int, int> const&, std::array<unsigned char, 8ul> const&)
Line
Count
Source
263
1.48M
{
264
1.48M
    return obj.size() >= PREFIX_LEN &&
  Branch (264:12): [True: 1.48M, False: 0]
265
1.48M
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
  Branch (265:12): [True: 84, False: 1.48M]
266
1.48M
}
267
268
struct LineReader {
269
    const std::span<const std::byte>::iterator start;
270
    const std::span<const std::byte>::iterator end;
271
    const size_t max_line_length;
272
    std::span<const std::byte>::iterator it;
273
274
    explicit LineReader(std::span<const std::byte> buffer, size_t max_line_length);
275
0
    explicit LineReader(std::string_view str, size_t max_line_length) : LineReader{std::as_bytes(std::span{str}), max_line_length} {}
276
277
    /**
278
     * Returns a string from current iterator position up to (but not including) next \n
279
     * and advances iterator to the character following the \n on success.
280
     * Will not return a line longer than max_line_length.
281
     * @returns the next string from the buffer.
282
     *          std::nullopt if end of buffer is reached without finding a \n.
283
     * @throws a std::runtime_error if max_line_length + 1 bytes are read without finding \n.
284
     */
285
    std::optional<std::string_view> ReadLine() LIFETIMEBOUND;
286
287
    /**
288
     * Returns string from current iterator position of specified length
289
     * if possible and advances iterator on success.
290
     * May exceed max_line_length but will not read past end of buffer.
291
     * @param[in]   len     The number of bytes to read from the buffer
292
     * @returns a string of the expected length.
293
     * @throws a std::runtime_error if there is not enough data in the buffer.
294
     */
295
    std::string_view ReadLength(size_t len) LIFETIMEBOUND;
296
297
    /**
298
     * Returns remaining size of bytes in buffer
299
     */
300
    size_t Remaining() const;
301
302
    /**
303
     * Returns number of bytes already read from buffer
304
     */
305
    size_t Consumed() const;
306
};
307
} // namespace util
308
309
#endif // BITCOIN_UTIL_STRING_H