aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/corelib
diff options
context:
space:
mode:
authorJoerg Bornemann <joerg.bornemann@qt.io>2017-03-22 12:40:44 +0100
committerJake Petroules <jake.petroules@qt.io>2017-03-23 18:09:51 +0000
commit985664bf1944c5e480ccccf1930afac173bc898a (patch)
treea68e270674e95f87ef978f2b4b6b97003a0f680d /src/lib/corelib
parente2e5e2e3691a5444e2bf79b729657e78b326312d (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.h4
-rw-r--r--src/lib/corelib/language/moduleloader.cpp14
-rw-r--r--src/lib/corelib/language/modulemerger.cpp11
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));
}