Fixed hash map.

This commit is contained in:
Branimir Karadžić
2016-10-26 16:23:09 -07:00
parent fed91842fe
commit ca361f10ad

View File

@@ -476,20 +476,25 @@ namespace bx
return false;
}
void removeByKey(KeyT _key)
bool removeByKey(KeyT _key)
{
uint32_t idx = findIndex(_key);
if (UINT32_MAX != idx)
{
m_handle[idx] = invalid;
--m_numElements;
update();
return true;
}
return false;
}
void removeByHandle(uint16_t _handle)
bool removeByHandle(uint16_t _handle)
{
if (invalid != _handle)
{
const uint32_t numElements = m_numElements;
for (uint32_t idx = 0; idx < MaxCapacityT; ++idx)
{
if (m_handle[idx] == _handle)
@@ -498,7 +503,15 @@ namespace bx
--m_numElements;
}
}
if (numElements != m_numElements)
{
update();
return true;
}
}
return false;
}
uint16_t find(KeyT _key) const
@@ -614,6 +627,21 @@ 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;