From cabdf93e21a0bc6c68c00617c26cf7e3cc27f8c7 Mon Sep 17 00:00:00 2001 From: fgenesis Date: Wed, 12 Jul 2017 04:12:06 +0200 Subject: [PATCH] Tiny performance optimization Keep disabled damage types vector sorted and do binary search. --- Aquaria/Entity.cpp | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/Aquaria/Entity.cpp b/Aquaria/Entity.cpp index 6fd402a..b8d8d0e 100644 --- a/Aquaria/Entity.cpp +++ b/Aquaria/Entity.cpp @@ -1409,22 +1409,18 @@ void Entity::moveOutOfWall() void Entity::setDamageTarget(DamageType dt, bool v) { + DisabledDamageTypes::iterator it = std::lower_bound(disabledDamageTypes.begin(), disabledDamageTypes.end(), dt); if (v) { - for(size_t i = 0; i < disabledDamageTypes.size(); ++i) - { - if(disabledDamageTypes[i] == dt) - { - disabledDamageTypes[i] = disabledDamageTypes.back(); - disabledDamageTypes.pop_back(); - break; - } - } + if(it != disabledDamageTypes.end() && *it == dt) + disabledDamageTypes.erase(it); } else { - if(isDamageTarget(dt)) + if(it == disabledDamageTypes.end()) disabledDamageTypes.push_back(dt); + else if(*it != dt) + disabledDamageTypes.insert(it, dt); } } @@ -1455,11 +1451,7 @@ void Entity::setAllDamageTargets(bool v) bool Entity::isDamageTarget(DamageType dt) { - const size_t sz = disabledDamageTypes.size(); - for(size_t i = 0; i < sz; ++i) - if(disabledDamageTypes[i] == dt) - return false; - return true; + return std::binary_search(disabledDamageTypes.begin(), disabledDamageTypes.end(), dt); } float Entity::getHealthPerc()