From 1d38ecf54246b8109fb38f9d4679a72be8ac9a26 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 11 Feb 2015 15:05:39 +0100 Subject: QTextCodec: micro-optimize loops. Don't use index-based iteration, but use iterators. Change-Id: If8dabd56ff880191bb53861e31bfa6a007802c9c Reviewed-by: Marc Mutz Reviewed-by: Thiago Macieira --- src/corelib/codecs/qicucodec.cpp | 12 ++++++++---- src/corelib/codecs/qtextcodec.cpp | 27 +++++++++++++++------------ 2 files changed, 23 insertions(+), 16 deletions(-) (limited to 'src/corelib/codecs') diff --git a/src/corelib/codecs/qicucodec.cpp b/src/corelib/codecs/qicucodec.cpp index 401384dabf..96d62f7084 100644 --- a/src/corelib/codecs/qicucodec.cpp +++ b/src/corelib/codecs/qicucodec.cpp @@ -47,6 +47,9 @@ QT_BEGIN_NAMESPACE +typedef QList::ConstIterator TextCodecListConstIt; +typedef QList::ConstIterator ByteArrayListConstIt; + static void qIcuCodecStateFree(QTextCodec::ConverterState *state) { ucnv_close(static_cast(state->d)); @@ -487,20 +490,21 @@ QTextCodec *QIcuCodec::codecForNameUnlocked(const char *name) return codec; } - for (int i = 0; i < globalData->allCodecs.size(); ++i) { - QTextCodec *cursor = globalData->allCodecs.at(i); + for (TextCodecListConstIt it = globalData->allCodecs.constBegin(), cend = globalData->allCodecs.constEnd(); it != cend; ++it) { + QTextCodec *cursor = *it; if (qTextCodecNameMatch(cursor->name(), standardName)) { if (cache) cache->insert(standardName, cursor); return cursor; } QList aliases = cursor->aliases(); - for (int y = 0; y < aliases.size(); ++y) - if (qTextCodecNameMatch(aliases.at(y), standardName)) { + for (ByteArrayListConstIt ait = aliases.constBegin(), acend = aliases.constEnd(); ait != acend; ++ait) { + if (qTextCodecNameMatch(*ait, standardName)) { if (cache) cache->insert(standardName, cursor); return cursor; } + } } QTextCodec *c = loadQtCodec(standardName); diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index 9d7988de7a..050f8f207f 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -87,6 +87,9 @@ QT_BEGIN_NAMESPACE +typedef QList::ConstIterator TextCodecListConstIt; +typedef QList::ConstIterator ByteArrayListConstIt; + Q_GLOBAL_STATIC_WITH_ARGS(QMutex, textCodecsMutex, (QMutex::Recursive)); QMutex *qTextCodecsMutex() { return textCodecsMutex(); } @@ -519,20 +522,21 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name) return codec; } - for (int i = 0; i < globalData->allCodecs.size(); ++i) { - QTextCodec *cursor = globalData->allCodecs.at(i); + for (TextCodecListConstIt it = globalData->allCodecs.constBegin(), cend = globalData->allCodecs.constEnd(); it != cend; ++it) { + QTextCodec *cursor = *it; if (qTextCodecNameMatch(cursor->name(), name)) { if (cache) cache->insert(name, cursor); return cursor; } QList aliases = cursor->aliases(); - for (int y = 0; y < aliases.size(); ++y) - if (qTextCodecNameMatch(aliases.at(y), name)) { + for (ByteArrayListConstIt ait = aliases.constBegin(), acend = aliases.constEnd(); ait != acend; ++ait) { + if (qTextCodecNameMatch(*ait, name)) { if (cache) cache->insert(name, cursor); return cursor; } + } } return 0; @@ -567,9 +571,8 @@ QTextCodec* QTextCodec::codecForMib(int mib) return codec; } - QList::ConstIterator i; - for (int i = 0; i < globalData->allCodecs.size(); ++i) { - QTextCodec *cursor = globalData->allCodecs.at(i); + for (TextCodecListConstIt it = globalData->allCodecs.constBegin(), cend = globalData->allCodecs.constEnd(); it != cend; ++it) { + QTextCodec *cursor = *it; if (cursor->mibEnum() == mib) { if (cache) cache->insert(key, cursor); @@ -604,9 +607,9 @@ QList QTextCodec::availableCodecs() QList codecs; - for (int i = 0; i < globalData->allCodecs.size(); ++i) { - codecs += globalData->allCodecs.at(i)->name(); - codecs += globalData->allCodecs.at(i)->aliases(); + for (TextCodecListConstIt it = globalData->allCodecs.constBegin(), cend = globalData->allCodecs.constEnd(); it != cend; ++it) { + codecs += (*it)->name(); + codecs += (*it)->aliases(); } #ifdef QT_USE_ICU @@ -636,8 +639,8 @@ QList QTextCodec::availableMibs() QList codecs; - for (int i = 0; i < globalData->allCodecs.size(); ++i) - codecs += globalData->allCodecs.at(i)->mibEnum(); + for (TextCodecListConstIt it = globalData->allCodecs.constBegin(), cend = globalData->allCodecs.constEnd(); it != cend; ++it) + codecs += (*it)->mibEnum(); return codecs; #endif -- cgit v1.2.3