From 6662919ecde901771d9641fd732aa0735ebb39e6 Mon Sep 17 00:00:00 2001 From: Anton Kudryavtsev Date: Thu, 31 Mar 2016 12:01:59 +0300 Subject: CoreLib: use QStringRef to optimize memory allocation Replace substring functions that return QString with corresponding functions that return QStringRef where it's possible. Create QString from QStringRef only where necessary. Change-Id: Id9ea11b16947220cd27787c0b529de62d10b6c26 Reviewed-by: Edward Welbourne --- src/corelib/kernel/qmetaobject.cpp | 11 ++++++----- src/corelib/kernel/qtranslator.cpp | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'src/corelib/kernel') diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp index 2f2694f219..f5b879aea8 100644 --- a/src/corelib/kernel/qmetaobject.cpp +++ b/src/corelib/kernel/qmetaobject.cpp @@ -2652,15 +2652,16 @@ int QMetaEnum::keysToValue(const char *keys, bool *ok) const return -1; if (ok != 0) *ok = true; - QStringList l = QString::fromLatin1(keys).split(QLatin1Char('|')); - if (l.isEmpty()) + const QString keysString = QString::fromLatin1(keys); + const QVector splitKeys = keysString.splitRef(QLatin1Char('|')); + if (splitKeys.isEmpty()) return 0; - //#### TODO write proper code, do not use QStringList + // ### TODO write proper code: do not allocate memory, so we can go nothrow int value = 0; int count = mobj->d.data[handle + 2]; int data = mobj->d.data[handle + 3]; - for (int li = 0; li < l.size(); ++li) { - QString trimmed = l.at(li).trimmed(); + for (const QStringRef &untrimmed : splitKeys) { + const QStringRef trimmed = untrimmed.trimmed(); QByteArray qualified_key = trimmed.toLatin1(); const char *key = qualified_key.constData(); uint scope = 0; diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp index 2c813b5156..e016773bde 100644 --- a/src/corelib/kernel/qtranslator.cpp +++ b/src/corelib/kernel/qtranslator.cpp @@ -487,7 +487,7 @@ bool QTranslator::load(const QString & filename, const QString & directory, } const QString suffixOrDotQM = suffix.isNull() ? dotQmLiteral() : suffix; - QString fname = filename; + QStringRef fname(&filename); QString realname; QString delims; delims = search_delimiters.isNull() ? QStringLiteral("_.") : search_delimiters; -- cgit v1.2.3