ExtraCompiler: Use a hash for contents

Avoid recurring scans of the targets.

From a simple test, there is usually a single target. This is mostly
done for correctness.

Change-Id: Ic025de0825133f1096c400278c929a7e9087c643
Reviewed-by: Ulf Hermann <ulf.hermann@theqtcompany.com>
This commit is contained in:
Orgad Shaneh
2016-02-17 23:47:26 +02:00
committed by Orgad Shaneh
parent b692c1379a
commit 13c3972a75

View File

@@ -51,8 +51,8 @@ class ExtraCompilerPrivate
public: public:
const Project *project; const Project *project;
Utils::FileName source; Utils::FileName source;
QHash<Utils::FileName, QByteArray> contents;
Utils::FileNameList targets; Utils::FileNameList targets;
QVector<QByteArray> contents;
QList<Task> issues; QList<Task> issues;
QDateTime compileTime; QDateTime compileTime;
Core::IEditor *lastEditor = 0; Core::IEditor *lastEditor = 0;
@@ -71,7 +71,8 @@ ExtraCompiler::ExtraCompiler(const Project *project, const Utils::FileName &sour
d->project = project; d->project = project;
d->source = source; d->source = source;
d->targets = targets; d->targets = targets;
d->contents.resize(targets.size()); foreach (const Utils::FileName &target, targets)
d->contents.insert(target, QByteArray());
d->timer.setSingleShot(true); d->timer.setSingleShot(true);
connect(d->project, &Project::activeTargetChanged, this, &ExtraCompiler::onActiveTargetChanged); connect(d->project, &Project::activeTargetChanged, this, &ExtraCompiler::onActiveTargetChanged);
@@ -148,11 +149,7 @@ Utils::FileName ExtraCompiler::source() const
QByteArray ExtraCompiler::content(const Utils::FileName &file) const QByteArray ExtraCompiler::content(const Utils::FileName &file) const
{ {
for (int i = 0; i < d->targets.length(); ++i) { return d->contents.value(file);
if (d->targets[i] == file)
return d->contents[i];
}
return QByteArray();
} }
Utils::FileNameList ExtraCompiler::targets() const Utils::FileNameList ExtraCompiler::targets() const
@@ -335,13 +332,11 @@ void ExtraCompilerPrivate::updateIssues()
void ExtraCompiler::setContent(const Utils::FileName &file, const QByteArray &contents) void ExtraCompiler::setContent(const Utils::FileName &file, const QByteArray &contents)
{ {
for (int i = 0; i < d->targets.length(); ++i) { auto it = d->contents.find(file);
if (d->targets[i] == file) { if (it != d->contents.end()) {
if (d->contents[i] != contents) { if (it.value() != contents) {
d->contents[i] = contents; it.value() = contents;
emit contentsChanged(file); emit contentsChanged(file);
}
return;
} }
} }
} }