From 0a59f0a907aa0cf036ffe386a5f2074552a7776d Mon Sep 17 00:00:00 2001 From: krzys-h Date: Mon, 7 Sep 2015 20:38:25 +0200 Subject: [PATCH] Fixed a possible bug in CObjectManager::GetObjectByRank (might fix #611) --- src/object/object_manager.cpp | 9 +++++---- src/object/object_manager.h | 5 +++++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/object/object_manager.cpp b/src/object/object_manager.cpp index a1addd2d..3c43c757 100644 --- a/src/object/object_manager.cpp +++ b/src/object/object_manager.cpp @@ -124,10 +124,11 @@ CObject* CObjectManager::GetObjectById(unsigned int id) CObject* CObjectManager::GetObjectByRank(unsigned int id) { - if (id >= m_objects.size()) return nullptr; - auto it = m_objects.begin(); - for (unsigned int i = 0; i < id; i++, ++it); - return it->second.get(); + auto objects = GetAllObjects(); + auto it = objects.begin(); + for (unsigned int i = 0; i < id && it != objects.end(); i++, ++it); + if (it == objects.end()) return nullptr; + return *it; } CObject* CObjectManager::CreateObject(ObjectCreateParams params) diff --git a/src/object/object_manager.h b/src/object/object_manager.h index c92715a9..080a25bc 100644 --- a/src/object/object_manager.h +++ b/src/object/object_manager.h @@ -94,6 +94,11 @@ public: while (m_currentIt != m_endIt && m_currentIt->second == nullptr); } + bool operator==(const CObjectIteratorProxy& other) + { + return m_currentIt == other.m_currentIt; + } + bool operator!=(const CObjectIteratorProxy& other) { return m_currentIt != other.m_currentIt;