mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
[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`.
This commit is contained in:
parent
7c0b5c08cc
commit
492cfb73a3
|
@ -957,15 +957,17 @@ void KFileItemModelRolesUpdater::updateChangedItems()
|
||||||
visibleChangedIndexes.reserve(m_changedItems.size());
|
visibleChangedIndexes.reserve(m_changedItems.size());
|
||||||
invisibleChangedIndexes.reserve(m_changedItems.size());
|
invisibleChangedIndexes.reserve(m_changedItems.size());
|
||||||
|
|
||||||
// Iterate over a const copy because items are deleted within the loop
|
auto oldsize = m_changedItems.size();
|
||||||
const auto changedItems = m_changedItems;
|
auto changedItemsIt = m_changedItems.begin();
|
||||||
for (const KFileItem &item : changedItems) {
|
while (changedItemsIt != m_changedItems.end()) {
|
||||||
|
const auto& item = *changedItemsIt;
|
||||||
const int index = m_model->index(item);
|
const int index = m_model->index(item);
|
||||||
|
|
||||||
if (index < 0) {
|
if (index < 0) {
|
||||||
m_changedItems.remove(item);
|
changedItemsIt = m_changedItems.erase(changedItemsIt);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
++changedItemsIt;
|
||||||
|
|
||||||
if (index >= m_firstVisibleIndex && index <= m_lastVisibleIndex) {
|
if (index >= m_firstVisibleIndex && index <= m_lastVisibleIndex) {
|
||||||
visibleChangedIndexes.append(index);
|
visibleChangedIndexes.append(index);
|
||||||
|
|
Loading…
Reference in a new issue