summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@theqtcompany.com>2015-07-22 15:07:21 +0200
committerLars Knoll <lars.knoll@theqtcompany.com>2015-07-24 08:51:12 +0000
commitdbf4c6290f90f81ecda6f5f956f9f859222496ac (patch)
tree2729d5b82306019cd063bb81e72e7f440c875747
parent5fd9fe02ff14438a2d0c93789be138a58583dbe8 (diff)
Optimize CppCodeMarker::addMarkUp further
This avoids a couple of more string/memory allocations, giving another 5% speed gain for qdoc --prepare. Change-Id: I455f615bb4388d883dca5a8cd31bf50629db23e0 Reviewed-by: Martin Smith <martin.smith@digia.com>
-rw-r--r--src/tools/qdoc/codemarker.cpp16
-rw-r--r--src/tools/qdoc/codemarker.h4
-rw-r--r--src/tools/qdoc/cppcodemarker.cpp7
3 files changed, 12 insertions, 15 deletions
diff --git a/src/tools/qdoc/codemarker.cpp b/src/tools/qdoc/codemarker.cpp
index e00ebef2db..458799fc27 100644
--- a/src/tools/qdoc/codemarker.cpp
+++ b/src/tools/qdoc/codemarker.cpp
@@ -194,22 +194,20 @@ QString CodeMarker::protect(const QString& str)
return marked;
}
-QString CodeMarker::protect(const QStringRef& str)
+void CodeMarker::appendProtectedString(QString *output, const QStringRef &str)
{
int n = str.length();
- QString marked;
- marked.reserve(n * 2 + 30);
+ output->reserve(output->size() + n * 2 + 30);
const QChar *data = str.constData();
for (int i = 0; i != n; ++i) {
switch (data[i].unicode()) {
- case '&': marked += samp; break;
- case '<': marked += slt; break;
- case '>': marked += sgt; break;
- case '"': marked += squot; break;
- default : marked += data[i];
+ case '&': *output += samp; break;
+ case '<': *output += slt; break;
+ case '>': *output += sgt; break;
+ case '"': *output += squot; break;
+ default : *output += data[i];
}
}
- return marked;
}
QString CodeMarker::typified(const QString &string)
diff --git a/src/tools/qdoc/codemarker.h b/src/tools/qdoc/codemarker.h
index e407e0ac3f..31a9f3a254 100644
--- a/src/tools/qdoc/codemarker.h
+++ b/src/tools/qdoc/codemarker.h
@@ -163,8 +163,8 @@ public:
protected:
virtual QString sortName(const Node *node, const QString* name = 0);
- QString protect(const QString &string);
- QString protect(const QStringRef &string);
+ static QString protect(const QString &string);
+ static void appendProtectedString(QString *output, const QStringRef &str);
QString taggedNode(const Node* node);
QString taggedQmlNode(const Node* node);
QString linkTag(const Node *node, const QString& body);
diff --git a/src/tools/qdoc/cppcodemarker.cpp b/src/tools/qdoc/cppcodemarker.cpp
index 6060339762..868b249290 100644
--- a/src/tools/qdoc/cppcodemarker.cpp
+++ b/src/tools/qdoc/cppcodemarker.cpp
@@ -929,8 +929,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
} else if (keywords.contains(ident)) {
tag = QStringLiteral("keyword");
} else if (braceDepth == 0 && parenDepth == 0) {
- if (QString(code.unicode() + i - 1, code.length() - (i - 1))
- .indexOf(findFunctionRegExp) == 0)
+ if (code.indexOf(findFunctionRegExp, i - 1) == i - 1)
tag = QStringLiteral("func");
target = true;
}
@@ -1083,7 +1082,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
out += QStringLiteral(">");
}
- out += protect(text);
+ appendProtectedString(&out, text);
if (!tag.isEmpty()) {
out += QStringLiteral("</@");
@@ -1093,7 +1092,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
}
if (start < code.length()) {
- out += protect(code.midRef(start));
+ appendProtectedString(&out, code.midRef(start));
}
return out;