From 6d9ff690c7eaabd9b27931ea38934b97466a43c2 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 27 Oct 2015 12:01:18 +0100 Subject: [PATCH] ToolChainManager: Use partition in ToolChainManager Change-Id: I4a1376f1ed4ffea83bbd693b3bc1e8fd284771a7 Reviewed-by: Tobias Hunger --- .../projectexplorer/toolchainmanager.cpp | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index e581617f13..bb8502a373 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -46,6 +46,8 @@ #include #include +#include + static const char TOOLCHAIN_DATA_KEY[] = "ToolChain."; static const char TOOLCHAIN_COUNT_KEY[] = "ToolChain.Count"; static const char TOOLCHAIN_FILE_VERSION_KEY[] = "Version"; @@ -196,11 +198,9 @@ static QList subtractById(const QList &a, const QList< }); } -static QList intersectByEqual(const QList &a, const QList &b) +static bool containsByEqual(const QList &a, const ToolChain *atc) { - return Utils::filtered(a, [&b](ToolChain *atc) { - return Utils::anyOf(b, [atc](ToolChain *btc) { return *atc == *btc; }); - }); + return Utils::anyOf(a, [atc](ToolChain *btc) { return *atc == *btc; }); } static QList makeUnique(const QList &a) @@ -223,22 +223,20 @@ static ToolChainOperations mergeToolChainLists(const QList &systemF const QList &userFileTcs, const QList &autodetectedTcs) { - const QList manualUserTcs - = Utils::filtered(userFileTcs, [](ToolChain *t) { return !t->isAutoDetected(); }); - - // Remove systemFileTcs from autodetectedUserTcs based on id-matches: - const QList autodetectedUserFileTcs - = Utils::filtered(userFileTcs, &ToolChain::isAutoDetected); + // Remove systemFileTcs from autodetectedUserFileTcs based on id-matches: + QList manualUserFileTcs; + QList autodetectedUserFileTcs; + std::tie(autodetectedUserFileTcs, manualUserFileTcs) + = Utils::partition(userFileTcs, &ToolChain::isAutoDetected); const QList autodetectedUserTcs = subtractById(autodetectedUserFileTcs, systemFileTcs); // Calculate a set of Tcs that were detected before (and saved to userFile) and that // got re-detected again. Take the userTcs (to keep Ids) over the same in autodetectedTcs. - const QList redetectedUserTcs - = intersectByEqual(autodetectedUserTcs, autodetectedTcs); - - // Remove redetected tcs from autodetectedUserTcs: - const QList notRedetectedUserTcs - = subtractByPointerEqual(autodetectedUserTcs, redetectedUserTcs); + QList redetectedUserTcs; + QList notRedetectedUserTcs; + std::tie(redetectedUserTcs, notRedetectedUserTcs) + = Utils::partition(autodetectedUserTcs, + [&autodetectedTcs](ToolChain *tc) { return containsByEqual(autodetectedTcs, tc); }); // Remove redetected tcs from autodetectedTcs: const QList newlyAutodetectedTcs @@ -248,12 +246,12 @@ static ToolChainOperations mergeToolChainLists(const QList &systemF = Utils::filtered(notRedetectedUserTcs, &ToolChain::isValid); const QList validManualUserTcs - = Utils::filtered(manualUserTcs, &ToolChain::isValid); + = Utils::filtered(manualUserFileTcs, &ToolChain::isValid); ToolChainOperations result; result.toDemote = notRedetectedButValidUserTcs; - result.toRegister = result.toDemote + systemFileTcs + redetectedUserTcs + newlyAutodetectedTcs - + validManualUserTcs; + result.toRegister = systemFileTcs + validManualUserTcs + result.toDemote // manual TCs + + redetectedUserTcs + newlyAutodetectedTcs; // auto TCs result.toDelete = makeUnique(subtractByPointerEqual(systemFileTcs + userFileTcs + autodetectedTcs, result.toRegister)); -- GitLab