From ad10b8b762d8097092f307867a36e55049d69546 Mon Sep 17 00:00:00 2001 From: Rogier-5 Date: Tue, 3 Jan 2017 21:23:22 -0800 Subject: [PATCH] Use std::vector instead of std::map in class ABMHandler --- src/environment.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/src/environment.cpp b/src/environment.cpp index 8c0daf87b..5eb9d9770 100644 --- a/src/environment.cpp +++ b/src/environment.cpp @@ -767,7 +767,7 @@ class ABMHandler { private: ServerEnvironment *m_env; - std::map > m_aabms; + std::vector *> m_aabms; public: ABMHandler(std::vector &abms, float dtime_s, ServerEnvironment *env, @@ -826,18 +826,22 @@ public: k != ids.end(); ++k) { content_t c = *k; - std::map >::iterator j; - j = m_aabms.find(c); - if(j == m_aabms.end()){ - std::vector aabmlist; - m_aabms[c] = aabmlist; - j = m_aabms.find(c); - } - j->second.push_back(aabm); + if (c >= m_aabms.size()) + m_aabms.resize(c + 256, (std::vector *) NULL); + if (!m_aabms[c]) + m_aabms[c] = new std::vector; + m_aabms[c]->push_back(aabm); } } } } + + ~ABMHandler() + { + for (size_t i = 0; i < m_aabms.size(); i++) + delete m_aabms[i]; + } + // Find out how many objects the given block and its neighbours contain. // Returns the number of objects in the block, and also in 'wider' the // number of objects in the block and all its neighbours. The latter @@ -886,13 +890,11 @@ public: content_t c = n.getContent(); v3s16 p = p0 + block->getPosRelative(); - std::map >::iterator j; - j = m_aabms.find(c); - if(j == m_aabms.end()) + if (!m_aabms[c]) continue; for(std::vector::iterator - i = j->second.begin(); i != j->second.end(); ++i) { + i = m_aabms[c]->begin(); i != m_aabms[c]->end(); ++i) { if(myrand() % i->chance != 0) continue;