8 #ifndef WPIUTIL_SUPPORT_UIDVECTOR_H_ 9 #define WPIUTIL_SUPPORT_UIDVECTOR_H_ 21 template <typename T, typename std::vector<T>::size_type reuse_threshold>
24 typedef typename std::vector<T>::size_type size_type;
26 bool empty()
const {
return m_active_count == 0; }
27 size_type size()
const {
return m_vector.size(); }
28 T& operator[](size_type i) {
return m_vector[i]; }
29 const T& operator[](size_type i)
const {
return m_vector[i]; }
34 template <
class... Args>
35 size_type emplace_back(Args&&... args) {
37 if (m_free.size() < reuse_threshold) {
38 uid = m_vector.size();
39 m_vector.emplace_back(std::forward<Args>(args)...);
42 m_free.erase(m_free.begin());
43 m_vector[uid] = T(std::forward<Args>(args)...);
51 void erase(size_type uid) {
52 if (uid >= m_vector.size() || !m_vector[uid])
return;
53 m_free.push_back(uid);
59 std::vector<T> m_vector;
60 std::vector<size_type> m_free;
61 size_type m_active_count{0};
66 #endif // WPIUTIL_SUPPORT_UIDVECTOR_H_ Definition: SocketError.cpp:18
Definition: UidVector.h:22