┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
diff options
context:
space:
mode:
authorStefan Brüns <[email protected]>2021-02-15 17:40:17 +0100
committerStefan Brüns <[email protected]>2021-02-15 17:40:17 +0100
commit492cfb73a370e03acc0561a631ce7e0d606ddf58 (patch)
treead655857eccd7eee5b6ba69297eeb50009b2444d /src/kitemviews
parent7c0b5c08cc97eded7755ca5cef9c7e5ba5c15537 (diff)
[FileItemRolesUpdater] Use STL-style iterator instead of iterating a copy
QSet<T>::erase(it) is the save way of erasing from a QSet while iterating it. This saves creating a copy of the QSet, lookup of a node by value in `QSet<T>::remove(item)`, and repeated rehashing caused by `remove`.
Diffstat (limited to 'src/kitemviews')
-rw-r--r--src/kitemviews/kfileitemmodelrolesupdater.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp
index d18387f51..46176638e 100644
--- a/src/kitemviews/kfileitemmodelrolesupdater.cpp
+++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp
@@ -957,15 +957,17 @@ void KFileItemModelRolesUpdater::updateChangedItems()
visibleChangedIndexes.reserve(m_changedItems.size());
invisibleChangedIndexes.reserve(m_changedItems.size());
- // Iterate over a const copy because items are deleted within the loop
- const auto changedItems = m_changedItems;
- for (const KFileItem &item : changedItems) {
+ auto oldsize = m_changedItems.size();
+ auto changedItemsIt = m_changedItems.begin();
+ while (changedItemsIt != m_changedItems.end()) {
+ const auto& item = *changedItemsIt;
const int index = m_model->index(item);
if (index < 0) {
- m_changedItems.remove(item);
+ changedItemsIt = m_changedItems.erase(changedItemsIt);
continue;
}
+ ++changedItemsIt;
if (index >= m_firstVisibleIndex && index <= m_lastVisibleIndex) {
visibleChangedIndexes.append(index);