diff options
author | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-08-14 22:50:43 +0800 |
commit | 15740faf9fe9fe4be08965098bbf2947e096aeeb (patch) | |
tree | a730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Utilities/UniqueIDGenerator.cpp |
Diffstat (limited to 'Runtime/Utilities/UniqueIDGenerator.cpp')
-rw-r--r-- | Runtime/Utilities/UniqueIDGenerator.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Runtime/Utilities/UniqueIDGenerator.cpp b/Runtime/Utilities/UniqueIDGenerator.cpp new file mode 100644 index 0000000..5649997 --- /dev/null +++ b/Runtime/Utilities/UniqueIDGenerator.cpp @@ -0,0 +1,34 @@ +#include "UnityPrefix.h" +#include "UniqueIDGenerator.h" + +UniqueIDGenerator::UniqueIDGenerator() +{ + m_IDs.clear(); + m_IDs.push_back(2); // Generated ID sequence should not contain 0 + m_free = 1; +} + +unsigned int UniqueIDGenerator::AllocateID () +{ + DebugAssert( m_free <= m_IDs.size() ); + + if (m_free == m_IDs.size()) + { + m_IDs.push_back(m_free+1); + } + + unsigned int result = m_free; + m_free = m_IDs[m_free]; + + DebugAssert(result != 0); + + return result; +} + +void UniqueIDGenerator::RemoveID (unsigned int _ID) +{ + DebugAssert( (_ID > 0) && (_ID < m_IDs.size()) ); + + m_IDs[_ID] = m_free; + m_free = _ID; +} |