forked from qt-creator/qt-creator
join the two node update lists into one list of pairs
this is probably just as fast (still two allocs per insert), but it is definitely more elegant.
This commit is contained in:
@@ -226,8 +226,8 @@ namespace Internal {
|
|||||||
|
|
||||||
QList<FolderNode *> foldersToRemove;
|
QList<FolderNode *> foldersToRemove;
|
||||||
QList<FolderNode *> foldersToAdd;
|
QList<FolderNode *> foldersToAdd;
|
||||||
QList<InternalNode *> internalNodesToUpdate;
|
typedef QPair<InternalNode *, FolderNode *> NodePair;
|
||||||
QList<FolderNode *> folderNodesToUpdate;
|
QList<NodePair> nodesToUpdate;
|
||||||
|
|
||||||
// newFolders is already sorted
|
// newFolders is already sorted
|
||||||
qSort(existingFolderNodes.begin(), existingFolderNodes.end(), ProjectNode::sortFolderNodesByName);
|
qSort(existingFolderNodes.begin(), existingFolderNodes.end(), ProjectNode::sortFolderNodesByName);
|
||||||
@@ -245,12 +245,10 @@ namespace Internal {
|
|||||||
if (!newNodeIter.value()->icon.isNull())
|
if (!newNodeIter.value()->icon.isNull())
|
||||||
newNode->setIcon(newNodeIter.value()->icon);
|
newNode->setIcon(newNodeIter.value()->icon);
|
||||||
foldersToAdd << newNode;
|
foldersToAdd << newNode;
|
||||||
internalNodesToUpdate << newNodeIter.value();
|
nodesToUpdate << NodePair(newNodeIter.value(), newNode);
|
||||||
folderNodesToUpdate << newNode;
|
|
||||||
++newNodeIter;
|
++newNodeIter;
|
||||||
} else { // *existingNodeIter->path() == *newPathIter
|
} else { // *existingNodeIter->path() == *newPathIter
|
||||||
internalNodesToUpdate << newNodeIter.value();
|
nodesToUpdate << NodePair(newNodeIter.value(), *existingNodeIter);
|
||||||
folderNodesToUpdate << *existingNodeIter;
|
|
||||||
++existingNodeIter;
|
++existingNodeIter;
|
||||||
++newNodeIter;
|
++newNodeIter;
|
||||||
}
|
}
|
||||||
@@ -266,8 +264,7 @@ namespace Internal {
|
|||||||
if (!newNodeIter.value()->icon.isNull())
|
if (!newNodeIter.value()->icon.isNull())
|
||||||
newNode->setIcon(newNodeIter.value()->icon);
|
newNode->setIcon(newNodeIter.value()->icon);
|
||||||
foldersToAdd << newNode;
|
foldersToAdd << newNode;
|
||||||
internalNodesToUpdate << newNodeIter.value();
|
nodesToUpdate << NodePair(newNodeIter.value(), newNode);
|
||||||
folderNodesToUpdate << newNode;
|
|
||||||
++newNodeIter;
|
++newNodeIter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -276,14 +273,8 @@ namespace Internal {
|
|||||||
if (!foldersToAdd.isEmpty())
|
if (!foldersToAdd.isEmpty())
|
||||||
projectNode->addFolderNodes(foldersToAdd, folder);
|
projectNode->addFolderNodes(foldersToAdd, folder);
|
||||||
|
|
||||||
QList<FolderNode *>::const_iterator folderIt = folderNodesToUpdate.constBegin();
|
foreach (const NodePair &np, nodesToUpdate)
|
||||||
QList<InternalNode *>::const_iterator iNodeIt = internalNodesToUpdate.constBegin();
|
np.first->updateSubFolders(projectNode, np.second);
|
||||||
while (folderIt != folderNodesToUpdate.constEnd()
|
|
||||||
&& iNodeIt != internalNodesToUpdate.constEnd()) {
|
|
||||||
(*iNodeIt)->updateSubFolders(projectNode, *folderIt);
|
|
||||||
++folderIt;
|
|
||||||
++iNodeIt;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Makes the folder's files match this internal node's file list
|
// Makes the folder's files match this internal node's file list
|
||||||
|
Reference in New Issue
Block a user