|
|
@@ -481,9 +481,7 @@ namespace bx
|
|
|
uint32_t idx = findIndex(_key);
|
|
|
if (UINT32_MAX != idx)
|
|
|
{
|
|
|
- m_handle[idx] = invalid;
|
|
|
- --m_numElements;
|
|
|
- update();
|
|
|
+ removeIndex(idx);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -494,21 +492,13 @@ namespace bx
|
|
|
{
|
|
|
if (invalid != _handle)
|
|
|
{
|
|
|
- const uint32_t numElements = m_numElements;
|
|
|
for (uint32_t idx = 0; idx < MaxCapacityT; ++idx)
|
|
|
{
|
|
|
if (m_handle[idx] == _handle)
|
|
|
{
|
|
|
- m_handle[idx] = invalid;
|
|
|
- --m_numElements;
|
|
|
+ removeIndex(idx);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- if (numElements != m_numElements)
|
|
|
- {
|
|
|
- update();
|
|
|
- return true;
|
|
|
- }
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
@@ -611,6 +601,29 @@ namespace bx
|
|
|
return UINT32_MAX;
|
|
|
}
|
|
|
|
|
|
+ void removeIndex(uint32_t _idx)
|
|
|
+ {
|
|
|
+ m_handle[_idx] = invalid;
|
|
|
+ --m_numElements;
|
|
|
+
|
|
|
+ for (uint32_t idx = (_idx + 1) % MaxCapacityT
|
|
|
+ ; m_handle[idx] != invalid
|
|
|
+ ; idx = (idx + 1) % MaxCapacityT)
|
|
|
+ {
|
|
|
+ if (m_handle[idx] != invalid)
|
|
|
+ {
|
|
|
+ const KeyT key = m_key[idx];
|
|
|
+ if (idx != findIndex(key) )
|
|
|
+ {
|
|
|
+ const uint16_t handle = m_handle[idx];
|
|
|
+ m_handle[idx] = invalid;
|
|
|
+ --m_numElements;
|
|
|
+ insert(key, handle);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
uint32_t mix(uint32_t _x) const
|
|
|
{
|
|
|
const uint32_t tmp0 = uint32_mul(_x, UINT32_C(2246822519) );
|
|
|
@@ -627,21 +640,6 @@ namespace bx
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
- void update()
|
|
|
- {
|
|
|
- for (uint32_t idx = 0; idx < MaxCapacityT; ++idx)
|
|
|
- {
|
|
|
- if (m_handle[idx] != invalid)
|
|
|
- {
|
|
|
- const KeyT key = m_key[idx];
|
|
|
- const uint16_t handle = m_handle[idx];
|
|
|
- m_handle[idx] = invalid;
|
|
|
- --m_numElements;
|
|
|
- insert(key, handle);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
uint32_t m_maxCapacity;
|
|
|
uint32_t m_numElements;
|
|
|
|