26 while (m_it != m_end && !*m_it) {
38 }
while (m_it != m_end && !*m_it);
49 return m_it == oth.m_it;
53 return m_it != oth.m_it;
71template <typename T, typename std::vector<T>::size_type reuse_threshold>
79 using size_type =
typename std::vector<T>::size_type;
85 bool empty() const noexcept {
return m_active_count == 0; }
93 template <
class... Args>
96 if (m_free.size() < reuse_threshold) {
97 uid = m_vector.size();
98 m_vector.emplace_back(std::forward<Args>(args)...);
100 uid = m_free.front();
101 m_free.erase(m_free.begin());
102 m_vector[uid] = T(std::forward<Args>(args)...);
113 if (uid >= m_vector.size() || !m_vector[uid]) {
116 m_free.push_back(uid);
117 auto rv = std::move(m_vector[uid]);
134 return iterator(m_vector.begin(), m_vector.end());
151 std::vector<T> m_vector;
152 std::vector<size_type> m_free;
Vector which provides an integrated freelist for removal and reuse of individual elements.
Definition UidVector.hpp:72
const_iterator end() const noexcept
Definition UidVector.hpp:143
T value_type
Definition UidVector.hpp:74
const_iterator cbegin() const noexcept
Definition UidVector.hpp:139
typename std::vector< T >::size_type size_type
Definition UidVector.hpp:79
void clear() noexcept
Removes all elements.
Definition UidVector.hpp:126
T erase(size_type uid)
Removes the identified element by replacing it with a default-constructed one.
Definition UidVector.hpp:112
size_type size() const noexcept
Definition UidVector.hpp:86
impl::UidVectorIterator< typename std::vector< T >::iterator > iterator
Definition UidVector.hpp:81
T & operator[](size_type i)
Definition UidVector.hpp:87
size_type emplace_back(Args &&... args)
Definition UidVector.hpp:94
const T & operator[](size_type i) const
Definition UidVector.hpp:88
bool empty() const noexcept
Definition UidVector.hpp:85
const T * const_pointer
Definition UidVector.hpp:76
iterator begin() noexcept
Definition UidVector.hpp:133
typename std::vector< T >::difference_type difference_type
Definition UidVector.hpp:80
const T & const_reference
Definition UidVector.hpp:78
const_iterator begin() const noexcept
Definition UidVector.hpp:136
T & reference
Definition UidVector.hpp:77
iterator end() noexcept
Definition UidVector.hpp:142
impl::UidVectorIterator< typename std::vector< T >::const_iterator > const_iterator
Definition UidVector.hpp:82
const_iterator cend() const noexcept
Definition UidVector.hpp:146
T * pointer
Definition UidVector.hpp:75
Definition UidVector.hpp:15
UidVectorIterator(It it, It end)
Definition UidVector.hpp:24
UidVectorIterator()=default
UidVectorIterator & operator++() noexcept
Definition UidVector.hpp:34
UidVectorIterator operator++(int) noexcept
Definition UidVector.hpp:42
pointer operator->() const noexcept
Definition UidVector.hpp:32
reference operator*() const noexcept
Definition UidVector.hpp:31
bool operator==(const UidVectorIterator &oth) const noexcept
Definition UidVector.hpp:48
typename It::difference_type difference_type
Definition UidVector.hpp:19
typename It::pointer pointer
Definition UidVector.hpp:21
typename It::reference reference
Definition UidVector.hpp:20
typename It::value_type value_type
Definition UidVector.hpp:18
std::forward_iterator_tag iterator_type
Definition UidVector.hpp:17
bool operator!=(const UidVectorIterator &oth) const noexcept
Definition UidVector.hpp:52
Definition UidVector.hpp:13
Definition raw_os_ostream.hpp:19