From dbf4c6290f90f81ecda6f5f956f9f859222496ac Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Wed, 22 Jul 2015 15:07:21 +0200 Subject: 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 --- src/tools/qdoc/codemarker.cpp | 16 +++++++--------- src/tools/qdoc/codemarker.h | 4 ++-- src/tools/qdoc/cppcodemarker.cpp | 7 +++---- 3 files changed, 12 insertions(+), 15 deletions(-) (limited to 'src/tools/qdoc') 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("