/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 | | namespace util { |
22 | | namespace detail { |
23 | | template <unsigned num_params> |
24 | | constexpr static void CheckNumFormatSpecifiers(const char* str) |
25 | 72 | { |
26 | 72 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s |
27 | 72 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s |
28 | 157 | for (auto it{str}; *it != '\0'; ++it) { |
29 | 98 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% |
30 | | |
31 | 104 | auto add_arg = [&] { |
32 | 104 | unsigned maybe_num{0}; |
33 | 172 | while ('0' <= *it && *it <= '9') { |
34 | 68 | maybe_num *= 10; |
35 | 68 | maybe_num += *it - '0'; |
36 | 68 | ++it; |
37 | 68 | } |
38 | | |
39 | 104 | if (*it == '$') { |
40 | 56 | ++it; |
41 | | // Positional specifier, like %8$s |
42 | 56 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; |
43 | 48 | count_pos = std::max(count_pos, maybe_num); |
44 | 48 | } else { |
45 | | // Non-positional specifier, like %s |
46 | 48 | ++count_normal; |
47 | 48 | } |
48 | 104 | }; util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)::'lambda'()::operator()() const Line | Count | Source | 31 | 4 | auto add_arg = [&] { | 32 | 4 | unsigned maybe_num{0}; | 33 | 7 | while ('0' <= *it && *it <= '9') { | 34 | 3 | maybe_num *= 10; | 35 | 3 | maybe_num += *it - '0'; | 36 | 3 | ++it; | 37 | 3 | } | 38 | | | 39 | 4 | if (*it == '$') { | 40 | 3 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 3 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 1 | count_pos = std::max(count_pos, maybe_num); | 44 | 1 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 1 | ++count_normal; | 47 | 1 | } | 48 | 4 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)::'lambda'()::operator()() const Line | Count | Source | 31 | 41 | auto add_arg = [&] { | 32 | 41 | unsigned maybe_num{0}; | 33 | 64 | while ('0' <= *it && *it <= '9') { | 34 | 23 | maybe_num *= 10; | 35 | 23 | maybe_num += *it - '0'; | 36 | 23 | ++it; | 37 | 23 | } | 38 | | | 39 | 41 | if (*it == '$') { | 40 | 11 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 11 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 9 | count_pos = std::max(count_pos, maybe_num); | 44 | 30 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 30 | ++count_normal; | 47 | 30 | } | 48 | 41 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)::'lambda'()::operator()() const Line | Count | Source | 31 | 29 | auto add_arg = [&] { | 32 | 29 | unsigned maybe_num{0}; | 33 | 46 | while ('0' <= *it && *it <= '9') { | 34 | 17 | maybe_num *= 10; | 35 | 17 | maybe_num += *it - '0'; | 36 | 17 | ++it; | 37 | 17 | } | 38 | | | 39 | 29 | if (*it == '$') { | 40 | 18 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 18 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 16 | count_pos = std::max(count_pos, maybe_num); | 44 | 16 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 11 | ++count_normal; | 47 | 11 | } | 48 | 29 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<129u>(char const*)::'lambda'()::operator()() const Line | Count | Source | 31 | 2 | auto add_arg = [&] { | 32 | 2 | unsigned maybe_num{0}; | 33 | 6 | while ('0' <= *it && *it <= '9') { | 34 | 4 | maybe_num *= 10; | 35 | 4 | maybe_num += *it - '0'; | 36 | 4 | ++it; | 37 | 4 | } | 38 | | | 39 | 2 | if (*it == '$') { | 40 | 2 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 2 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 2 | count_pos = std::max(count_pos, maybe_num); | 44 | 2 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 0 | ++count_normal; | 47 | 0 | } | 48 | 2 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)::'lambda'()::operator()() const Line | Count | Source | 31 | 25 | auto add_arg = [&] { | 32 | 25 | unsigned maybe_num{0}; | 33 | 43 | while ('0' <= *it && *it <= '9') { | 34 | 18 | maybe_num *= 10; | 35 | 18 | maybe_num += *it - '0'; | 36 | 18 | ++it; | 37 | 18 | } | 38 | | | 39 | 25 | if (*it == '$') { | 40 | 19 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 19 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 17 | count_pos = std::max(count_pos, maybe_num); | 44 | 17 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 6 | ++count_normal; | 47 | 6 | } | 48 | 25 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)::'lambda'()::operator()() const Line | Count | Source | 31 | 3 | auto add_arg = [&] { | 32 | 3 | unsigned maybe_num{0}; | 33 | 6 | while ('0' <= *it && *it <= '9') { | 34 | 3 | maybe_num *= 10; | 35 | 3 | maybe_num += *it - '0'; | 36 | 3 | ++it; | 37 | 3 | } | 38 | | | 39 | 3 | if (*it == '$') { | 40 | 3 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 3 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 3 | count_pos = std::max(count_pos, maybe_num); | 44 | 3 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 0 | ++count_normal; | 47 | 0 | } | 48 | 3 | }; |
|
49 | | |
50 | | // Increase argument count and consume positional specifier, if present. |
51 | 70 | add_arg(); |
52 | | |
53 | | // Consume flags. |
54 | 84 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; |
55 | | |
56 | 90 | auto parse_size = [&] { |
57 | 90 | if (*it == '*') { |
58 | 34 | ++it; |
59 | 34 | add_arg(); |
60 | 56 | } else { |
61 | 68 | while ('0' <= *it && *it <= '9') ++it; |
62 | 56 | } |
63 | 90 | }; util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*)::'lambda0'()::operator()() const Line | Count | Source | 56 | 2 | auto parse_size = [&] { | 57 | 2 | if (*it == '*') { | 58 | 0 | ++it; | 59 | 0 | add_arg(); | 60 | 2 | } else { | 61 | 2 | while ('0' <= *it && *it <= '9') ++it; | 62 | 2 | } | 63 | 2 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*)::'lambda0'()::operator()() const Line | Count | Source | 56 | 43 | auto parse_size = [&] { | 57 | 43 | if (*it == '*') { | 58 | 5 | ++it; | 59 | 5 | add_arg(); | 60 | 38 | } else { | 61 | 46 | while ('0' <= *it && *it <= '9') ++it; | 62 | 38 | } | 63 | 43 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*)::'lambda0'()::operator()() const Line | Count | Source | 56 | 22 | auto parse_size = [&] { | 57 | 22 | if (*it == '*') { | 58 | 12 | ++it; | 59 | 12 | add_arg(); | 60 | 12 | } else { | 61 | 11 | while ('0' <= *it && *it <= '9') ++it; | 62 | 10 | } | 63 | 22 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<129u>(char const*)::'lambda0'()::operator()() const Line | Count | Source | 56 | 2 | auto parse_size = [&] { | 57 | 2 | if (*it == '*') { | 58 | 0 | ++it; | 59 | 0 | add_arg(); | 60 | 2 | } else { | 61 | 2 | while ('0' <= *it && *it <= '9') ++it; | 62 | 2 | } | 63 | 2 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*)::'lambda0'()::operator()() const Line | Count | Source | 56 | 19 | auto parse_size = [&] { | 57 | 19 | if (*it == '*') { | 58 | 15 | ++it; | 59 | 15 | add_arg(); | 60 | 15 | } else { | 61 | 7 | while ('0' <= *it && *it <= '9') ++it; | 62 | 4 | } | 63 | 19 | }; |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*)::'lambda0'()::operator()() const Line | Count | Source | 56 | 2 | auto parse_size = [&] { | 57 | 2 | if (*it == '*') { | 58 | 2 | ++it; | 59 | 2 | add_arg(); | 60 | 2 | } else { | 61 | 0 | while ('0' <= *it && *it <= '9') ++it; | 62 | 0 | } | 63 | 2 | }; |
|
64 | | |
65 | | // Consume dynamic or static width value. |
66 | 70 | parse_size(); |
67 | | |
68 | | // Consume dynamic or static precision value. |
69 | 70 | if (*it == '.') { |
70 | 24 | ++it; |
71 | 24 | parse_size(); |
72 | 24 | } |
73 | | |
74 | 70 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; |
75 | | |
76 | | // Length and type in "[flags][width][.precision][length]type" |
77 | | // is not checked. Parsing continues with the next '%'. |
78 | 70 | } |
79 | 59 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; |
80 | 54 | unsigned count{count_normal | count_pos}; |
81 | 54 | if (num_params != count) throw "Format specifier count must match the argument count!"; |
82 | 54 | } 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: banman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: banman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: bip32_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: blockchain_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: blockencodings_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: bloom_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: cluster_linearize_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coins_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coinstatsindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coinsviewoverlay_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_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<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<1u>(char const*) Unexecuted instantiation: flatfile_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: 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<1u>(char const*) Unexecuted instantiation: key_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: miner_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: miniminer_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: multisig_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: multisig_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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: 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: prevector_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: result_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: rpc_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<1u>(char const*) Unexecuted instantiation: script_p2sh_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: script_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: settings_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: sighash_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: streams_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<3u>(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: 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: txospenderindex_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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<4u>(char const*) Unexecuted instantiation: txvalidation_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*) util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Line | Count | Source | 25 | 9 | { | 26 | 9 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s | 27 | 9 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s | 28 | 22 | for (auto it{str}; *it != '\0'; ++it) { | 29 | 13 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% | 30 | | | 31 | 4 | auto add_arg = [&] { | 32 | 4 | unsigned maybe_num{0}; | 33 | 4 | while ('0' <= *it && *it <= '9') { | 34 | 4 | maybe_num *= 10; | 35 | 4 | maybe_num += *it - '0'; | 36 | 4 | ++it; | 37 | 4 | } | 38 | | | 39 | 4 | if (*it == '$') { | 40 | 4 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 4 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 4 | count_pos = std::max(count_pos, maybe_num); | 44 | 4 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 4 | ++count_normal; | 47 | 4 | } | 48 | 4 | }; | 49 | | | 50 | | // Increase argument count and consume positional specifier, if present. | 51 | 4 | add_arg(); | 52 | | | 53 | | // Consume flags. | 54 | 4 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; | 55 | | | 56 | 4 | auto parse_size = [&] { | 57 | 4 | if (*it == '*') { | 58 | 4 | ++it; | 59 | 4 | add_arg(); | 60 | 4 | } else { | 61 | 4 | while ('0' <= *it && *it <= '9') ++it; | 62 | 4 | } | 63 | 4 | }; | 64 | | | 65 | | // Consume dynamic or static width value. | 66 | 4 | parse_size(); | 67 | | | 68 | | // Consume dynamic or static precision value. | 69 | 4 | if (*it == '.') { | 70 | 0 | ++it; | 71 | 0 | parse_size(); | 72 | 0 | } | 73 | | | 74 | 4 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; | 75 | | | 76 | | // Length and type in "[flags][width][.precision][length]type" | 77 | | // is not checked. Parsing continues with the next '%'. | 78 | 4 | } | 79 | 9 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; | 80 | 9 | unsigned count{count_normal | count_pos}; | 81 | 9 | if (num_params != count) throw "Format specifier count must match the argument count!"; | 82 | 9 | } |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Line | Count | Source | 25 | 35 | { | 26 | 35 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s | 27 | 35 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s | 28 | 64 | for (auto it{str}; *it != '\0'; ++it) { | 29 | 39 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% | 30 | | | 31 | 36 | auto add_arg = [&] { | 32 | 36 | unsigned maybe_num{0}; | 33 | 36 | while ('0' <= *it && *it <= '9') { | 34 | 36 | maybe_num *= 10; | 35 | 36 | maybe_num += *it - '0'; | 36 | 36 | ++it; | 37 | 36 | } | 38 | | | 39 | 36 | if (*it == '$') { | 40 | 36 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 36 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 36 | count_pos = std::max(count_pos, maybe_num); | 44 | 36 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 36 | ++count_normal; | 47 | 36 | } | 48 | 36 | }; | 49 | | | 50 | | // Increase argument count and consume positional specifier, if present. | 51 | 36 | add_arg(); | 52 | | | 53 | | // Consume flags. | 54 | 40 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; | 55 | | | 56 | 36 | auto parse_size = [&] { | 57 | 36 | if (*it == '*') { | 58 | 36 | ++it; | 59 | 36 | add_arg(); | 60 | 36 | } else { | 61 | 36 | while ('0' <= *it && *it <= '9') ++it; | 62 | 36 | } | 63 | 36 | }; | 64 | | | 65 | | // Consume dynamic or static width value. | 66 | 36 | parse_size(); | 67 | | | 68 | | // Consume dynamic or static precision value. | 69 | 36 | if (*it == '.') { | 70 | 9 | ++it; | 71 | 9 | parse_size(); | 72 | 9 | } | 73 | | | 74 | 36 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; | 75 | | | 76 | | // Length and type in "[flags][width][.precision][length]type" | 77 | | // is not checked. Parsing continues with the next '%'. | 78 | 36 | } | 79 | 25 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; | 80 | 24 | unsigned count{count_normal | count_pos}; | 81 | 24 | if (num_params != count) throw "Format specifier count must match the argument count!"; | 82 | 24 | } |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Line | Count | Source | 25 | 16 | { | 26 | 16 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s | 27 | 16 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s | 28 | 35 | for (auto it{str}; *it != '\0'; ++it) { | 29 | 22 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% | 30 | | | 31 | 17 | auto add_arg = [&] { | 32 | 17 | unsigned maybe_num{0}; | 33 | 17 | while ('0' <= *it && *it <= '9') { | 34 | 17 | maybe_num *= 10; | 35 | 17 | maybe_num += *it - '0'; | 36 | 17 | ++it; | 37 | 17 | } | 38 | | | 39 | 17 | if (*it == '$') { | 40 | 17 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 17 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 17 | count_pos = std::max(count_pos, maybe_num); | 44 | 17 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 17 | ++count_normal; | 47 | 17 | } | 48 | 17 | }; | 49 | | | 50 | | // Increase argument count and consume positional specifier, if present. | 51 | 17 | add_arg(); | 52 | | | 53 | | // Consume flags. | 54 | 18 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; | 55 | | | 56 | 17 | auto parse_size = [&] { | 57 | 17 | if (*it == '*') { | 58 | 17 | ++it; | 59 | 17 | add_arg(); | 60 | 17 | } else { | 61 | 17 | while ('0' <= *it && *it <= '9') ++it; | 62 | 17 | } | 63 | 17 | }; | 64 | | | 65 | | // Consume dynamic or static width value. | 66 | 17 | parse_size(); | 67 | | | 68 | | // Consume dynamic or static precision value. | 69 | 17 | if (*it == '.') { | 70 | 5 | ++it; | 71 | 5 | parse_size(); | 72 | 5 | } | 73 | | | 74 | 17 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; | 75 | | | 76 | | // Length and type in "[flags][width][.precision][length]type" | 77 | | // is not checked. Parsing continues with the next '%'. | 78 | 17 | } | 79 | 13 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; | 80 | 9 | unsigned count{count_normal | count_pos}; | 81 | 9 | if (num_params != count) throw "Format specifier count must match the argument count!"; | 82 | 9 | } |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<129u>(char const*) Line | Count | Source | 25 | 1 | { | 26 | 1 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s | 27 | 1 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s | 28 | 10 | for (auto it{str}; *it != '\0'; ++it) { | 29 | 9 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% | 30 | | | 31 | 2 | auto add_arg = [&] { | 32 | 2 | unsigned maybe_num{0}; | 33 | 2 | while ('0' <= *it && *it <= '9') { | 34 | 2 | maybe_num *= 10; | 35 | 2 | maybe_num += *it - '0'; | 36 | 2 | ++it; | 37 | 2 | } | 38 | | | 39 | 2 | if (*it == '$') { | 40 | 2 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 2 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 2 | count_pos = std::max(count_pos, maybe_num); | 44 | 2 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 2 | ++count_normal; | 47 | 2 | } | 48 | 2 | }; | 49 | | | 50 | | // Increase argument count and consume positional specifier, if present. | 51 | 2 | add_arg(); | 52 | | | 53 | | // Consume flags. | 54 | 2 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; | 55 | | | 56 | 2 | auto parse_size = [&] { | 57 | 2 | if (*it == '*') { | 58 | 2 | ++it; | 59 | 2 | add_arg(); | 60 | 2 | } else { | 61 | 2 | while ('0' <= *it && *it <= '9') ++it; | 62 | 2 | } | 63 | 2 | }; | 64 | | | 65 | | // Consume dynamic or static width value. | 66 | 2 | parse_size(); | 67 | | | 68 | | // Consume dynamic or static precision value. | 69 | 2 | if (*it == '.') { | 70 | 0 | ++it; | 71 | 0 | parse_size(); | 72 | 0 | } | 73 | | | 74 | 2 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; | 75 | | | 76 | | // Length and type in "[flags][width][.precision][length]type" | 77 | | // is not checked. Parsing continues with the next '%'. | 78 | 2 | } | 79 | 1 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; | 80 | 1 | unsigned count{count_normal | count_pos}; | 81 | 1 | if (num_params != count) throw "Format specifier count must match the argument count!"; | 82 | 1 | } |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Line | Count | Source | 25 | 10 | { | 26 | 10 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s | 27 | 10 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s | 28 | 24 | for (auto it{str}; *it != '\0'; ++it) { | 29 | 14 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% | 30 | | | 31 | 10 | auto add_arg = [&] { | 32 | 10 | unsigned maybe_num{0}; | 33 | 10 | while ('0' <= *it && *it <= '9') { | 34 | 10 | maybe_num *= 10; | 35 | 10 | maybe_num += *it - '0'; | 36 | 10 | ++it; | 37 | 10 | } | 38 | | | 39 | 10 | if (*it == '$') { | 40 | 10 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 10 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 10 | count_pos = std::max(count_pos, maybe_num); | 44 | 10 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 10 | ++count_normal; | 47 | 10 | } | 48 | 10 | }; | 49 | | | 50 | | // Increase argument count and consume positional specifier, if present. | 51 | 10 | add_arg(); | 52 | | | 53 | | // Consume flags. | 54 | 19 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; | 55 | | | 56 | 10 | auto parse_size = [&] { | 57 | 10 | if (*it == '*') { | 58 | 10 | ++it; | 59 | 10 | add_arg(); | 60 | 10 | } else { | 61 | 10 | while ('0' <= *it && *it <= '9') ++it; | 62 | 10 | } | 63 | 10 | }; | 64 | | | 65 | | // Consume dynamic or static width value. | 66 | 10 | parse_size(); | 67 | | | 68 | | // Consume dynamic or static precision value. | 69 | 10 | if (*it == '.') { | 70 | 9 | ++it; | 71 | 9 | parse_size(); | 72 | 9 | } | 73 | | | 74 | 10 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; | 75 | | | 76 | | // Length and type in "[flags][width][.precision][length]type" | 77 | | // is not checked. Parsing continues with the next '%'. | 78 | 10 | } | 79 | 10 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; | 80 | 10 | unsigned count{count_normal | count_pos}; | 81 | 10 | if (num_params != count) throw "Format specifier count must match the argument count!"; | 82 | 10 | } |
util_string_tests.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Line | Count | Source | 25 | 1 | { | 26 | 1 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s | 27 | 1 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s | 28 | 2 | for (auto it{str}; *it != '\0'; ++it) { | 29 | 1 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% | 30 | | | 31 | 1 | auto add_arg = [&] { | 32 | 1 | unsigned maybe_num{0}; | 33 | 1 | while ('0' <= *it && *it <= '9') { | 34 | 1 | maybe_num *= 10; | 35 | 1 | maybe_num += *it - '0'; | 36 | 1 | ++it; | 37 | 1 | } | 38 | | | 39 | 1 | if (*it == '$') { | 40 | 1 | ++it; | 41 | | // Positional specifier, like %8$s | 42 | 1 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; | 43 | 1 | count_pos = std::max(count_pos, maybe_num); | 44 | 1 | } else { | 45 | | // Non-positional specifier, like %s | 46 | 1 | ++count_normal; | 47 | 1 | } | 48 | 1 | }; | 49 | | | 50 | | // Increase argument count and consume positional specifier, if present. | 51 | 1 | add_arg(); | 52 | | | 53 | | // Consume flags. | 54 | 1 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; | 55 | | | 56 | 1 | auto parse_size = [&] { | 57 | 1 | if (*it == '*') { | 58 | 1 | ++it; | 59 | 1 | add_arg(); | 60 | 1 | } else { | 61 | 1 | while ('0' <= *it && *it <= '9') ++it; | 62 | 1 | } | 63 | 1 | }; | 64 | | | 65 | | // Consume dynamic or static width value. | 66 | 1 | parse_size(); | 67 | | | 68 | | // Consume dynamic or static precision value. | 69 | 1 | if (*it == '.') { | 70 | 1 | ++it; | 71 | 1 | parse_size(); | 72 | 1 | } | 73 | | | 74 | 1 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; | 75 | | | 76 | | // Length and type in "[flags][width][.precision][length]type" | 77 | | // is not checked. Parsing continues with the next '%'. | 78 | 1 | } | 79 | 1 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; | 80 | 1 | unsigned count{count_normal | count_pos}; | 81 | 1 | if (num_params != count) throw "Format specifier count must match the argument count!"; | 82 | 1 | } |
Unexecuted instantiation: util_tests.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: validation_block_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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<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: 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: wallet_test_fixture.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: wallet_test_fixture.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<3u>(char const*) Unexecuted instantiation: coinselector_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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: 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: coinselection_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: feebumper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: feebumper_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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: 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: ismine_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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<3u>(char const*) Unexecuted instantiation: psbt_wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: psbt_wallet_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: scriptpubkeyman_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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_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_rpc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: wallet_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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<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: walletdb_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: walletload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: walletload_tests.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: ipc_tests.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: blockfilter.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: 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<3u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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<3u>(char const*) Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: 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: 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<2u>(char const*) Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<18u>(char const*) Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: block_policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*) Unexecuted instantiation: rbf.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: rbf.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: 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<1u>(char const*) Unexecuted instantiation: rest.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: rest.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: blockchain.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: mempool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: mempool.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: mining.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: mining.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: node.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: node.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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<3u>(char const*) Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: spend.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: external_signer_scriptpubkeyman.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<1u>(char const*) Unexecuted instantiation: feebumper.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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<3u>(char const*) Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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<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<2u>(char const*) Unexecuted instantiation: rawtransaction_util.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: request.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: request.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: request.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: request.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: signingprovider.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: batchpriority.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: bip32.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: check.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*) Unexecuted instantiation: check.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: 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: logging.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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*) |
83 | | } // namespace detail |
84 | | |
85 | | /** |
86 | | * @brief A wrapper for a compile-time partially validated format string |
87 | | * |
88 | | * This struct can be used to enforce partial compile-time validation of format |
89 | | * strings, to reduce the likelihood of tinyformat throwing exceptions at |
90 | | * run-time. Validation is partial to try and prevent the most common errors |
91 | | * while avoiding re-implementing the entire parsing logic. |
92 | | */ |
93 | | template <unsigned num_params> |
94 | | struct ConstevalFormatString { |
95 | | const char* const fmt; |
96 | | consteval ConstevalFormatString(const char* str) : fmt{str} { detail::CheckNumFormatSpecifiers<num_params>(fmt); } |
97 | | }; |
98 | | |
99 | | void ReplaceAll(std::string& in_out, const std::string& search, const std::string& substitute); |
100 | | |
101 | | /** Split a string on any char found in separators, returning a vector. |
102 | | * |
103 | | * If sep does not occur in sp, a singleton with the entirety of sp is returned. |
104 | | * |
105 | | * @param[in] include_sep Whether to include the separator at the end of the left side of the splits. |
106 | | * |
107 | | * Note that this function does not care about braces, so splitting |
108 | | * "foo(bar(1),2),3) on ',' will return {"foo(bar(1)", "2)", "3)"}. |
109 | | * |
110 | | * If include_sep == true, splitting "foo(bar(1),2),3) on ',' |
111 | | * will return: |
112 | | * - foo(bar(1), |
113 | | * - 2), |
114 | | * - 3) |
115 | | */ |
116 | | template <typename T = std::span<const char>> |
117 | | std::vector<T> Split(const std::span<const char>& sp, std::string_view separators, bool include_sep = false) |
118 | 1.24M | { |
119 | 1.24M | std::vector<T> ret; |
120 | 1.24M | auto it = sp.begin(); |
121 | 1.24M | auto start = it; |
122 | 20.1M | while (it != sp.end()) { |
123 | 18.8M | if (separators.find(*it) != std::string::npos) { |
124 | 84.7k | if (include_sep) { |
125 | 159 | ret.emplace_back(start, it + 1); |
126 | 84.6k | } else { |
127 | 84.6k | ret.emplace_back(start, it); |
128 | 84.6k | } |
129 | 84.7k | start = it + 1; |
130 | 84.7k | } |
131 | 18.8M | ++it; |
132 | 18.8M | } |
133 | 1.24M | ret.emplace_back(start, it); |
134 | 1.24M | return ret; |
135 | 1.24M | } 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 | 118 | 1.17M | { | 119 | 1.17M | std::vector<T> ret; | 120 | 1.17M | auto it = sp.begin(); | 121 | 1.17M | auto start = it; | 122 | 11.7M | while (it != sp.end()) { | 123 | 10.5M | if (separators.find(*it) != std::string::npos) { | 124 | 37.8k | if (include_sep) { | 125 | 0 | ret.emplace_back(start, it + 1); | 126 | 37.8k | } else { | 127 | 37.8k | ret.emplace_back(start, it); | 128 | 37.8k | } | 129 | 37.8k | start = it + 1; | 130 | 37.8k | } | 131 | 10.5M | ++it; | 132 | 10.5M | } | 133 | 1.17M | ret.emplace_back(start, it); | 134 | 1.17M | return ret; | 135 | 1.17M | } |
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 | 118 | 72.2k | { | 119 | 72.2k | std::vector<T> ret; | 120 | 72.2k | auto it = sp.begin(); | 121 | 72.2k | auto start = it; | 122 | 8.40M | while (it != sp.end()) { | 123 | 8.33M | if (separators.find(*it) != std::string::npos) { | 124 | 46.8k | if (include_sep) { | 125 | 159 | ret.emplace_back(start, it + 1); | 126 | 46.6k | } else { | 127 | 46.6k | ret.emplace_back(start, it); | 128 | 46.6k | } | 129 | 46.8k | start = it + 1; | 130 | 46.8k | } | 131 | 8.33M | ++it; | 132 | 8.33M | } | 133 | 72.2k | ret.emplace_back(start, it); | 134 | 72.2k | return ret; | 135 | 72.2k | } |
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 | 118 | 50 | { | 119 | 50 | std::vector<T> ret; | 120 | 50 | auto it = sp.begin(); | 121 | 50 | auto start = it; | 122 | 3.31k | while (it != sp.end()) { | 123 | 3.26k | if (separators.find(*it) != std::string::npos) { | 124 | 50 | if (include_sep) { | 125 | 0 | ret.emplace_back(start, it + 1); | 126 | 50 | } else { | 127 | 50 | ret.emplace_back(start, it); | 128 | 50 | } | 129 | 50 | start = it + 1; | 130 | 50 | } | 131 | 3.26k | ++it; | 132 | 3.26k | } | 133 | 50 | ret.emplace_back(start, it); | 134 | 50 | return ret; | 135 | 50 | } |
|
136 | | |
137 | | /** Split a string on every instance of sep, returning a vector. |
138 | | * |
139 | | * If sep does not occur in sp, a singleton with the entirety of sp is returned. |
140 | | * |
141 | | * Note that this function does not care about braces, so splitting |
142 | | * "foo(bar(1),2),3) on ',' will return {"foo(bar(1)", "2)", "3)"}. |
143 | | */ |
144 | | template <typename T = std::span<const char>> |
145 | | std::vector<T> Split(const std::span<const char>& sp, char sep, bool include_sep = false) |
146 | 1.24M | { |
147 | 1.24M | return Split<T>(sp, std::string_view{&sep, 1}, include_sep); |
148 | 1.24M | } 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 | 146 | 1.17M | { | 147 | 1.17M | return Split<T>(sp, std::string_view{&sep, 1}, include_sep); | 148 | 1.17M | } |
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 | 146 | 71.9k | { | 147 | 71.9k | return Split<T>(sp, std::string_view{&sep, 1}, include_sep); | 148 | 71.9k | } |
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 | 146 | 50 | { | 147 | 50 | return Split<T>(sp, std::string_view{&sep, 1}, include_sep); | 148 | 50 | } |
|
149 | | |
150 | | [[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, char sep) |
151 | 1.17M | { |
152 | 1.17M | return Split<std::string>(str, sep); |
153 | 1.17M | } |
154 | | |
155 | | [[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, std::string_view separators) |
156 | 2.80k | { |
157 | 2.80k | return Split<std::string>(str, separators); |
158 | 2.80k | } |
159 | | |
160 | | [[nodiscard]] inline std::string_view TrimStringView(std::string_view str, std::string_view pattern = " \f\n\r\t\v") |
161 | 1.22M | { |
162 | 1.22M | std::string::size_type front = str.find_first_not_of(pattern); |
163 | 1.22M | if (front == std::string::npos) { |
164 | 88 | return {}; |
165 | 88 | } |
166 | 1.22M | std::string::size_type end = str.find_last_not_of(pattern); |
167 | 1.22M | return str.substr(front, end - front + 1); |
168 | 1.22M | } |
169 | | |
170 | | [[nodiscard]] inline std::string TrimString(std::string_view str, std::string_view pattern = " \f\n\r\t\v") |
171 | 474k | { |
172 | 474k | return std::string(TrimStringView(str, pattern)); |
173 | 474k | } |
174 | | |
175 | | [[nodiscard]] inline std::string_view RemoveSuffixView(std::string_view str, std::string_view suffix) |
176 | 1.53k | { |
177 | 1.53k | if (str.ends_with(suffix)) { |
178 | 1.53k | return str.substr(0, str.size() - suffix.size()); |
179 | 1.53k | } |
180 | 0 | return str; |
181 | 1.53k | } |
182 | | |
183 | | [[nodiscard]] inline std::string_view RemovePrefixView(std::string_view str, std::string_view prefix) |
184 | 5.23M | { |
185 | 5.23M | if (str.starts_with(prefix)) { |
186 | 1.13k | return str.substr(prefix.size()); |
187 | 1.13k | } |
188 | 5.23M | return str; |
189 | 5.23M | } |
190 | | |
191 | | [[nodiscard]] inline std::string RemovePrefix(std::string_view str, std::string_view prefix) |
192 | 11 | { |
193 | 11 | return std::string(RemovePrefixView(str, prefix)); |
194 | 11 | } |
195 | | |
196 | | /** |
197 | | * Join all container items. Typically used to concatenate strings but accepts |
198 | | * containers with elements of any type. |
199 | | * |
200 | | * @param container The items to join |
201 | | * @param separator The separator |
202 | | * @param unary_op Apply this operator to each item |
203 | | */ |
204 | | template <typename C, typename S, typename UnaryOp> |
205 | | // NOLINTNEXTLINE(misc-no-recursion) |
206 | | auto Join(const C& container, const S& separator, UnaryOp unary_op) |
207 | 257k | { |
208 | 257k | decltype(unary_op(*container.begin())) ret; |
209 | 257k | bool first{true}; |
210 | 1.00M | for (const auto& item : container) { |
211 | 1.00M | if (!first) ret += separator; |
212 | 1.00M | ret += unary_op(item); |
213 | 1.00M | first = false; |
214 | 1.00M | } |
215 | 257k | return ret; |
216 | 257k | } 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 | 207 | 2.31k | { | 208 | 2.31k | decltype(unary_op(*container.begin())) ret; | 209 | 2.31k | bool first{true}; | 210 | 13.8k | for (const auto& item : container) { | 211 | 13.8k | if (!first) ret += separator; | 212 | 13.8k | ret += unary_op(item); | 213 | 13.8k | first = false; | 214 | 13.8k | } | 215 | 2.31k | return ret; | 216 | 2.31k | } |
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 | 207 | 6.01k | { | 208 | 6.01k | decltype(unary_op(*container.begin())) ret; | 209 | 6.01k | bool first{true}; | 210 | 186k | for (const auto& item : container) { | 211 | 186k | if (!first) ret += separator; | 212 | 186k | ret += unary_op(item); | 213 | 186k | first = false; | 214 | 186k | } | 215 | 6.01k | return ret; | 216 | 6.01k | } |
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 | 207 | 184 | { | 208 | 184 | decltype(unary_op(*container.begin())) ret; | 209 | 184 | bool first{true}; | 210 | 242 | for (const auto& item : container) { | 211 | 242 | if (!first) ret += separator; | 212 | 242 | ret += unary_op(item); | 213 | 242 | first = false; | 214 | 242 | } | 215 | 184 | return ret; | 216 | 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 | 207 | 91.2k | { | 208 | 91.2k | decltype(unary_op(*container.begin())) ret; | 209 | 91.2k | bool first{true}; | 210 | 665k | for (const auto& item : container) { | 211 | 665k | if (!first) ret += separator; | 212 | 665k | ret += unary_op(item); | 213 | 665k | first = false; | 214 | 665k | } | 215 | 91.2k | return ret; | 216 | 91.2k | } |
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 | 207 | 6 | { | 208 | 6 | decltype(unary_op(*container.begin())) ret; | 209 | 6 | bool first{true}; | 210 | 6 | for (const auto& item : container) { | 211 | 6 | if (!first) ret += separator; | 212 | 6 | ret += unary_op(item); | 213 | 6 | first = false; | 214 | 6 | } | 215 | 6 | return ret; | 216 | 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 | 207 | 188 | { | 208 | 188 | decltype(unary_op(*container.begin())) ret; | 209 | 188 | bool first{true}; | 210 | 476 | for (const auto& item : container) { | 211 | 476 | if (!first) ret += separator; | 212 | 476 | ret += unary_op(item); | 213 | 476 | first = false; | 214 | 476 | } | 215 | 188 | return ret; | 216 | 188 | } |
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 | 207 | 1.29k | { | 208 | 1.29k | decltype(unary_op(*container.begin())) ret; | 209 | 1.29k | bool first{true}; | 210 | 1.29k | for (const auto& item : container) { | 211 | 1.29k | if (!first) ret += separator; | 212 | 1.29k | ret += unary_op(item); | 213 | 1.29k | first = false; | 214 | 1.29k | } | 215 | 1.29k | return ret; | 216 | 1.29k | } |
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 | 207 | 119k | { | 208 | 119k | decltype(unary_op(*container.begin())) ret; | 209 | 119k | bool first{true}; | 210 | 119k | for (const auto& item : container) { | 211 | 145 | if (!first) ret += separator; | 212 | 145 | ret += unary_op(item); | 213 | 145 | first = false; | 214 | 145 | } | 215 | 119k | return ret; | 216 | 119k | } |
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 | 207 | 14 | { | 208 | 14 | decltype(unary_op(*container.begin())) ret; | 209 | 14 | bool first{true}; | 210 | 42 | for (const auto& item : container) { | 211 | 42 | if (!first) ret += separator; | 212 | 42 | ret += unary_op(item); | 213 | 42 | first = false; | 214 | 42 | } | 215 | 14 | return ret; | 216 | 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 | 207 | 13.3k | { | 208 | 13.3k | decltype(unary_op(*container.begin())) ret; | 209 | 13.3k | bool first{true}; | 210 | 40.0k | for (const auto& item : container) { | 211 | 40.0k | if (!first) ret += separator; | 212 | 40.0k | ret += unary_op(item); | 213 | 40.0k | first = false; | 214 | 40.0k | } | 215 | 13.3k | return ret; | 216 | 13.3k | } |
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 | 207 | 21.4k | { | 208 | 21.4k | decltype(unary_op(*container.begin())) ret; | 209 | 21.4k | bool first{true}; | 210 | 85.9k | for (const auto& item : container) { | 211 | 85.9k | if (!first) ret += separator; | 212 | 85.9k | ret += unary_op(item); | 213 | 85.9k | first = false; | 214 | 85.9k | } | 215 | 21.4k | return ret; | 216 | 21.4k | } |
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 | 207 | 165 | { | 208 | 165 | decltype(unary_op(*container.begin())) ret; | 209 | 165 | bool first{true}; | 210 | 368 | for (const auto& item : container) { | 211 | 368 | if (!first) ret += separator; | 212 | 368 | ret += unary_op(item); | 213 | 368 | first = false; | 214 | 368 | } | 215 | 165 | return ret; | 216 | 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 | 207 | 1.84k | { | 208 | 1.84k | decltype(unary_op(*container.begin())) ret; | 209 | 1.84k | bool first{true}; | 210 | 5.54k | for (const auto& item : container) { | 211 | 5.54k | if (!first) ret += separator; | 212 | 5.54k | ret += unary_op(item); | 213 | 5.54k | first = false; | 214 | 5.54k | } | 215 | 1.84k | return ret; | 216 | 1.84k | } |
|
217 | | |
218 | | template <typename C, typename S> |
219 | | auto Join(const C& container, const S& separator) |
220 | 211k | { |
221 | 666k | 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 | 221 | 242 | 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 | 221 | 665k | 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 | 221 | 145 | return Join(container, separator, [](const auto& i) { return i; }); |
|
222 | 211k | } 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 | 220 | 184 | { | 221 | 184 | return Join(container, separator, [](const auto& i) { return i; }); | 222 | 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 | 220 | 91.2k | { | 221 | 91.2k | return Join(container, separator, [](const auto& i) { return i; }); | 222 | 91.2k | } |
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 | 220 | 119k | { | 221 | 119k | return Join(container, separator, [](const auto& i) { return i; }); | 222 | 119k | } |
|
223 | | |
224 | | /** |
225 | | * Create an unordered multi-line list of items. |
226 | | */ |
227 | | inline std::string MakeUnorderedList(const std::vector<std::string>& items) |
228 | 2.31k | { |
229 | 13.8k | return Join(items, "\n", [](const std::string& item) { return "- " + item; }); |
230 | 2.31k | } |
231 | | |
232 | | /** |
233 | | * Check if a string does not contain any embedded NUL (\0) characters |
234 | | */ |
235 | | [[nodiscard]] inline bool ContainsNoNUL(std::string_view str) noexcept |
236 | 2.24M | { |
237 | 22.2M | for (auto c : str) { |
238 | 22.2M | if (c == 0) return false; |
239 | 22.2M | } |
240 | 2.24M | return true; |
241 | 2.24M | } |
242 | | |
243 | | /** |
244 | | * Locale-independent version of std::to_string |
245 | | */ |
246 | | template <typename T> |
247 | | std::string ToString(const T& t) |
248 | 258k | { |
249 | 258k | std::ostringstream oss; |
250 | 258k | oss.imbue(std::locale::classic()); |
251 | 258k | oss << t; |
252 | 258k | return oss.str(); |
253 | 258k | } std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<unsigned int>(unsigned int const&) Line | Count | Source | 248 | 9.02k | { | 249 | 9.02k | std::ostringstream oss; | 250 | 9.02k | oss.imbue(std::locale::classic()); | 251 | 9.02k | oss << t; | 252 | 9.02k | return oss.str(); | 253 | 9.02k | } |
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<int>(int const&) Line | Count | Source | 248 | 223k | { | 249 | 223k | std::ostringstream oss; | 250 | 223k | oss.imbue(std::locale::classic()); | 251 | 223k | oss << t; | 252 | 223k | return oss.str(); | 253 | 223k | } |
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<double>(double const&) Line | Count | Source | 248 | 10 | { | 249 | 10 | std::ostringstream oss; | 250 | 10 | oss.imbue(std::locale::classic()); | 251 | 10 | oss << t; | 252 | 10 | return oss.str(); | 253 | 10 | } |
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<unsigned short>(unsigned short const&) Line | Count | Source | 248 | 1 | { | 249 | 1 | std::ostringstream oss; | 250 | 1 | oss.imbue(std::locale::classic()); | 251 | 1 | oss << t; | 252 | 1 | return oss.str(); | 253 | 1 | } |
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<unsigned long>(unsigned long const&) Line | Count | Source | 248 | 1.88k | { | 249 | 1.88k | std::ostringstream oss; | 250 | 1.88k | oss.imbue(std::locale::classic()); | 251 | 1.88k | oss << t; | 252 | 1.88k | return oss.str(); | 253 | 1.88k | } |
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> util::ToString<long>(long const&) Line | Count | Source | 248 | 23.7k | { | 249 | 23.7k | std::ostringstream oss; | 250 | 23.7k | oss.imbue(std::locale::classic()); | 251 | 23.7k | oss << t; | 252 | 23.7k | return oss.str(); | 253 | 23.7k | } |
|
254 | | |
255 | | /** |
256 | | * Check whether a container begins with the given prefix. |
257 | | */ |
258 | | template <typename T1, size_t PREFIX_LEN> |
259 | | [[nodiscard]] inline bool HasPrefix(const T1& obj, |
260 | | const std::array<uint8_t, PREFIX_LEN>& prefix) |
261 | 4.02M | { |
262 | 4.02M | return obj.size() >= PREFIX_LEN && |
263 | 4.02M | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); |
264 | 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 | 261 | 118 | { | 262 | 118 | return obj.size() >= PREFIX_LEN && | 263 | 118 | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); | 264 | 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 | 261 | 1.85k | { | 262 | 1.85k | return obj.size() >= PREFIX_LEN && | 263 | 1.85k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); | 264 | 1.85k | } |
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 | 261 | 9.89k | { | 262 | 9.89k | return obj.size() >= PREFIX_LEN && | 263 | 9.89k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); | 264 | 9.89k | } |
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 | 261 | 6.46k | { | 262 | 6.46k | return obj.size() >= PREFIX_LEN && | 263 | 6.46k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); | 264 | 6.46k | } |
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 | 261 | 998k | { | 262 | 998k | return obj.size() >= PREFIX_LEN && | 263 | 998k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); | 264 | 998k | } |
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 | 261 | 2.99M | { | 262 | 2.99M | return obj.size() >= PREFIX_LEN && | 263 | 2.99M | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); | 264 | 2.99M | } |
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 | 261 | 3.63k | { | 262 | 3.63k | return obj.size() >= PREFIX_LEN && | 263 | 3.63k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); | 264 | 3.63k | } |
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 | 261 | 2.34k | { | 262 | 2.34k | return obj.size() >= PREFIX_LEN && | 263 | 2.34k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); | 264 | 2.34k | } |
|
265 | | |
266 | | struct LineReader { |
267 | | const std::span<const std::byte>::iterator start; |
268 | | const std::span<const std::byte>::iterator end; |
269 | | const size_t max_line_length; |
270 | | std::span<const std::byte>::iterator it; |
271 | | |
272 | | explicit LineReader(std::span<const std::byte> buffer, size_t max_line_length); |
273 | 10 | explicit LineReader(std::string_view str, size_t max_line_length) : LineReader{std::as_bytes(std::span{str}), max_line_length} {} |
274 | | |
275 | | /** |
276 | | * Returns a string from current iterator position up to (but not including) next \n |
277 | | * and advances iterator to the character following the \n on success. |
278 | | * Will not return a line longer than max_line_length. |
279 | | * @returns the next string from the buffer. |
280 | | * std::nullopt if end of buffer is reached without finding a \n. |
281 | | * @throws a std::runtime_error if max_line_length + 1 bytes are read without finding \n. |
282 | | */ |
283 | | std::optional<std::string> ReadLine(); |
284 | | |
285 | | /** |
286 | | * Returns string from current iterator position of specified length |
287 | | * if possible and advances iterator on success. |
288 | | * May exceed max_line_length but will not read past end of buffer. |
289 | | * @param[in] len The number of bytes to read from the buffer |
290 | | * @returns a string of the expected length. |
291 | | * @throws a std::runtime_error if there is not enough data in the buffer. |
292 | | */ |
293 | | std::string ReadLength(size_t len); |
294 | | |
295 | | /** |
296 | | * Returns remaining size of bytes in buffer |
297 | | */ |
298 | | size_t Remaining() const; |
299 | | |
300 | | /** |
301 | | * Returns number of bytes already read from buffer |
302 | | */ |
303 | | size_t Consumed() const; |
304 | | }; |
305 | | } // namespace util |
306 | | |
307 | | #endif // BITCOIN_UTIL_STRING_H |