/workdir/bitcoin/src/span.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) 2018-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_SPAN_H |
6 | | #define BITCOIN_SPAN_H |
7 | | |
8 | | #include <algorithm> |
9 | | #include <cassert> |
10 | | #include <cstddef> |
11 | | #include <span> |
12 | | #include <type_traits> |
13 | | |
14 | | #ifdef DEBUG |
15 | | #define CONSTEXPR_IF_NOT_DEBUG |
16 | | #define ASSERT_IF_DEBUG(x) assert((x)) |
17 | | #else |
18 | | #define CONSTEXPR_IF_NOT_DEBUG constexpr |
19 | | #define ASSERT_IF_DEBUG(x) |
20 | | #endif |
21 | | |
22 | | #if defined(__clang__) |
23 | | #if __has_attribute(lifetimebound) |
24 | | #define SPAN_ATTR_LIFETIMEBOUND [[clang::lifetimebound]] |
25 | | #else |
26 | | #define SPAN_ATTR_LIFETIMEBOUND |
27 | | #endif |
28 | | #else |
29 | | #define SPAN_ATTR_LIFETIMEBOUND |
30 | | #endif |
31 | | |
32 | | /** A Span is an object that can refer to a contiguous sequence of objects. |
33 | | * |
34 | | * This file implements a subset of C++20's std::span. It can be considered |
35 | | * temporary compatibility code until C++20 and is designed to be a |
36 | | * self-contained abstraction without depending on other project files. For this |
37 | | * reason, Clang lifetimebound is defined here instead of including |
38 | | * <attributes.h>, which also defines it. |
39 | | * |
40 | | * Things to be aware of when writing code that deals with Spans: |
41 | | * |
42 | | * - Similar to references themselves, Spans are subject to reference lifetime |
43 | | * issues. The user is responsible for making sure the objects pointed to by |
44 | | * a Span live as long as the Span is used. For example: |
45 | | * |
46 | | * std::vector<int> vec{1,2,3,4}; |
47 | | * Span<int> sp(vec); |
48 | | * vec.push_back(5); |
49 | | * printf("%i\n", sp.front()); // UB! |
50 | | * |
51 | | * may exhibit undefined behavior, as increasing the size of a vector may |
52 | | * invalidate references. |
53 | | * |
54 | | * - One particular pitfall is that Spans can be constructed from temporaries, |
55 | | * but this is unsafe when the Span is stored in a variable, outliving the |
56 | | * temporary. For example, this will compile, but exhibits undefined behavior: |
57 | | * |
58 | | * Span<const int> sp(std::vector<int>{1, 2, 3}); |
59 | | * printf("%i\n", sp.front()); // UB! |
60 | | * |
61 | | * The lifetime of the vector ends when the statement it is created in ends. |
62 | | * Thus the Span is left with a dangling reference, and using it is undefined. |
63 | | * |
64 | | * - Due to Span's automatic creation from range-like objects (arrays, and data |
65 | | * types that expose a data() and size() member function), functions that |
66 | | * accept a Span as input parameter can be called with any compatible |
67 | | * range-like object. For example, this works: |
68 | | * |
69 | | * void Foo(Span<const int> arg); |
70 | | * |
71 | | * Foo(std::vector<int>{1, 2, 3}); // Works |
72 | | * |
73 | | * This is very useful in cases where a function truly does not care about the |
74 | | * container, and only about having exactly a range of elements. However it |
75 | | * may also be surprising to see automatic conversions in this case. |
76 | | * |
77 | | * When a function accepts a Span with a mutable element type, it will not |
78 | | * accept temporaries; only variables or other references. For example: |
79 | | * |
80 | | * void FooMut(Span<int> arg); |
81 | | * |
82 | | * FooMut(std::vector<int>{1, 2, 3}); // Does not compile |
83 | | * std::vector<int> baz{1, 2, 3}; |
84 | | * FooMut(baz); // Works |
85 | | * |
86 | | * This is similar to how functions that take (non-const) lvalue references |
87 | | * as input cannot accept temporaries. This does not work either: |
88 | | * |
89 | | * void FooVec(std::vector<int>& arg); |
90 | | * FooVec(std::vector<int>{1, 2, 3}); // Does not compile |
91 | | * |
92 | | * The idea is that if a function accepts a mutable reference, a meaningful |
93 | | * result will be present in that variable after the call. Passing a temporary |
94 | | * is useless in that context. |
95 | | */ |
96 | | template<typename C> |
97 | | class Span |
98 | | { |
99 | | C* m_data; |
100 | | std::size_t m_size{0}; |
101 | | |
102 | | template <class T> |
103 | | struct is_Span_int : public std::false_type {}; |
104 | | template <class T> |
105 | | struct is_Span_int<Span<T>> : public std::true_type {}; |
106 | | template <class T> |
107 | | struct is_Span : public is_Span_int<typename std::remove_cv<T>::type>{}; |
108 | | |
109 | | |
110 | | public: |
111 | 0 | constexpr Span() noexcept : m_data(nullptr) {} Unexecuted instantiation: Span<std::byte const>::Span() Unexecuted instantiation: Span<std::byte>::Span() |
112 | | |
113 | | /** Construct a span from a begin pointer and a size. |
114 | | * |
115 | | * This implements a subset of the iterator-based std::span constructor in C++20, |
116 | | * which is hard to implement without std::address_of. |
117 | | */ |
118 | | template <typename T, typename std::enable_if<std::is_convertible<T (*)[], C (*)[]>::value, int>::type = 0> |
119 | 6.30M | constexpr Span(T* begin, std::size_t size) noexcept : m_data(begin), m_size(size) {} _ZN4SpanIKSt4byteEC2IS1_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S1_EE5valueEiE4typeELi0EEEPS5_m Line | Count | Source | 119 | 3.06M | constexpr Span(T* begin, std::size_t size) noexcept : m_data(begin), m_size(size) {} |
_ZN4SpanISt4byteEC2IS0_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S0_EE5valueEiE4typeELi0EEEPS4_m Line | Count | Source | 119 | 596k | constexpr Span(T* begin, std::size_t size) noexcept : m_data(begin), m_size(size) {} |
_ZN4SpanIjEC2IjTnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_jEE5valueEiE4typeELi0EEEPS3_m Line | Count | Source | 119 | 2.09M | constexpr Span(T* begin, std::size_t size) noexcept : m_data(begin), m_size(size) {} |
Unexecuted instantiation: _ZN4SpanItEC2ItTnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_tEE5valueEiE4typeELi0EEEPS3_m _ZN4SpanImEC2ImTnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_mEE5valueEiE4typeELi0EEEPS3_m Line | Count | Source | 119 | 72.5k | constexpr Span(T* begin, std::size_t size) noexcept : m_data(begin), m_size(size) {} |
_ZN4SpanIhEC2IhTnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_hEE5valueEiE4typeELi0EEEPS3_m Line | Count | Source | 119 | 352k | constexpr Span(T* begin, std::size_t size) noexcept : m_data(begin), m_size(size) {} |
_ZN4SpanIKhEC2IS0_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S0_EE5valueEiE4typeELi0EEEPS4_m Line | Count | Source | 119 | 128k | constexpr Span(T* begin, std::size_t size) noexcept : m_data(begin), m_size(size) {} |
Unexecuted instantiation: _ZN4SpanIKjEC2IS0_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S0_EE5valueEiE4typeELi0EEEPS4_m Unexecuted instantiation: _ZN4SpanI7CScriptEC2IS0_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S0_EE5valueEiE4typeELi0EEEPS4_m Unexecuted instantiation: miniscript.cpp:_ZN4SpanISt8optionalISt3setI7CPubKeyZNK10miniscript4NodeIS2_E17DuplicateKeyCheckIN12_GLOBAL__N_113ParserContextEEEvRKT_E4CompSaIS2_EEEEC2ISF_TnNSt9enable_ifIXsr3std14is_convertibleIPA_S9_PA_SF_EE5valueEiE4typeELi0EEEPS9_m Unexecuted instantiation: _ZN4SpanIN10miniscript8internal11InputResultEEC2IS2_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S2_EE5valueEiE4typeELi0EEEPS6_m Unexecuted instantiation: _ZN4SpanIiEC2IiTnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_iEE5valueEiE4typeELi0EEEPS3_m Unexecuted instantiation: _ZN4SpanINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEC2IS5_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S5_EE5valueEiE4typeELi0EEEPS9_m Unexecuted instantiation: _ZN4SpanIKcEC2IS0_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S0_EE5valueEiE4typeELi0EEEPS4_m Unexecuted instantiation: miniscript.cpp:_ZN4SpanISt8optionalISt3setI7CPubKeyZNK10miniscript4NodeIS2_E17DuplicateKeyCheckIN12_GLOBAL__N_113KeyComparatorEEEvRKT_E4CompSaIS2_EEEEC2ISF_TnNSt9enable_ifIXsr3std14is_convertibleIPA_S9_PA_SF_EE5valueEiE4typeELi0EEEPS9_m Unexecuted instantiation: miniscript.cpp:_ZN4SpanISt8optionalISt3setIN12_GLOBAL__N_119ScriptParserContext3KeyEZNK10miniscript4NodeIS4_E17DuplicateKeyCheckIS3_EEvRKT_E4CompSaIS4_EEEEC2ISF_TnNSt9enable_ifIXsr3std14is_convertibleIPA_S9_PA_SF_EE5valueEiE4typeELi0EEEPS9_m Unexecuted instantiation: _ZN4SpanIKhEC2IhTnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S0_EE5valueEiE4typeELi0EEEPS4_m Unexecuted instantiation: _ZN4SpanIKSt6vectorIhSaIhEEEC2IS3_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S3_EE5valueEiE4typeELi0EEEPS7_m Unexecuted instantiation: descriptor.cpp:_ZN4SpanISt8optionalISt3setIjZNK10miniscript4NodeIjE17DuplicateKeyCheckIN12_GLOBAL__N_19KeyParserEEEvRKT_E4CompSaIjEEEEC2ISE_TnNSt9enable_ifIXsr3std14is_convertibleIPA_S8_PA_SE_EE5valueEiE4typeELi0EEEPS8_m Unexecuted instantiation: _ZN4SpanIPKN10miniscript4NodeIjEEEC2IS4_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S4_EE5valueEiE4typeELi0EEEPS8_m Unexecuted instantiation: _ZN4SpanISt8optionalISt3setI11XOnlyPubKeyZNK10miniscript4NodeIS2_E17DuplicateKeyCheckI12TapSatisfierEEvRKT_E4CompSaIS2_EEEEC2ISE_TnNSt9enable_ifIXsr3std14is_convertibleIPA_S8_PA_SE_EE5valueEiE4typeELi0EEEPS8_m Unexecuted instantiation: _ZN4SpanISt8optionalISt3setI7CPubKeyZNK10miniscript4NodeIS2_E17DuplicateKeyCheckI12WshSatisfierEEvRKT_E4CompSaIS2_EEEEC2ISE_TnNSt9enable_ifIXsr3std14is_convertibleIPA_S8_PA_SE_EE5valueEiE4typeELi0EEEPS8_m |
120 | | |
121 | | /** Construct a span from a begin and end pointer. |
122 | | * |
123 | | * This implements a subset of the iterator-based std::span constructor in C++20, |
124 | | * which is hard to implement without std::address_of. |
125 | | */ |
126 | | template <typename T, typename std::enable_if<std::is_convertible<T (*)[], C (*)[]>::value, int>::type = 0> |
127 | 0 | CONSTEXPR_IF_NOT_DEBUG Span(T* begin, T* end) noexcept : m_data(begin), m_size(end - begin) |
128 | 0 | { |
129 | 0 | ASSERT_IF_DEBUG(end >= begin); |
130 | 0 | } Unexecuted instantiation: _ZN4SpanIKcEC2IS0_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S0_EE5valueEiE4typeELi0EEEPS4_SB_ Unexecuted instantiation: _ZN4SpanIhEC2IhTnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_hEE5valueEiE4typeELi0EEEPS3_SA_ |
131 | | |
132 | | /** Implicit conversion of spans between compatible types. |
133 | | * |
134 | | * Specifically, if a pointer to an array of type O can be implicitly converted to a pointer to an array of type |
135 | | * C, then permit implicit conversion of Span<O> to Span<C>. This matches the behavior of the corresponding |
136 | | * C++20 std::span constructor. |
137 | | * |
138 | | * For example this means that a Span<T> can be converted into a Span<const T>. |
139 | | */ |
140 | | template <typename O, typename std::enable_if<std::is_convertible<O (*)[], C (*)[]>::value, int>::type = 0> |
141 | 0 | constexpr Span(const Span<O>& other) noexcept : m_data(other.m_data), m_size(other.m_size) {} Unexecuted instantiation: _ZN4SpanIKhEC2IhTnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S0_EE5valueEiE4typeELi0EEERKS_IS4_E Unexecuted instantiation: _ZN4SpanIKSt4byteEC2IS0_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S1_EE5valueEiE4typeELi0EEERKS_IS5_E Unexecuted instantiation: _ZN4SpanIK7CScriptEC2IS0_TnNSt9enable_ifIXsr3std14is_convertibleIPA_T_PA_S1_EE5valueEiE4typeELi0EEERKS_IS5_E |
142 | | |
143 | | /** Default copy constructor. */ |
144 | | constexpr Span(const Span&) noexcept = default; |
145 | | |
146 | | /** Default assignment operator. */ |
147 | | Span& operator=(const Span& other) noexcept = default; |
148 | | |
149 | | /** Construct a Span from an array. This matches the corresponding C++20 std::span constructor. */ |
150 | | template <int N> |
151 | 67.1k | constexpr Span(C (&a)[N]) noexcept : m_data(a), m_size(N) {} Unexecuted instantiation: Span<unsigned char>::Span<5>(unsigned char (&) [5]) Span<unsigned char>::Span<4>(unsigned char (&) [4]) Line | Count | Source | 151 | 13.5k | constexpr Span(C (&a)[N]) noexcept : m_data(a), m_size(N) {} |
Unexecuted instantiation: Span<unsigned char const>::Span<65>(unsigned char const (&) [65]) Unexecuted instantiation: Span<std::byte>::Span<16>(std::byte (&) [16]) Unexecuted instantiation: Span<std::byte const>::Span<16>(std::byte const (&) [16]) Span<unsigned char>::Span<16>(unsigned char (&) [16]) Line | Count | Source | 151 | 870 | constexpr Span(C (&a)[N]) noexcept : m_data(a), m_size(N) {} |
Span<unsigned char const>::Span<16>(unsigned char const (&) [16]) Line | Count | Source | 151 | 4.35k | constexpr Span(C (&a)[N]) noexcept : m_data(a), m_size(N) {} |
Span<unsigned char const>::Span<4>(unsigned char const (&) [4]) Line | Count | Source | 151 | 17.4k | constexpr Span(C (&a)[N]) noexcept : m_data(a), m_size(N) {} |
Unexecuted instantiation: Span<unsigned char const>::Span<5>(unsigned char const (&) [5]) Unexecuted instantiation: Span<unsigned char const>::Span<78>(unsigned char const (&) [78]) Span<char>::Span<12>(char (&) [12]) Line | Count | Source | 151 | 13.5k | constexpr Span(C (&a)[N]) noexcept : m_data(a), m_size(N) {} |
Span<char const>::Span<12>(char const (&) [12]) Line | Count | Source | 151 | 17.4k | constexpr Span(C (&a)[N]) noexcept : m_data(a), m_size(N) {} |
Unexecuted instantiation: Span<char const>::Span<8>(char const (&) [8]) Unexecuted instantiation: Span<unsigned char const>::Span<32>(unsigned char const (&) [32]) Unexecuted instantiation: Span<unsigned char>::Span<32>(unsigned char (&) [32]) Unexecuted instantiation: Span<std::byte const>::Span<3>(std::byte const (&) [3]) Unexecuted instantiation: Span<std::byte const>::Span<1>(std::byte const (&) [1]) Unexecuted instantiation: Span<std::byte>::Span<3>(std::byte (&) [3]) Unexecuted instantiation: Span<std::byte>::Span<1>(std::byte (&) [1]) Unexecuted instantiation: Span<char>::Span<368>(char (&) [368]) Unexecuted instantiation: Span<unsigned char>::Span<20>(unsigned char (&) [20]) Unexecuted instantiation: Span<CRPCCommand const>::Span<68>(CRPCCommand const (&) [68]) Unexecuted instantiation: Span<unsigned char const>::Span<33>(unsigned char const (&) [33]) Unexecuted instantiation: Span<unsigned char>::Span<8>(unsigned char (&) [8]) Unexecuted instantiation: Span<unsigned char const>::Span<8>(unsigned char const (&) [8]) Unexecuted instantiation: Span<unsigned char const>::Span<1>(unsigned char const (&) [1]) Unexecuted instantiation: Span<unsigned char const>::Span<2>(unsigned char const (&) [2]) Unexecuted instantiation: Span<char const>::Span<2>(char const (&) [2]) Unexecuted instantiation: Span<char const>::Span<3>(char const (&) [3]) Unexecuted instantiation: Span<unsigned char const>::Span<20>(unsigned char const (&) [20]) Unexecuted instantiation: Span<std::byte>::Span<32>(std::byte (&) [32]) Unexecuted instantiation: Span<std::byte const>::Span<32>(std::byte const (&) [32]) Unexecuted instantiation: Span<std::byte>::Span<64>(std::byte (&) [64]) Unexecuted instantiation: Span<unsigned char>::Span<384>(unsigned char (&) [384]) Unexecuted instantiation: Span<unsigned char const>::Span<384>(unsigned char const (&) [384]) |
152 | | |
153 | | /** Construct a Span for objects with .data() and .size() (std::string, std::array, std::vector, ...). |
154 | | * |
155 | | * This implements a subset of the functionality provided by the C++20 std::span range-based constructor. |
156 | | * |
157 | | * To prevent surprises, only Spans for constant value types are supported when passing in temporaries. |
158 | | * Note that this restriction does not exist when converting arrays or other Spans (see above). |
159 | | */ |
160 | | template <typename V> |
161 | | constexpr Span(V& other SPAN_ATTR_LIFETIMEBOUND, |
162 | | typename std::enable_if<!is_Span<V>::value && |
163 | | std::is_convertible<typename std::remove_pointer<decltype(std::declval<V&>().data())>::type (*)[], C (*)[]>::value && |
164 | | std::is_convertible<decltype(std::declval<V&>().size()), std::size_t>::value, std::nullptr_t>::type = nullptr) |
165 | 186k | : m_data(other.data()), m_size(other.size()){} Span<unsigned char>::Span<std::array<unsigned char, 32ul> >(std::array<unsigned char, 32ul>&, std::enable_if<((!is_Span<std::array<unsigned char, 32ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 32ul>&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 32ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 165 | 129k | : m_data(other.data()), m_size(other.size()){} |
Unexecuted instantiation: Span<unsigned char const>::Span<std::span<unsigned char const, 18446744073709551615ul> >(std::span<unsigned char const, 18446744073709551615ul>&, std::enable_if<((!is_Span<std::span<unsigned char const, 18446744073709551615ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::span<unsigned char const, 18446744073709551615ul>&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::span<unsigned char const, 18446744073709551615ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<std::vector<unsigned char, std::allocator<unsigned char> > >(std::vector<unsigned char, std::allocator<unsigned char> >&, std::enable_if<((!is_Span<std::vector<unsigned char, std::allocator<unsigned char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<unsigned char, std::allocator<unsigned char> >&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<unsigned char, std::allocator<unsigned char> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char>::Span<uint160>(uint160&, std::enable_if<((!is_Span<uint160>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<uint160&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<uint160&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char>::Span<std::vector<unsigned char, std::allocator<unsigned char> > >(std::vector<unsigned char, std::allocator<unsigned char> >&, std::enable_if<((!is_Span<std::vector<unsigned char, std::allocator<unsigned char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<unsigned char, std::allocator<unsigned char> >&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<unsigned char, std::allocator<unsigned char> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Span<std::byte>::Span<std::array<std::byte, 8ul> >(std::array<std::byte, 8ul>&, std::enable_if<((!is_Span<std::array<std::byte, 8ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 8ul>&>)()).data)())>::type (*) [], std::byte (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 8ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 165 | 3.72k | : m_data(other.data()), m_size(other.size()){} |
Unexecuted instantiation: Span<char>::Span<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::enable_if<((!is_Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>)()).data)())>::type (*) [], char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<std::vector<std::byte, std::allocator<std::byte> > >(std::vector<std::byte, std::allocator<std::byte> >&, std::enable_if<((!is_Span<std::vector<std::byte, std::allocator<std::byte> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::byte, std::allocator<std::byte> >&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::byte, std::allocator<std::byte> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte>::Span<std::vector<std::byte, std::allocator<std::byte> > >(std::vector<std::byte, std::allocator<std::byte> >&, std::enable_if<((!is_Span<std::vector<std::byte, std::allocator<std::byte> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::byte, std::allocator<std::byte> >&>)()).data)())>::type (*) [], std::byte (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::byte, std::allocator<std::byte> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned int const>::Span<std::vector<unsigned int, std::allocator<unsigned int> > >(std::vector<unsigned int, std::allocator<unsigned int> >&, std::enable_if<((!is_Span<std::vector<unsigned int, std::allocator<unsigned int> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<unsigned int, std::allocator<unsigned int> >&>)()).data)())>::type (*) [], unsigned int const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<unsigned int, std::allocator<unsigned int> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<FeeFrac const>::Span<std::vector<FeeFrac, std::allocator<FeeFrac> > >(std::vector<FeeFrac, std::allocator<FeeFrac> >&, std::enable_if<((!is_Span<std::vector<FeeFrac, std::allocator<FeeFrac> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<FeeFrac, std::allocator<FeeFrac> >&>)()).data)())>::type (*) [], FeeFrac const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<FeeFrac, std::allocator<FeeFrac> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned int>::Span<std::vector<unsigned int, std::allocator<unsigned int> > >(std::vector<unsigned int, std::allocator<unsigned int> >&, std::enable_if<((!is_Span<std::vector<unsigned int, std::allocator<unsigned int> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<unsigned int, std::allocator<unsigned int> >&>)()).data)())>::type (*) [], unsigned int (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<unsigned int, std::allocator<unsigned int> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char>::Span<prevector<33u, unsigned char, unsigned int, int> >(prevector<33u, unsigned char, unsigned int, int>&, std::enable_if<((!is_Span<prevector<33u, unsigned char, unsigned int, int> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<prevector<33u, unsigned char, unsigned int, int>&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<prevector<33u, unsigned char, unsigned int, int>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char>::Span<CScript>(CScript&, std::enable_if<((!is_Span<CScript>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<CScript&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<CScript&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Span<unsigned char>::Span<uint256>(uint256&, std::enable_if<((!is_Span<uint256>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<uint256&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<uint256&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 165 | 35.6k | : m_data(other.data()), m_size(other.size()){} |
Unexecuted instantiation: Span<std::byte>::Span<std::array<std::byte, 16ul> >(std::array<std::byte, 16ul>&, std::enable_if<((!is_Span<std::array<std::byte, 16ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 16ul>&>)()).data)())>::type (*) [], std::byte (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 16ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char>::Span<prevector<16u, unsigned char, unsigned int, int> >(prevector<16u, unsigned char, unsigned int, int>&, std::enable_if<((!is_Span<prevector<16u, unsigned char, unsigned int, int> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<prevector<16u, unsigned char, unsigned int, int>&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<prevector<16u, unsigned char, unsigned int, int>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Span<unsigned char>::Span<std::array<unsigned char, 4ul> >(std::array<unsigned char, 4ul>&, std::enable_if<((!is_Span<std::array<unsigned char, 4ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 4ul>&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 4ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 165 | 13.5k | : m_data(other.data()), m_size(other.size()){} |
Unexecuted instantiation: Span<unsigned char>::Span<std::array<unsigned char, 5ul> >(std::array<unsigned char, 5ul>&, std::enable_if<((!is_Span<std::array<unsigned char, 5ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 5ul>&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 5ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char>::Span<std::array<unsigned char, 20ul> >(std::array<unsigned char, 20ul>&, std::enable_if<((!is_Span<std::array<unsigned char, 20ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 20ul>&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 20ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<XOnlyPubKey>(XOnlyPubKey&, std::enable_if<((!is_Span<XOnlyPubKey>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<XOnlyPubKey&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<XOnlyPubKey&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<CScript>::Span<std::vector<CScript, std::allocator<CScript> > >(std::vector<CScript, std::allocator<CScript> >&, std::enable_if<((!is_Span<std::vector<CScript, std::allocator<CScript> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<CScript, std::allocator<CScript> >&>)()).data)())>::type (*) [], CScript (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<CScript, std::allocator<CScript> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > >::Span<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > > > >(std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > > >&, std::enable_if<((!is_Span<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > > > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > > >&>)()).data)())>::type (*) [], std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > > >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<miniscript::internal::InputResult>::Span<std::vector<miniscript::internal::InputResult, std::allocator<miniscript::internal::InputResult> > >(std::vector<miniscript::internal::InputResult, std::allocator<miniscript::internal::InputResult> >&, std::enable_if<((!is_Span<std::vector<miniscript::internal::InputResult, std::allocator<miniscript::internal::InputResult> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<miniscript::internal::InputResult, std::allocator<miniscript::internal::InputResult> >&>)()).data)())>::type (*) [], miniscript::internal::InputResult (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<miniscript::internal::InputResult, std::allocator<miniscript::internal::InputResult> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<int>::Span<std::vector<int, std::allocator<int> > >(std::vector<int, std::allocator<int> >&, std::enable_if<((!is_Span<std::vector<int, std::allocator<int> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<int, std::allocator<int> >&>)()).data)())>::type (*) [], int (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<int, std::allocator<int> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::Span<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::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::enable_if<((!is_Span<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> > > > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<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> > > >&>)()).data)())>::type (*) [], std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > (*) []>::value)&&std::is_convertible<decltype ((((std::declval<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> > > >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > >::Span<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > > > >(std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > > >&, std::enable_if<((!is_Span<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > > > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > > >&>)()).data)())>::type (*) [], std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > > >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > >::Span<std::vector<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > >, std::allocator<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > > > >(std::vector<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > >, std::allocator<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > > >&, std::enable_if<((!is_Span<std::vector<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > >, std::allocator<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > > > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > >, std::allocator<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > > >&>)()).data)())>::type (*) [], std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > >, std::allocator<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > > >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte>::Span<DataStream>(DataStream&, std::enable_if<((!is_Span<DataStream>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<DataStream&>)()).data)())>::type (*) [], std::byte (*) []>::value)&&std::is_convertible<decltype ((((std::declval<DataStream&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<char const>::Span<std::basic_string_view<char, std::char_traits<char> > >(std::basic_string_view<char, std::char_traits<char> >&, std::enable_if<((!is_Span<std::basic_string_view<char, std::char_traits<char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::basic_string_view<char, std::char_traits<char> >&>)()).data)())>::type (*) [], char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::basic_string_view<char, std::char_traits<char> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<DataStream>(DataStream&, std::enable_if<((!is_Span<DataStream>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<DataStream&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<DataStream&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<char const>::Span<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::enable_if<((!is_Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>)()).data)())>::type (*) [], char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<std::vector<std::byte, zero_after_free_allocator<std::byte> > >(std::vector<std::byte, zero_after_free_allocator<std::byte> >&, std::enable_if<((!is_Span<std::vector<std::byte, zero_after_free_allocator<std::byte> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::byte, zero_after_free_allocator<std::byte> >&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::byte, zero_after_free_allocator<std::byte> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<CPubKey>(CPubKey&, std::enable_if<((!is_Span<CPubKey>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<CPubKey&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<CPubKey&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<std::array<std::byte, 32ul> >(std::array<std::byte, 32ul>&, std::enable_if<((!is_Span<std::array<std::byte, 32ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 32ul>&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 32ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<uint256>(uint256&, std::enable_if<((!is_Span<uint256>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<uint256&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<uint256&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<std::array<unsigned char, 4ul> >(std::array<unsigned char, 4ul>&, std::enable_if<((!is_Span<std::array<unsigned char, 4ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 4ul>&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 4ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<std::array<std::byte, 8ul> >(std::array<std::byte, 8ul>&, std::enable_if<((!is_Span<std::array<std::byte, 8ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 8ul>&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 8ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<CScript>(CScript&, std::enable_if<((!is_Span<CScript>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<CScript&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<CScript&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte>::Span<std::vector<std::byte, zero_after_free_allocator<std::byte> > >(std::vector<std::byte, zero_after_free_allocator<std::byte> >&, std::enable_if<((!is_Span<std::vector<std::byte, zero_after_free_allocator<std::byte> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::byte, zero_after_free_allocator<std::byte> >&>)()).data)())>::type (*) [], std::byte (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::byte, zero_after_free_allocator<std::byte> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte>::Span<std::array<std::byte, 20ul> >(std::array<std::byte, 20ul>&, std::enable_if<((!is_Span<std::array<std::byte, 20ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 20ul>&>)()).data)())>::type (*) [], std::byte (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 20ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<CKey>(CKey&, std::enable_if<((!is_Span<CKey>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<CKey&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<CKey&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<CKeyID>(CKeyID&, std::enable_if<((!is_Span<CKeyID>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<CKeyID&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<CKeyID&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char>::Span<std::vector<unsigned char, secure_allocator<unsigned char> > >(std::vector<unsigned char, secure_allocator<unsigned char> >&, std::enable_if<((!is_Span<std::vector<unsigned char, secure_allocator<unsigned char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<unsigned char, secure_allocator<unsigned char> >&>)()).data)())>::type (*) [], unsigned char (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<unsigned char, secure_allocator<unsigned char> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<std::array<std::byte, 64ul> >(std::array<std::byte, 64ul>&, std::enable_if<((!is_Span<std::array<std::byte, 64ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 64ul>&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 64ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<prevector<35u, unsigned char, unsigned int, int> >(prevector<35u, unsigned char, unsigned int, int>&, std::enable_if<((!is_Span<prevector<35u, unsigned char, unsigned int, int> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<prevector<35u, unsigned char, unsigned int, int>&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<prevector<35u, unsigned char, unsigned int, int>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: descriptor.cpp:Span<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > >::Span<std::vector<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > >, std::allocator<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > > > >(std::vector<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > >, std::allocator<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > > >&, std::enable_if<((!is_Span<std::vector<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > >, std::allocator<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > > > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > >, std::allocator<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > > >&>)()).data)())>::type (*) [], std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > >, std::allocator<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > > >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<miniscript::Node<unsigned int> const*>::Span<std::vector<miniscript::Node<unsigned int> const*, std::allocator<miniscript::Node<unsigned int> const*> > >(std::vector<miniscript::Node<unsigned int> const*, std::allocator<miniscript::Node<unsigned int> const*> >&, std::enable_if<((!is_Span<std::vector<miniscript::Node<unsigned int> const*, std::allocator<miniscript::Node<unsigned int> const*> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<miniscript::Node<unsigned int> const*, std::allocator<miniscript::Node<unsigned int> const*> >&>)()).data)())>::type (*) [], miniscript::Node<unsigned int> const* (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<miniscript::Node<unsigned int> const*, std::allocator<miniscript::Node<unsigned int> const*> >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > >::Span<std::vector<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > >, std::allocator<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > > > >(std::vector<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > >, std::allocator<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > > >&, std::enable_if<((!is_Span<std::vector<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > >, std::allocator<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > > > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > >, std::allocator<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > > >&>)()).data)())>::type (*) [], std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > >, std::allocator<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > > >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > >::Span<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > > > >(std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > > >&, std::enable_if<((!is_Span<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > > > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > > >&>)()).data)())>::type (*) [], std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > >, std::allocator<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > > >&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte>::Span<std::array<std::byte, 4096ul> >(std::array<std::byte, 4096ul>&, std::enable_if<((!is_Span<std::array<std::byte, 4096ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 4096ul>&>)()).data)())>::type (*) [], std::byte (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 4096ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Span<std::byte>::Span<std::array<std::byte, 64ul> >(std::array<std::byte, 64ul>&, std::enable_if<((!is_Span<std::array<std::byte, 64ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 64ul>&>)()).data)())>::type (*) [], std::byte (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 64ul>&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 165 | 3.67k | : m_data(other.data()), m_size(other.size()){} |
|
166 | | |
167 | | template <typename V> |
168 | | constexpr Span(const V& other SPAN_ATTR_LIFETIMEBOUND, |
169 | | typename std::enable_if<!is_Span<V>::value && |
170 | | std::is_convertible<typename std::remove_pointer<decltype(std::declval<const V&>().data())>::type (*)[], C (*)[]>::value && |
171 | | std::is_convertible<decltype(std::declval<const V&>().size()), std::size_t>::value, std::nullptr_t>::type = nullptr) |
172 | 1.01M | : m_data(other.data()), m_size(other.size()){} Span<unsigned char const>::Span<std::vector<unsigned char, std::allocator<unsigned char> > >(std::vector<unsigned char, std::allocator<unsigned char> > const&, std::enable_if<((!is_Span<std::vector<unsigned char, std::allocator<unsigned char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<unsigned char, std::allocator<unsigned char> > const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<unsigned char, std::allocator<unsigned char> > const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 172 | 89.9k | : m_data(other.data()), m_size(other.size()){} |
Unexecuted instantiation: Span<unsigned char const>::Span<CScript>(CScript const&, std::enable_if<((!is_Span<CScript>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<CScript const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<CScript const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<uint256>(uint256 const&, std::enable_if<((!is_Span<uint256>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<uint256 const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<uint256 const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<char const>::Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::enable_if<((!is_Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)()).data)())>::type (*) [], char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Span<std::byte const>::Span<std::array<std::byte, 32ul> >(std::array<std::byte, 32ul> const&, std::enable_if<((!is_Span<std::array<std::byte, 32ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 32ul> const&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 32ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 172 | 9.17k | : m_data(other.data()), m_size(other.size()){} |
Unexecuted instantiation: Span<std::byte const>::Span<std::array<std::byte, 16ul> >(std::array<std::byte, 16ul> const&, std::enable_if<((!is_Span<std::array<std::byte, 16ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 16ul> const&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 16ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Span<unsigned char const>::Span<std::array<unsigned char, 32ul> >(std::array<unsigned char, 32ul> const&, std::enable_if<((!is_Span<std::array<unsigned char, 32ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 32ul> const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 32ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 172 | 857k | : m_data(other.data()), m_size(other.size()){} |
Span<unsigned char const>::Span<prevector<28u, unsigned char, unsigned int, int> >(prevector<28u, unsigned char, unsigned int, int> const&, std::enable_if<((!is_Span<prevector<28u, unsigned char, unsigned int, int> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<prevector<28u, unsigned char, unsigned int, int> const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<prevector<28u, unsigned char, unsigned int, int> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 172 | 39.2k | : m_data(other.data()), m_size(other.size()){} |
Unexecuted instantiation: Span<std::byte const>::Span<std::vector<std::byte, std::allocator<std::byte> > >(std::vector<std::byte, std::allocator<std::byte> > const&, std::enable_if<((!is_Span<std::vector<std::byte, std::allocator<std::byte> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::byte, std::allocator<std::byte> > const&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::byte, std::allocator<std::byte> > const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<CPubKey>(CPubKey const&, std::enable_if<((!is_Span<CPubKey>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<CPubKey const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<CPubKey const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<uint160>(uint160 const&, std::enable_if<((!is_Span<uint160>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<uint160 const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<uint160 const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Span<unsigned char const>::Span<prevector<16u, unsigned char, unsigned int, int> >(prevector<16u, unsigned char, unsigned int, int> const&, std::enable_if<((!is_Span<prevector<16u, unsigned char, unsigned int, int> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<prevector<16u, unsigned char, unsigned int, int> const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<prevector<16u, unsigned char, unsigned int, int> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 172 | 870 | : m_data(other.data()), m_size(other.size()){} |
Span<unsigned char const>::Span<std::array<unsigned char, 4ul> >(std::array<unsigned char, 4ul> const&, std::enable_if<((!is_Span<std::array<unsigned char, 4ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 4ul> const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 4ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Line | Count | Source | 172 | 17.4k | : m_data(other.data()), m_size(other.size()){} |
Unexecuted instantiation: Span<unsigned char const>::Span<std::array<unsigned char, 5ul> >(std::array<unsigned char, 5ul> const&, std::enable_if<((!is_Span<std::array<unsigned char, 5ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 5ul> const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 5ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<std::array<unsigned char, 20ul> >(std::array<unsigned char, 20ul> const&, std::enable_if<((!is_Span<std::array<unsigned char, 20ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<unsigned char, 20ul> const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<unsigned char, 20ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<std::span<unsigned char const, 18446744073709551615ul> >(std::span<unsigned char const, 18446744073709551615ul> const&, std::enable_if<((!is_Span<std::span<unsigned char const, 18446744073709551615ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::span<unsigned char const, 18446744073709551615ul> const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::span<unsigned char const, 18446744073709551615ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<XOnlyPubKey>(XOnlyPubKey const&, std::enable_if<((!is_Span<XOnlyPubKey>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<XOnlyPubKey const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<XOnlyPubKey const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<std::vector<std::byte, zero_after_free_allocator<std::byte> > >(std::vector<std::byte, zero_after_free_allocator<std::byte> > const&, std::enable_if<((!is_Span<std::vector<std::byte, zero_after_free_allocator<std::byte> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::byte, zero_after_free_allocator<std::byte> > const&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::byte, zero_after_free_allocator<std::byte> > const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<char const>::Span<leveldb::Slice>(leveldb::Slice const&, std::enable_if<((!is_Span<leveldb::Slice>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<leveldb::Slice const&>)()).data)())>::type (*) [], char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<leveldb::Slice const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<std::array<std::byte, 0ul> >(std::array<std::byte, 0ul> const&, std::enable_if<((!is_Span<std::array<std::byte, 0ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 0ul> const&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 0ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<CNode* const>::Span<std::vector<CNode*, std::allocator<CNode*> > >(std::vector<CNode*, std::allocator<CNode*> > const&, std::enable_if<((!is_Span<std::vector<CNode*, std::allocator<CNode*> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<CNode*, std::allocator<CNode*> > const&>)()).data)())>::type (*) [], CNode* const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<CNode*, std::allocator<CNode*> > const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::byte const>::Span<std::array<std::byte, 8ul> >(std::array<std::byte, 8ul> const&, std::enable_if<((!is_Span<std::array<std::byte, 8ul> >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::array<std::byte, 8ul> const&>)()).data)())>::type (*) [], std::byte const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::array<std::byte, 8ul> const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<FeeFrac const>::Span<std::vector<FeeFrac, std::allocator<FeeFrac> > >(std::vector<FeeFrac, std::allocator<FeeFrac> > const&, std::enable_if<((!is_Span<std::vector<FeeFrac, std::allocator<FeeFrac> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<FeeFrac, std::allocator<FeeFrac> > const&>)()).data)())>::type (*) [], FeeFrac const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<FeeFrac, std::allocator<FeeFrac> > const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<CKeyID>(CKeyID const&, std::enable_if<((!is_Span<CKeyID>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<CKeyID const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<CKeyID const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<WitnessV0ScriptHash>(WitnessV0ScriptHash const&, std::enable_if<((!is_Span<WitnessV0ScriptHash>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<WitnessV0ScriptHash const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<WitnessV0ScriptHash const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<std::vector<unsigned char, secure_allocator<unsigned char> > >(std::vector<unsigned char, secure_allocator<unsigned char> > const&, std::enable_if<((!is_Span<std::vector<unsigned char, secure_allocator<unsigned char> > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<unsigned char, secure_allocator<unsigned char> > const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<unsigned char, secure_allocator<unsigned char> > const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<PKHash>(PKHash const&, std::enable_if<((!is_Span<PKHash>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<PKHash const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<PKHash const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<WitnessV0KeyHash>(WitnessV0KeyHash const&, std::enable_if<((!is_Span<WitnessV0KeyHash>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<WitnessV0KeyHash const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<WitnessV0KeyHash const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<ScriptHash>(ScriptHash const&, std::enable_if<((!is_Span<ScriptHash>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<ScriptHash const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<ScriptHash const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<std::vector<unsigned char, std::allocator<unsigned char> > const>::Span<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> > > > const&, std::enable_if<((!is_Span<std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > > >::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > > const&>)()).data)())>::type (*) [], std::vector<unsigned char, std::allocator<unsigned char> > const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<std::vector<std::vector<unsigned char, std::allocator<unsigned char> >, std::allocator<std::vector<unsigned char, std::allocator<unsigned char> > > > const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) Unexecuted instantiation: Span<unsigned char const>::Span<WitnessV1Taproot>(WitnessV1Taproot const&, std::enable_if<((!is_Span<WitnessV1Taproot>::value)&&std::is_convertible<std::remove_pointer<decltype ((((std::declval<WitnessV1Taproot const&>)()).data)())>::type (*) [], unsigned char const (*) []>::value)&&std::is_convertible<decltype ((((std::declval<WitnessV1Taproot const&>)()).size)()), unsigned long>::value, decltype(nullptr)>::type) |
173 | | |
174 | 7.27M | constexpr C* data() const noexcept { return m_data; } Span<unsigned char const>::data() const Line | Count | Source | 174 | 1.00M | constexpr C* data() const noexcept { return m_data; } |
Span<std::byte const>::data() const Line | Count | Source | 174 | 2.92M | constexpr C* data() const noexcept { return m_data; } |
Span<std::byte>::data() const Line | Count | Source | 174 | 592k | constexpr C* data() const noexcept { return m_data; } |
Span<unsigned char>::data() const Line | Count | Source | 174 | 545k | constexpr C* data() const noexcept { return m_data; } |
Span<unsigned int>::data() const Line | Count | Source | 174 | 2.09M | constexpr C* data() const noexcept { return m_data; } |
Span<char const>::data() const Line | Count | Source | 174 | 17.4k | constexpr C* data() const noexcept { return m_data; } |
Unexecuted instantiation: Span<unsigned short>::data() const Span<unsigned long>::data() const Line | Count | Source | 174 | 72.5k | constexpr C* data() const noexcept { return m_data; } |
Line | Count | Source | 174 | 13.5k | constexpr C* data() const noexcept { return m_data; } |
Unexecuted instantiation: Span<std::vector<unsigned char, std::allocator<unsigned char> > const>::data() const |
175 | 34.3k | constexpr C* begin() const noexcept { return m_data; } Unexecuted instantiation: Span<char const>::begin() const Span<unsigned char const>::begin() const Line | Count | Source | 175 | 3.48k | constexpr C* begin() const noexcept { return m_data; } |
Span<std::byte const>::begin() const Line | Count | Source | 175 | 23.6k | constexpr C* begin() const noexcept { return m_data; } |
Unexecuted instantiation: Span<unsigned int const>::begin() const Unexecuted instantiation: Span<unsigned int>::begin() const Unexecuted instantiation: Span<FeeFrac const>::begin() const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > >::begin() const Unexecuted instantiation: Span<int>::begin() const Unexecuted instantiation: Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::begin() const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > >::begin() const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > >::begin() const Span<std::byte>::begin() const Line | Count | Source | 175 | 7.23k | constexpr C* begin() const noexcept { return m_data; } |
Unexecuted instantiation: Span<CNode* const>::begin() const Unexecuted instantiation: Span<CRPCCommand const>::begin() const Unexecuted instantiation: Span<std::vector<unsigned char, std::allocator<unsigned char> > const>::begin() const Unexecuted instantiation: descriptor.cpp:Span<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > >::begin() const Unexecuted instantiation: Span<miniscript::Node<unsigned int> const*>::begin() const Unexecuted instantiation: Span<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > >::begin() const Unexecuted instantiation: Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > >::begin() const |
176 | 658k | constexpr C* end() const noexcept { return m_data + m_size; } Unexecuted instantiation: Span<char const>::end() const Span<unsigned char const>::end() const Line | Count | Source | 176 | 870 | constexpr C* end() const noexcept { return m_data + m_size; } |
Span<std::byte const>::end() const Line | Count | Source | 176 | 657k | constexpr C* end() const noexcept { return m_data + m_size; } |
Unexecuted instantiation: Span<unsigned int const>::end() const Unexecuted instantiation: Span<unsigned int>::end() const Unexecuted instantiation: Span<FeeFrac const>::end() const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > >::end() const Unexecuted instantiation: Span<int>::end() const Unexecuted instantiation: Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::end() const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > >::end() const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > >::end() const Unexecuted instantiation: Span<std::byte>::end() const Unexecuted instantiation: Span<CNode* const>::end() const Unexecuted instantiation: Span<CRPCCommand const>::end() const Unexecuted instantiation: Span<std::vector<unsigned char, std::allocator<unsigned char> > const>::end() const Unexecuted instantiation: descriptor.cpp:Span<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > >::end() const Unexecuted instantiation: Span<miniscript::Node<unsigned int> const*>::end() const Unexecuted instantiation: Span<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > >::end() const Unexecuted instantiation: Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > >::end() const |
177 | | CONSTEXPR_IF_NOT_DEBUG C& front() const noexcept |
178 | 0 | { |
179 | 0 | ASSERT_IF_DEBUG(size() > 0); |
180 | 0 | return m_data[0]; |
181 | 0 | } Unexecuted instantiation: Span<unsigned int const>::front() const Unexecuted instantiation: Span<std::vector<unsigned char, std::allocator<unsigned char> > const>::front() const Unexecuted instantiation: Span<unsigned char const>::front() const |
182 | | CONSTEXPR_IF_NOT_DEBUG C& back() const noexcept |
183 | 0 | { |
184 | 0 | ASSERT_IF_DEBUG(size() > 0); |
185 | 0 | return m_data[m_size - 1]; |
186 | 0 | } |
187 | 6.41M | constexpr std::size_t size() const noexcept { return m_size; } Span<std::byte const>::size() const Line | Count | Source | 187 | 4.30M | constexpr std::size_t size() const noexcept { return m_size; } |
Span<std::byte>::size() const Line | Count | Source | 187 | 1.80M | constexpr std::size_t size() const noexcept { return m_size; } |
Unexecuted instantiation: Span<char const>::size() const Span<unsigned char const>::size() const Line | Count | Source | 187 | 266k | constexpr std::size_t size() const noexcept { return m_size; } |
Span<unsigned char>::size() const Line | Count | Source | 187 | 33.3k | constexpr std::size_t size() const noexcept { return m_size; } |
Unexecuted instantiation: Span<unsigned int const>::size() const Unexecuted instantiation: Span<unsigned int>::size() const Unexecuted instantiation: Span<FeeFrac const>::size() const Unexecuted instantiation: Span<CScript>::size() const Unexecuted instantiation: Span<miniscript::internal::InputResult>::size() const Unexecuted instantiation: Span<int>::size() const Unexecuted instantiation: Span<std::vector<unsigned char, std::allocator<unsigned char> > const>::size() const Unexecuted instantiation: Span<CScript const>::size() const |
188 | 3.64M | constexpr std::size_t size_bytes() const noexcept { return sizeof(C) * m_size; } Span<unsigned char const>::size_bytes() const Line | Count | Source | 188 | 935k | constexpr std::size_t size_bytes() const noexcept { return sizeof(C) * m_size; } |
Span<unsigned char>::size_bytes() const Line | Count | Source | 188 | 512k | constexpr std::size_t size_bytes() const noexcept { return sizeof(C) * m_size; } |
Span<unsigned int>::size_bytes() const Line | Count | Source | 188 | 2.09M | constexpr std::size_t size_bytes() const noexcept { return sizeof(C) * m_size; } |
Unexecuted instantiation: Span<std::byte>::size_bytes() const Unexecuted instantiation: Span<unsigned short>::size_bytes() const Span<unsigned long>::size_bytes() const Line | Count | Source | 188 | 72.5k | constexpr std::size_t size_bytes() const noexcept { return sizeof(C) * m_size; } |
Span<char>::size_bytes() const Line | Count | Source | 188 | 13.5k | constexpr std::size_t size_bytes() const noexcept { return sizeof(C) * m_size; } |
Span<char const>::size_bytes() const Line | Count | Source | 188 | 17.4k | constexpr std::size_t size_bytes() const noexcept { return sizeof(C) * m_size; } |
Unexecuted instantiation: Span<std::byte const>::size_bytes() const |
189 | 88.5k | constexpr bool empty() const noexcept { return size() == 0; } Span<unsigned char const>::empty() const Line | Count | Source | 189 | 76.4k | constexpr bool empty() const noexcept { return size() == 0; } |
Unexecuted instantiation: Span<unsigned int const>::empty() const Unexecuted instantiation: Span<char const>::empty() const Span<std::byte>::empty() const Line | Count | Source | 189 | 12.1k | constexpr bool empty() const noexcept { return size() == 0; } |
Unexecuted instantiation: Span<std::byte const>::empty() const |
190 | | CONSTEXPR_IF_NOT_DEBUG C& operator[](std::size_t pos) const noexcept |
191 | 6.96k | { |
192 | 6.96k | ASSERT_IF_DEBUG(size() > pos); |
193 | 6.96k | return m_data[pos]; |
194 | 6.96k | } Unexecuted instantiation: Span<std::byte>::operator[](unsigned long) const Unexecuted instantiation: Span<std::byte const>::operator[](unsigned long) const Unexecuted instantiation: Span<unsigned int>::operator[](unsigned long) const Unexecuted instantiation: Span<FeeFrac const>::operator[](unsigned long) const Unexecuted instantiation: Span<CScript>::operator[](unsigned long) const Unexecuted instantiation: Span<miniscript::internal::InputResult>::operator[](unsigned long) const Unexecuted instantiation: Span<int>::operator[](unsigned long) const Unexecuted instantiation: Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator[](unsigned long) const Unexecuted instantiation: Span<char const>::operator[](unsigned long) const Span<unsigned char const>::operator[](unsigned long) const Line | Count | Source | 191 | 6.96k | { | 192 | 6.96k | ASSERT_IF_DEBUG(size() > pos); | 193 | 6.96k | return m_data[pos]; | 194 | 6.96k | } |
Unexecuted instantiation: Span<std::vector<unsigned char, std::allocator<unsigned char> > const>::operator[](unsigned long) const Unexecuted instantiation: Span<CScript const>::operator[](unsigned long) const |
195 | | CONSTEXPR_IF_NOT_DEBUG Span<C> subspan(std::size_t offset) const noexcept |
196 | 102k | { |
197 | 102k | ASSERT_IF_DEBUG(size() >= offset); |
198 | 102k | return Span<C>(m_data + offset, m_size - offset); |
199 | 102k | } Span<unsigned char const>::subspan(unsigned long) const Line | Count | Source | 196 | 98.6k | { | 197 | 98.6k | ASSERT_IF_DEBUG(size() >= offset); | 198 | 98.6k | return Span<C>(m_data + offset, m_size - offset); | 199 | 98.6k | } |
Span<std::byte>::subspan(unsigned long) const Line | Count | Source | 196 | 3.55k | { | 197 | 3.55k | ASSERT_IF_DEBUG(size() >= offset); | 198 | 3.55k | return Span<C>(m_data + offset, m_size - offset); | 199 | 3.55k | } |
Unexecuted instantiation: Span<unsigned char>::subspan(unsigned long) const Unexecuted instantiation: Span<unsigned int const>::subspan(unsigned long) const Unexecuted instantiation: Span<char const>::subspan(unsigned long) const Unexecuted instantiation: Span<std::byte const>::subspan(unsigned long) const |
200 | | CONSTEXPR_IF_NOT_DEBUG Span<C> subspan(std::size_t offset, std::size_t count) const noexcept |
201 | 0 | { |
202 | 0 | ASSERT_IF_DEBUG(size() >= offset + count); |
203 | 0 | return Span<C>(m_data + offset, count); |
204 | 0 | } Unexecuted instantiation: Span<unsigned char const>::subspan(unsigned long, unsigned long) const Unexecuted instantiation: Span<std::byte>::subspan(unsigned long, unsigned long) const Unexecuted instantiation: Span<char const>::subspan(unsigned long, unsigned long) const Unexecuted instantiation: Span<std::byte const>::subspan(unsigned long, unsigned long) const |
205 | | CONSTEXPR_IF_NOT_DEBUG Span<C> first(std::size_t count) const noexcept |
206 | 14.4k | { |
207 | 14.4k | ASSERT_IF_DEBUG(size() >= count); |
208 | 14.4k | return Span<C>(m_data, count); |
209 | 14.4k | } Span<std::byte const>::first(unsigned long) const Line | Count | Source | 206 | 870 | { | 207 | 870 | ASSERT_IF_DEBUG(size() >= count); | 208 | 870 | return Span<C>(m_data, count); | 209 | 870 | } |
Span<std::byte>::first(unsigned long) const Line | Count | Source | 206 | 870 | { | 207 | 870 | ASSERT_IF_DEBUG(size() >= count); | 208 | 870 | return Span<C>(m_data, count); | 209 | 870 | } |
Span<unsigned char const>::first(unsigned long) const Line | Count | Source | 206 | 12.6k | { | 207 | 12.6k | ASSERT_IF_DEBUG(size() >= count); | 208 | 12.6k | return Span<C>(m_data, count); | 209 | 12.6k | } |
Unexecuted instantiation: Span<unsigned char>::first(unsigned long) const Unexecuted instantiation: Span<char const>::first(unsigned long) const |
210 | | CONSTEXPR_IF_NOT_DEBUG Span<C> last(std::size_t count) const noexcept |
211 | 4.35k | { |
212 | 4.35k | ASSERT_IF_DEBUG(size() >= count); |
213 | 4.35k | return Span<C>(m_data + m_size - count, count); |
214 | 4.35k | } Span<std::byte const>::last(unsigned long) const Line | Count | Source | 211 | 3.48k | { | 212 | 3.48k | ASSERT_IF_DEBUG(size() >= count); | 213 | 3.48k | return Span<C>(m_data + m_size - count, count); | 214 | 3.48k | } |
Span<std::byte>::last(unsigned long) const Line | Count | Source | 211 | 870 | { | 212 | 870 | ASSERT_IF_DEBUG(size() >= count); | 213 | 870 | return Span<C>(m_data + m_size - count, count); | 214 | 870 | } |
Unexecuted instantiation: Span<unsigned char>::last(unsigned long) const Unexecuted instantiation: Span<CScript>::last(unsigned long) const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::ParserContext>((anonymous namespace)::ParserContext const&) const::Comp, std::allocator<CPubKey> > > >::last(unsigned long) const Unexecuted instantiation: Span<miniscript::internal::InputResult>::last(unsigned long) const Unexecuted instantiation: Span<int>::last(unsigned long) const Unexecuted instantiation: Span<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::last(unsigned long) const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<(anonymous namespace)::KeyComparator>((anonymous namespace)::KeyComparator const&) const::Comp, std::allocator<CPubKey> > > >::last(unsigned long) const Unexecuted instantiation: miniscript.cpp:Span<std::optional<std::set<(anonymous namespace)::ScriptParserContext::Key, miniscript::Node<(anonymous namespace)::ScriptParserContext::Key>::DuplicateKeyCheck<(anonymous namespace)::ScriptParserContext>((anonymous namespace)::ScriptParserContext const&) const::Comp, std::allocator<(anonymous namespace)::ScriptParserContext::Key> > > >::last(unsigned long) const Unexecuted instantiation: Span<char const>::last(unsigned long) const Unexecuted instantiation: Span<unsigned char const>::last(unsigned long) const Unexecuted instantiation: descriptor.cpp:Span<std::optional<std::set<unsigned int, miniscript::Node<unsigned int>::DuplicateKeyCheck<(anonymous namespace)::KeyParser>((anonymous namespace)::KeyParser const&) const::Comp, std::allocator<unsigned int> > > >::last(unsigned long) const Unexecuted instantiation: Span<miniscript::Node<unsigned int> const*>::last(unsigned long) const Unexecuted instantiation: Span<std::optional<std::set<XOnlyPubKey, miniscript::Node<XOnlyPubKey>::DuplicateKeyCheck<TapSatisfier>(TapSatisfier const&) const::Comp, std::allocator<XOnlyPubKey> > > >::last(unsigned long) const Unexecuted instantiation: Span<std::optional<std::set<CPubKey, miniscript::Node<CPubKey>::DuplicateKeyCheck<WshSatisfier>(WshSatisfier const&) const::Comp, std::allocator<CPubKey> > > >::last(unsigned long) const |
215 | | |
216 | 0 | friend constexpr bool operator==(const Span& a, const Span& b) noexcept { return a.size() == b.size() && std::equal(a.begin(), a.end(), b.begin()); } Unexecuted instantiation: operator==(Span<std::byte const> const&, Span<std::byte const> const&) Unexecuted instantiation: operator==(Span<unsigned char const> const&, Span<unsigned char const> const&) Unexecuted instantiation: operator==(Span<std::byte> const&, Span<std::byte> const&) Unexecuted instantiation: operator==(Span<char const> const&, Span<char const> const&) Branch (216:86): [True: 0, False: 0]
Branch (216:110): [True: 0, False: 0]
Branch (216:86): [True: 0, False: 0]
Branch (216:110): [True: 0, False: 0]
Branch (216:86): [True: 0, False: 0]
Branch (216:110): [True: 0, False: 0]
Branch (216:86): [True: 0, False: 0]
Branch (216:110): [True: 0, False: 0]
|
217 | 0 | friend constexpr bool operator!=(const Span& a, const Span& b) noexcept { return !(a == b); } Unexecuted instantiation: operator!=(Span<char const> const&, Span<char const> const&) Unexecuted instantiation: operator!=(Span<unsigned char const> const&, Span<unsigned char const> const&) |
218 | 0 | friend constexpr bool operator<(const Span& a, const Span& b) noexcept { return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end()); } Unexecuted instantiation: operator<(Span<char const> const&, Span<char const> const&) Unexecuted instantiation: operator<(Span<std::byte const> const&, Span<std::byte const> const&) |
219 | 0 | friend constexpr bool operator<=(const Span& a, const Span& b) noexcept { return !(b < a); } |
220 | 0 | friend constexpr bool operator>(const Span& a, const Span& b) noexcept { return (b < a); } |
221 | 0 | friend constexpr bool operator>=(const Span& a, const Span& b) noexcept { return !(a < b); } |
222 | | |
223 | | template <typename O> friend class Span; |
224 | | }; |
225 | | |
226 | | // Return result of calling .data() method on type T. This is used to be able to |
227 | | // write template deduction guides for the single-parameter Span constructor |
228 | | // below that will work if the value that is passed has a .data() method, and if |
229 | | // the data method does not return a void pointer. |
230 | | // |
231 | | // It is important to check for the void type specifically below, so the |
232 | | // deduction guides can be used in SFINAE contexts to check whether objects can |
233 | | // be converted to spans. If the deduction guides did not explicitly check for |
234 | | // void, and an object was passed that returned void* from data (like |
235 | | // std::vector<bool>), the template deduction would succeed, but the Span<void> |
236 | | // object instantiation would fail, resulting in a hard error, rather than a |
237 | | // SFINAE error. |
238 | | // https://stackoverflow.com/questions/68759148/sfinae-to-detect-the-explicitness-of-a-ctad-deduction-guide |
239 | | // https://stackoverflow.com/questions/16568986/what-happens-when-you-call-data-on-a-stdvectorbool |
240 | | template<typename T> |
241 | | using DataResult = std::remove_pointer_t<decltype(std::declval<T&>().data())>; |
242 | | |
243 | | // Deduction guides for Span |
244 | | // For the pointer/size based and iterator based constructor: |
245 | | template <typename T, typename EndOrSize> Span(T*, EndOrSize) -> Span<T>; |
246 | | // For the array constructor: |
247 | | template <typename T, std::size_t N> Span(T (&)[N]) -> Span<T>; |
248 | | // For the temporaries/rvalue references constructor, only supporting const output. |
249 | | template <typename T> Span(T&&) -> Span<std::enable_if_t<!std::is_lvalue_reference_v<T> && !std::is_void_v<DataResult<T&&>>, const DataResult<T&&>>>; |
250 | | // For (lvalue) references, supporting mutable output. |
251 | | template <typename T> Span(T&) -> Span<std::enable_if_t<!std::is_void_v<DataResult<T&>>, DataResult<T&>>>; |
252 | | |
253 | | /** Pop the last element off a span, and return a reference to that element. */ |
254 | | template <typename T> |
255 | | T& SpanPopBack(Span<T>& span) |
256 | 0 | { |
257 | 0 | size_t size = span.size(); |
258 | 0 | ASSERT_IF_DEBUG(size > 0); |
259 | 0 | T& back = span[size - 1]; |
260 | 0 | span = Span<T>(span.data(), size - 1); |
261 | 0 | return back; |
262 | 0 | } Unexecuted instantiation: std::vector<unsigned char, std::allocator<unsigned char> > const& SpanPopBack<std::vector<unsigned char, std::allocator<unsigned char> > const>(Span<std::vector<unsigned char, std::allocator<unsigned char> > const>&) Unexecuted instantiation: unsigned char const& SpanPopBack<unsigned char const>(Span<unsigned char const>&) |
263 | | |
264 | | // From C++20 as_bytes and as_writeable_bytes |
265 | | template <typename T> |
266 | | Span<const std::byte> AsBytes(Span<T> s) noexcept |
267 | 3.05M | { |
268 | 3.05M | return {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()}; |
269 | 3.05M | } Span<std::byte const> AsBytes<unsigned char const>(Span<unsigned char const>) Line | Count | Source | 267 | 935k | { | 268 | 935k | return {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()}; | 269 | 935k | } |
Span<std::byte const> AsBytes<unsigned int>(Span<unsigned int>) Line | Count | Source | 267 | 1.80M | { | 268 | 1.80M | return {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()}; | 269 | 1.80M | } |
Span<std::byte const> AsBytes<unsigned char>(Span<unsigned char>) Line | Count | Source | 267 | 240k | { | 268 | 240k | return {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()}; | 269 | 240k | } |
Unexecuted instantiation: Span<std::byte const> AsBytes<unsigned short>(Span<unsigned short>) Span<std::byte const> AsBytes<unsigned long>(Span<unsigned long>) Line | Count | Source | 267 | 58.8k | { | 268 | 58.8k | return {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()}; | 269 | 58.8k | } |
Span<std::byte const> AsBytes<char const>(Span<char const>) Line | Count | Source | 267 | 17.4k | { | 268 | 17.4k | return {reinterpret_cast<const std::byte*>(s.data()), s.size_bytes()}; | 269 | 17.4k | } |
Unexecuted instantiation: Span<std::byte const> AsBytes<std::byte>(Span<std::byte>) Unexecuted instantiation: Span<std::byte const> AsBytes<char>(Span<char>) Unexecuted instantiation: Span<std::byte const> AsBytes<std::byte const>(Span<std::byte const>) |
270 | | template <typename T> |
271 | | Span<std::byte> AsWritableBytes(Span<T> s) noexcept |
272 | 591k | { |
273 | 591k | return {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}; |
274 | 591k | } Span<std::byte> AsWritableBytes<unsigned char>(Span<unsigned char>) Line | Count | Source | 272 | 271k | { | 273 | 271k | return {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}; | 274 | 271k | } |
Span<std::byte> AsWritableBytes<unsigned int>(Span<unsigned int>) Line | Count | Source | 272 | 292k | { | 273 | 292k | return {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}; | 274 | 292k | } |
Unexecuted instantiation: Span<std::byte> AsWritableBytes<std::byte>(Span<std::byte>) Unexecuted instantiation: Span<std::byte> AsWritableBytes<unsigned short>(Span<unsigned short>) Span<std::byte> AsWritableBytes<unsigned long>(Span<unsigned long>) Line | Count | Source | 272 | 13.7k | { | 273 | 13.7k | return {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}; | 274 | 13.7k | } |
Span<std::byte> AsWritableBytes<char>(Span<char>) Line | Count | Source | 272 | 13.5k | { | 273 | 13.5k | return {reinterpret_cast<std::byte*>(s.data()), s.size_bytes()}; | 274 | 13.5k | } |
|
275 | | |
276 | | template <typename V> |
277 | | Span<const std::byte> MakeByteSpan(V&& v) noexcept |
278 | 97.4k | { |
279 | 97.4k | return AsBytes(Span{std::forward<V>(v)}); |
280 | 97.4k | } Unexecuted instantiation: Span<std::byte const> MakeByteSpan<std::vector<unsigned char, std::allocator<unsigned char> > const&>(std::vector<unsigned char, std::allocator<unsigned char> > const&) Span<std::byte const> MakeByteSpan<prevector<28u, unsigned char, unsigned int, int> const&>(prevector<28u, unsigned char, unsigned int, int> const&) Line | Count | Source | 278 | 39.2k | { | 279 | 39.2k | return AsBytes(Span{std::forward<V>(v)}); | 280 | 39.2k | } |
Unexecuted instantiation: Span<std::byte const> MakeByteSpan<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&) Span<std::byte const> MakeByteSpan<unsigned char const (&) [4]>(unsigned char const (&) [4]) Line | Count | Source | 278 | 17.4k | { | 279 | 17.4k | return AsBytes(Span{std::forward<V>(v)}); | 280 | 17.4k | } |
Unexecuted instantiation: Span<std::byte const> MakeByteSpan<unsigned char const (&) [5]>(unsigned char const (&) [5]) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<unsigned char const (&) [78]>(unsigned char const (&) [78]) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<prevector<16u, unsigned char, unsigned int, int> const&>(prevector<16u, unsigned char, unsigned int, int> const&) Span<std::byte const> MakeByteSpan<unsigned char const (&) [16]>(unsigned char const (&) [16]) Line | Count | Source | 278 | 3.48k | { | 279 | 3.48k | return AsBytes(Span{std::forward<V>(v)}); | 280 | 3.48k | } |
Span<std::byte const> MakeByteSpan<std::array<unsigned char, 4ul> const&>(std::array<unsigned char, 4ul> const&) Line | Count | Source | 278 | 17.4k | { | 279 | 17.4k | return AsBytes(Span{std::forward<V>(v)}); | 280 | 17.4k | } |
Span<std::byte const> MakeByteSpan<char const (&) [12]>(char const (&) [12]) Line | Count | Source | 278 | 17.4k | { | 279 | 17.4k | return AsBytes(Span{std::forward<V>(v)}); | 280 | 17.4k | } |
Unexecuted instantiation: Span<std::byte const> MakeByteSpan<std::array<unsigned char, 5ul> const&>(std::array<unsigned char, 5ul> const&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<DataStream&>(DataStream&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<std::vector<unsigned char, std::allocator<unsigned char> >&>(std::vector<unsigned char, std::allocator<unsigned char> >&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<leveldb::Slice>(leveldb::Slice&&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<uint256>(uint256&&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<std::array<std::byte, 8ul> const&>(std::array<std::byte, 8ul> const&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<std::vector<std::byte, std::allocator<std::byte> > const&>(std::vector<std::byte, std::allocator<std::byte> > const&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<std::vector<unsigned char, secure_allocator<unsigned char> > const&>(std::vector<unsigned char, secure_allocator<unsigned char> > const&) Unexecuted instantiation: Span<std::byte const> MakeByteSpan<uint256 const&>(uint256 const&) Span<std::byte const> MakeByteSpan<uint256&>(uint256&) Line | Count | Source | 278 | 2.33k | { | 279 | 2.33k | return AsBytes(Span{std::forward<V>(v)}); | 280 | 2.33k | } |
Unexecuted instantiation: Span<std::byte const> MakeByteSpan<unsigned char const (&) [384]>(unsigned char const (&) [384]) |
281 | | template <typename V> |
282 | | Span<std::byte> MakeWritableByteSpan(V&& v) noexcept |
283 | 171k | { |
284 | 171k | return AsWritableBytes(Span{std::forward<V>(v)}); |
285 | 171k | } Span<std::byte> MakeWritableByteSpan<std::array<unsigned char, 32ul>&>(std::array<unsigned char, 32ul>&) Line | Count | Source | 283 | 129k | { | 284 | 129k | return AsWritableBytes(Span{std::forward<V>(v)}); | 285 | 129k | } |
Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<DataStream&>(DataStream&) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<unsigned char (&) [5]>(unsigned char (&) [5]) Span<std::byte> MakeWritableByteSpan<unsigned char (&) [4]>(unsigned char (&) [4]) Line | Count | Source | 283 | 13.5k | { | 284 | 13.5k | return AsWritableBytes(Span{std::forward<V>(v)}); | 285 | 13.5k | } |
Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&>(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<std::vector<std::byte, std::allocator<std::byte> >&>(std::vector<std::byte, std::allocator<std::byte> >&) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<std::vector<unsigned char, std::allocator<unsigned char> >&>(std::vector<unsigned char, std::allocator<unsigned char> >&) Span<std::byte> MakeWritableByteSpan<unsigned char (&) [16]>(unsigned char (&) [16]) Line | Count | Source | 283 | 870 | { | 284 | 870 | return AsWritableBytes(Span{std::forward<V>(v)}); | 285 | 870 | } |
Span<std::byte> MakeWritableByteSpan<std::array<unsigned char, 4ul>&>(std::array<unsigned char, 4ul>&) Line | Count | Source | 283 | 13.5k | { | 284 | 13.5k | return AsWritableBytes(Span{std::forward<V>(v)}); | 285 | 13.5k | } |
Span<std::byte> MakeWritableByteSpan<char (&) [12]>(char (&) [12]) Line | Count | Source | 283 | 13.5k | { | 284 | 13.5k | return AsWritableBytes(Span{std::forward<V>(v)}); | 285 | 13.5k | } |
Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<std::array<unsigned char, 5ul>&>(std::array<unsigned char, 5ul>&) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<std::array<unsigned char, 20ul>&>(std::array<unsigned char, 20ul>&) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<uint256&>(uint256&) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<std::array<std::byte, 8ul>&>(std::array<std::byte, 8ul>&) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<std::array<std::byte, 20ul>&>(std::array<std::byte, 20ul>&) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<char (&) [368]>(char (&) [368]) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<unsigned char (&) [20]>(unsigned char (&) [20]) Unexecuted instantiation: Span<std::byte> MakeWritableByteSpan<unsigned char (&) [384]>(unsigned char (&) [384]) |
286 | | |
287 | | // Helper functions to safely cast basic byte pointers to unsigned char pointers. |
288 | 0 | inline unsigned char* UCharCast(char* c) { return reinterpret_cast<unsigned char*>(c); } |
289 | 0 | inline unsigned char* UCharCast(unsigned char* c) { return c; } |
290 | 0 | inline unsigned char* UCharCast(signed char* c) { return reinterpret_cast<unsigned char*>(c); } |
291 | 7.40k | inline unsigned char* UCharCast(std::byte* c) { return reinterpret_cast<unsigned char*>(c); } |
292 | 0 | inline const unsigned char* UCharCast(const char* c) { return reinterpret_cast<const unsigned char*>(c); } |
293 | 17.4k | inline const unsigned char* UCharCast(const unsigned char* c) { return c; } |
294 | 0 | inline const unsigned char* UCharCast(const signed char* c) { return reinterpret_cast<const unsigned char*>(c); } |
295 | 3.55M | inline const unsigned char* UCharCast(const std::byte* c) { return reinterpret_cast<const unsigned char*>(c); } |
296 | | // Helper concept for the basic byte types. |
297 | | template <typename B> |
298 | | concept BasicByte = requires { UCharCast(std::span<B>{}.data()); }; |
299 | | |
300 | | // Helper function to safely convert a Span to a Span<[const] unsigned char>. |
301 | 17.4k | template <typename T> constexpr auto UCharSpanCast(Span<T> s) -> Span<typename std::remove_pointer<decltype(UCharCast(s.data()))>::type> { return {UCharCast(s.data()), s.size()}; } Unexecuted instantiation: Span<std::remove_pointer<decltype (UCharCast(({parm#1}.data)()))>::type> UCharSpanCast<char const>(Span<char const>) Unexecuted instantiation: Span<std::remove_pointer<decltype (UCharCast(({parm#1}.data)()))>::type> UCharSpanCast<std::byte const>(Span<std::byte const>) Span<std::remove_pointer<decltype (UCharCast(({parm#1}.data)()))>::type> UCharSpanCast<unsigned char const>(Span<unsigned char const>) Line | Count | Source | 301 | 17.4k | template <typename T> constexpr auto UCharSpanCast(Span<T> s) -> Span<typename std::remove_pointer<decltype(UCharCast(s.data()))>::type> { return {UCharCast(s.data()), s.size()}; } |
Unexecuted instantiation: Span<std::remove_pointer<decltype (UCharCast(({parm#1}.data)()))>::type> UCharSpanCast<std::byte>(Span<std::byte>) Unexecuted instantiation: Span<std::remove_pointer<decltype (UCharCast(({parm#1}.data)()))>::type> UCharSpanCast<unsigned char>(Span<unsigned char>) |
302 | | |
303 | | /** Like the Span constructor, but for (const) unsigned char member types only. Only works for (un)signed char containers. */ |
304 | 17.4k | template <typename V> constexpr auto MakeUCharSpan(V&& v) -> decltype(UCharSpanCast(Span{std::forward<V>(v)})) { return UCharSpanCast(Span{std::forward<V>(v)}); } Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<Span<char const> const&>)({parm#1})})) MakeUCharSpan<Span<char const> const&>(Span<char const> const&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<Span<std::byte const> const&>)({parm#1})})) MakeUCharSpan<Span<std::byte const> const&>(Span<std::byte const> const&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<Span<std::byte const>&>)({parm#1})})) MakeUCharSpan<Span<std::byte const>&>(Span<std::byte const>&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<std::basic_string_view<char, std::char_traits<char> >&>)({parm#1})})) MakeUCharSpan<std::basic_string_view<char, std::char_traits<char> >&>(std::basic_string_view<char, std::char_traits<char> >&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<Span<unsigned char const> const&>)({parm#1})})) MakeUCharSpan<Span<unsigned char const> const&>(Span<unsigned char const> const&) decltype (UCharSpanCast(Span{(std::forward<std::vector<unsigned char, std::allocator<unsigned char> > const&>)({parm#1})})) MakeUCharSpan<std::vector<unsigned char, std::allocator<unsigned char> > const&>(std::vector<unsigned char, std::allocator<unsigned char> > const&) Line | Count | Source | 304 | 17.4k | template <typename V> constexpr auto MakeUCharSpan(V&& v) -> decltype(UCharSpanCast(Span{std::forward<V>(v)})) { return UCharSpanCast(Span{std::forward<V>(v)}); } |
Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<std::span<unsigned char const, 18446744073709551615ul> const&>)({parm#1})})) MakeUCharSpan<std::span<unsigned char const, 18446744073709551615ul> const&>(std::span<unsigned char const, 18446744073709551615ul> const&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<XOnlyPubKey const&>)({parm#1})})) MakeUCharSpan<XOnlyPubKey const&>(XOnlyPubKey const&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<CPubKey const&>)({parm#1})})) MakeUCharSpan<CPubKey const&>(CPubKey const&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)({parm#1})})) MakeUCharSpan<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<uint256 const&>)({parm#1})})) MakeUCharSpan<uint256 const&>(uint256 const&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<DataStream&>)({parm#1})})) MakeUCharSpan<DataStream&>(DataStream&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<Span<std::byte const> >)({parm#1})})) MakeUCharSpan<Span<std::byte const> >(Span<std::byte const>&&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<CScript const&>)({parm#1})})) MakeUCharSpan<CScript const&>(CScript const&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<Span<unsigned char> const&>)({parm#1})})) MakeUCharSpan<Span<unsigned char> const&>(Span<unsigned char> const&) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<unsigned char const (&) [4]>)({parm#1})})) MakeUCharSpan<unsigned char const (&) [4]>(unsigned char const (&) [4]) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)({parm#1})})) MakeUCharSpan<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: decltype (UCharSpanCast(Span{(std::forward<unsigned char const (&) [8]>)({parm#1})})) MakeUCharSpan<unsigned char const (&) [8]>(unsigned char const (&) [8]) Unexecuted instantiation: decltype (UCharSpanCast(Span{(std::forward<Span<char const>&>)({parm#1})})) MakeUCharSpan<Span<char const>&>(Span<char const>&) |
305 | | |
306 | | #endif // BITCOIN_SPAN_H |