C++ editor: Remove unnecessary line split in find usages

Avoid extra allocations since we only the actual line for the case.

Change-Id: I0d0f0db394d9075bbdce24d1d5b5efa55c52f9b3
Reviewed-on: http://codereview.qt.nokia.com/261
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Erik Verbruggen <erik.verbruggen@nokia.com>
This commit is contained in:
Leandro Melo
2011-05-31 11:57:00 +02:00
committed by Erik Verbruggen
parent ad38a581b6
commit 83e4a7260d

View File

@@ -44,6 +44,33 @@
using namespace CPlusPlus; using namespace CPlusPlus;
namespace {
QString fetchLine(const QByteArray &bytes, const int line)
{
int current = 0;
const char *s = bytes.constData();
while (*s) {
if (*s == '\n') {
++current;
if (current == line)
break;
}
++s;
}
if (current == line) {
++s;
const char *e = s;
while (*e && *e != '\n')
++e;
return QString::fromUtf8(s, e - s);
}
return QString();
}
} // Anonymous
FindUsages::FindUsages(const QByteArray &originalSource, Document::Ptr doc, const Snapshot &snapshot) FindUsages::FindUsages(const QByteArray &originalSource, Document::Ptr doc, const Snapshot &snapshot)
: ASTVisitor(doc->translationUnit()), : ASTVisitor(doc->translationUnit()),
_id(0), _id(0),
@@ -167,9 +194,9 @@ void FindUsages::reportResult(unsigned tokenIndex)
unsigned line, col; unsigned line, col;
getTokenStartPosition(tokenIndex, &line, &col); getTokenStartPosition(tokenIndex, &line, &col);
QString lineText; QString lineText;
QList<QByteArray> lines = _originalSource.split('\n'); const int lines = _originalSource.count('\n') + 1;
if (((int) line - 1) < lines.size()) if (((int) line - 1) < lines)
lineText = QString::fromUtf8(lines.at(line - 1)); lineText = fetchLine(_originalSource, line - 1);
else else
lineText = matchingLine(tk); lineText = matchingLine(tk);