/bitcoin/src/util/vector.h
Line | Count | Source |
1 | | // Copyright (c) 2019-2022 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_VECTOR_H |
6 | | #define BITCOIN_UTIL_VECTOR_H |
7 | | |
8 | | #include <functional> |
9 | | #include <initializer_list> |
10 | | #include <optional> |
11 | | #include <type_traits> |
12 | | #include <utility> |
13 | | #include <vector> |
14 | | |
15 | | /** Construct a vector with the specified elements. |
16 | | * |
17 | | * This is preferable over the list initializing constructor of std::vector: |
18 | | * - It automatically infers the element type from its arguments. |
19 | | * - If any arguments are rvalue references, they will be moved into the vector |
20 | | * (list initialization always copies). |
21 | | */ |
22 | | template<typename... Args> |
23 | | inline std::vector<std::common_type_t<Args...>> Vector(Args&&... args) |
24 | 1.38M | { |
25 | 1.38M | std::vector<std::common_type_t<Args...>> ret; |
26 | 1.38M | ret.reserve(sizeof...(args)); |
27 | | // The line below uses the trick from https://www.experts-exchange.com/articles/32502/None-recursive-variadic-templates-with-std-initializer-list.html |
28 | 1.38M | (void)std::initializer_list<int>{(ret.emplace_back(std::forward<Args>(args)), 0)...}; |
29 | 1.38M | return ret; |
30 | 1.38M | } std::vector<std::common_type<uint256 const&, uint256&>::type, std::allocator<std::common_type<uint256 const&, uint256&>::type> > Vector<uint256 const&, uint256&>(uint256 const&, uint256&) Line | Count | Source | 24 | 29.2k | { | 25 | 29.2k | std::vector<std::common_type_t<Args...>> ret; | 26 | 29.2k | ret.reserve(sizeof...(args)); | 27 | | // The line below uses the trick from https://www.experts-exchange.com/articles/32502/None-recursive-variadic-templates-with-std-initializer-list.html | 28 | 29.2k | (void)std::initializer_list<int>{(ret.emplace_back(std::forward<Args>(args)), 0)...}; | 29 | 29.2k | return ret; | 30 | 29.2k | } |
std::vector<std::common_type<std::vector<unsigned char, std::allocator<unsigned char> > >::type, std::allocator<std::common_type<std::vector<unsigned char, std::allocator<unsigned char> > >::type> > Vector<std::vector<unsigned char, std::allocator<unsigned char> > >(std::vector<unsigned char, std::allocator<unsigned char> >&&) Line | Count | Source | 24 | 99.8k | { | 25 | 99.8k | std::vector<std::common_type_t<Args...>> ret; | 26 | 99.8k | ret.reserve(sizeof...(args)); | 27 | | // The line below uses the trick from https://www.experts-exchange.com/articles/32502/None-recursive-variadic-templates-with-std-initializer-list.html | 28 | 99.8k | (void)std::initializer_list<int>{(ret.emplace_back(std::forward<Args>(args)), 0)...}; | 29 | 99.8k | return ret; | 30 | 99.8k | } |
descriptor.cpp:std::vector<std::common_type<std::unique_ptr<(anonymous namespace)::PubkeyProvider, std::default_delete<(anonymous namespace)::PubkeyProvider> > >::type, std::allocator<std::common_type<std::unique_ptr<(anonymous namespace)::PubkeyProvider, std::default_delete<(anonymous namespace)::PubkeyProvider> > >::type> > Vector<std::unique_ptr<(anonymous namespace)::PubkeyProvider, std::default_delete<(anonymous namespace)::PubkeyProvider> > >(std::unique_ptr<(anonymous namespace)::PubkeyProvider, std::default_delete<(anonymous namespace)::PubkeyProvider> >&&) Line | Count | Source | 24 | 88.7k | { | 25 | 88.7k | std::vector<std::common_type_t<Args...>> ret; | 26 | 88.7k | ret.reserve(sizeof...(args)); | 27 | | // The line below uses the trick from https://www.experts-exchange.com/articles/32502/None-recursive-variadic-templates-with-std-initializer-list.html | 28 | 88.7k | (void)std::initializer_list<int>{(ret.emplace_back(std::forward<Args>(args)), 0)...}; | 29 | 88.7k | return ret; | 30 | 88.7k | } |
std::vector<std::common_type<CScript>::type, std::allocator<std::common_type<CScript>::type> > Vector<CScript>(CScript&&) Line | Count | Source | 24 | 1.10M | { | 25 | 1.10M | std::vector<std::common_type_t<Args...>> ret; | 26 | 1.10M | ret.reserve(sizeof...(args)); | 27 | | // The line below uses the trick from https://www.experts-exchange.com/articles/32502/None-recursive-variadic-templates-with-std-initializer-list.html | 28 | 1.10M | (void)std::initializer_list<int>{(ret.emplace_back(std::forward<Args>(args)), 0)...}; | 29 | 1.10M | return ret; | 30 | 1.10M | } |
descriptor.cpp:std::vector<std::common_type<std::unique_ptr<(anonymous namespace)::DescriptorImpl, std::default_delete<(anonymous namespace)::DescriptorImpl> > >::type, std::allocator<std::common_type<std::unique_ptr<(anonymous namespace)::DescriptorImpl, std::default_delete<(anonymous namespace)::DescriptorImpl> > >::type> > Vector<std::unique_ptr<(anonymous namespace)::DescriptorImpl, std::default_delete<(anonymous namespace)::DescriptorImpl> > >(std::unique_ptr<(anonymous namespace)::DescriptorImpl, std::default_delete<(anonymous namespace)::DescriptorImpl> >&&) Line | Count | Source | 24 | 22.1k | { | 25 | 22.1k | std::vector<std::common_type_t<Args...>> ret; | 26 | 22.1k | ret.reserve(sizeof...(args)); | 27 | | // The line below uses the trick from https://www.experts-exchange.com/articles/32502/None-recursive-variadic-templates-with-std-initializer-list.html | 28 | 22.1k | (void)std::initializer_list<int>{(ret.emplace_back(std::forward<Args>(args)), 0)...}; | 29 | 22.1k | return ret; | 30 | 22.1k | } |
Unexecuted instantiation: std::vector<std::common_type<CScript const&>::type, std::allocator<std::common_type<CScript const&>::type> > Vector<CScript const&>(CScript const&) Unexecuted instantiation: std::vector<std::common_type<miniscript::internal::MaxInt<unsigned int> >::type, std::allocator<std::common_type<miniscript::internal::MaxInt<unsigned int> >::type> > Vector<miniscript::internal::MaxInt<unsigned int> >(miniscript::internal::MaxInt<unsigned int>&&) Unexecuted instantiation: std::vector<std::common_type<miniscript::internal::SatInfo>::type, std::allocator<std::common_type<miniscript::internal::SatInfo>::type> > Vector<miniscript::internal::SatInfo>(miniscript::internal::SatInfo&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >(std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >&&) Unexecuted instantiation: std::vector<std::common_type<unsigned int>::type, std::allocator<std::common_type<unsigned int>::type> > Vector<unsigned int>(unsigned int&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >(std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >&&, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> > >(std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >&&, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >&&, std::unique_ptr<miniscript::Node<unsigned int> const, std::default_delete<miniscript::Node<unsigned int> const> >&&) std::vector<std::common_type<unsigned char>::type, std::allocator<std::common_type<unsigned char>::type> > Vector<unsigned char>(unsigned char&&) Line | Count | Source | 24 | 33.2k | { | 25 | 33.2k | std::vector<std::common_type_t<Args...>> ret; | 26 | 33.2k | ret.reserve(sizeof...(args)); | 27 | | // The line below uses the trick from https://www.experts-exchange.com/articles/32502/None-recursive-variadic-templates-with-std-initializer-list.html | 28 | 33.2k | (void)std::initializer_list<int>{(ret.emplace_back(std::forward<Args>(args)), 0)...}; | 29 | 33.2k | return ret; | 30 | 33.2k | } |
Unexecuted instantiation: std::vector<std::common_type<std::vector<unsigned char, std::allocator<unsigned char> >&>::type, std::allocator<std::common_type<std::vector<unsigned char, std::allocator<unsigned char> >&>::type> > Vector<std::vector<unsigned char, std::allocator<unsigned char> >&>(std::vector<unsigned char, std::allocator<unsigned char> >&) Unexecuted instantiation: std::vector<std::common_type<XOnlyPubKey>::type, std::allocator<std::common_type<XOnlyPubKey>::type> > Vector<XOnlyPubKey>(XOnlyPubKey&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >(std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >(std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >&&, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> > >(std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >&&, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >&&, std::unique_ptr<miniscript::Node<XOnlyPubKey> const, std::default_delete<miniscript::Node<XOnlyPubKey> const> >&&) Unexecuted instantiation: std::vector<std::common_type<miniscript::internal::InputStack const&>::type, std::allocator<std::common_type<miniscript::internal::InputStack const&>::type> > Vector<miniscript::internal::InputStack const&>(miniscript::internal::InputStack const&) Unexecuted instantiation: std::vector<std::common_type<CPubKey>::type, std::allocator<std::common_type<CPubKey>::type> > Vector<CPubKey>(CPubKey&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >(std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >(std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >&&, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >&&) Unexecuted instantiation: std::vector<std::common_type<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >::type, std::allocator<std::common_type<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >::type> > Vector<std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> > >(std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >&&, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >&&, std::unique_ptr<miniscript::Node<CPubKey> const, std::default_delete<miniscript::Node<CPubKey> const> >&&) |
31 | | |
32 | | /** Concatenate two vectors, moving elements. */ |
33 | | template<typename V> |
34 | | inline V Cat(V v1, V&& v2) |
35 | 310k | { |
36 | 310k | v1.reserve(v1.size() + v2.size()); |
37 | 2.12M | for (auto& arg : v2) { Branch (37:20): [True: 1.77M, False: 221k]
Branch (37:20): [True: 354k, False: 88.7k]
Branch (37:20): [True: 0, False: 0]
|
38 | 2.12M | v1.push_back(std::move(arg)); |
39 | 2.12M | } |
40 | 310k | return v1; |
41 | 310k | } std::vector<RPCResult, std::allocator<RPCResult> > Cat<std::vector<RPCResult, std::allocator<RPCResult> > >(std::vector<RPCResult, std::allocator<RPCResult> >, std::vector<RPCResult, std::allocator<RPCResult> >&&) Line | Count | Source | 35 | 221k | { | 36 | 221k | v1.reserve(v1.size() + v2.size()); | 37 | 1.77M | for (auto& arg : v2) { Branch (37:20): [True: 1.77M, False: 221k]
| 38 | 1.77M | v1.push_back(std::move(arg)); | 39 | 1.77M | } | 40 | 221k | return v1; | 41 | 221k | } |
std::vector<RPCArg, std::allocator<RPCArg> > Cat<std::vector<RPCArg, std::allocator<RPCArg> > >(std::vector<RPCArg, std::allocator<RPCArg> >, std::vector<RPCArg, std::allocator<RPCArg> >&&) Line | Count | Source | 35 | 88.7k | { | 36 | 88.7k | v1.reserve(v1.size() + v2.size()); | 37 | 354k | for (auto& arg : v2) { Branch (37:20): [True: 354k, False: 88.7k]
| 38 | 354k | v1.push_back(std::move(arg)); | 39 | 354k | } | 40 | 88.7k | return v1; | 41 | 88.7k | } |
Unexecuted instantiation: std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > > Cat<std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > > >(std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > >, std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > >&&) |
42 | | |
43 | | /** Concatenate two vectors. */ |
44 | | template<typename V> |
45 | | inline V Cat(V v1, const V& v2) |
46 | | { |
47 | | v1.reserve(v1.size() + v2.size()); |
48 | | for (const auto& arg : v2) { |
49 | | v1.push_back(arg); |
50 | | } |
51 | | return v1; |
52 | | } |
53 | | |
54 | | /** Clear a vector (or std::deque) and release its allocated memory. */ |
55 | | template<typename V> |
56 | | inline void ClearShrink(V& v) noexcept |
57 | 12.6M | { |
58 | | // There are various ways to clear a vector and release its memory: |
59 | | // |
60 | | // 1. V{}.swap(v) |
61 | | // 2. v = V{} |
62 | | // 3. v = {}; v.shrink_to_fit(); |
63 | | // 4. v.clear(); v.shrink_to_fit(); |
64 | | // |
65 | | // (2) does not appear to release memory in glibc debug mode, even if v.shrink_to_fit() |
66 | | // follows. (3) and (4) rely on std::vector::shrink_to_fit, which is only a non-binding |
67 | | // request. Therefore, we use method (1). |
68 | | |
69 | 12.6M | V{}.swap(v); |
70 | 12.6M | } void ClearShrink<std::vector<unsigned char, std::allocator<unsigned char> > >(std::vector<unsigned char, std::allocator<unsigned char> >&) Line | Count | Source | 57 | 12.6M | { | 58 | | // There are various ways to clear a vector and release its memory: | 59 | | // | 60 | | // 1. V{}.swap(v) | 61 | | // 2. v = V{} | 62 | | // 3. v = {}; v.shrink_to_fit(); | 63 | | // 4. v.clear(); v.shrink_to_fit(); | 64 | | // | 65 | | // (2) does not appear to release memory in glibc debug mode, even if v.shrink_to_fit() | 66 | | // follows. (3) and (4) rely on std::vector::shrink_to_fit, which is only a non-binding | 67 | | // request. Therefore, we use method (1). | 68 | | | 69 | 12.6M | V{}.swap(v); | 70 | 12.6M | } |
Unexecuted instantiation: void ClearShrink<bitdeque<32768> >(bitdeque<32768>&) Unexecuted instantiation: void ClearShrink<std::deque<CompressedHeader, std::allocator<CompressedHeader> > >(std::deque<CompressedHeader, std::allocator<CompressedHeader> >&) |
71 | | |
72 | | template<typename V, typename L> |
73 | | inline std::optional<V> FindFirst(const std::vector<V>& vec, const L fnc) |
74 | 0 | { |
75 | 0 | for (const auto& el : vec) { Branch (75:25): [True: 0, False: 0]
Branch (75:25): [True: 0, False: 0]
|
76 | 0 | if (fnc(el)) { Branch (76:13): [True: 0, False: 0]
Branch (76:13): [True: 0, False: 0]
|
77 | 0 | return el; |
78 | 0 | } |
79 | 0 | } |
80 | 0 | return std::nullopt; |
81 | 0 | } Unexecuted instantiation: std::optional<AssumeutxoData> FindFirst<AssumeutxoData, CChainParams::AssumeutxoForHeight(int) const::{lambda(auto:1 const&)#1}>(std::vector<AssumeutxoData, std::allocator<AssumeutxoData> > const&, CChainParams::AssumeutxoForHeight(int) const::{lambda(auto:1 const&)#1}) Unexecuted instantiation: std::optional<AssumeutxoData> FindFirst<AssumeutxoData, CChainParams::AssumeutxoForBlockhash(uint256 const&) const::{lambda(auto:1 const&)#1}>(std::vector<AssumeutxoData, std::allocator<AssumeutxoData> > const&, CChainParams::AssumeutxoForBlockhash(uint256 const&) const::{lambda(auto:1 const&)#1}) |
82 | | |
83 | | #endif // BITCOIN_UTIL_VECTOR_H |