fix iterator usage, avoid unnecessary copies

This commit is contained in:
John
2021-11-04 15:02:33 +01:00
parent 855bcd7b2b
commit 890e718b09
+9 -9
View File
@@ -1884,27 +1884,27 @@ void MessageMap::remove(Message* message) {
const auto keyIt = m_messagesByKey.find(key); const auto keyIt = m_messagesByKey.find(key);
bool deleted = false; bool deleted = false;
if (keyIt != m_messagesByKey.end()) { if (keyIt != m_messagesByKey.end()) {
vector<Message*> messages = keyIt->second; vector<Message*>* messages = &keyIt->second;
for (auto it = messages.begin(); it != messages.end(); ) { for (auto it = messages->begin(); it != messages->end(); ) {
Message* other = *it; Message* other = *it;
if (other == message) { if (other == message) {
if (!deleted) { if (!deleted) {
deleted = true; deleted = true;
delete(other); delete(other);
} }
messages.erase(it); it = messages->erase(it);
} else { } else {
++it; ++it;
} }
} }
if (messages.empty()) { if (messages->empty()) {
m_messagesByKey.erase(keyIt); m_messagesByKey.erase(keyIt);
} }
} }
bool storedByName = false; bool storedByName = false;
for (auto nameIt = m_messagesByName.begin(); nameIt != m_messagesByName.end(); ) { for (auto nameIt = m_messagesByName.begin(); nameIt != m_messagesByName.end(); ) {
vector<Message*> messages = nameIt->second; vector<Message*>* messages = &nameIt->second;
for (auto it = messages.begin(); it != messages.end(); ) { for (auto it = messages->begin(); it != messages->end(); ) {
Message* other = *it; Message* other = *it;
if (other == message) { if (other == message) {
storedByName = true; storedByName = true;
@@ -1912,13 +1912,13 @@ void MessageMap::remove(Message* message) {
deleted = true; deleted = true;
delete(other); delete(other);
} }
messages.erase(it); it = messages->erase(it);
} else { } else {
++it; ++it;
} }
} }
if (messages.empty()) { if (messages->empty()) {
m_messagesByName.erase(nameIt); nameIt = m_messagesByName.erase(nameIt);
} else { } else {
++nameIt; ++nameIt;
} }