/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 <span.h> |
9 | | |
10 | | #include <array> |
11 | | #include <cstdint> |
12 | | #include <cstring> |
13 | | #include <locale> |
14 | | #include <sstream> |
15 | | #include <string> // IWYU pragma: export |
16 | | #include <string_view> // IWYU pragma: export |
17 | | #include <vector> |
18 | | |
19 | | namespace util { |
20 | | namespace detail { |
21 | | template <unsigned num_params> |
22 | | constexpr static void CheckNumFormatSpecifiers(const char* str) |
23 | 0 | { |
24 | 0 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s |
25 | 0 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s |
26 | 0 | for (auto it{str}; *it != '\0'; ++it) { |
27 | 0 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% |
28 | 0 |
|
29 | 0 | auto add_arg = [&] { |
30 | 0 | unsigned maybe_num{0}; |
31 | 0 | while ('0' <= *it && *it <= '9') { |
32 | 0 | maybe_num *= 10; |
33 | 0 | maybe_num += *it - '0'; |
34 | 0 | ++it; |
35 | 0 | } |
36 | 0 |
|
37 | 0 | if (*it == '$') { |
38 | 0 | ++it; |
39 | 0 | // Positional specifier, like %8$s |
40 | 0 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; |
41 | 0 | count_pos = std::max(count_pos, maybe_num); |
42 | 0 | } else { |
43 | 0 | // Non-positional specifier, like %s |
44 | 0 | ++count_normal; |
45 | 0 | } |
46 | 0 | }; |
47 | 0 |
|
48 | 0 | // Increase argument count and consume positional specifier, if present. |
49 | 0 | add_arg(); |
50 | 0 |
|
51 | 0 | // Consume flags. |
52 | 0 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; |
53 | 0 |
|
54 | 0 | auto parse_size = [&] { |
55 | 0 | if (*it == '*') { |
56 | 0 | ++it; |
57 | 0 | add_arg(); |
58 | 0 | } else { |
59 | 0 | while ('0' <= *it && *it <= '9') ++it; |
60 | 0 | } |
61 | 0 | }; |
62 | 0 |
|
63 | 0 | // Consume dynamic or static width value. |
64 | 0 | parse_size(); |
65 | 0 |
|
66 | 0 | // Consume dynamic or static precision value. |
67 | 0 | if (*it == '.') { |
68 | 0 | ++it; |
69 | 0 | parse_size(); |
70 | 0 | } |
71 | 0 |
|
72 | 0 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; |
73 | 0 |
|
74 | 0 | // Length and type in "[flags][width][.precision][length]type" |
75 | 0 | // is not checked. Parsing continues with the next '%'. |
76 | 0 | } |
77 | 0 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; |
78 | 0 | unsigned count{count_normal | count_pos}; |
79 | 0 | if (num_params != count) throw "Format specifier count must match the argument count!"; |
80 | 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<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: init.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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<0u>(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<4u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<8u>(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: 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<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: 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: context.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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<2u>(char const*) Unexecuted instantiation: interfaces.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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<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_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<2u>(char const*) Unexecuted instantiation: miner.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) Unexecuted instantiation: peerman_args.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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<2u>(char const*) Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txdownloadman_impl.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: txdownloadman_impl.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*) Unexecuted instantiation: txdownloadman_impl.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txdownloadman_impl.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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: fees.cpp:void util::detail::CheckNumFormatSpecifiers<18u>(char const*) Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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<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: rest.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: rest.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: rest.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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<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<3u>(char const*) Unexecuted instantiation: txdb.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: txorphanage.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: txorphanage.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txrequest.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(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: 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<5u>(char const*) Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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<5u>(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<4u>(char const*) Unexecuted instantiation: headerssync.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: 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: base.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: txindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: coinstats.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: abort.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: 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: sigcache.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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: 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<0u>(char const*) Unexecuted instantiation: scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(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: 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<20u>(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<4u>(char const*) Unexecuted instantiation: wallet.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(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<1u>(char const*) Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(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: db.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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: 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: 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<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: backup.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: 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: encrypt.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: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: 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: util.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<1u>(char const*) Unexecuted instantiation: sqlite.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: chain.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(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: 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: 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_write.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: core_write.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: core_write.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<4u>(char const*) Unexecuted instantiation: netaddress.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: netbase.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: netbase.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: netbase.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: 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<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<3u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: descriptor.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: signingprovider.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: run_command.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: run_command.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: 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<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: clientversion.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: clientversion.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: clientversion.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: block.cpp:void util::detail::CheckNumFormatSpecifiers<8u>(char const*) Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) |
81 | | } // namespace detail |
82 | | |
83 | | /** |
84 | | * @brief A wrapper for a compile-time partially validated format string |
85 | | * |
86 | | * This struct can be used to enforce partial compile-time validation of format |
87 | | * strings, to reduce the likelihood of tinyformat throwing exceptions at |
88 | | * run-time. Validation is partial to try and prevent the most common errors |
89 | | * while avoiding re-implementing the entire parsing logic. |
90 | | */ |
91 | | template <unsigned num_params> |
92 | | struct ConstevalFormatString { |
93 | | const char* const fmt; |
94 | | consteval ConstevalFormatString(const char* str) : fmt{str} { detail::CheckNumFormatSpecifiers<num_params>(fmt); } |
95 | | }; |
96 | | |
97 | | void ReplaceAll(std::string& in_out, const std::string& search, const std::string& substitute); |
98 | | |
99 | | /** Split a string on any char found in separators, returning a vector. |
100 | | * |
101 | | * If sep does not occur in sp, a singleton with the entirety of sp is returned. |
102 | | * |
103 | | * Note that this function does not care about braces, so splitting |
104 | | * "foo(bar(1),2),3) on ',' will return {"foo(bar(1)", "2)", "3)"}. |
105 | | */ |
106 | | template <typename T = std::span<const char>> |
107 | | std::vector<T> Split(const std::span<const char>& sp, std::string_view separators) |
108 | 12.3M | { |
109 | 12.3M | std::vector<T> ret; |
110 | 12.3M | auto it = sp.begin(); |
111 | 12.3M | auto start = it; |
112 | 157M | while (it != sp.end()) { Branch (112:12): [True: 111M, False: 12.0M]
Branch (112:12): [True: 0, False: 0]
Branch (112:12): [True: 33.8M, False: 266k]
|
113 | 145M | if (separators.find(*it) != std::string::npos) { Branch (113:13): [True: 44.3k, False: 111M]
Branch (113:13): [True: 0, False: 0]
Branch (113:13): [True: 443k, False: 33.3M]
|
114 | 488k | ret.emplace_back(start, it); |
115 | 488k | start = it + 1; |
116 | 488k | } |
117 | 145M | ++it; |
118 | 145M | } |
119 | 12.3M | ret.emplace_back(start, it); |
120 | 12.3M | return ret; |
121 | 12.3M | } 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> >) Line | Count | Source | 108 | 12.0M | { | 109 | 12.0M | std::vector<T> ret; | 110 | 12.0M | auto it = sp.begin(); | 111 | 12.0M | auto start = it; | 112 | 123M | while (it != sp.end()) { Branch (112:12): [True: 111M, False: 12.0M]
| 113 | 111M | if (separators.find(*it) != std::string::npos) { Branch (113:13): [True: 44.3k, False: 111M]
| 114 | 44.3k | ret.emplace_back(start, it); | 115 | 44.3k | start = it + 1; | 116 | 44.3k | } | 117 | 111M | ++it; | 118 | 111M | } | 119 | 12.0M | ret.emplace_back(start, it); | 120 | 12.0M | return ret; | 121 | 12.0M | } |
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&, std::basic_string_view<char, std::char_traits<char> >) 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> >) Line | Count | Source | 108 | 266k | { | 109 | 266k | std::vector<T> ret; | 110 | 266k | auto it = sp.begin(); | 111 | 266k | auto start = it; | 112 | 34.0M | while (it != sp.end()) { Branch (112:12): [True: 33.8M, False: 266k]
| 113 | 33.8M | if (separators.find(*it) != std::string::npos) { Branch (113:13): [True: 443k, False: 33.3M]
| 114 | 443k | ret.emplace_back(start, it); | 115 | 443k | start = it + 1; | 116 | 443k | } | 117 | 33.8M | ++it; | 118 | 33.8M | } | 119 | 266k | ret.emplace_back(start, it); | 120 | 266k | return ret; | 121 | 266k | } |
|
122 | | |
123 | | /** Split a string on every instance of sep, returning a vector. |
124 | | * |
125 | | * If sep does not occur in sp, a singleton with the entirety of sp is returned. |
126 | | * |
127 | | * Note that this function does not care about braces, so splitting |
128 | | * "foo(bar(1),2),3) on ',' will return {"foo(bar(1)", "2)", "3)"}. |
129 | | */ |
130 | | template <typename T = std::span<const char>> |
131 | | std::vector<T> Split(const std::span<const char>& sp, char sep) |
132 | 12.3M | { |
133 | 12.3M | return Split<T>(sp, std::string_view{&sep, 1}); |
134 | 12.3M | } 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) Line | Count | Source | 132 | 12.0M | { | 133 | 12.0M | return Split<T>(sp, std::string_view{&sep, 1}); | 134 | 12.0M | } |
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) 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) Line | Count | Source | 132 | 266k | { | 133 | 266k | return Split<T>(sp, std::string_view{&sep, 1}); | 134 | 266k | } |
|
135 | | |
136 | | [[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, char sep) |
137 | 12.0M | { |
138 | 12.0M | return Split<std::string>(str, sep); |
139 | 12.0M | } |
140 | | |
141 | | [[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, std::string_view separators) |
142 | 0 | { |
143 | 0 | return Split<std::string>(str, separators); |
144 | 0 | } |
145 | | |
146 | | [[nodiscard]] inline std::string_view TrimStringView(std::string_view str, std::string_view pattern = " \f\n\r\t\v") |
147 | 2.71M | { |
148 | 2.71M | std::string::size_type front = str.find_first_not_of(pattern); |
149 | 2.71M | if (front == std::string::npos) { Branch (149:9): [True: 0, False: 2.71M]
|
150 | 0 | return {}; |
151 | 0 | } |
152 | 2.71M | std::string::size_type end = str.find_last_not_of(pattern); |
153 | 2.71M | return str.substr(front, end - front + 1); |
154 | 2.71M | } |
155 | | |
156 | | [[nodiscard]] inline std::string TrimString(std::string_view str, std::string_view pattern = " \f\n\r\t\v") |
157 | 55.4k | { |
158 | 55.4k | return std::string(TrimStringView(str, pattern)); |
159 | 55.4k | } |
160 | | |
161 | | [[nodiscard]] inline std::string_view RemoveSuffixView(std::string_view str, std::string_view suffix) |
162 | 0 | { |
163 | 0 | if (str.ends_with(suffix)) { Branch (163:9): [True: 0, False: 0]
|
164 | 0 | return str.substr(0, str.size() - suffix.size()); |
165 | 0 | } |
166 | 0 | return str; |
167 | 0 | } |
168 | | |
169 | | [[nodiscard]] inline std::string_view RemovePrefixView(std::string_view str, std::string_view prefix) |
170 | 0 | { |
171 | 0 | if (str.starts_with(prefix)) { Branch (171:9): [True: 0, False: 0]
|
172 | 0 | return str.substr(prefix.size()); |
173 | 0 | } |
174 | 0 | return str; |
175 | 0 | } |
176 | | |
177 | | [[nodiscard]] inline std::string RemovePrefix(std::string_view str, std::string_view prefix) |
178 | 0 | { |
179 | 0 | return std::string(RemovePrefixView(str, prefix)); |
180 | 0 | } |
181 | | |
182 | | /** |
183 | | * Join all container items. Typically used to concatenate strings but accepts |
184 | | * containers with elements of any type. |
185 | | * |
186 | | * @param container The items to join |
187 | | * @param separator The separator |
188 | | * @param unary_op Apply this operator to each item |
189 | | */ |
190 | | template <typename C, typename S, typename UnaryOp> |
191 | | // NOLINTNEXTLINE(misc-no-recursion) |
192 | | auto Join(const C& container, const S& separator, UnaryOp unary_op) |
193 | 2.98M | { |
194 | 2.98M | decltype(unary_op(*container.begin())) ret; |
195 | 2.98M | bool first{true}; |
196 | 5.11M | for (const auto& item : container) { Branch (196:27): [True: 133k, False: 22.1k]
Branch (196:27): [True: 1.24M, False: 44.3k]
Branch (196:27): [True: 2.96M, False: 410k]
Branch (196:27): [True: 0, False: 2.24M]
Branch (196:27): [True: 0, False: 0]
Branch (196:27): [True: 11.0k, False: 11.0k]
Branch (196:27): [True: 732k, False: 244k]
Branch (196:27): [True: 0, False: 0]
Branch (196:27): [True: 33.2k, False: 11.0k]
|
197 | 5.11M | if (!first) ret += separator; Branch (197:13): [True: 110k, False: 22.1k]
Branch (197:13): [True: 1.19M, False: 44.3k]
Branch (197:13): [True: 2.55M, False: 410k]
Branch (197:13): [True: 0, False: 0]
Branch (197:13): [True: 0, False: 0]
Branch (197:13): [True: 0, False: 11.0k]
Branch (197:13): [True: 488k, False: 244k]
Branch (197:13): [True: 0, False: 0]
Branch (197:13): [True: 22.1k, False: 11.0k]
|
198 | 5.11M | ret += unary_op(item); |
199 | 5.11M | first = false; |
200 | 5.11M | } |
201 | 2.98M | return ret; |
202 | 2.98M | } 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 | 193 | 22.1k | { | 194 | 22.1k | decltype(unary_op(*container.begin())) ret; | 195 | 22.1k | bool first{true}; | 196 | 133k | for (const auto& item : container) { Branch (196:27): [True: 133k, False: 22.1k]
| 197 | 133k | if (!first) ret += separator; Branch (197:13): [True: 110k, False: 22.1k]
| 198 | 133k | ret += unary_op(item); | 199 | 133k | first = false; | 200 | 133k | } | 201 | 22.1k | return ret; | 202 | 22.1k | } |
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 | 193 | 44.3k | { | 194 | 44.3k | decltype(unary_op(*container.begin())) ret; | 195 | 44.3k | bool first{true}; | 196 | 1.24M | for (const auto& item : container) { Branch (196:27): [True: 1.24M, False: 44.3k]
| 197 | 1.24M | if (!first) ret += separator; Branch (197:13): [True: 1.19M, False: 44.3k]
| 198 | 1.24M | ret += unary_op(item); | 199 | 1.24M | first = false; | 200 | 1.24M | } | 201 | 44.3k | return ret; | 202 | 44.3k | } |
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 | 193 | 410k | { | 194 | 410k | decltype(unary_op(*container.begin())) ret; | 195 | 410k | bool first{true}; | 196 | 2.96M | for (const auto& item : container) { Branch (196:27): [True: 2.96M, False: 410k]
| 197 | 2.96M | if (!first) ret += separator; Branch (197:13): [True: 2.55M, False: 410k]
| 198 | 2.96M | ret += unary_op(item); | 199 | 2.96M | first = false; | 200 | 2.96M | } | 201 | 410k | return ret; | 202 | 410k | } |
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 | 193 | 2.24M | { | 194 | 2.24M | decltype(unary_op(*container.begin())) ret; | 195 | 2.24M | bool first{true}; | 196 | 2.24M | for (const auto& item : container) { Branch (196:27): [True: 0, False: 2.24M]
| 197 | 0 | if (!first) ret += separator; Branch (197:13): [True: 0, False: 0]
| 198 | 0 | ret += unary_op(item); | 199 | 0 | first = false; | 200 | 0 | } | 201 | 2.24M | return ret; | 202 | 2.24M | } |
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) 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 | 193 | 11.0k | { | 194 | 11.0k | decltype(unary_op(*container.begin())) ret; | 195 | 11.0k | bool first{true}; | 196 | 11.0k | for (const auto& item : container) { Branch (196:27): [True: 11.0k, False: 11.0k]
| 197 | 11.0k | if (!first) ret += separator; Branch (197:13): [True: 0, False: 11.0k]
| 198 | 11.0k | ret += unary_op(item); | 199 | 11.0k | first = false; | 200 | 11.0k | } | 201 | 11.0k | return ret; | 202 | 11.0k | } |
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 | 193 | 244k | { | 194 | 244k | decltype(unary_op(*container.begin())) ret; | 195 | 244k | bool first{true}; | 196 | 732k | for (const auto& item : container) { Branch (196:27): [True: 732k, False: 244k]
| 197 | 732k | if (!first) ret += separator; Branch (197:13): [True: 488k, False: 244k]
| 198 | 732k | ret += unary_op(item); | 199 | 732k | first = false; | 200 | 732k | } | 201 | 244k | return ret; | 202 | 244k | } |
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<BCLog::Level, std::allocator<BCLog::Level> >, char [3], BCLog::Logger::LogLevelsString[abi:cxx11]() const::$_0>(std::vector<BCLog::Level, std::allocator<BCLog::Level> > const&, char const (&) [3], BCLog::Logger::LogLevelsString[abi:cxx11]() const::$_0) Line | Count | Source | 193 | 11.0k | { | 194 | 11.0k | decltype(unary_op(*container.begin())) ret; | 195 | 11.0k | bool first{true}; | 196 | 33.2k | for (const auto& item : container) { Branch (196:27): [True: 33.2k, False: 11.0k]
| 197 | 33.2k | if (!first) ret += separator; Branch (197:13): [True: 22.1k, False: 11.0k]
| 198 | 33.2k | ret += unary_op(item); | 199 | 33.2k | first = false; | 200 | 33.2k | } | 201 | 11.0k | return ret; | 202 | 11.0k | } |
|
203 | | |
204 | | template <typename C, typename S> |
205 | | auto Join(const C& container, const S& separator) |
206 | 2.65M | { |
207 | 2.96M | return Join(container, separator, [](const auto& i) { return i; }); auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3])::{lambda(auto:1 const&)#1}::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const Line | Count | Source | 207 | 2.96M | return Join(container, separator, [](const auto& i) { return i; }); |
Unexecuted instantiation: auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&)::{lambda(auto:1 const&)#1}::operator()<bilingual_str>(bilingual_str const&) const |
208 | 2.65M | } 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 | 206 | 410k | { | 207 | 410k | return Join(container, separator, [](const auto& i) { return i; }); | 208 | 410k | } |
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 | 206 | 2.24M | { | 207 | 2.24M | return Join(container, separator, [](const auto& i) { return i; }); | 208 | 2.24M | } |
|
209 | | |
210 | | /** |
211 | | * Create an unordered multi-line list of items. |
212 | | */ |
213 | | inline std::string MakeUnorderedList(const std::vector<std::string>& items) |
214 | 22.1k | { |
215 | 133k | return Join(items, "\n", [](const std::string& item) { return "- " + item; }); |
216 | 22.1k | } |
217 | | |
218 | | /** |
219 | | * Check if a string does not contain any embedded NUL (\0) characters |
220 | | */ |
221 | | [[nodiscard]] inline bool ContainsNoNUL(std::string_view str) noexcept |
222 | 28.8M | { |
223 | 278M | for (auto c : str) { Branch (223:17): [True: 278M, False: 28.8M]
|
224 | 278M | if (c == 0) return false; Branch (224:13): [True: 0, False: 278M]
|
225 | 278M | } |
226 | 28.8M | return true; |
227 | 28.8M | } |
228 | | |
229 | | /** |
230 | | * Locale-independent version of std::to_string |
231 | | */ |
232 | | template <typename T> |
233 | | std::string ToString(const T& t) |
234 | 55.4k | { |
235 | 55.4k | std::ostringstream oss; |
236 | 55.4k | oss.imbue(std::locale::classic()); |
237 | 55.4k | oss << t; |
238 | 55.4k | return oss.str(); |
239 | 55.4k | } std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<unsigned int>(unsigned int const&) Line | Count | Source | 234 | 44.3k | { | 235 | 44.3k | std::ostringstream oss; | 236 | 44.3k | oss.imbue(std::locale::classic()); | 237 | 44.3k | oss << t; | 238 | 44.3k | return oss.str(); | 239 | 44.3k | } |
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<int>(int const&) Line | Count | Source | 234 | 11.0k | { | 235 | 11.0k | std::ostringstream oss; | 236 | 11.0k | oss.imbue(std::locale::classic()); | 237 | 11.0k | oss << t; | 238 | 11.0k | return oss.str(); | 239 | 11.0k | } |
Unexecuted instantiation: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<long>(long const&) Unexecuted instantiation: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<unsigned long>(unsigned long const&) |
240 | | |
241 | | /** |
242 | | * Check whether a container begins with the given prefix. |
243 | | */ |
244 | | template <typename T1, size_t PREFIX_LEN> |
245 | | [[nodiscard]] inline bool HasPrefix(const T1& obj, |
246 | | const std::array<uint8_t, PREFIX_LEN>& prefix) |
247 | 3.45M | { |
248 | 3.45M | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 218, False: 0]
Branch (248:12): [True: 42.9k, False: 0]
Branch (248:12): [True: 117k, False: 0]
Branch (248:12): [True: 57.2k, False: 0]
Branch (248:12): [True: 759k, False: 1]
Branch (248:12): [True: 2.33M, False: 0]
Branch (248:12): [True: 87.6k, False: 0]
Branch (248:12): [True: 59.8k, False: 0]
|
249 | 3.45M | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 6, False: 212]
Branch (249:12): [True: 29, False: 42.9k]
Branch (249:12): [True: 88.7k, False: 28.6k]
Branch (249:12): [True: 0, False: 57.2k]
Branch (249:12): [True: 443, False: 758k]
Branch (249:12): [True: 590, False: 2.33M]
Branch (249:12): [True: 56, False: 87.6k]
Branch (249:12): [True: 6, False: 59.8k]
|
250 | 3.45M | } 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 | 247 | 218 | { | 248 | 218 | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 218, False: 0]
| 249 | 218 | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 6, False: 212]
| 250 | 218 | } |
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 | 247 | 42.9k | { | 248 | 42.9k | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 42.9k, False: 0]
| 249 | 42.9k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 29, False: 42.9k]
| 250 | 42.9k | } |
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 | 247 | 117k | { | 248 | 117k | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 117k, False: 0]
| 249 | 117k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 88.7k, False: 28.6k]
| 250 | 117k | } |
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 | 247 | 57.2k | { | 248 | 57.2k | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 57.2k, False: 0]
| 249 | 57.2k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 0, False: 57.2k]
| 250 | 57.2k | } |
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 | 247 | 759k | { | 248 | 759k | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 759k, False: 1]
| 249 | 759k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 443, False: 758k]
| 250 | 759k | } |
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 | 247 | 2.33M | { | 248 | 2.33M | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 2.33M, False: 0]
| 249 | 2.33M | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 590, False: 2.33M]
| 250 | 2.33M | } |
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 | 247 | 87.6k | { | 248 | 87.6k | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 87.6k, False: 0]
| 249 | 87.6k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 56, False: 87.6k]
| 250 | 87.6k | } |
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 | 247 | 59.8k | { | 248 | 59.8k | return obj.size() >= PREFIX_LEN && Branch (248:12): [True: 59.8k, False: 0]
| 249 | 59.8k | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); Branch (249:12): [True: 6, False: 59.8k]
| 250 | 59.8k | } |
|
251 | | } // namespace util |
252 | | |
253 | | #endif // BITCOIN_UTIL_STRING_H |