From 7c65935810b30922e62bfc5d366a81d04deb5ec1 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Mon, 19 Apr 2021 13:21:29 +0200 Subject: Make zone-name part of date-time parsing a little faster QDateTimeParser::findTimeZoneName()'s invalidZoneNameCharacter() check was using QLatin1String::contains(QChar), which converts the Latin-1 string to UTF-16 on each call, despite having pre-checked that the QChar is ASCII. So use memchr() instead. Change-Id: I011e2b4ba3be20711fc5005f62e4f9f6a392dd16 Reviewed-by: Thiago Macieira --- src/corelib/time/qdatetimeparser.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/corelib/time') diff --git a/src/corelib/time/qdatetimeparser.cpp b/src/corelib/time/qdatetimeparser.cpp index 2e27921717..e37ddbbda7 100644 --- a/src/corelib/time/qdatetimeparser.cpp +++ b/src/corelib/time/qdatetimeparser.cpp @@ -1734,8 +1734,8 @@ QDateTimeParser::findTimeZoneName(QStringView str, const QDateTime &when) const // Collect up plausibly-valid characters; let QTimeZone work out what's // truly valid. const auto invalidZoneNameCharacter = [] (const QChar &c) { - return c.unicode() >= 127u - || (!c.isLetterOrNumber() && !QLatin1String("+-./:_").contains(c)); + const auto cu = c.unicode(); + return cu >= 127u || !(memchr("+-./:_", char(cu), 6) || c.isLetterOrNumber()); }; int index = std::distance(str.cbegin(), std::find_if(str.cbegin(), str.cend(), invalidZoneNameCharacter)); -- cgit v1.2.3