/root/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 <optional> |
15 | | #include <sstream> |
16 | | #include <string> |
17 | | #include <string_view> |
18 | | #include <vector> |
19 | | |
20 | | namespace util { |
21 | | namespace detail { |
22 | | template <unsigned num_params> |
23 | | constexpr static void CheckNumFormatSpecifiers(const char* str) |
24 | 0 | { |
25 | 0 | unsigned count_normal{0}; // Number of "normal" specifiers, like %s |
26 | 0 | unsigned count_pos{0}; // Max number in positional specifier, like %8$s |
27 | 0 | for (auto it{str}; *it != '\0'; ++it) { |
28 | 0 | if (*it != '%' || *++it == '%') continue; // Skip escaped %% |
29 | 0 |
|
30 | 0 | auto add_arg = [&] { |
31 | 0 | unsigned maybe_num{0}; |
32 | 0 | while ('0' <= *it && *it <= '9') { |
33 | 0 | maybe_num *= 10; |
34 | 0 | maybe_num += *it - '0'; |
35 | 0 | ++it; |
36 | 0 | } |
37 | 0 |
|
38 | 0 | if (*it == '$') { |
39 | 0 | ++it; |
40 | 0 | // Positional specifier, like %8$s |
41 | 0 | if (maybe_num == 0) throw "Positional format specifier must have position of at least 1"; |
42 | 0 | count_pos = std::max(count_pos, maybe_num); |
43 | 0 | } else { |
44 | 0 | // Non-positional specifier, like %s |
45 | 0 | ++count_normal; |
46 | 0 | } |
47 | 0 | }; |
48 | 0 |
|
49 | 0 | // Increase argument count and consume positional specifier, if present. |
50 | 0 | add_arg(); |
51 | 0 |
|
52 | 0 | // Consume flags. |
53 | 0 | while (*it == '#' || *it == '0' || *it == '-' || *it == ' ' || *it == '+') ++it; |
54 | 0 |
|
55 | 0 | auto parse_size = [&] { |
56 | 0 | if (*it == '*') { |
57 | 0 | ++it; |
58 | 0 | add_arg(); |
59 | 0 | } else { |
60 | 0 | while ('0' <= *it && *it <= '9') ++it; |
61 | 0 | } |
62 | 0 | }; |
63 | 0 |
|
64 | 0 | // Consume dynamic or static width value. |
65 | 0 | parse_size(); |
66 | 0 |
|
67 | 0 | // Consume dynamic or static precision value. |
68 | 0 | if (*it == '.') { |
69 | 0 | ++it; |
70 | 0 | parse_size(); |
71 | 0 | } |
72 | 0 |
|
73 | 0 | if (*it == '\0') throw "Format specifier incorrectly terminated by end of string"; |
74 | 0 |
|
75 | 0 | // Length and type in "[flags][width][.precision][length]type" |
76 | 0 | // is not checked. Parsing continues with the next '%'. |
77 | 0 | } |
78 | 0 | if (count_normal && count_pos) throw "Format specifiers must be all positional or all non-positional!"; |
79 | 0 | unsigned count{count_normal | count_pos}; |
80 | 0 | if (num_params != count) throw "Format specifier count must match the argument count!"; |
81 | 0 | } Unexecuted instantiation: addition_overflow.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: asmap_direct.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: autofile.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: banman.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: banman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: banman.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: base_encode_decode.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: bip324.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: bitdeque.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: bitset.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: block.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: block_header.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: block_index.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: block_index.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: block_index_tree.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: block_index_tree.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: blockfilter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: bloom_filter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: buffered_file.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: chain.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: checkqueue.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: cluster_linearize.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coins_view.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coins_view.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: coinscache_sim.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: connman.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: connman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: connman.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: crypto.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_aes256.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_aes256cbc.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_chacha20.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_chacha20poly1305.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_common.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_diff_fuzz_chacha20.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_hkdf_hmac_sha256_l32.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypto_poly1305.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: cuckoocache.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: cuckoocache.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: deserialize.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: deserialize.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: deserialize.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: difference_formatter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: feefrac.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: fee_rate.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: feeratediagram.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: fees.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: flatfile.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: float.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: golomb_rice.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: http_request.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: http_request.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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<3u>(char const*) Unexecuted instantiation: integer.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: integer.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: key.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: kitchen_sink.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: load_external_block_file.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: load_external_block_file.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: locale.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: merkle.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: merkleblock.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: message.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: miniscript.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: minisketch.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: mini_miner.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: mini_miner.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: muhash.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: multiplication_overflow.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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_permissions.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(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<3u>(char const*) Unexecuted instantiation: netbase_dns_lookup.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: netbase_dns_lookup.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: netbase_dns_lookup.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: node_eviction.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: node_eviction.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: node_eviction.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: p2p_handshake.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: p2p_handshake.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: p2p_handshake.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: p2p_headers_presync.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: p2p_headers_presync.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: p2p_transport_serialization.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: p2p_transport_serialization.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: pcp.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<3u>(char const*) Unexecuted instantiation: package_eval.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: package_eval.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: parse_hd_keypath.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: partially_downloaded_block.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: partially_downloaded_block.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: policy_estimator.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: policy_estimator_io.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: policy_estimator_io.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: poolresource.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: pow.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: prevector.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: primitives_transaction.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: process_message.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: process_message.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: process_message.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: process_messages.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: process_messages.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: process_messages.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: psbt.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: random.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: rbf.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: rbf.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: rolling_bloom_filter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: rpc.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: rpc.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: script.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: script_assets_test_minimizer.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: script_descriptor_cache.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: script_flags.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: script_format.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: script_interpreter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: script_ops.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: script_sigcache.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: script_sigcache.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: script_sign.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: scriptnum_ops.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: secp256k1_ec_seckey_import_export_der.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: secp256k1_ecdsa_signature_parse_der_lax.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: signature_checker.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<2u>(char const*) Unexecuted instantiation: socks5.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: socks5.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: socks5.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: span.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: string.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: string.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: strprintf.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: system.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: system.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: threadpool.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: torcontrol.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: torcontrol.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txdownloadman.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: txdownloadman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txdownloadman.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*) Unexecuted instantiation: tx_in.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: tx_out.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: tx_pool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: tx_pool.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: txgraph.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txorphan.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: txorphan.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: utxo_snapshot.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: utxo_snapshot.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: utxo_total_supply.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: utxo_total_supply.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: validation_load_mempool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: validation_load_mempool.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: vecdeque.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: versionbits.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coincontrol.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coincontrol.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: crypter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: crypter.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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<3u>(char const*) Unexecuted instantiation: scriptpubkeyman.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<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: wallet_bdb_parser.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: wallet_bdb_parser.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: mempool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: threadinterrupt.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: fuzz.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: fuzz.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: client.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: chain.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: chainparams.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: chainparams.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: args.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: args.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: args.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: bloom.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: messages.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: messages.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: 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: key_io.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: key_io.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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: 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<3u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: asmap.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: bip32.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: check.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*) Unexecuted instantiation: check.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: fs_helpers.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: fs_helpers.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: moneystr.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: sock.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: sock.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: sock.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: syserror.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: syserror.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: thread.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: time.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*) Unexecuted instantiation: time.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: time.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*) Unexecuted instantiation: logging.cpp:void util::detail::CheckNumFormatSpecifiers<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: logging.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: random.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: streams.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: coinselection.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: dump.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: dump.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: dump.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: dump.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(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: transaction.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: wallet.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<5u>(char const*) Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: walletdb.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: db.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: db.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: external_signer_scriptpubkeyman.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: interfaces.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: interfaces.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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: 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: 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: 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: addresses.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: addresses.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: addresses.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: addresses.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: backup.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: coins.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: encrypt.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: signmessage.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: transactions.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: transactions.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: transactions.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: transactions.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: util.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: mining.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: random.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: setup_common.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: setup_common.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: 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<4u>(char const*) Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: addrman.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) Unexecuted instantiation: banman.cpp:void util::detail::CheckNumFormatSpecifiers<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: 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<3u>(char const*) Unexecuted instantiation: headerssync.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: headerssync.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: httpserver.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: i2p.cpp:void util::detail::CheckNumFormatSpecifiers<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: coinstats.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: context.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: mapport.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: mapport.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: mapport.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) Unexecuted instantiation: net.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<7u>(char const*) Unexecuted instantiation: net_processing.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: netgroup.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: netgroup.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: 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: 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: peerman_args.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: peerman_args.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<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: 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<2u>(char const*) Unexecuted instantiation: mining.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: node.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: node.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: output_script.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: rawtransaction.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: rawtransaction.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: server.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: server.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: server_util.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: server_util.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txoutproof.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: sigcache.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: signet.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(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<1u>(char const*) Unexecuted instantiation: txdb.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: txdb.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: txdb.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: txmempool.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<5u>(char const*) Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<6u>(char const*) Unexecuted instantiation: validation.cpp:void util::detail::CheckNumFormatSpecifiers<12u>(char const*) Unexecuted instantiation: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<4u>(char const*) Unexecuted instantiation: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: validationinterface.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: httprpc.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: httprpc.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: httprpc.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: base.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: base.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: blockfilterindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<3u>(char const*) Unexecuted instantiation: coinstatsindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: txindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txindex.cpp:void util::detail::CheckNumFormatSpecifiers<0u>(char const*) Unexecuted instantiation: txospenderindex.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) Unexecuted instantiation: txospenderindex.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: abort.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(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: 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: netif.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: netif.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(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: net_types.cpp:void util::detail::CheckNumFormatSpecifiers<2u>(char const*) Unexecuted instantiation: net_types.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: batchpriority.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*) Unexecuted instantiation: interpreter.cpp:void util::detail::CheckNumFormatSpecifiers<1u>(char const*) |
82 | | } // namespace detail |
83 | | |
84 | | /** |
85 | | * @brief A wrapper for a compile-time partially validated format string |
86 | | * |
87 | | * This struct can be used to enforce partial compile-time validation of format |
88 | | * strings, to reduce the likelihood of tinyformat throwing exceptions at |
89 | | * run-time. Validation is partial to try and prevent the most common errors |
90 | | * while avoiding re-implementing the entire parsing logic. |
91 | | */ |
92 | | template <unsigned num_params> |
93 | | struct ConstevalFormatString { |
94 | | const char* const fmt; |
95 | | consteval ConstevalFormatString(const char* str) : fmt{str} { detail::CheckNumFormatSpecifiers<num_params>(fmt); } |
96 | | }; |
97 | | |
98 | | void ReplaceAll(std::string& in_out, const std::string& search, const std::string& substitute); |
99 | | |
100 | | /** Split a string on any char found in separators, returning a vector. |
101 | | * |
102 | | * If sep does not occur in sp, a singleton with the entirety of sp is returned. |
103 | | * |
104 | | * @param[in] include_sep Whether to include the separator at the end of the left side of the splits. |
105 | | * |
106 | | * Note that this function does not care about braces, so splitting |
107 | | * "foo(bar(1),2),3) on ',' will return {"foo(bar(1)", "2)", "3)"}. |
108 | | * |
109 | | * If include_sep == true, splitting "foo(bar(1),2),3) on ',' |
110 | | * will return: |
111 | | * - foo(bar(1), |
112 | | * - 2), |
113 | | * - 3) |
114 | | */ |
115 | | template <typename T = std::span<const char>> |
116 | | std::vector<T> Split(const std::span<const char>& sp, std::string_view separators, bool include_sep = false) |
117 | 49.2k | { |
118 | 49.2k | std::vector<T> ret; |
119 | 49.2k | auto it = sp.begin(); |
120 | 49.2k | auto start = it; |
121 | 1.16M | while (it != sp.end()) { |
122 | 1.11M | if (separators.find(*it) != std::string::npos) { |
123 | 300k | if (include_sep) { |
124 | 0 | ret.emplace_back(start, it + 1); |
125 | 300k | } else { |
126 | 300k | ret.emplace_back(start, it); |
127 | 300k | } |
128 | 300k | start = it + 1; |
129 | 300k | } |
130 | 1.11M | ++it; |
131 | 1.11M | } |
132 | 49.2k | ret.emplace_back(start, it); |
133 | 49.2k | return ret; |
134 | 49.2k | } Unexecuted instantiation: 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) 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) 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 | 117 | 49.2k | { | 118 | 49.2k | std::vector<T> ret; | 119 | 49.2k | auto it = sp.begin(); | 120 | 49.2k | auto start = it; | 121 | 1.16M | while (it != sp.end()) { | 122 | 1.11M | if (separators.find(*it) != std::string::npos) { | 123 | 300k | if (include_sep) { | 124 | 0 | ret.emplace_back(start, it + 1); | 125 | 300k | } else { | 126 | 300k | ret.emplace_back(start, it); | 127 | 300k | } | 128 | 300k | start = it + 1; | 129 | 300k | } | 130 | 1.11M | ++it; | 131 | 1.11M | } | 132 | 49.2k | ret.emplace_back(start, it); | 133 | 49.2k | return ret; | 134 | 49.2k | } |
|
135 | | |
136 | | /** Split a string on every instance of sep, returning a vector. |
137 | | * |
138 | | * If sep does not occur in sp, a singleton with the entirety of sp is returned. |
139 | | * |
140 | | * Note that this function does not care about braces, so splitting |
141 | | * "foo(bar(1),2),3) on ',' will return {"foo(bar(1)", "2)", "3)"}. |
142 | | */ |
143 | | template <typename T = std::span<const char>> |
144 | | std::vector<T> Split(const std::span<const char>& sp, char sep, bool include_sep = false) |
145 | 0 | { |
146 | 0 | return Split<T>(sp, std::string_view{&sep, 1}, include_sep); |
147 | 0 | } Unexecuted instantiation: 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) 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) |
148 | | |
149 | | [[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, char sep) |
150 | 0 | { |
151 | 0 | return Split<std::string>(str, sep); |
152 | 0 | } |
153 | | |
154 | | [[nodiscard]] inline std::vector<std::string> SplitString(std::string_view str, std::string_view separators) |
155 | 0 | { |
156 | 0 | return Split<std::string>(str, separators); |
157 | 0 | } |
158 | | |
159 | | [[nodiscard]] inline std::string_view TrimStringView(std::string_view str, std::string_view pattern = " \f\n\r\t\v") |
160 | 4.25M | { |
161 | 4.25M | std::string::size_type front = str.find_first_not_of(pattern); |
162 | 4.25M | if (front == std::string::npos) { |
163 | 531k | return {}; |
164 | 531k | } |
165 | 3.72M | std::string::size_type end = str.find_last_not_of(pattern); |
166 | 3.72M | return str.substr(front, end - front + 1); |
167 | 4.25M | } |
168 | | |
169 | | [[nodiscard]] inline std::string TrimString(std::string_view str, std::string_view pattern = " \f\n\r\t\v") |
170 | 2.81M | { |
171 | 2.81M | return std::string(TrimStringView(str, pattern)); |
172 | 2.81M | } |
173 | | |
174 | | [[nodiscard]] inline std::string_view RemoveSuffixView(std::string_view str, std::string_view suffix) |
175 | 0 | { |
176 | 0 | if (str.ends_with(suffix)) { |
177 | 0 | return str.substr(0, str.size() - suffix.size()); |
178 | 0 | } |
179 | 0 | return str; |
180 | 0 | } |
181 | | |
182 | | [[nodiscard]] inline std::string_view RemovePrefixView(std::string_view str, std::string_view prefix) |
183 | 0 | { |
184 | 0 | if (str.starts_with(prefix)) { |
185 | 0 | return str.substr(prefix.size()); |
186 | 0 | } |
187 | 0 | return str; |
188 | 0 | } |
189 | | |
190 | | [[nodiscard]] inline std::string RemovePrefix(std::string_view str, std::string_view prefix) |
191 | 0 | { |
192 | 0 | return std::string(RemovePrefixView(str, prefix)); |
193 | 0 | } |
194 | | |
195 | | /** |
196 | | * Join all container items. Typically used to concatenate strings but accepts |
197 | | * containers with elements of any type. |
198 | | * |
199 | | * @param container The items to join |
200 | | * @param separator The separator |
201 | | * @param unary_op Apply this operator to each item |
202 | | */ |
203 | | template <typename C, typename S, typename UnaryOp> |
204 | | // NOLINTNEXTLINE(misc-no-recursion) |
205 | | auto Join(const C& container, const S& separator, UnaryOp unary_op) |
206 | 0 | { |
207 | 0 | decltype(unary_op(*container.begin())) ret; |
208 | 0 | bool first{true}; |
209 | 0 | for (const auto& item : container) { |
210 | 0 | if (!first) ret += separator; |
211 | 0 | ret += unary_op(item); |
212 | 0 | first = false; |
213 | 0 | } |
214 | 0 | return ret; |
215 | 0 | } 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::MakeUnorderedList(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [2], util::MakeUnorderedList(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)::'lambda'(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)) Unexecuted instantiation: auto util::Join<std::vector<LogCategory, std::allocator<LogCategory> >, char [3], BCLog::Logger::LogCategoriesString[abi:cxx11]() const::'lambda'(LogCategory const&)>(std::vector<LogCategory, std::allocator<LogCategory> > const&, char const (&) [3], BCLog::Logger::LogCategoriesString[abi:cxx11]() const::'lambda'(LogCategory const&)) 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 [4], 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 [4]>(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 (&) [4])::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [4], 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 [4]>(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 (&) [4])::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)) 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> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, 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> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, 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> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)) 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 [3], auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3])::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3], auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3])::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)) Unexecuted instantiation: 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) Unexecuted instantiation: 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) 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) Unexecuted instantiation: 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) Unexecuted instantiation: auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str, auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&)::'lambda'(std::vector<bilingual_str, std::allocator<bilingual_str> > const&)>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&, auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&)::'lambda'(std::vector<bilingual_str, std::allocator<bilingual_str> > const&)) Unexecuted instantiation: 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) 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) |
216 | | |
217 | | template <typename C, typename S> |
218 | | auto Join(const C& container, const S& separator) |
219 | 0 | { |
220 | 0 | return Join(container, separator, [](const auto& i) { return i; });Unexecuted instantiation: auto auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [4]>(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 (&) [4])::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const Unexecuted instantiation: auto auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const Unexecuted instantiation: auto auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [3]>(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, char const (&) [3])::'lambda'(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)::operator()<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const Unexecuted instantiation: auto auto util::Join<std::vector<bilingual_str, std::allocator<bilingual_str> >, bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&, bilingual_str const&)::'lambda'(std::vector<bilingual_str, std::allocator<bilingual_str> > const&)::operator()<bilingual_str>(std::vector<bilingual_str, std::allocator<bilingual_str> > const&) const |
221 | 0 | } 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 [4]>(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 (&) [4]) 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> > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) Unexecuted instantiation: auto util::Join<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char [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]) 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&) |
222 | | |
223 | | /** |
224 | | * Create an unordered multi-line list of items. |
225 | | */ |
226 | | inline std::string MakeUnorderedList(const std::vector<std::string>& items) |
227 | 0 | { |
228 | 0 | return Join(items, "\n", [](const std::string& item) { return "- " + item; }); |
229 | 0 | } |
230 | | |
231 | | /** |
232 | | * Check if a string does not contain any embedded NUL (\0) characters |
233 | | */ |
234 | | [[nodiscard]] inline bool ContainsNoNUL(std::string_view str) noexcept |
235 | 0 | { |
236 | 0 | for (auto c : str) { |
237 | 0 | if (c == 0) return false; |
238 | 0 | } |
239 | 0 | return true; |
240 | 0 | } |
241 | | |
242 | | /** |
243 | | * Locale-independent version of std::to_string |
244 | | */ |
245 | | template <typename T> |
246 | | std::string ToString(const T& t) |
247 | 0 | { |
248 | 0 | std::ostringstream oss; |
249 | 0 | oss.imbue(std::locale::classic()); |
250 | 0 | oss << t; |
251 | 0 | return oss.str(); |
252 | 0 | } 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 int>(unsigned int const&) Unexecuted instantiation: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<unsigned long>(unsigned long const&) Unexecuted instantiation: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > util::ToString<int>(int const&) |
253 | | |
254 | | /** |
255 | | * Check whether a container begins with the given prefix. |
256 | | */ |
257 | | template <typename T1, size_t PREFIX_LEN> |
258 | | [[nodiscard]] inline bool HasPrefix(const T1& obj, |
259 | | const std::array<uint8_t, PREFIX_LEN>& prefix) |
260 | 0 | { |
261 | 0 | return obj.size() >= PREFIX_LEN && |
262 | 0 | std::equal(std::begin(prefix), std::end(prefix), std::begin(obj)); |
263 | 0 | } Unexecuted instantiation: 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&) Unexecuted instantiation: 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&) Unexecuted instantiation: bool util::HasPrefix<std::span<unsigned char const, 18446744073709551615ul>, 12ul>(std::span<unsigned char const, 18446744073709551615ul> const&, std::array<unsigned char, 12ul> const&) Unexecuted instantiation: bool util::HasPrefix<std::span<unsigned char const, 18446744073709551615ul>, 6ul>(std::span<unsigned char const, 18446744073709551615ul> const&, std::array<unsigned char, 6ul> const&) Unexecuted instantiation: 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&) Unexecuted instantiation: 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&) Unexecuted instantiation: 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&) Unexecuted instantiation: 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&) |
264 | | |
265 | | struct LineReader { |
266 | | const std::span<const std::byte>::iterator start; |
267 | | const std::span<const std::byte>::iterator end; |
268 | | const size_t max_line_length; |
269 | | std::span<const std::byte>::iterator it; |
270 | | |
271 | | explicit LineReader(std::span<const std::byte> buffer, size_t max_line_length); |
272 | | |
273 | | /** |
274 | | * Returns a string from current iterator position up to (but not including) next \n |
275 | | * and advances iterator to the character following the \n on success. |
276 | | * Will not return a line longer than max_line_length. |
277 | | * @returns the next string from the buffer. |
278 | | * std::nullopt if end of buffer is reached without finding a \n. |
279 | | * @throws a std::runtime_error if max_line_length + 1 bytes are read without finding \n. |
280 | | */ |
281 | | std::optional<std::string> ReadLine(); |
282 | | |
283 | | /** |
284 | | * Returns string from current iterator position of specified length |
285 | | * if possible and advances iterator on success. |
286 | | * May exceed max_line_length but will not read past end of buffer. |
287 | | * @param[in] len The number of bytes to read from the buffer |
288 | | * @returns a string of the expected length. |
289 | | * @throws a std::runtime_error if there is not enough data in the buffer. |
290 | | */ |
291 | | std::string ReadLength(size_t len); |
292 | | |
293 | | /** |
294 | | * Returns remaining size of bytes in buffer |
295 | | */ |
296 | | size_t Remaining() const; |
297 | | |
298 | | /** |
299 | | * Returns number of bytes already read from buffer |
300 | | */ |
301 | | size_t Consumed() const; |
302 | | }; |
303 | | } // namespace util |
304 | | |
305 | | #endif // BITCOIN_UTIL_STRING_H |