From 14d382f185ada74f3b60b3d323b0eb1f98ea9181 Mon Sep 17 00:00:00 2001 From: Shauren Date: Sun, 25 Oct 2015 13:35:45 +0100 Subject: Core/Conditions: Optimizations part 3 changed ConditionStore to a simple array (cherry picked from commit db0c48c17fdf61b8816cc229dcfec907354326cd) --- src/server/game/Conditions/ConditionMgr.cpp | 33 ++++++++++++----------------- src/server/game/Conditions/ConditionMgr.h | 5 ++--- 2 files changed, 16 insertions(+), 22 deletions(-) (limited to 'src') diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index a6af028098b..3675d43a3b4 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -802,15 +802,11 @@ bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourc { if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX) { - ConditionEntriesByTypeMap::const_iterator itr = ConditionStore.find(sourceType); - if (itr != ConditionStore.end()) + ConditionsByEntryMap::const_iterator i = ConditionStore[sourceType].find(entry); + if (i != ConditionStore[sourceType].end()) { - ConditionsByEntryMap::const_iterator i = itr->second.find(entry); - if (i != itr->second.end()) - { - TC_LOG_DEBUG("condition", "GetConditionsForNotGroupedEntry: found conditions for type %u and entry %u", uint32(sourceType), entry); - return IsObjectMeetToConditions(sourceInfo, i->second); - } + TC_LOG_DEBUG("condition", "GetConditionsForNotGroupedEntry: found conditions for type %u and entry %u", uint32(sourceType), entry); + return IsObjectMeetToConditions(sourceInfo, i->second); } } @@ -826,12 +822,9 @@ bool ConditionMgr::IsObjectMeetingNotGroupedConditions(ConditionSourceType sourc bool ConditionMgr::HasConditionsForNotGroupedEntry(ConditionSourceType sourceType, uint32 entry) const { if (sourceType > CONDITION_SOURCE_TYPE_NONE && sourceType < CONDITION_SOURCE_TYPE_MAX) - { - ConditionEntriesByTypeMap::const_iterator itr = ConditionStore.find(sourceType); - if (itr != ConditionStore.end()) - if (itr->second.find(entry) != itr->second.end()) - return true; - } + if (ConditionStore[sourceType].find(entry) != ConditionStore[sourceType].end()) + return true; + return false; } @@ -2122,12 +2115,14 @@ void ConditionMgr::Clean() ConditionReferenceStore.clear(); - for (ConditionEntriesByTypeMap::iterator itr = ConditionStore.begin(); itr != ConditionStore.end(); ++itr) - for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) - for (ConditionContainer::const_iterator i = it->second.begin(); i != it->second.end(); ++i) - delete *i; + for (uint32 i = 0; i < CONDITION_SOURCE_TYPE_MAX; ++i) + { + for (ConditionsByEntryMap::iterator it = ConditionStore[i].begin(); it != ConditionStore[i].end(); ++it) + for (ConditionContainer::const_iterator itr = it->second.begin(); itr != it->second.end(); ++itr) + delete *itr; - ConditionStore.clear(); + ConditionStore[i].clear(); + } for (ConditionEntriesByCreatureIdMap::iterator itr = VehicleSpellConditionStore.begin(); itr != VehicleSpellConditionStore.end(); ++itr) for (ConditionsByEntryMap::iterator it = itr->second.begin(); it != itr->second.end(); ++it) diff --git a/src/server/game/Conditions/ConditionMgr.h b/src/server/game/Conditions/ConditionMgr.h index 0f60f2e3c48..81fe379f0db 100644 --- a/src/server/game/Conditions/ConditionMgr.h +++ b/src/server/game/Conditions/ConditionMgr.h @@ -216,10 +216,9 @@ struct Condition typedef std::vector ConditionContainer; typedef std::unordered_map ConditionsByEntryMap; -typedef std::unordered_map ConditionEntriesByTypeMap; +typedef std::array ConditionEntriesByTypeArray; typedef std::unordered_map ConditionEntriesByCreatureIdMap; typedef std::unordered_map, ConditionsByEntryMap> SmartEventConditionContainer; - typedef std::unordered_map ConditionReferenceContainer;//only used for references class ConditionMgr @@ -276,7 +275,7 @@ class ConditionMgr void Clean(); // free up resources std::vector AllocatedMemoryStore; // some garbage collection :) - ConditionEntriesByTypeMap ConditionStore; + ConditionEntriesByTypeArray ConditionStore; ConditionReferenceContainer ConditionReferenceStore; ConditionEntriesByCreatureIdMap VehicleSpellConditionStore; ConditionEntriesByCreatureIdMap SpellClickEventConditionStore; -- cgit v1.2.3