Optimize CppCodeMarker::addMarkUp()
This cuts away another 15% of the running time of qdoc -prepare. Change-Id: I81bc32fa191b73fad5d7bd27ff22ac845f83a9ce Reviewed-by: Martin Smith <martin.smith@digia.com>
This commit is contained in:
parent
6508365c04
commit
67638d08b4
@ -194,6 +194,24 @@ QString CodeMarker::protect(const QString& str)
|
||||
return marked;
|
||||
}
|
||||
|
||||
QString CodeMarker::protect(const QStringRef& str)
|
||||
{
|
||||
int n = str.length();
|
||||
QString marked;
|
||||
marked.reserve(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];
|
||||
}
|
||||
}
|
||||
return marked;
|
||||
}
|
||||
|
||||
QString CodeMarker::typified(const QString &string)
|
||||
{
|
||||
QString result;
|
||||
|
@ -164,6 +164,7 @@ public:
|
||||
protected:
|
||||
virtual QString sortName(const Node *node, const QString* name = 0);
|
||||
QString protect(const QString &string);
|
||||
QString protect(const QStringRef &string);
|
||||
QString taggedNode(const Node* node);
|
||||
QString taggedQmlNode(const Node* node);
|
||||
QString linkTag(const Node *node, const QString& body);
|
||||
|
@ -893,8 +893,8 @@ QString CppCodeMarker::addMarkUp(const QString &in,
|
||||
ch = (i < (int)code.length()) ? code[i++].cell() : EOF
|
||||
|
||||
QString code = in;
|
||||
QStringList out;
|
||||
QString text;
|
||||
QString out;
|
||||
QStringRef text;
|
||||
int braceDepth = 0;
|
||||
int parenDepth = 0;
|
||||
int i = 0;
|
||||
@ -1069,27 +1069,34 @@ QString CppCodeMarker::addMarkUp(const QString &in,
|
||||
}
|
||||
}
|
||||
|
||||
text = code.mid(start, finish - start);
|
||||
text = code.midRef(start, finish - start);
|
||||
start = finish;
|
||||
|
||||
if (!tag.isEmpty()) {
|
||||
out << QStringLiteral("<@") << tag;
|
||||
if (target)
|
||||
out << QStringLiteral(" target=\"") << text << QStringLiteral("()\"");
|
||||
out << QStringLiteral(">");
|
||||
out += QStringLiteral("<@");
|
||||
out += tag;
|
||||
if (target) {
|
||||
out += QStringLiteral(" target=\"");
|
||||
out += text;
|
||||
out += QStringLiteral("()\"");
|
||||
}
|
||||
out += QStringLiteral(">");
|
||||
}
|
||||
|
||||
out << protect(text);
|
||||
out += protect(text);
|
||||
|
||||
if (!tag.isEmpty())
|
||||
out << QStringLiteral("</@") << tag << QStringLiteral(">");
|
||||
if (!tag.isEmpty()) {
|
||||
out += QStringLiteral("</@");
|
||||
out += tag;
|
||||
out += QStringLiteral(">");
|
||||
}
|
||||
}
|
||||
|
||||
if (start < code.length()) {
|
||||
out << protect(code.mid(start));
|
||||
out += protect(code.midRef(start));
|
||||
}
|
||||
|
||||
return out.join(QString());
|
||||
return out;
|
||||
}
|
||||
|
||||
/*!
|
||||
|
Loading…
x
Reference in New Issue
Block a user