Coverage Report

Created: 2026-07-23 20:35

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/tmp/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
72
{
28
72
    unsigned count_normal{0}; // Number of "normal" specifiers, like %s
29
72
    unsigned count_pos{0};    // Max number in positional specifier, like %8$s
30
157
    for (auto it{str}; *it != '\0'; ++it) {
31
98
        if (*it != '%' || *++it == '%') continue; // Skip escaped %%
32
33
104
        auto add_arg = [&] {
34
104
            unsigned maybe_num{0};
35
172
            while ('0' <= *it && *it <= '9') {
36
68
                maybe_num *= 10;
37
68
                maybe_num += *it - '0';
38
68
                ++it;
39
68
            }
40
41
104
            if (*it == '$') {
42
56
                ++it;
43
                // Positional specifier, like %8$s
44
56
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
48
                count_pos = std::max(count_pos, maybe_num);
46
48
            } else {
47
                // Non-positional specifier, like %s
48
48
                ++count_normal;
49
48
            }
50
104
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)::'lambda'()::operator()() const
Line
Count
Source
33
4
        auto add_arg = [&] {
34
4
            unsigned maybe_num{0};
35
7
            while ('0' <= *it && *it <= '9') {
36
3
                maybe_num *= 10;
37
3
                maybe_num += *it - '0';
38
3
                ++it;
39
3
            }
40
41
4
            if (*it == '$') {
42
3
                ++it;
43
                // Positional specifier, like %8$s
44
3
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
1
                count_pos = std::max(count_pos, maybe_num);
46
1
            } else {
47
                // Non-positional specifier, like %s
48
1
                ++count_normal;
49
1
            }
50
4
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)::'lambda'()::operator()() const
Line
Count
Source
33
41
        auto add_arg = [&] {
34
41
            unsigned maybe_num{0};
35
64
            while ('0' <= *it && *it <= '9') {
36
23
                maybe_num *= 10;
37
23
                maybe_num += *it - '0';
38
23
                ++it;
39
23
            }
40
41
41
            if (*it == '$') {
42
11
                ++it;
43
                // Positional specifier, like %8$s
44
11
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
9
                count_pos = std::max(count_pos, maybe_num);
46
30
            } else {
47
                // Non-positional specifier, like %s
48
30
                ++count_normal;
49
30
            }
50
41
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)::'lambda'()::operator()() const
Line
Count
Source
33
29
        auto add_arg = [&] {
34
29
            unsigned maybe_num{0};
35
46
            while ('0' <= *it && *it <= '9') {
36
17
                maybe_num *= 10;
37
17
                maybe_num += *it - '0';
38
17
                ++it;
39
17
            }
40
41
29
            if (*it == '$') {
42
18
                ++it;
43
                // Positional specifier, like %8$s
44
18
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
16
                count_pos = std::max(count_pos, maybe_num);
46
16
            } else {
47
                // Non-positional specifier, like %s
48
11
                ++count_normal;
49
11
            }
50
29
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<129u>(char const*)::'lambda'()::operator()() const
Line
Count
Source
33
2
        auto add_arg = [&] {
34
2
            unsigned maybe_num{0};
35
6
            while ('0' <= *it && *it <= '9') {
36
4
                maybe_num *= 10;
37
4
                maybe_num += *it - '0';
38
4
                ++it;
39
4
            }
40
41
2
            if (*it == '$') {
42
2
                ++it;
43
                // Positional specifier, like %8$s
44
2
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
2
                count_pos = std::max(count_pos, maybe_num);
46
2
            } else {
47
                // Non-positional specifier, like %s
48
0
                ++count_normal;
49
0
            }
50
2
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)::'lambda'()::operator()() const
Line
Count
Source
33
25
        auto add_arg = [&] {
34
25
            unsigned maybe_num{0};
35
43
            while ('0' <= *it && *it <= '9') {
36
18
                maybe_num *= 10;
37
18
                maybe_num += *it - '0';
38
18
                ++it;
39
18
            }
40
41
25
            if (*it == '$') {
42
19
                ++it;
43
                // Positional specifier, like %8$s
44
19
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
17
                count_pos = std::max(count_pos, maybe_num);
46
17
            } else {
47
                // Non-positional specifier, like %s
48
6
                ++count_normal;
49
6
            }
50
25
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)::'lambda'()::operator()() const
Line
Count
Source
33
3
        auto add_arg = [&] {
34
3
            unsigned maybe_num{0};
35
6
            while ('0' <= *it && *it <= '9') {
36
3
                maybe_num *= 10;
37
3
                maybe_num += *it - '0';
38
3
                ++it;
39
3
            }
40
41
3
            if (*it == '$') {
42
3
                ++it;
43
                // Positional specifier, like %8$s
44
3
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
3
                count_pos = std::max(count_pos, maybe_num);
46
3
            } else {
47
                // Non-positional specifier, like %s
48
0
                ++count_normal;
49
0
            }
50
3
        };
51
52
        // Increase argument count and consume positional specifier, if present.
53
70
        add_arg();
54
55
        // Consume flags.
56
84
        while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it;
57
58
90
        auto parse_size = [&] {
59
90
            if (*it == '*') {
60
34
                ++it;
61
34
                add_arg();
62
56
            } else {
63
68
                while ('0' <= *it && *it <= '9') ++it;
64
56
            }
65
90
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)::'lambda0'()::operator()() const
Line
Count
Source
58
2
        auto parse_size = [&] {
59
2
            if (*it == '*') {
60
0
                ++it;
61
0
                add_arg();
62
2
            } else {
63
2
                while ('0' <= *it && *it <= '9') ++it;
64
2
            }
65
2
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)::'lambda0'()::operator()() const
Line
Count
Source
58
43
        auto parse_size = [&] {
59
43
            if (*it == '*') {
60
5
                ++it;
61
5
                add_arg();
62
38
            } else {
63
46
                while ('0' <= *it && *it <= '9') ++it;
64
38
            }
65
43
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)::'lambda0'()::operator()() const
Line
Count
Source
58
22
        auto parse_size = [&] {
59
22
            if (*it == '*') {
60
12
                ++it;
61
12
                add_arg();
62
12
            } else {
63
11
                while ('0' <= *it && *it <= '9') ++it;
64
10
            }
65
22
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<129u>(char const*)::'lambda0'()::operator()() const
Line
Count
Source
58
2
        auto parse_size = [&] {
59
2
            if (*it == '*') {
60
0
                ++it;
61
0
                add_arg();
62
2
            } else {
63
2
                while ('0' <= *it && *it <= '9') ++it;
64
2
            }
65
2
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)::'lambda0'()::operator()() const
Line
Count
Source
58
19
        auto parse_size = [&] {
59
19
            if (*it == '*') {
60
15
                ++it;
61
15
                add_arg();
62
15
            } else {
63
7
                while ('0' <= *it && *it <= '9') ++it;
64
4
            }
65
19
        };
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)::'lambda0'()::operator()() const
Line
Count
Source
58
2
        auto parse_size = [&] {
59
2
            if (*it == '*') {
60
2
                ++it;
61
2
                add_arg();
62
2
            } else {
63
0
                while ('0' <= *it && *it <= '9') ++it;
64
0
            }
65
2
        };
66
67
        // Consume dynamic or static width value.
68
70
        parse_size();
69
70
        // Consume dynamic or static precision value.
71
70
        if (*it == '.') {
72
24
            ++it;
73
24
            parse_size();
74
24
        }
75
76
70
        if (*it == '\0') throw "Format specifier incorrectly terminated by end of string";
77
78
        // Length and type in "[flags][width][.precision][length]type"
79
        // is not checked. Parsing continues with the next '%'.
80
70
    }
81
59
    if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!";
82
54
    unsigned count{count_normal | count_pos};
83
54
    if (num_params != count) throw "Format specifier count must match the argument count!";
84
54
}
Unexecuted instantiation: main.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: main.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: addrman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: addrman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: addrman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: argsman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: argsman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: banman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: banman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: base58_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: base58_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: baseindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: baseindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: bip32_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: bip32_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: bip324_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: bip324_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockchain_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockchain_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockencodings_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockencodings_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockfilter_index_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockfilter_index_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockfilter_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockmanager_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: blockmanager_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: bloom_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: bloom_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: btcsignals_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: btcsignals_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: chain_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: chain_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: chainstate_write_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: chainstate_write_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: checkqueue_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: checkqueue_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: cluster_linearize_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: cluster_linearize_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coins_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coins_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coinscachepair_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coinstatsindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coinstatsindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coinsviewoverlay_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coinsviewoverlay_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: compress_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: compress_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: crypto_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: crypto_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: cuckoocache_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: cuckoocache_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: dbwrapper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: dbwrapper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: dbwrapper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: denialofservice_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: denialofservice_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: descriptor_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: descriptor_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: disconnected_transactions.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: disconnected_transactions.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: flatfile_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: flatfile_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: fs_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: fs_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: getarg_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: getarg_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: hash_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: hash_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: headers_sync_chainwork_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: headers_sync_chainwork_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: httpserver_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: httpserver_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: i2p_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: i2p_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: interfaces_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: interfaces_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: key_io_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: key_io_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: key_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: key_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: logging_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: logging_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: logging_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: logging_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: logging_tests.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: mempool_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mempool_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: merkle_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: merkle_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: merkleblock_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: merkleblock_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: miner_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: miner_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: miniminer_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: miniminer_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: miniscript_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: miniscript_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: minisketch_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: minisketch_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: multisig_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: multisig_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: bip328_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: bip328_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: net_peer_connection_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: net_peer_connection_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: net_peer_eviction_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: net_peer_eviction_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: net_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: net_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: netbase_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: netbase_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: node_init_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: node_init_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: node_warnings_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: node_warnings_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: orphanage_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: orphanage_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: pcp_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: pcp_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: peerman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: peerman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: pmt_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: pmt_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: policyestimator_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: policyestimator_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: pool_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: pool_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: pow_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: pow_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: prevector_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: prevector_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: private_broadcast_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: private_broadcast_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: psbt_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: psbt_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: random_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: random_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rbf_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rbf_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: rest_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: rest_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: result_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rpc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rpc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: sanity_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: sanity_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: script_assets_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: script_p2sh_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: script_p2sh_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: script_segwit_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: script_segwit_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: script_standard_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: script_standard_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: script_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: script_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: scriptnum_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: scriptnum_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: serfloat_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: serfloat_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: serialize_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: serialize_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: settings_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: settings_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: sighash_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: sighash_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: sigopcount_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: sigopcount_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: skiplist_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: skiplist_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: sock_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: sock_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: streams_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: streams_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: system_ram_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: system_ram_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: system_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: system_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: system_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: testnet4_miner_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: testnet4_miner_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: threadpool_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: threadpool_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: timeoffsets_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: timeoffsets_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: transaction_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: transaction_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: translation_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txdownload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txdownload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txdownload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*)
Unexecuted instantiation: txdownload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: txindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txospenderindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txospenderindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txpackage_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txpackage_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txreconciliation_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txreconciliation_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txrequest_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txrequest_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txrequest_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: txvalidation_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txvalidation_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txvalidation_tests.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: txvalidationcache_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: txvalidationcache_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: uint256_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: util_expected_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: util_expected_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Line
Count
Source
27
9
{
28
9
    unsigned count_normal{0}; // Number of "normal" specifiers, like %s
29
9
    unsigned count_pos{0};    // Max number in positional specifier, like %8$s
30
22
    for (auto it{str}; *it != '\0'; ++it) {
31
13
        if (*it != '%' || *++it == '%') continue; // Skip escaped %%
32
33
4
        auto add_arg = [&] {
34
4
            unsigned maybe_num{0};
35
4
            while ('0' <= *it && *it <= '9') {
36
4
                maybe_num *= 10;
37
4
                maybe_num += *it - '0';
38
4
                ++it;
39
4
            }
40
41
4
            if (*it == '$') {
42
4
                ++it;
43
                // Positional specifier, like %8$s
44
4
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
4
                count_pos = std::max(count_pos, maybe_num);
46
4
            } else {
47
                // Non-positional specifier, like %s
48
4
                ++count_normal;
49
4
            }
50
4
        };
51
52
        // Increase argument count and consume positional specifier, if present.
53
4
        add_arg();
54
55
        // Consume flags.
56
4
        while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it;
57
58
4
        auto parse_size = [&] {
59
4
            if (*it == '*') {
60
4
                ++it;
61
4
                add_arg();
62
4
            } else {
63
4
                while ('0' <= *it && *it <= '9') ++it;
64
4
            }
65
4
        };
66
67
        // Consume dynamic or static width value.
68
4
        parse_size();
69
70
        // Consume dynamic or static precision value.
71
4
        if (*it == '.') {
72
0
            ++it;
73
0
            parse_size();
74
0
        }
75
76
4
        if (*it == '\0') throw "Format specifier incorrectly terminated by end of string";
77
78
        // Length and type in "[flags][width][.precision][length]type"
79
        // is not checked. Parsing continues with the next '%'.
80
4
    }
81
9
    if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!";
82
9
    unsigned count{count_normal | count_pos};
83
9
    if (num_params != count) throw "Format specifier count must match the argument count!";
84
9
}
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Line
Count
Source
27
35
{
28
35
    unsigned count_normal{0}; // Number of "normal" specifiers, like %s
29
35
    unsigned count_pos{0};    // Max number in positional specifier, like %8$s
30
64
    for (auto it{str}; *it != '\0'; ++it) {
31
39
        if (*it != '%' || *++it == '%') continue; // Skip escaped %%
32
33
36
        auto add_arg = [&] {
34
36
            unsigned maybe_num{0};
35
36
            while ('0' <= *it && *it <= '9') {
36
36
                maybe_num *= 10;
37
36
                maybe_num += *it - '0';
38
36
                ++it;
39
36
            }
40
41
36
            if (*it == '$') {
42
36
                ++it;
43
                // Positional specifier, like %8$s
44
36
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
36
                count_pos = std::max(count_pos, maybe_num);
46
36
            } else {
47
                // Non-positional specifier, like %s
48
36
                ++count_normal;
49
36
            }
50
36
        };
51
52
        // Increase argument count and consume positional specifier, if present.
53
36
        add_arg();
54
55
        // Consume flags.
56
40
        while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it;
57
58
36
        auto parse_size = [&] {
59
36
            if (*it == '*') {
60
36
                ++it;
61
36
                add_arg();
62
36
            } else {
63
36
                while ('0' <= *it && *it <= '9') ++it;
64
36
            }
65
36
        };
66
67
        // Consume dynamic or static width value.
68
36
        parse_size();
69
70
        // Consume dynamic or static precision value.
71
36
        if (*it == '.') {
72
9
            ++it;
73
9
            parse_size();
74
9
        }
75
76
36
        if (*it == '\0') throw "Format specifier incorrectly terminated by end of string";
77
78
        // Length and type in "[flags][width][.precision][length]type"
79
        // is not checked. Parsing continues with the next '%'.
80
36
    }
81
25
    if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!";
82
24
    unsigned count{count_normal | count_pos};
83
24
    if (num_params != count) throw "Format specifier count must match the argument count!";
84
24
}
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Line
Count
Source
27
16
{
28
16
    unsigned count_normal{0}; // Number of "normal" specifiers, like %s
29
16
    unsigned count_pos{0};    // Max number in positional specifier, like %8$s
30
35
    for (auto it{str}; *it != '\0'; ++it) {
31
22
        if (*it != '%' || *++it == '%') continue; // Skip escaped %%
32
33
17
        auto add_arg = [&] {
34
17
            unsigned maybe_num{0};
35
17
            while ('0' <= *it && *it <= '9') {
36
17
                maybe_num *= 10;
37
17
                maybe_num += *it - '0';
38
17
                ++it;
39
17
            }
40
41
17
            if (*it == '$') {
42
17
                ++it;
43
                // Positional specifier, like %8$s
44
17
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
17
                count_pos = std::max(count_pos, maybe_num);
46
17
            } else {
47
                // Non-positional specifier, like %s
48
17
                ++count_normal;
49
17
            }
50
17
        };
51
52
        // Increase argument count and consume positional specifier, if present.
53
17
        add_arg();
54
55
        // Consume flags.
56
18
        while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it;
57
58
17
        auto parse_size = [&] {
59
17
            if (*it == '*') {
60
17
                ++it;
61
17
                add_arg();
62
17
            } else {
63
17
                while ('0' <= *it && *it <= '9') ++it;
64
17
            }
65
17
        };
66
67
        // Consume dynamic or static width value.
68
17
        parse_size();
69
70
        // Consume dynamic or static precision value.
71
17
        if (*it == '.') {
72
5
            ++it;
73
5
            parse_size();
74
5
        }
75
76
17
        if (*it == '\0') throw "Format specifier incorrectly terminated by end of string";
77
78
        // Length and type in "[flags][width][.precision][length]type"
79
        // is not checked. Parsing continues with the next '%'.
80
17
    }
81
13
    if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!";
82
9
    unsigned count{count_normal | count_pos};
83
9
    if (num_params != count) throw "Format specifier count must match the argument count!";
84
9
}
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<129u>(char const*)
Line
Count
Source
27
1
{
28
1
    unsigned count_normal{0}; // Number of "normal" specifiers, like %s
29
1
    unsigned count_pos{0};    // Max number in positional specifier, like %8$s
30
10
    for (auto it{str}; *it != '\0'; ++it) {
31
9
        if (*it != '%' || *++it == '%') continue; // Skip escaped %%
32
33
2
        auto add_arg = [&] {
34
2
            unsigned maybe_num{0};
35
2
            while ('0' <= *it && *it <= '9') {
36
2
                maybe_num *= 10;
37
2
                maybe_num += *it - '0';
38
2
                ++it;
39
2
            }
40
41
2
            if (*it == '$') {
42
2
                ++it;
43
                // Positional specifier, like %8$s
44
2
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
2
                count_pos = std::max(count_pos, maybe_num);
46
2
            } else {
47
                // Non-positional specifier, like %s
48
2
                ++count_normal;
49
2
            }
50
2
        };
51
52
        // Increase argument count and consume positional specifier, if present.
53
2
        add_arg();
54
55
        // Consume flags.
56
2
        while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it;
57
58
2
        auto parse_size = [&] {
59
2
            if (*it == '*') {
60
2
                ++it;
61
2
                add_arg();
62
2
            } else {
63
2
                while ('0' <= *it && *it <= '9') ++it;
64
2
            }
65
2
        };
66
67
        // Consume dynamic or static width value.
68
2
        parse_size();
69
70
        // Consume dynamic or static precision value.
71
2
        if (*it == '.') {
72
0
            ++it;
73
0
            parse_size();
74
0
        }
75
76
2
        if (*it == '\0') throw "Format specifier incorrectly terminated by end of string";
77
78
        // Length and type in "[flags][width][.precision][length]type"
79
        // is not checked. Parsing continues with the next '%'.
80
2
    }
81
1
    if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!";
82
1
    unsigned count{count_normal | count_pos};
83
1
    if (num_params != count) throw "Format specifier count must match the argument count!";
84
1
}
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Line
Count
Source
27
10
{
28
10
    unsigned count_normal{0}; // Number of "normal" specifiers, like %s
29
10
    unsigned count_pos{0};    // Max number in positional specifier, like %8$s
30
24
    for (auto it{str}; *it != '\0'; ++it) {
31
14
        if (*it != '%' || *++it == '%') continue; // Skip escaped %%
32
33
10
        auto add_arg = [&] {
34
10
            unsigned maybe_num{0};
35
10
            while ('0' <= *it && *it <= '9') {
36
10
                maybe_num *= 10;
37
10
                maybe_num += *it - '0';
38
10
                ++it;
39
10
            }
40
41
10
            if (*it == '$') {
42
10
                ++it;
43
                // Positional specifier, like %8$s
44
10
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
10
                count_pos = std::max(count_pos, maybe_num);
46
10
            } else {
47
                // Non-positional specifier, like %s
48
10
                ++count_normal;
49
10
            }
50
10
        };
51
52
        // Increase argument count and consume positional specifier, if present.
53
10
        add_arg();
54
55
        // Consume flags.
56
19
        while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it;
57
58
10
        auto parse_size = [&] {
59
10
            if (*it == '*') {
60
10
                ++it;
61
10
                add_arg();
62
10
            } else {
63
10
                while ('0' <= *it && *it <= '9') ++it;
64
10
            }
65
10
        };
66
67
        // Consume dynamic or static width value.
68
10
        parse_size();
69
70
        // Consume dynamic or static precision value.
71
10
        if (*it == '.') {
72
9
            ++it;
73
9
            parse_size();
74
9
        }
75
76
10
        if (*it == '\0') throw "Format specifier incorrectly terminated by end of string";
77
78
        // Length and type in "[flags][width][.precision][length]type"
79
        // is not checked. Parsing continues with the next '%'.
80
10
    }
81
10
    if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!";
82
10
    unsigned count{count_normal | count_pos};
83
10
    if (num_params != count) throw "Format specifier count must match the argument count!";
84
10
}
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Line
Count
Source
27
1
{
28
1
    unsigned count_normal{0}; // Number of "normal" specifiers, like %s
29
1
    unsigned count_pos{0};    // Max number in positional specifier, like %8$s
30
2
    for (auto it{str}; *it != '\0'; ++it) {
31
1
        if (*it != '%' || *++it == '%') continue; // Skip escaped %%
32
33
1
        auto add_arg = [&] {
34
1
            unsigned maybe_num{0};
35
1
            while ('0' <= *it && *it <= '9') {
36
1
                maybe_num *= 10;
37
1
                maybe_num += *it - '0';
38
1
                ++it;
39
1
            }
40
41
1
            if (*it == '$') {
42
1
                ++it;
43
                // Positional specifier, like %8$s
44
1
                if (maybe_num == 0) throw "Positional format specifier must have position of at least 1";
45
1
                count_pos = std::max(count_pos, maybe_num);
46
1
            } else {
47
                // Non-positional specifier, like %s
48
1
                ++count_normal;
49
1
            }
50
1
        };
51
52
        // Increase argument count and consume positional specifier, if present.
53
1
        add_arg();
54
55
        // Consume flags.
56
1
        while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it;
57
58
1
        auto parse_size = [&] {
59
1
            if (*it == '*') {
60
1
                ++it;
61
1
                add_arg();
62
1
            } else {
63
1
                while ('0' <= *it && *it <= '9') ++it;
64
1
            }
65
1
        };
66
67
        // Consume dynamic or static width value.
68
1
        parse_size();
69
70
        // Consume dynamic or static precision value.
71
1
        if (*it == '.') {
72
1
            ++it;
73
1
            parse_size();
74
1
        }
75
76
1
        if (*it == '\0') throw "Format specifier incorrectly terminated by end of string";
77
78
        // Length and type in "[flags][width][.precision][length]type"
79
        // is not checked. Parsing continues with the next '%'.
80
1
    }
81
1
    if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!";
82
1
    unsigned count{count_normal | count_pos};
83
1
    if (num_params != count) throw "Format specifier count must match the argument count!";
84
1
}
Unexecuted instantiation: util_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: util_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: util_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: util_trace_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: util_trace_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validation_block_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validation_block_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validation_chainstate_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validation_chainstate_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validation_chainstatemanager_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validation_chainstatemanager_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validation_flush_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validation_flush_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validation_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validation_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: validationinterface_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validationinterface_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: versionbits_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: versionbits_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: versionbits_tests.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: versionbits_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: init_test_fixture.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: init_test_fixture.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: wallet_test_fixture.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: wallet_test_fixture.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: wallet_test_fixture.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: wallet_test_fixture.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: db_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: db_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coinselector_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coinselector_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coinselector_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: coinselector_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: coinselection_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: coinselection_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coinselection_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: coinselection_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: feebumper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: feebumper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: feebumper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: feebumper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: group_outputs_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: group_outputs_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: group_outputs_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: group_outputs_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: init_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: init_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: ismine_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: ismine_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: ismine_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: ismine_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: psbt_wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: psbt_wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: psbt_wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: psbt_wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: scriptpubkeyman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: scriptpubkeyman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: scriptpubkeyman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: scriptpubkeyman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: spend_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: spend_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: spend_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: spend_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: wallet_crypto_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: wallet_crypto_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: wallet_rpc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: wallet_rpc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: wallet_rpc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: wallet_rpc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: wallet_transaction_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: wallet_transaction_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: wallet_transaction_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: wallet_transaction_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: walletdb_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: walletdb_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: walletdb_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: walletdb_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: walletload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: walletload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: walletload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: walletload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: ipc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: ipc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: blockfilter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: logging.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: random.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: setup_common.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: setup_common.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: transaction_utils.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: client.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: 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: 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: tx_verify.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: tx_verify.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: 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: 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: 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: 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: base.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: base.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: 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: 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: 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: 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<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: 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: 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: 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: mining_args.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: mining_args.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)
Unexecuted instantiation: mini_miner.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: minisketchwrapper.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: utxo_snapshot.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: utxo_snapshot.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: ephemeral_policy.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: ephemeral_policy.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<1u>(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: truc_policy.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: 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: fees.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: 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: sigcache.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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<0u>(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<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: 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: 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: coin.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: block.cpp:void util::detail::CheckNumFormatSpecifiers<8u>(char const*)
Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: interpreter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: interfaces.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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: 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: 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: 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<1u>(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: spend.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(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: db.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: db.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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: feebumper.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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<4u>(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: 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: 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: 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: 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: 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: 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: ipc_test.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: ipc_test.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: ipc_test.capnp.proxy-client.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: ipc_test.capnp.proxy-types.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: ipc_test.capnp.proxy-server.c++:void util::detail::CheckNumFormatSpecifiers<1u>(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: process.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: process.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: process.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: init.capnp.proxy-client.c++:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: init.capnp.proxy-client.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: init.capnp.proxy-types.c++:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: init.capnp.proxy-types.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mining.capnp.proxy-types.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rpc.capnp.proxy-types.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: init.capnp.proxy-server.c++:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: init.capnp.proxy-server.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mining.capnp.proxy-client.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: mining.capnp.proxy-server.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rpc.capnp.proxy-client.c++:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rpc.capnp.proxy-server.c++:void util::detail::CheckNumFormatSpecifiers<1u>(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: 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: run_command.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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: 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: rawtransaction_util.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: rawtransaction_util.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: sign.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: 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<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: sync.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: sync.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)
Unexecuted instantiation: sync.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: sync.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*)
Unexecuted instantiation: sync.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)
Unexecuted instantiation: sync.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: clientversion.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)
Unexecuted instantiation: clientversion.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
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: license_info.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)
Unexecuted instantiation: license_info.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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.76M
{
121
1.76M
    std::vector<T> ret;
122
1.76M
    auto it = sp.begin();
123
1.76M
    auto start = it;
124
25.9M
    while (it != sp.end()) {
125
24.1M
        if (separators.find(*it) != std::string::npos) {
126
770k
            if (include_sep) {
127
163
                ret.emplace_back(start, it + 1);
128
770k
            } else {
129
770k
                ret.emplace_back(start, it);
130
770k
            }
131
770k
            start = it + 1;
132
770k
        }
133
24.1M
        ++it;
134
24.1M
    }
135
1.76M
    ret.emplace_back(start, it);
136
1.76M
    return ret;
137
1.76M
}
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
1.23M
{
121
1.23M
    std::vector<T> ret;
122
1.23M
    auto it = sp.begin();
123
1.23M
    auto start = it;
124
12.3M
    while (it != sp.end()) {
125
11.1M
        if (separators.find(*it) != std::string::npos) {
126
38.3k
            if (include_sep) {
127
0
                ret.emplace_back(start, it + 1);
128
38.3k
            } else {
129
38.3k
                ret.emplace_back(start, it);
130
38.3k
            }
131
38.3k
            start = it + 1;
132
38.3k
        }
133
11.1M
        ++it;
134
11.1M
    }
135
1.23M
    ret.emplace_back(start, it);
136
1.23M
    return ret;
137
1.23M
}
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)
Line
Count
Source
120
74.0k
{
121
74.0k
    std::vector<T> ret;
122
74.0k
    auto it = sp.begin();
123
74.0k
    auto start = it;
124
8.59M
    while (it != sp.end()) {
125
8.51M
        if (separators.find(*it) != std::string::npos) {
126
49.3k
            if (include_sep) {
127
163
                ret.emplace_back(start, it + 1);
128
49.1k
            } else {
129
49.1k
                ret.emplace_back(start, it);
130
49.1k
            }
131
49.3k
            start = it + 1;
132
49.3k
        }
133
8.51M
        ++it;
134
8.51M
    }
135
74.0k
    ret.emplace_back(start, it);
136
74.0k
    return ret;
137
74.0k
}
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
455k
{
121
455k
    std::vector<T> ret;
122
455k
    auto it = sp.begin();
123
455k
    auto start = it;
124
5.02M
    while (it != sp.end()) {
125
4.56M
        if (separators.find(*it) != std::string::npos) {
126
683k
            if (include_sep) {
127
0
                ret.emplace_back(start, it + 1);
128
683k
            } else {
129
683k
                ret.emplace_back(start, it);
130
683k
            }
131
683k
            start = it + 1;
132
683k
        }
133
4.56M
        ++it;
134
4.56M
    }
135
455k
    ret.emplace_back(start, it);
136
455k
    return ret;
137
455k
}
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
1.30M
{
149
1.30M
    return Split<T>(sp, std::string_view{&sep, 1}, include_sep);
150
1.30M
}
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
1.22M
{
149
1.22M
    return Split<T>(sp, std::string_view{&sep, 1}, include_sep);
150
1.22M
}
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)
Line
Count
Source
148
73.7k
{
149
73.7k
    return Split<T>(sp, std::string_view{&sep, 1}, include_sep);
150
73.7k
}
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)
Line
Count
Source
148
50
{
149
50
    return Split<T>(sp, std::string_view{&sep, 1}, include_sep);
150
50
}
151
152
[[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, char sep)
153
1.22M
{
154
1.22M
    return Split<std::string>(str, sep);
155
1.22M
}
156
157
[[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, std::string_view separators)
158
2.82k
{
159
2.82k
    return Split<std::string>(str, separators);
160
2.82k
}
161
162
[[nodiscard]] inline std::string_view TrimStringView(std::string_view str, std::string_view pattern = " \f\n\r\t\v")
163
2.62M
{
164
2.62M
    std::string::size_type front = str.find_first_not_of(pattern);
165
2.62M
    if (front == std::string::npos) {
166
87
        return {};
167
87
    }
168
2.62M
    std::string::size_type end = str.find_last_not_of(pattern);
169
2.62M
    return str.substr(front, end - front + 1);
170
2.62M
}
171
172
[[nodiscard]] inline std::string TrimString(std::string_view str, std::string_view pattern = " \f\n\r\t\v")
173
1.85M
{
174
1.85M
    return std::string(TrimStringView(str, pattern));
175
1.85M
}
176
177
[[nodiscard]] inline std::string_view RemoveSuffixView(std::string_view str, std::string_view suffix)
178
3.65M
{
179
3.65M
    if (str.ends_with(suffix)) {
180
3.65M
        return str.substr(0, str.size() - suffix.size());
181
3.65M
    }
182
896
    return str;
183
3.65M
}
184
185
[[nodiscard]] inline std::string_view RemovePrefixView(std::string_view str, std::string_view prefix)
186
6.02M
{
187
6.02M
    if (str.starts_with(prefix)) {
188
65
        return str.substr(prefix.size());
189
65
    }
190
6.02M
    return str;
191
6.02M
}
192
193
[[nodiscard]] inline std::string RemovePrefix(std::string_view str, std::string_view prefix)
194
11
{
195
11
    return std::string(RemovePrefixView(str, prefix));
196
11
}
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
285k
{
210
285k
    decltype(unary_op(*container.begin())) ret;
211
285k
    bool first{true};
212
1.25M
    for (const auto& item : container) {
213
1.25M
        if (!first) ret += separator;
214
1.25M
        ret += unary_op(item);
215
1.25M
        first = false;
216
1.25M
    }
217
285k
    return ret;
218
285k
}
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&)>(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&))
Line
Count
Source
209
2.38k
{
210
2.38k
    decltype(unary_op(*container.begin())) ret;
211
2.38k
    bool first{true};
212
14.2k
    for (const auto& item : container) {
213
14.2k
        if (!first) ret += separator;
214
14.2k
        ret += unary_op(item);
215
14.2k
        first = false;
216
14.2k
    }
217
2.38k
    return ret;
218
2.38k
}
auto util::Join<std::vector<LogCategory, std::allocator<LogCategory>>, char [3], BCLog::Logger::LogCategoriesString[abi:cxx11]() const::'lambda'(LogCategory const&)>(std::vector<LogCategory, std::allocator<LogCategory>> const&, char const (&) [3], BCLog::Logger::LogCategoriesString[abi:cxx11]() const::'lambda'(LogCategory const&))
Line
Count
Source
209
6.20k
{
210
6.20k
    decltype(unary_op(*container.begin())) ret;
211
6.20k
    bool first{true};
212
186k
    for (const auto& item : container) {
213
186k
        if (!first) ret += separator;
214
186k
        ret += unary_op(item);
215
186k
        first = false;
216
186k
    }
217
6.20k
    return ret;
218
6.20k
}
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], 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'(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&)>(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], 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'(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&))
Line
Count
Source
209
184
{
210
184
    decltype(unary_op(*container.begin())) ret;
211
184
    bool first{true};
212
226
    for (const auto& item : container) {
213
226
        if (!first) ret += separator;
214
226
        ret += unary_op(item);
215
226
        first = false;
216
226
    }
217
184
    return ret;
218
184
}
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], 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'(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&)>(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], 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'(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&))
Line
Count
Source
209
114k
{
210
114k
    decltype(unary_op(*container.begin())) ret;
211
114k
    bool first{true};
212
920k
    for (const auto& item : container) {
213
920k
        if (!first) ret += separator;
214
920k
        ret += unary_op(item);
215
920k
        first = false;
216
920k
    }
217
114k
    return ret;
218
114k
}
util_tests.cpp:auto util::Join<std::__cxx11::list<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_tests::util_Join::test_method()::$_0>(std::__cxx11::list<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_tests::util_Join::test_method()::$_0)
Line
Count
Source
209
6
{
210
6
    decltype(unary_op(*container.begin())) ret;
211
6
    bool first{true};
212
6
    for (const auto& item : container) {
213
6
        if (!first) ret += separator;
214
6
        ret += unary_op(item);
215
6
        first = false;
216
6
    }
217
6
    return ret;
218
6
}
coinselection_tests.cpp:auto util::Join<std::set<std::shared_ptr<wallet::COutput>, wallet::OutputPtrComparator, std::allocator<std::shared_ptr<wallet::COutput>>>, char [2], wallet::coinselection_tests::InputAmountsToString[abi:cxx11](wallet::SelectionResult const&)::$_0>(std::set<std::shared_ptr<wallet::COutput>, wallet::OutputPtrComparator, std::allocator<std::shared_ptr<wallet::COutput>>> const&, char const (&) [2], wallet::coinselection_tests::InputAmountsToString[abi:cxx11](wallet::SelectionResult const&)::$_0)
Line
Count
Source
209
208
{
210
208
    decltype(unary_op(*container.begin())) ret;
211
208
    bool first{true};
212
636
    for (const auto& item : container) {
213
636
        if (!first) ret += separator;
214
636
        ret += unary_op(item);
215
636
        first = false;
216
636
    }
217
208
    return ret;
218
208
}
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
1.32k
{
210
1.32k
    decltype(unary_op(*container.begin())) ret;
211
1.32k
    bool first{true};
212
1.32k
    for (const auto& item : container) {
213
1.32k
        if (!first) ret += separator;
214
1.32k
        ret += unary_op(item);
215
1.32k
        first = false;
216
1.32k
    }
217
1.32k
    return ret;
218
1.32k
}
auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str>>, bilingual_str, 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'(std::vector<bilingual_str, std::allocator<bilingual_str>> const&)>(std::vector<bilingual_str, std::allocator<bilingual_str>> const&, bilingual_str const&, 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'(std::vector<bilingual_str, std::allocator<bilingual_str>> const&))
Line
Count
Source
209
123k
{
210
123k
    decltype(unary_op(*container.begin())) ret;
211
123k
    bool first{true};
212
123k
    for (const auto& item : container) {
213
146
        if (!first) ret += separator;
214
146
        ret += unary_op(item);
215
146
        first = false;
216
146
    }
217
123k
    return ret;
218
123k
}
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)
Line
Count
Source
209
14
{
210
14
    decltype(unary_op(*container.begin())) ret;
211
14
    bool first{true};
212
42
    for (const auto& item : container) {
213
42
        if (!first) ret += separator;
214
42
        ret += unary_op(item);
215
42
        first = false;
216
42
    }
217
14
    return ret;
218
14
}
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
13.5k
{
210
13.5k
    decltype(unary_op(*container.begin())) ret;
211
13.5k
    bool first{true};
212
40.6k
    for (const auto& item : container) {
213
40.6k
        if (!first) ret += separator;
214
40.6k
        ret += unary_op(item);
215
40.6k
        first = false;
216
40.6k
    }
217
13.5k
    return ret;
218
13.5k
}
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
21.7k
{
210
21.7k
    decltype(unary_op(*container.begin())) ret;
211
21.7k
    bool first{true};
212
87.0k
    for (const auto& item : container) {
213
87.0k
        if (!first) ret += separator;
214
87.0k
        ret += unary_op(item);
215
87.0k
        first = false;
216
87.0k
    }
217
21.7k
    return ret;
218
21.7k
}
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)
Line
Count
Source
209
165
{
210
165
    decltype(unary_op(*container.begin())) ret;
211
165
    bool first{true};
212
368
    for (const auto& item : container) {
213
368
        if (!first) ret += separator;
214
368
        ret += unary_op(item);
215
368
        first = false;
216
368
    }
217
165
    return ret;
218
165
}
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
1.90k
{
210
1.90k
    decltype(unary_op(*container.begin())) ret;
211
1.90k
    bool first{true};
212
5.71k
    for (const auto& item : container) {
213
5.71k
        if (!first) ret += separator;
214
5.71k
        ret += unary_op(item);
215
5.71k
        first = false;
216
5.71k
    }
217
1.90k
    return ret;
218
1.90k
}
219
220
template <typename C, typename S>
221
auto Join(const C& container, const S& separator)
222
238k
{
223
920k
    return Join(container, separator, [](const auto& i) { return i; });
auto 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'(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&)::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>(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&) const
Line
Count
Source
223
226
    return Join(container, separator, [](const auto& i) { return i; });
auto 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'(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&)::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>(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&) const
Line
Count
Source
223
920k
    return Join(container, separator, [](const auto& i) { return i; });
auto 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'(std::vector<bilingual_str, std::allocator<bilingual_str>> const&)::operator()<bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str>> const&) const
Line
Count
Source
223
146
    return Join(container, separator, [](const auto& i) { return i; });
224
238k
}
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])
Line
Count
Source
222
184
{
223
184
    return Join(container, separator, [](const auto& i) { return i; });
224
184
}
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
114k
{
223
114k
    return Join(container, separator, [](const auto& i) { return i; });
224
114k
}
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
123k
{
223
123k
    return Join(container, separator, [](const auto& i) { return i; });
224
123k
}
225
226
/**
227
 * Create an unordered multi-line list of items.
228
 */
