From 050b2e4ae2d0393ed83c3e2b8474d8fa4533fa8f Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@nokia.com>
Date: Fri, 4 Dec 2009 15:57:28 +0100
Subject: [PATCH] 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.
---
 src/plugins/qt4projectmanager/qt4nodes.cpp | 23 +++++++---------------
 1 file changed, 7 insertions(+), 16 deletions(-)

diff --git a/src/plugins/qt4projectmanager/qt4nodes.cpp b/src/plugins/qt4projectmanager/qt4nodes.cpp
index 34b68973de9..cac4c591411 100644
--- a/src/plugins/qt4projectmanager/qt4nodes.cpp
+++ b/src/plugins/qt4projectmanager/qt4nodes.cpp
@@ -226,8 +226,8 @@ namespace Internal {
 
             QList<FolderNode *> foldersToRemove;
             QList<FolderNode *> foldersToAdd;
-            QList<InternalNode *> internalNodesToUpdate;
-            QList<FolderNode *> folderNodesToUpdate;
+            typedef QPair<InternalNode *, FolderNode *> NodePair;
+            QList<NodePair> nodesToUpdate;
 
             // newFolders is already sorted
             qSort(existingFolderNodes.begin(), existingFolderNodes.end(), ProjectNode::sortFolderNodesByName);
@@ -245,12 +245,10 @@ namespace Internal {
                     if (!newNodeIter.value()->icon.isNull())
                         newNode->setIcon(newNodeIter.value()->icon);
                     foldersToAdd << newNode;
-                    internalNodesToUpdate << newNodeIter.value();
-                    folderNodesToUpdate << newNode;
+                    nodesToUpdate << NodePair(newNodeIter.value(), newNode);
                     ++newNodeIter;
                 } else { // *existingNodeIter->path() == *newPathIter
-                    internalNodesToUpdate << newNodeIter.value();
-                    folderNodesToUpdate << *existingNodeIter;
+                    nodesToUpdate << NodePair(newNodeIter.value(), *existingNodeIter);
                     ++existingNodeIter;
                     ++newNodeIter;
                 }
@@ -266,8 +264,7 @@ namespace Internal {
                 if (!newNodeIter.value()->icon.isNull())
                     newNode->setIcon(newNodeIter.value()->icon);
                 foldersToAdd << newNode;
-                internalNodesToUpdate << newNodeIter.value();
-                folderNodesToUpdate << newNode;
+                nodesToUpdate << NodePair(newNodeIter.value(), newNode);
                 ++newNodeIter;
             }
 
@@ -276,14 +273,8 @@ namespace Internal {
             if (!foldersToAdd.isEmpty())
                 projectNode->addFolderNodes(foldersToAdd, folder);
 
-            QList<FolderNode *>::const_iterator folderIt = folderNodesToUpdate.constBegin();
-            QList<InternalNode *>::const_iterator iNodeIt = internalNodesToUpdate.constBegin();
-            while (folderIt != folderNodesToUpdate.constEnd()
-                    && iNodeIt != internalNodesToUpdate.constEnd()) {
-                (*iNodeIt)->updateSubFolders(projectNode, *folderIt);
-                ++folderIt;
-                ++iNodeIt;
-            }
+            foreach (const NodePair &np, nodesToUpdate)
+                np.first->updateSubFolders(projectNode, np.second);
         }
 
         // Makes the folder's files match this internal node's file list
-- 
GitLab