diff options
| author | Stefan Brüns <[email protected]> | 2021-02-15 17:40:17 +0100 |
|---|---|---|
| committer | Stefan Brüns <[email protected]> | 2021-02-15 17:40:17 +0100 |
| commit | 492cfb73a370e03acc0561a631ce7e0d606ddf58 (patch) | |
| tree | ad655857eccd7eee5b6ba69297eeb50009b2444d /src | |
| parent | 7c0b5c08cc97eded7755ca5cef9c7e5ba5c15537 (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')
| -rw-r--r-- | src/kitemviews/kfileitemmodelrolesupdater.cpp | 10 |
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); |
