diff options
author | Joerg Bornemann <joerg.bornemann@qt.io> | 2017-03-22 12:40:44 +0100 |
---|---|---|
committer | Jake Petroules <jake.petroules@qt.io> | 2017-03-23 18:09:51 +0000 |
commit | 985664bf1944c5e480ccccf1930afac173bc898a (patch) | |
tree | a68e270674e95f87ef978f2b4b6b97003a0f680d /src/lib/corelib | |
parent | e2e5e2e3691a5444e2bf79b729657e78b326312d (diff) |
Make Item::Modules an std::vector
Item::Module is too big for being kept efficiently in a QList.
Change-Id: I56d160a05cbf1d24038367969e89e8ee5e1b2110
Reviewed-by: Jake Petroules <jake.petroules@qt.io>
Diffstat (limited to 'src/lib/corelib')
-rw-r--r-- | src/lib/corelib/language/item.h | 4 | ||||
-rw-r--r-- | src/lib/corelib/language/moduleloader.cpp | 14 | ||||
-rw-r--r-- | src/lib/corelib/language/modulemerger.cpp | 11 |
3 files changed, 15 insertions, 14 deletions
diff --git a/src/lib/corelib/language/item.h b/src/lib/corelib/language/item.h index cac10b197..59140a5c5 100644 --- a/src/lib/corelib/language/item.h +++ b/src/lib/corelib/language/item.h @@ -52,6 +52,8 @@ #include <QtCore/qlist.h> #include <QtCore/qmap.h> +#include <vector> + namespace qbs { namespace Internal { class ItemObserver; @@ -79,7 +81,7 @@ public: bool required; VersionRange versionRange; }; - typedef QList<Module> Modules; + typedef std::vector<Module> Modules; typedef QMap<QString, PropertyDeclaration> PropertyDeclarationMap; typedef QMap<QString, ValuePtr> PropertyMap; diff --git a/src/lib/corelib/language/moduleloader.cpp b/src/lib/corelib/language/moduleloader.cpp index 6ddd6c4fe..01273c4e8 100644 --- a/src/lib/corelib/language/moduleloader.cpp +++ b/src/lib/corelib/language/moduleloader.cpp @@ -64,6 +64,7 @@ #include <tools/qttools.h> #include <tools/scripttools.h> #include <tools/settings.h> +#include <tools/stlutils.h> #include <QtCore/qdebug.h> #include <QtCore/qdir.h> @@ -720,9 +721,9 @@ void ModuleLoader::setupProductDependencies(ProductContext *productContext) } // Non-dependencies first. -static void createSortedModuleList(const Item::Module &parentModule, QVector<Item::Module> &modules) +static void createSortedModuleList(const Item::Module &parentModule, Item::Modules &modules) { - if (modules.contains(parentModule)) + if (contains(modules, parentModule)) return; for (const Item::Module &dep : parentModule.item->modules()) createSortedModuleList(dep, modules); @@ -773,10 +774,10 @@ void ModuleLoader::handleProduct(ModuleLoader::ProductContext *productContext) item->setModules(mergedModules); // Must happen after all modules have been merged, so needs to be a second loop. - QVector<Item::Module> sortedModules; + Item::Modules sortedModules; for (const Item::Module &module : item->modules()) createSortedModuleList(module, sortedModules); - QBS_CHECK(sortedModules.count() == item->modules().count()); + QBS_CHECK(sortedModules.size() == item->modules().size()); for (const Item::Module &module : qAsConst(sortedModules)) { if (!module.item->isPresentModule()) @@ -1226,10 +1227,7 @@ void ModuleLoader::propagateModulesFromParent(Item *groupItem, QHash<QualifiedId, Item *> moduleInstancesForGroup; // Step 1: Instantiate the product's modules for the group. - for (Item::Modules::const_iterator it = groupItem->parent()->modules().constBegin(); - it != groupItem->parent()->modules().constEnd(); ++it) - { - Item::Module m = *it; + for (Item::Module m : groupItem->parent()->modules()) { Item *targetItem = moduleInstanceItem(groupItem, m.name); targetItem->setPrototype(m.item); diff --git a/src/lib/corelib/language/modulemerger.cpp b/src/lib/corelib/language/modulemerger.cpp index 72f8fa1bd..c161aea10 100644 --- a/src/lib/corelib/language/modulemerger.cpp +++ b/src/lib/corelib/language/modulemerger.cpp @@ -44,6 +44,7 @@ #include <logging/translator.h> #include <tools/qbsassert.h> #include <tools/qttools.h> +#include <tools/stlutils.h> namespace qbs { namespace Internal { @@ -145,7 +146,7 @@ void ModuleMerger::start() Item::PropertyMap ModuleMerger::dfs(const Item::Module &m, Item::PropertyMap props) { Item *moduleInstance = 0; - int numberOfOutprops = m.item->modules().count(); + size_t numberOfOutprops = m.item->modules().size(); for (const Item::Module &dep : m.item->modules()) { if (dep.name == m_mergedModule.name) { --numberOfOutprops; @@ -159,16 +160,16 @@ Item::PropertyMap ModuleMerger::dfs(const Item::Module &m, Item::PropertyMap pro } } - QVector<Item::PropertyMap> outprops; + std::vector<Item::PropertyMap> outprops; outprops.reserve(numberOfOutprops); for (const Item::Module &dep : m.item->modules()) { if (dep.item != moduleInstance) outprops << dfs(dep, props); } - if (!outprops.isEmpty()) { - props = outprops.first(); - for (int i = 1; i < outprops.count(); ++i) + if (!outprops.empty()) { + props = outprops.at(0); + for (size_t i = 1; i < outprops.size(); ++i) mergeOutProps(&props, outprops.at(i)); } |