summaryrefslogtreecommitdiff
path: root/Runtime/Utilities/UniqueIDGenerator.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-08-14 22:50:43 +0800
committerchai <chaifix@163.com>2019-08-14 22:50:43 +0800
commit15740faf9fe9fe4be08965098bbf2947e096aeeb (patch)
treea730ec236656cc8cab5b13f088adfaed6bb218fb /Runtime/Utilities/UniqueIDGenerator.cpp
+Unity Runtime codeHEADmaster
Diffstat (limited to 'Runtime/Utilities/UniqueIDGenerator.cpp')
-rw-r--r--Runtime/Utilities/UniqueIDGenerator.cpp34
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;
+}