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:
Oswald Buddenhagen
2009-12-04 15:57:28 +01:00
parent 9ba6f06af7
commit 050b2e4ae2

View File

@@ -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