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