8 #ifndef WPIUTIL_WPI_UIDVECTOR_H_
9 #define WPIUTIL_WPI_UIDVECTOR_H_
22 template <typename T, typename std::vector<T>::size_type reuse_threshold>
25 typedef typename std::vector<T>::size_type size_type;
27 bool empty()
const {
return m_active_count == 0; }
28 size_type size()
const {
return m_vector.size(); }
29 T& operator[](size_type i) {
return m_vector[i]; }
30 const T& operator[](size_type i)
const {
return m_vector[i]; }
35 template <
class... Args>
36 size_type emplace_back(Args&&... args) {
38 if (m_free.size() < reuse_threshold) {
39 uid = m_vector.size();
40 m_vector.emplace_back(std::forward<Args>(args)...);
43 m_free.erase(m_free.begin());
44 m_vector[uid] = T(std::forward<Args>(args)...);
52 void erase(size_type uid) {
53 if (uid >= m_vector.size() || !m_vector[uid])
return;
54 m_free.push_back(uid);
60 std::vector<T> m_vector;
61 std::vector<size_type> m_free;
62 size_type m_active_count{0};
67 #endif // WPIUTIL_WPI_UIDVECTOR_H_
WPILib C++ utilities (wpiutil) namespace.
Definition: SmallString.h:21
Definition: UidVector.h:23