/root/bitcoin/src/util/vecdeque.h
| Line | Count | Source | 
| 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_EEE8WorkItemE9FirstPartEvUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE9FirstPartEvUnexecuted instantiation: _ZNK8VecDequeIhE9FirstPartEvUnexecuted instantiation: _ZNK8VecDequeItE9FirstPartEvUnexecuted instantiation: _ZNK8VecDequeIjE9FirstPartEvUnexecuted instantiation: _ZNK8VecDequeImE9FirstPartEvUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE9FirstPartEv | 
| 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_EEE8WorkItemE10ReallocateEmUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE10ReallocateEmUnexecuted instantiation: _ZN8VecDequeIhE10ReallocateEmUnexecuted instantiation: _ZN8VecDequeItE10ReallocateEmUnexecuted instantiation: _ZN8VecDequeIjE10ReallocateEmUnexecuted instantiation: _ZN8VecDequeImE10ReallocateEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE10ReallocateEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE10ReallocateEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE10ReallocateEmUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE10ReallocateEm | 
| 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_EEE8WorkItemE11BufferIndexEmUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE11BufferIndexEmUnexecuted instantiation: _ZNK8VecDequeIhE11BufferIndexEmUnexecuted instantiation: _ZNK8VecDequeItE11BufferIndexEmUnexecuted instantiation: _ZNK8VecDequeIjE11BufferIndexEmUnexecuted instantiation: _ZNK8VecDequeImE11BufferIndexEmUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE11BufferIndexEmUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE11BufferIndexEmUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE11BufferIndexEmUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE11BufferIndexEm | 
| 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_EEE8WorkItemE10ResizeDownEmUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE10ResizeDownEmUnexecuted instantiation: _ZN8VecDequeIhE10ResizeDownEmUnexecuted instantiation: _ZN8VecDequeItE10ResizeDownEmUnexecuted instantiation: _ZN8VecDequeIjE10ResizeDownEmUnexecuted instantiation: _ZN8VecDequeImE10ResizeDownEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE10ResizeDownEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE10ResizeDownEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE10ResizeDownEmUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE10ResizeDownEm | 
| 105 |  |  | 
| 106 |  | public: | 
| 107 | 0 |     VecDeque() noexcept = default; Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemEC2EvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemEC2EvUnexecuted instantiation: _ZN8VecDequeIhEC2EvUnexecuted instantiation: _ZN8VecDequeItEC2EvUnexecuted instantiation: _ZN8VecDequeIjEC2EvUnexecuted instantiation: _ZN8VecDequeImEC2EvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEC2EvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEC2EvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEC2EvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemEC2Ev | 
| 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: _ZN8VecDequeIhE6resizeEmUnexecuted instantiation: _ZN8VecDequeItE6resizeEmUnexecuted instantiation: _ZN8VecDequeIjE6resizeEmUnexecuted instantiation: _ZN8VecDequeImE6resizeEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE6resizeEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE6resizeEmUnexecuted 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_EEE8WorkItemE5clearEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5clearEvUnexecuted instantiation: _ZN8VecDequeIhE5clearEvUnexecuted instantiation: _ZN8VecDequeItE5clearEvUnexecuted instantiation: _ZN8VecDequeIjE5clearEvUnexecuted instantiation: _ZN8VecDequeImE5clearEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE5clearEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE5clearEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE5clearEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5clearEv | 
| 127 |  |  | 
| 128 |  |     /** Destroy a deque. */ | 
| 129 |  |     ~VecDeque() | 
| 130 | 0 |     { | 
| 131 | 0 |         clear(); | 
| 132 | 0 |         Reallocate(0); | 
| 133 | 0 |     } Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetIjEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemED2EvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemED2EvUnexecuted instantiation: _ZN8VecDequeIhED2EvUnexecuted instantiation: _ZN8VecDequeItED2EvUnexecuted instantiation: _ZN8VecDequeIjED2EvUnexecuted instantiation: _ZN8VecDequeImED2EvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEED2EvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEED2EvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEED2EvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemED2Ev | 
| 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_EEE8WorkItemE7reserveEmUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE7reserveEmUnexecuted instantiation: _ZN8VecDequeIhE7reserveEmUnexecuted instantiation: _ZN8VecDequeItE7reserveEmUnexecuted instantiation: _ZN8VecDequeIjE7reserveEmUnexecuted instantiation: _ZN8VecDequeImE7reserveEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE7reserveEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE7reserveEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE7reserveEmUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE7reserveEm | 
| 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_fitEvUnexecuted instantiation: _ZN8VecDequeItE13shrink_to_fitEvUnexecuted instantiation: _ZN8VecDequeIjE13shrink_to_fitEvUnexecuted instantiation: _ZN8VecDequeImE13shrink_to_fitEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE13shrink_to_fitEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE13shrink_to_fitEvUnexecuted 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: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_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_Unexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE12emplace_backIJS7_S4_7FeeFracEEEvDpOT_ | 
| 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_backEOhUnexecuted instantiation: _ZN8VecDequeItE9push_backEOtUnexecuted instantiation: _ZN8VecDequeIjE9push_backEOjUnexecuted instantiation: _ZN8VecDequeImE9push_backEOmUnexecuted 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_backERKhUnexecuted instantiation: _ZN8VecDequeItE9push_backERKtUnexecuted instantiation: _ZN8VecDequeIjE9push_backERKjUnexecuted instantiation: _ZN8VecDequeImE9push_backERKmUnexecuted 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_frontERKhUnexecuted instantiation: _ZN8VecDequeItE10push_frontERKtUnexecuted instantiation: _ZN8VecDequeIjE10push_frontERKjUnexecuted instantiation: _ZN8VecDequeImE10push_frontERKmUnexecuted 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_frontEOhUnexecuted instantiation: _ZN8VecDequeItE10push_frontEOtUnexecuted instantiation: _ZN8VecDequeIjE10push_frontEOjUnexecuted instantiation: _ZN8VecDequeImE10push_frontEOmUnexecuted 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_frontEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE9pop_frontEvUnexecuted instantiation: _ZN8VecDequeIhE9pop_frontEvUnexecuted instantiation: _ZN8VecDequeItE9pop_frontEvUnexecuted instantiation: _ZN8VecDequeIjE9pop_frontEvUnexecuted instantiation: _ZN8VecDequeImE9pop_frontEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE9pop_frontEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE9pop_frontEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE9pop_frontEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE9pop_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_backEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE8pop_backEvUnexecuted instantiation: _ZN8VecDequeIhE8pop_backEvUnexecuted instantiation: _ZN8VecDequeItE8pop_backEvUnexecuted instantiation: _ZN8VecDequeIjE8pop_backEvUnexecuted instantiation: _ZN8VecDequeImE8pop_backEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE8pop_backEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE8pop_backEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE8pop_backEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE8pop_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_EEE8WorkItemE5frontEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5frontEvUnexecuted instantiation: _ZN8VecDequeIhE5frontEvUnexecuted instantiation: _ZN8VecDequeItE5frontEvUnexecuted instantiation: _ZN8VecDequeIjE5frontEvUnexecuted instantiation: _ZN8VecDequeImE5frontEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE5frontEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE5frontEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE5frontEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5frontEv | 
| 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: _ZNK8VecDequeIhE5frontEvUnexecuted instantiation: _ZNK8VecDequeItE5frontEvUnexecuted instantiation: _ZNK8VecDequeIjE5frontEvUnexecuted instantiation: _ZNK8VecDequeImE5frontEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE5frontEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE5frontEvUnexecuted 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_EEE8WorkItemE4backEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE4backEvUnexecuted instantiation: _ZN8VecDequeIhE4backEvUnexecuted instantiation: _ZN8VecDequeItE4backEvUnexecuted instantiation: _ZN8VecDequeIjE4backEvUnexecuted instantiation: _ZN8VecDequeImE4backEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE4backEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE4backEvUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE4backEvUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE4backEv | 
| 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: _ZNK8VecDequeIhE4backEvUnexecuted instantiation: _ZNK8VecDequeItE4backEvUnexecuted instantiation: _ZNK8VecDequeIjE4backEvUnexecuted instantiation: _ZNK8VecDequeImE4backEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE4backEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE4backEvUnexecuted 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_EEE8WorkItemEixEmUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemEixEmUnexecuted instantiation: _ZN8VecDequeIhEixEmUnexecuted instantiation: _ZN8VecDequeItEixEmUnexecuted instantiation: _ZN8VecDequeIjEixEmUnexecuted instantiation: _ZN8VecDequeImEixEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEixEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEixEmUnexecuted instantiation: vecdeque.cpp:_ZN8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEEixEmUnexecuted instantiation: _ZN8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemEixEm | 
| 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: _ZNK8VecDequeIhEixEmUnexecuted instantiation: _ZNK8VecDequeItEixEmUnexecuted instantiation: _ZNK8VecDequeIjEixEmUnexecuted instantiation: _ZNK8VecDequeImEixEmUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEEixEmUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEEixEmUnexecuted 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_EEE8WorkItemE5emptyEvUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5emptyEvUnexecuted instantiation: _ZNK8VecDequeIhE5emptyEvUnexecuted instantiation: _ZNK8VecDequeItE5emptyEvUnexecuted instantiation: _ZNK8VecDequeIjE5emptyEvUnexecuted instantiation: _ZNK8VecDequeImE5emptyEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE5emptyEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE5emptyEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE5emptyEvUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE5emptyEv | 
| 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_EEE8WorkItemE4sizeEvUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE4sizeEvUnexecuted instantiation: _ZNK8VecDequeIhE4sizeEvUnexecuted instantiation: _ZNK8VecDequeItE4sizeEvUnexecuted instantiation: _ZNK8VecDequeIjE4sizeEvUnexecuted instantiation: _ZNK8VecDequeImE4sizeEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE4sizeEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE4sizeEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE4sizeEvUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE4sizeEv | 
| 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_EEE8WorkItemE8capacityEvUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail14MultiIntBitSetImLj2EEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE8capacityEvUnexecuted instantiation: _ZNK8VecDequeIhE8capacityEvUnexecuted instantiation: _ZNK8VecDequeItE8capacityEvUnexecuted instantiation: _ZNK8VecDequeIjE8capacityEvUnexecuted instantiation: _ZNK8VecDequeImE8capacityEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm1EEEE8capacityEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm3EEEE8capacityEvUnexecuted instantiation: vecdeque.cpp:_ZNK8VecDequeIN12_GLOBAL__N_110TrackedObjILm17EEEE8capacityEvUnexecuted instantiation: _ZNK8VecDequeIZN17cluster_linearize21SearchCandidateFinderIN13bitset_detail9IntBitSetImEEE16FindCandidateSetEmNS0_7SetInfoIS4_EEE8WorkItemE8capacityEv | 
| 315 |  | }; | 
| 316 |  |  | 
| 317 |  | #endif // BITCOIN_UTIL_VECDEQUE_H |