/root/bitcoin/src/util/vecdeque.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright (c) The Bitcoin Core developers |
2 | | // Distributed under the MIT software license, see the accompanying |
3 | | // file COPYING or http://www.opensource.org/licenses/mit-license.php. |
4 | | |
5 | | #ifndef BITCOIN_UTIL_VECDEQUE_H |
6 | | #define BITCOIN_UTIL_VECDEQUE_H |
7 | | |
8 | | #include <util/check.h> |
9 | | |
10 | | #include <cstring> |
11 | | #include <memory> |
12 | | #include <type_traits> |
13 | | |
14 | | /** Data structure largely mimicking std::deque, but using single preallocated ring buffer. |
15 | | * |
16 | | * - More efficient and better memory locality than std::deque. |
17 | | * - Most operations ({push_,pop_,emplace_,}{front,back}(), operator[], ...) are O(1), |
18 | | * unless reallocation is needed (in which case they are O(n)). |
19 | | * - Supports reserve(), capacity(), shrink_to_fit() like vectors. |
20 | | * - No iterator support. |
21 | | * - Data is not stored in a single contiguous block, so no data(). |
22 | | */ |
23 | | template<typename T> |
24 | | class VecDeque |
25 | | { |
26 | | /** Pointer to allocated memory. Can contain constructed and uninitialized T objects. */ |
27 | | T* m_buffer{nullptr}; |
28 | | /** m_buffer + m_offset points to first object in queue. m_offset = 0 if m_capacity is 0; |
29 | | * otherwise 0 <= m_offset < m_capacity. */ |
30 | | size_t m_offset{0}; |
31 | | /** Number of objects in the container. 0 <= m_size <= m_capacity. */ |
32 | | size_t m_size{0}; |
33 | | /** The size of m_buffer, expressed as a multiple of the size of T. */ |
34 | | size_t m_capacity{0}; |
35 | | |
36 | | /** Returns the number of populated objects between m_offset and the end of the buffer. */ |
37 | 0 | size_t FirstPart() const noexcept { return std::min(m_capacity - m_offset, m_size); } Unexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE9FirstPartEv Unexecuted instantiation: _ZNK8VecDequeIhE9FirstPartEv Unexecuted instantiation: _ZNK8VecDequeItE9FirstPartEv Unexecuted instantiation: _ZNK8VecDequeIjE9FirstPartEv Unexecuted instantiation: _ZNK8VecDequeImE9FirstPartEv |
38 | | |
39 | | void Reallocate(size_t capacity) |
40 | 0 | { |
41 | 0 | Assume(capacity >= m_size); |
42 | 0 | Assume((m_offset == 0 && m_capacity == 0) || m_offset < m_capacity); |
43 | | // Allocate new buffer. |
44 | 0 | T* new_buffer = capacity ? std::allocator<T>().allocate(capacity) : nullptr; |
45 | 0 | if (capacity) { |
46 | 0 | if constexpr (std::is_trivially_copyable_v<T>) { |
47 | | // When T is trivially copyable, just copy the data over from old to new buffer. |
48 | 0 | size_t first_part = FirstPart(); |
49 | 0 | if (first_part != 0) { |
50 | 0 | std::memcpy(new_buffer, m_buffer + m_offset, first_part * sizeof(T)); |
51 | 0 | } |
52 | 0 | if (first_part != m_size) { |
53 | 0 | std::memcpy(new_buffer + first_part, m_buffer, (m_size - first_part) * sizeof(T)); |
54 | 0 | } |
55 | 0 | } else { |
56 | | // Otherwise move-construct in place in the new buffer, and destroy old buffer objects. |
57 | 0 | size_t old_pos = m_offset; |
58 | 0 | for (size_t new_pos = 0; new_pos < m_size; ++new_pos) { |
59 | 0 | std::construct_at(new_buffer + new_pos, std::move(*(m_buffer + old_pos))); |
60 | 0 | std::destroy_at(m_buffer + old_pos); |
61 | 0 | ++old_pos; |
62 | 0 | if (old_pos == m_capacity) old_pos = 0; |
63 | 0 | } |
64 | 0 | } |
65 | 0 | } |
66 | | // Deallocate old buffer and update housekeeping. |
67 | 0 | std::allocator<T>().deallocate(m_buffer, m_capacity); |
68 | 0 | m_buffer = new_buffer; |
69 | 0 | m_offset = 0; |
70 | 0 | m_capacity = capacity; |
71 | 0 | Assume((m_offset == 0 && m_capacity == 0) || m_offset < m_capacity); |
72 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE10ReallocateEm Unexecuted instantiation: _ZN8VecDequeIhE10ReallocateEm Unexecuted instantiation: _ZN8VecDequeItE10ReallocateEm Unexecuted instantiation: _ZN8VecDequeIjE10ReallocateEm Unexecuted instantiation: _ZN8VecDequeImE10ReallocateEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE10ReallocateEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE10ReallocateEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE10ReallocateEm |
73 | | |
74 | | /** What index in the buffer does logical entry number pos have? */ |
75 | | size_t BufferIndex(size_t pos) const noexcept |
76 | 0 | { |
77 | 0 | Assume(pos < m_capacity); |
78 | | // The expression below is used instead of the more obvious (pos + m_offset >= m_capacity), |
79 | | // because the addition there could in theory overflow with very large deques. |
80 | 0 | if (pos >= m_capacity - m_offset) { |
81 | 0 | return (m_offset + pos) - m_capacity; |
82 | 0 | } else { |
83 | 0 | return m_offset + pos; |
84 | 0 | } |
85 | 0 | } Unexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE11BufferIndexEm Unexecuted instantiation: _ZNK8VecDequeIhE11BufferIndexEm Unexecuted instantiation: _ZNK8VecDequeItE11BufferIndexEm Unexecuted instantiation: _ZNK8VecDequeIjE11BufferIndexEm Unexecuted instantiation: _ZNK8VecDequeImE11BufferIndexEm Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE11BufferIndexEm Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE11BufferIndexEm Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE11BufferIndexEm |
86 | | |
87 | | /** Specialization of resize() that can only shrink. Separate so that clear() can call it |
88 | | * without requiring a default T constructor. */ |
89 | | void ResizeDown(size_t size) noexcept |
90 | 0 | { |
91 | 0 | Assume(size <= m_size); |
92 | 0 | if constexpr (std::is_trivially_destructible_v<T>) { |
93 | | // If T is trivially destructible, we do not need to do anything but update the |
94 | | // housekeeping record. Default constructor or zero-filling will be used when |
95 | | // the space is reused. |
96 | 0 | m_size = size; |
97 | 0 | } else { |
98 | | // If not, we need to invoke the destructor for every element separately. |
99 | 0 | while (m_size > size) { |
100 | 0 | std::destroy_at(m_buffer + BufferIndex(m_size - 1)); |
101 | 0 | --m_size; |
102 | 0 | } |
103 | 0 | } |
104 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE10ResizeDownEm Unexecuted instantiation: _ZN8VecDequeIhE10ResizeDownEm Unexecuted instantiation: _ZN8VecDequeItE10ResizeDownEm Unexecuted instantiation: _ZN8VecDequeIjE10ResizeDownEm Unexecuted instantiation: _ZN8VecDequeImE10ResizeDownEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE10ResizeDownEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE10ResizeDownEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE10ResizeDownEm |
105 | | |
106 | | public: |
107 | 0 | VecDeque() noexcept = default; Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemEC2Ev Unexecuted instantiation: _ZN8VecDequeIhEC2Ev Unexecuted instantiation: _ZN8VecDequeItEC2Ev Unexecuted instantiation: _ZN8VecDequeIjEC2Ev Unexecuted instantiation: _ZN8VecDequeImEC2Ev Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEC2Ev Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEC2Ev Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEC2Ev |
108 | | |
109 | | /** Resize the deque to be exactly size size (adding default-constructed elements if needed). */ |
110 | | void resize(size_t size) |
111 | 0 | { |
112 | 0 | if (size < m_size) { |
113 | | // Delegate to ResizeDown when shrinking. |
114 | 0 | ResizeDown(size); |
115 | 0 | } else if (size > m_size) { |
116 | | // When growing, first see if we need to allocate more space. |
117 | 0 | if (size > m_capacity) Reallocate(size); |
118 | 0 | while (m_size < size) { |
119 | 0 | std::construct_at(m_buffer + BufferIndex(m_size)); |
120 | 0 | ++m_size; |
121 | 0 | } |
122 | 0 | } |
123 | 0 | } Unexecuted instantiation: _ZN8VecDequeIhE6resizeEm Unexecuted instantiation: _ZN8VecDequeItE6resizeEm Unexecuted instantiation: _ZN8VecDequeIjE6resizeEm Unexecuted instantiation: _ZN8VecDequeImE6resizeEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE6resizeEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE6resizeEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE6resizeEm |
124 | | |
125 | | /** Resize the deque to be size 0. The capacity will remain unchanged. */ |
126 | 0 | void clear() noexcept { ResizeDown(0); } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5clearEv Unexecuted instantiation: _ZN8VecDequeIhE5clearEv Unexecuted instantiation: _ZN8VecDequeItE5clearEv Unexecuted instantiation: _ZN8VecDequeIjE5clearEv Unexecuted instantiation: _ZN8VecDequeImE5clearEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE5clearEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE5clearEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE5clearEv |
127 | | |
128 | | /** Destroy a deque. */ |
129 | | ~VecDeque() |
130 | 0 | { |
131 | 0 | clear(); |
132 | 0 | Reallocate(0); |
133 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemED2Ev Unexecuted instantiation: _ZN8VecDequeIhED2Ev Unexecuted instantiation: _ZN8VecDequeItED2Ev Unexecuted instantiation: _ZN8VecDequeIjED2Ev Unexecuted instantiation: _ZN8VecDequeImED2Ev Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEED2Ev Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEED2Ev Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEED2Ev |
134 | | |
135 | | /** Copy-assign a deque. */ |
136 | | VecDeque& operator=(const VecDeque& other) |
137 | 0 | { |
138 | 0 | if (&other == this) [[unlikely]] return *this; |
139 | 0 | clear(); |
140 | 0 | Reallocate(other.m_size); |
141 | 0 | if constexpr (std::is_trivially_copyable_v<T>) { |
142 | 0 | size_t first_part = other.FirstPart(); |
143 | 0 | Assume(first_part > 0 || m_size == 0); |
144 | 0 | if (first_part != 0) { |
145 | 0 | std::memcpy(m_buffer, other.m_buffer + other.m_offset, first_part * sizeof(T)); |
146 | 0 | } |
147 | 0 | if (first_part != other.m_size) { |
148 | 0 | std::memcpy(m_buffer + first_part, other.m_buffer, (other.m_size - first_part) * sizeof(T)); |
149 | 0 | } |
150 | 0 | m_size = other.m_size; |
151 | 0 | } else { |
152 | 0 | while (m_size < other.m_size) { |
153 | 0 | std::construct_at(m_buffer + BufferIndex(m_size), other[m_size]); |
154 | 0 | ++m_size; |
155 | 0 | } |
156 | 0 | } |
157 | 0 | return *this; |
158 | 0 | } Unexecuted instantiation: _ZN8VecDequeIhEaSERKS0_ Unexecuted instantiation: _ZN8VecDequeItEaSERKS0_ Unexecuted instantiation: _ZN8VecDequeIjEaSERKS0_ Unexecuted instantiation: _ZN8VecDequeImEaSERKS0_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEaSERKS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEaSERKS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEaSERKS3_ |
159 | | |
160 | | /** Swap two deques. */ |
161 | | void swap(VecDeque& other) noexcept |
162 | 0 | { |
163 | 0 | std::swap(m_buffer, other.m_buffer); |
164 | 0 | std::swap(m_offset, other.m_offset); |
165 | 0 | std::swap(m_size, other.m_size); |
166 | 0 | std::swap(m_capacity, other.m_capacity); |
167 | 0 | } Unexecuted instantiation: _ZN8VecDequeIhE4swapERS0_ Unexecuted instantiation: _ZN8VecDequeItE4swapERS0_ Unexecuted instantiation: _ZN8VecDequeIjE4swapERS0_ Unexecuted instantiation: _ZN8VecDequeImE4swapERS0_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE4swapERS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE4swapERS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE4swapERS3_ |
168 | | |
169 | | /** Non-member version of swap. */ |
170 | 0 | friend void swap(VecDeque& a, VecDeque& b) noexcept { a.swap(b); } Unexecuted instantiation: _Z4swapR8VecDequeIhES1_ Unexecuted instantiation: _Z4swapR8VecDequeItES1_ Unexecuted instantiation: _Z4swapR8VecDequeIjES1_ Unexecuted instantiation: _Z4swapR8VecDequeImES1_ Unexecuted instantiation: vecdeque.cpp:_Z4swapR8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEES4_ Unexecuted instantiation: vecdeque.cpp:_Z4swapR8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEES4_ Unexecuted instantiation: vecdeque.cpp:_Z4swapR8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEES4_ |
171 | | |
172 | | /** Move-assign a deque. */ |
173 | | VecDeque& operator=(VecDeque&& other) noexcept |
174 | 0 | { |
175 | 0 | swap(other); |
176 | 0 | return *this; |
177 | 0 | } Unexecuted instantiation: _ZN8VecDequeIhEaSEOS0_ Unexecuted instantiation: _ZN8VecDequeItEaSEOS0_ Unexecuted instantiation: _ZN8VecDequeIjEaSEOS0_ Unexecuted instantiation: _ZN8VecDequeImEaSEOS0_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEaSEOS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEaSEOS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEaSEOS3_ |
178 | | |
179 | | /** Copy-construct a deque. */ |
180 | 0 | VecDeque(const VecDeque& other) { *this = other; } Unexecuted instantiation: _ZN8VecDequeIhEC2ERKS0_ Unexecuted instantiation: _ZN8VecDequeItEC2ERKS0_ Unexecuted instantiation: _ZN8VecDequeIjEC2ERKS0_ Unexecuted instantiation: _ZN8VecDequeImEC2ERKS0_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEC2ERKS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEC2ERKS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEC2ERKS3_ |
181 | | /** Move-construct a deque. */ |
182 | 0 | VecDeque(VecDeque&& other) noexcept { swap(other); } Unexecuted instantiation: _ZN8VecDequeIhEC2EOS0_ Unexecuted instantiation: _ZN8VecDequeItEC2EOS0_ Unexecuted instantiation: _ZN8VecDequeIjEC2EOS0_ Unexecuted instantiation: _ZN8VecDequeImEC2EOS0_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEC2EOS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEC2EOS3_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEC2EOS3_ |
183 | | |
184 | | /** Equality comparison between two deques (only compares size+contents, not capacity). */ |
185 | | bool friend operator==(const VecDeque& a, const VecDeque& b) |
186 | 0 | { |
187 | 0 | if (a.m_size != b.m_size) return false; |
188 | 0 | for (size_t i = 0; i < a.m_size; ++i) { |
189 | 0 | if (a[i] != b[i]) return false; |
190 | 0 | } |
191 | 0 | return true; |
192 | 0 | } Unexecuted instantiation: _ZeqRK8VecDequeIhES2_ Unexecuted instantiation: _ZeqRK8VecDequeItES2_ Unexecuted instantiation: _ZeqRK8VecDequeIjES2_ Unexecuted instantiation: _ZeqRK8VecDequeImES2_ Unexecuted instantiation: vecdeque.cpp:_ZeqRK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEES5_ Unexecuted instantiation: vecdeque.cpp:_ZeqRK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEES5_ Unexecuted instantiation: vecdeque.cpp:_ZeqRK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEES5_ |
193 | | |
194 | | /** Comparison between two deques, implementing lexicographic ordering on the contents. */ |
195 | | std::strong_ordering friend operator<=>(const VecDeque& a, const VecDeque& b) |
196 | 0 | { |
197 | 0 | size_t pos_a{0}, pos_b{0}; |
198 | 0 | while (pos_a < a.m_size && pos_b < b.m_size) { |
199 | 0 | auto cmp = a[pos_a++] <=> b[pos_b++]; |
200 | 0 | if (cmp != 0) return cmp; |
201 | 0 | } |
202 | 0 | return a.m_size <=> b.m_size; |
203 | 0 | } Unexecuted instantiation: _ZssRK8VecDequeIhES2_ Unexecuted instantiation: _ZssRK8VecDequeItES2_ Unexecuted instantiation: _ZssRK8VecDequeIjES2_ Unexecuted instantiation: _ZssRK8VecDequeImES2_ Unexecuted instantiation: vecdeque.cpp:_ZssRK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEES5_ Unexecuted instantiation: vecdeque.cpp:_ZssRK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEES5_ Unexecuted instantiation: vecdeque.cpp:_ZssRK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEES5_ |
204 | | |
205 | | /** Increase the capacity to capacity. Capacity will not shrink. */ |
206 | | void reserve(size_t capacity) |
207 | 0 | { |
208 | 0 | if (capacity > m_capacity) Reallocate(capacity); |
209 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE7reserveEm Unexecuted instantiation: _ZN8VecDequeIhE7reserveEm Unexecuted instantiation: _ZN8VecDequeItE7reserveEm Unexecuted instantiation: _ZN8VecDequeIjE7reserveEm Unexecuted instantiation: _ZN8VecDequeImE7reserveEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE7reserveEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE7reserveEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE7reserveEm |
210 | | |
211 | | /** Make the capacity equal to the size. The contents does not change. */ |
212 | | void shrink_to_fit() |
213 | 0 | { |
214 | 0 | if (m_capacity > m_size) Reallocate(m_size); |
215 | 0 | } Unexecuted instantiation: _ZN8VecDequeIhE13shrink_to_fitEv Unexecuted instantiation: _ZN8VecDequeItE13shrink_to_fitEv Unexecuted instantiation: _ZN8VecDequeIjE13shrink_to_fitEv Unexecuted instantiation: _ZN8VecDequeImE13shrink_to_fitEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE13shrink_to_fitEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE13shrink_to_fitEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE13shrink_to_fitEv |
216 | | |
217 | | /** Construct a new element at the end of the deque. */ |
218 | | template<typename... Args> |
219 | | void emplace_back(Args&&... args) |
220 | 0 | { |
221 | 0 | if (m_size == m_capacity) Reallocate((m_size + 1) * 2); |
222 | 0 | std::construct_at(m_buffer + BufferIndex(m_size), std::forward<Args>(args)...); |
223 | 0 | ++m_size; |
224 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE12emplace_backIJS7_S4_7FeeFracEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIhE12emplace_backIJRKhEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIhE12emplace_backIJhEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIhE12emplace_backIJRmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeItE12emplace_backIJRKtEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeItE12emplace_backIJtEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeItE12emplace_backIJRmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIjE12emplace_backIJRKjEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIjE12emplace_backIJjEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIjE12emplace_backIJRmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeImE12emplace_backIJRKmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeImE12emplace_backIJmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeImE12emplace_backIJRmEEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE12emplace_backIJRKS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE12emplace_backIJS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE12emplace_backIJRmEEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE12emplace_backIJRKS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE12emplace_backIJS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE12emplace_backIJRmEEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE12emplace_backIJRKS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE12emplace_backIJS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE12emplace_backIJRmEEEvDpOT_ |
225 | | |
226 | | /** Move-construct a new element at the end of the deque. */ |
227 | 0 | void push_back(T&& elem) { emplace_back(std::move(elem)); } Unexecuted instantiation: _ZN8VecDequeIhE9push_backEOh Unexecuted instantiation: _ZN8VecDequeItE9push_backEOt Unexecuted instantiation: _ZN8VecDequeIjE9push_backEOj Unexecuted instantiation: _ZN8VecDequeImE9push_backEOm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE9push_backEOS2_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE9push_backEOS2_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE9push_backEOS2_ |
228 | | |
229 | | /** Copy-construct a new element at the end of the deque. */ |
230 | 0 | void push_back(const T& elem) { emplace_back(elem); } Unexecuted instantiation: _ZN8VecDequeIhE9push_backERKh Unexecuted instantiation: _ZN8VecDequeItE9push_backERKt Unexecuted instantiation: _ZN8VecDequeIjE9push_backERKj Unexecuted instantiation: _ZN8VecDequeImE9push_backERKm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE9push_backERKS2_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE9push_backERKS2_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE9push_backERKS2_ |
231 | | |
232 | | /** Construct a new element at the beginning of the deque. */ |
233 | | template<typename... Args> |
234 | | void emplace_front(Args&&... args) |
235 | 0 | { |
236 | 0 | if (m_size == m_capacity) Reallocate((m_size + 1) * 2); |
237 | 0 | std::construct_at(m_buffer + BufferIndex(m_capacity - 1), std::forward<Args>(args)...); |
238 | 0 | if (m_offset == 0) m_offset = m_capacity; |
239 | 0 | --m_offset; |
240 | 0 | ++m_size; |
241 | 0 | } Unexecuted instantiation: _ZN8VecDequeIhE13emplace_frontIJRKhEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIhE13emplace_frontIJhEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIhE13emplace_frontIJRmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeItE13emplace_frontIJRKtEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeItE13emplace_frontIJtEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeItE13emplace_frontIJRmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIjE13emplace_frontIJRKjEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIjE13emplace_frontIJjEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeIjE13emplace_frontIJRmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeImE13emplace_frontIJRKmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeImE13emplace_frontIJmEEEvDpOT_ Unexecuted instantiation: _ZN8VecDequeImE13emplace_frontIJRmEEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE13emplace_frontIJRKS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE13emplace_frontIJS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE13emplace_frontIJRmEEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE13emplace_frontIJRKS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE13emplace_frontIJS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE13emplace_frontIJRmEEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE13emplace_frontIJRKS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE13emplace_frontIJS2_EEEvDpOT_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE13emplace_frontIJRmEEEvDpOT_ |
242 | | |
243 | | /** Copy-construct a new element at the beginning of the deque. */ |
244 | 0 | void push_front(const T& elem) { emplace_front(elem); } Unexecuted instantiation: _ZN8VecDequeIhE10push_frontERKh Unexecuted instantiation: _ZN8VecDequeItE10push_frontERKt Unexecuted instantiation: _ZN8VecDequeIjE10push_frontERKj Unexecuted instantiation: _ZN8VecDequeImE10push_frontERKm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE10push_frontERKS2_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE10push_frontERKS2_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE10push_frontERKS2_ |
245 | | |
246 | | /** Move-construct a new element at the beginning of the deque. */ |
247 | 0 | void push_front(T&& elem) { emplace_front(std::move(elem)); } Unexecuted instantiation: _ZN8VecDequeIhE10push_frontEOh Unexecuted instantiation: _ZN8VecDequeItE10push_frontEOt Unexecuted instantiation: _ZN8VecDequeIjE10push_frontEOj Unexecuted instantiation: _ZN8VecDequeImE10push_frontEOm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE10push_frontEOS2_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE10push_frontEOS2_ Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE10push_frontEOS2_ |
248 | | |
249 | | /** Remove the first element of the deque. Requires !empty(). */ |
250 | | void pop_front() |
251 | 0 | { |
252 | 0 | Assume(m_size); |
253 | 0 | std::destroy_at(m_buffer + m_offset); |
254 | 0 | --m_size; |
255 | 0 | ++m_offset; |
256 | 0 | if (m_offset == m_capacity) m_offset = 0; |
257 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE9pop_frontEv Unexecuted instantiation: _ZN8VecDequeIhE9pop_frontEv Unexecuted instantiation: _ZN8VecDequeItE9pop_frontEv Unexecuted instantiation: _ZN8VecDequeIjE9pop_frontEv Unexecuted instantiation: _ZN8VecDequeImE9pop_frontEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE9pop_frontEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE9pop_frontEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE9pop_frontEv |
258 | | |
259 | | /** Remove the last element of the deque. Requires !empty(). */ |
260 | | void pop_back() |
261 | 0 | { |
262 | 0 | Assume(m_size); |
263 | 0 | std::destroy_at(m_buffer + BufferIndex(m_size - 1)); |
264 | 0 | --m_size; |
265 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE8pop_backEv Unexecuted instantiation: _ZN8VecDequeIhE8pop_backEv Unexecuted instantiation: _ZN8VecDequeItE8pop_backEv Unexecuted instantiation: _ZN8VecDequeIjE8pop_backEv Unexecuted instantiation: _ZN8VecDequeImE8pop_backEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE8pop_backEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE8pop_backEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE8pop_backEv |
266 | | |
267 | | /** Get a mutable reference to the first element of the deque. Requires !empty(). */ |
268 | | T& front() noexcept |
269 | 0 | { |
270 | 0 | Assume(m_size); |
271 | 0 | return m_buffer[m_offset]; |
272 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5frontEv Unexecuted instantiation: _ZN8VecDequeIhE5frontEv Unexecuted instantiation: _ZN8VecDequeItE5frontEv Unexecuted instantiation: _ZN8VecDequeIjE5frontEv Unexecuted instantiation: _ZN8VecDequeImE5frontEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE5frontEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE5frontEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE5frontEv |
273 | | |
274 | | /** Get a const reference to the first element of the deque. Requires !empty(). */ |
275 | | const T& front() const noexcept |
276 | 0 | { |
277 | 0 | Assume(m_size); |
278 | 0 | return m_buffer[m_offset]; |
279 | 0 | } Unexecuted instantiation: _ZNK8VecDequeIhE5frontEv Unexecuted instantiation: _ZNK8VecDequeItE5frontEv Unexecuted instantiation: _ZNK8VecDequeIjE5frontEv Unexecuted instantiation: _ZNK8VecDequeImE5frontEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE5frontEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE5frontEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE5frontEv |
280 | | |
281 | | /** Get a mutable reference to the last element of the deque. Requires !empty(). */ |
282 | | T& back() noexcept |
283 | 0 | { |
284 | 0 | Assume(m_size); |
285 | 0 | return m_buffer[BufferIndex(m_size - 1)]; |
286 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE4backEv Unexecuted instantiation: _ZN8VecDequeIhE4backEv Unexecuted instantiation: _ZN8VecDequeItE4backEv Unexecuted instantiation: _ZN8VecDequeIjE4backEv Unexecuted instantiation: _ZN8VecDequeImE4backEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE4backEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE4backEv Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE4backEv |
287 | | |
288 | | /** Get a const reference to the last element of the deque. Requires !empty(). */ |
289 | | const T& back() const noexcept |
290 | 0 | { |
291 | 0 | Assume(m_size); |
292 | 0 | return m_buffer[BufferIndex(m_size - 1)]; |
293 | 0 | } Unexecuted instantiation: _ZNK8VecDequeIhE4backEv Unexecuted instantiation: _ZNK8VecDequeItE4backEv Unexecuted instantiation: _ZNK8VecDequeIjE4backEv Unexecuted instantiation: _ZNK8VecDequeImE4backEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE4backEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE4backEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE4backEv |
294 | | |
295 | | /** Get a mutable reference to the element in the deque at the given index. Requires idx < size(). */ |
296 | | T& operator[](size_t idx) noexcept |
297 | 0 | { |
298 | 0 | Assume(idx < m_size); |
299 | 0 | return m_buffer[BufferIndex(idx)]; |
300 | 0 | } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemEixEm Unexecuted instantiation: _ZN8VecDequeIhEixEm Unexecuted instantiation: _ZN8VecDequeItEixEm Unexecuted instantiation: _ZN8VecDequeIjEixEm Unexecuted instantiation: _ZN8VecDequeImEixEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEixEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEixEm Unexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEixEm |
301 | | |
302 | | /** Get a const reference to the element in the deque at the given index. Requires idx < size(). */ |
303 | | const T& operator[](size_t idx) const noexcept |
304 | 0 | { |
305 | 0 | Assume(idx < m_size); |
306 | 0 | return m_buffer[BufferIndex(idx)]; |
307 | 0 | } Unexecuted instantiation: _ZNK8VecDequeIhEixEm Unexecuted instantiation: _ZNK8VecDequeItEixEm Unexecuted instantiation: _ZNK8VecDequeIjEixEm Unexecuted instantiation: _ZNK8VecDequeImEixEm Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEixEm Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEixEm Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEixEm |
308 | | |
309 | | /** Test whether the contents of this deque is empty. */ |
310 | 0 | bool empty() const noexcept { return m_size == 0; } Unexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5emptyEv Unexecuted instantiation: _ZNK8VecDequeIhE5emptyEv Unexecuted instantiation: _ZNK8VecDequeItE5emptyEv Unexecuted instantiation: _ZNK8VecDequeIjE5emptyEv Unexecuted instantiation: _ZNK8VecDequeImE5emptyEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE5emptyEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE5emptyEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE5emptyEv |
311 | | /** Get the number of elements in this deque. */ |
312 | 0 | size_t size() const noexcept { return m_size; } Unexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE4sizeEv Unexecuted instantiation: _ZNK8VecDequeIhE4sizeEv Unexecuted instantiation: _ZNK8VecDequeItE4sizeEv Unexecuted instantiation: _ZNK8VecDequeIjE4sizeEv Unexecuted instantiation: _ZNK8VecDequeImE4sizeEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE4sizeEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE4sizeEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE4sizeEv |
313 | | /** Get the capacity of this deque (maximum size it can have without reallocating). */ |
314 | 0 | size_t capacity() const noexcept { return m_capacity; } Unexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE8capacityEv Unexecuted instantiation: _ZNK8VecDequeIhE8capacityEv Unexecuted instantiation: _ZNK8VecDequeItE8capacityEv Unexecuted instantiation: _ZNK8VecDequeIjE8capacityEv Unexecuted instantiation: _ZNK8VecDequeImE8capacityEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE8capacityEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE8capacityEv Unexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE8capacityEv |
315 | | }; |
316 | | |
317 | | #endif // BITCOIN_UTIL_VECDEQUE_H |