229
inline std::string MakeUnorderedList(const std::vector<std::string>& items)
230
2.38k
{
231
14.2k
    return Join(items, "\n", [](const std::string& item) { return "- " + item; });
232
2.38k
}
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
197k
{
239
3.92M
    for (auto c : str) {
240
3.92M
        if (c == 0) return false;
241
3.92M
    }
242
197k
    return true;
243
197k
}
244
245
/**
246
 * Locale-independent version of std::to_string
247
 */
248
template <typename T>
249
std::string ToString(const T& t)
250
442k
{
251
442k
    std::ostringstream oss;
252
442k
    oss.imbue(std::locale::classic());
253
442k
    oss << t;
254
442k
    return oss.str();
255
442k
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<unsigned int>(unsigned int const&)
Line
Count
Source
250
9.11k
{
251
9.11k
    std::ostringstream oss;
252
9.11k
    oss.imbue(std::locale::classic());
253
9.11k
    oss << t;
254
9.11k
    return oss.str();
255
9.11k
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<int>(int const&)
Line
Count
Source
250
223k
{
251
223k
    std::ostringstream oss;
252
223k
    oss.imbue(std::locale::classic());
253
223k
    oss << t;
254
223k
    return oss.str();
255
223k
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<double>(double const&)
Line
Count
Source
250
10
{
251
10
    std::ostringstream oss;
252
10
    oss.imbue(std::locale::classic());
253
10
    oss << t;
254
10
    return oss.str();
255
10
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<unsigned long>(unsigned long const&)
Line
Count
Source
250
185k
{
251
185k
    std::ostringstream oss;
252
185k
    oss.imbue(std::locale::classic());
253
185k
    oss << t;
254
185k
    return oss.str();
255
185k
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<unsigned short>(unsigned short const&)
Line
Count
Source
250
1
{
251
1
    std::ostringstream oss;
252
1
    oss.imbue(std::locale::classic());
253
1
    oss << t;
254
1
    return oss.str();
255
1
}
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<long>(long const&)
Line
Count
Source
250
23.7k
{
251
23.7k
    std::ostringstream oss;
252
23.7k
    oss.imbue(std::locale::classic());
253
23.7k
    oss << t;
254
23.7k
    return oss.str();
255
23.7k
}
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
4.02M
{
264
4.02M
    return obj.size() >= PREFIX_LEN &&
265
4.02M
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
4.02M
}
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
118
{
264
118
    return obj.size() >= PREFIX_LEN &&
265
118
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
118
}
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.50k
{
264
1.50k
    return obj.size() >= PREFIX_LEN &&
265
1.50k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
1.50k
}
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
10.0k
{
264
10.0k
    return obj.size() >= PREFIX_LEN &&
265
10.0k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
10.0k
}
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
6.58k
{
264
6.58k
    return obj.size() >= PREFIX_LEN &&
265
6.58k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
6.58k
}
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
999k
{
264
999k
    return obj.size() >= PREFIX_LEN &&
265
999k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
999k
}
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
3.00M
{
264
3.00M
    return obj.size() >= PREFIX_LEN &&
265
3.00M
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
3.00M
}
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.93k
{
264
2.93k
    return obj.size() >= PREFIX_LEN &&
265
2.93k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
2.93k
}
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.88k
{
264
1.88k
    return obj.size() >= PREFIX_LEN &&
265
1.88k
           std::equal(std::begin(prefix), std::end(prefix), std::begin(obj));
266
1.88k
}
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
1.15k
    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