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>
This commit is contained in:
parent
5fd9fe02ff
commit
dbf4c6290f
@ -194,22 +194,20 @@ QString CodeMarker::protect(const QString& str)
|
|||||||
return marked;
|
return marked;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CodeMarker::protect(const QStringRef& str)
|
void CodeMarker::appendProtectedString(QString *output, const QStringRef &str)
|
||||||
{
|
{
|
||||||
int n = str.length();
|
int n = str.length();
|
||||||
QString marked;
|
output->reserve(output->size() + n * 2 + 30);
|
||||||
marked.reserve(n * 2 + 30);
|
|
||||||
const QChar *data = str.constData();
|
const QChar *data = str.constData();
|
||||||
for (int i = 0; i != n; ++i) {
|
for (int i = 0; i != n; ++i) {
|
||||||
switch (data[i].unicode()) {
|
switch (data[i].unicode()) {
|
||||||
case '&': marked += samp; break;
|
case '&': *output += samp; break;
|
||||||
case '<': marked += slt; break;
|
case '<': *output += slt; break;
|
||||||
case '>': marked += sgt; break;
|
case '>': *output += sgt; break;
|
||||||
case '"': marked += squot; break;
|
case '"': *output += squot; break;
|
||||||
default : marked += data[i];
|
default : *output += data[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return marked;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString CodeMarker::typified(const QString &string)
|
QString CodeMarker::typified(const QString &string)
|
||||||
|
@ -163,8 +163,8 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual QString sortName(const Node *node, const QString* name = 0);
|
virtual QString sortName(const Node *node, const QString* name = 0);
|
||||||
QString protect(const QString &string);
|
static QString protect(const QString &string);
|
||||||
QString protect(const QStringRef &string);
|
static void appendProtectedString(QString *output, const QStringRef &str);
|
||||||
QString taggedNode(const Node* node);
|
QString taggedNode(const Node* node);
|
||||||
QString taggedQmlNode(const Node* node);
|
QString taggedQmlNode(const Node* node);
|
||||||
QString linkTag(const Node *node, const QString& body);
|
QString linkTag(const Node *node, const QString& body);
|
||||||
|
@ -929,8 +929,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
|
|||||||
} else if (keywords.contains(ident)) {
|
} else if (keywords.contains(ident)) {
|
||||||
tag = QStringLiteral("keyword");
|
tag = QStringLiteral("keyword");
|
||||||
} else if (braceDepth == 0 && parenDepth == 0) {
|
} else if (braceDepth == 0 && parenDepth == 0) {
|
||||||
if (QString(code.unicode() + i - 1, code.length() - (i - 1))
|
if (code.indexOf(findFunctionRegExp, i - 1) == i - 1)
|
||||||
.indexOf(findFunctionRegExp) == 0)
|
|
||||||
tag = QStringLiteral("func");
|
tag = QStringLiteral("func");
|
||||||
target = true;
|
target = true;
|
||||||
}
|
}
|
||||||
@ -1083,7 +1082,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
|
|||||||
out += QStringLiteral(">");
|
out += QStringLiteral(">");
|
||||||
}
|
}
|
||||||
|
|
||||||
out += protect(text);
|
appendProtectedString(&out, text);
|
||||||
|
|
||||||
if (!tag.isEmpty()) {
|
if (!tag.isEmpty()) {
|
||||||
out += QStringLiteral("</@");
|
out += QStringLiteral("</@");
|
||||||
@ -1093,7 +1092,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (start < code.length()) {
|
if (start < code.length()) {
|
||||||
out += protect(code.midRef(start));
|
appendProtectedString(&out, code.midRef(start));
|
||||||
}
|
}
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user