pool: ensure indices are pushed low to high
This commit is contained in:
parent
25a74badd6
commit
ad9d5d991c
19
pool.hpp
19
pool.hpp
@ -74,9 +74,7 @@ namespace cruft {
|
|||||||
if (!m_store)
|
if (!m_store)
|
||||||
throw std::bad_alloc ();
|
throw std::bad_alloc ();
|
||||||
|
|
||||||
T* elements = reinterpret_cast<T*> (m_store);
|
reindex ();
|
||||||
for (size_t i = 0; i < m_capacity; ++i)
|
|
||||||
m_available.push (elements + i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -190,10 +188,7 @@ namespace cruft {
|
|||||||
++data_cursor;
|
++data_cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_available.clear ();
|
reindex ();
|
||||||
T* elements = reinterpret_cast<T*> (m_store);
|
|
||||||
for (size_t i = 0; i < m_capacity; ++i)
|
|
||||||
m_available.push (elements + i);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -231,5 +226,15 @@ namespace cruft {
|
|||||||
{
|
{
|
||||||
return reinterpret_cast<T*> (m_store) [idx];
|
return reinterpret_cast<T*> (m_store) [idx];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
void reindex (void)
|
||||||
|
{
|
||||||
|
m_available.clear ();
|
||||||
|
|
||||||
|
T* elements = reinterpret_cast<T*> (m_store);
|
||||||
|
for (size_t i = m_capacity; i--; )
|
||||||
|
m_available.push (elements + i);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user