diff options
author | Edward Welbourne <edward.welbourne@qt.io> | 2021-03-02 12:30:54 +0100 |
---|---|---|
committer | Edward Welbourne <edward.welbourne@qt.io> | 2021-03-16 11:50:51 +0100 |
commit | eefaf54d9e4d77c2e67a3926c7e5080b376f7067 (patch) | |
tree | da004a28bea2083afbc59cf19bc6476b27c9ea91 /src/corelib/time | |
parent | 17bf553b76ebd688e58e4de4271407e2058d89ef (diff) |
Use QFile directly instead of via QTextStream
Follows up on a TODO comment that says QTextStream is less efficient.
In any case, QFile has readLine() returning QByteArray, without
conversion to QString, and the parsing is uncomplicated.
Change-Id: I06e563df417692d3b6514a52a313a0ff55b0b52e
Reviewed-by: Øystein Heskestad <oystein.heskestad@qt.io>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/time')
-rw-r--r-- | src/corelib/time/qtimezoneprivate_tz.cpp | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/src/corelib/time/qtimezoneprivate_tz.cpp b/src/corelib/time/qtimezoneprivate_tz.cpp index ace966e15b..e758f1c12f 100644 --- a/src/corelib/time/qtimezoneprivate_tz.cpp +++ b/src/corelib/time/qtimezoneprivate_tz.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2020 The Qt Company Ltd. +** Copyright (C) 2021 The Qt Company Ltd. ** Copyright (C) 2019 Crimson AS <info@crimson.no> ** Copyright (C) 2013 John Layt <jlayt@kde.org> ** Contact: https://www.qt.io/licensing/ @@ -88,19 +88,29 @@ static QTzTimeZoneHash loadTzTimeZones() return QTzTimeZoneHash(); QTzTimeZoneHash zonesHash; - // TODO QTextStream inefficient, replace later - QTextStream ts(&tzif); - while (!ts.atEnd()) { - const QString line = ts.readLine(); - // Comment lines are prefixed with a # - if (!line.isEmpty() && line.at(0) != u'#') { - // Data rows are tab-separated columns Region, Coordinates, ID, Optional Comments - const auto parts = QStringView{line}.split(QLatin1Char('\t')); + while (!tzif.atEnd()) { + const QByteArray line = tzif.readLine().trimmed(); + if (line.isEmpty() || line.at(0) == '#') // Ignore empty or comment + continue; + // Data rows are tab-separated columns Region, Coordinates, ID, Optional Comments + QByteArrayView text(line); + int cut = text.indexOf('\t'); + if (Q_LIKELY(cut > 0)) { QTzTimeZone zone; - zone.country = QLocalePrivate::codeToCountry(parts.at(0)); - if (parts.size() > 3) - zone.comment = parts.at(3).toUtf8(); - zonesHash.insert(parts.at(2).toUtf8(), zone); + // TODO: QLocale & friends could do this look-up without UTF8-conversion: + zone.country = QLocalePrivate::codeToCountry(QString::fromUtf8(text.first(cut))); + text = text.sliced(cut + 1); + cut = text.indexOf('\t'); + if (Q_LIKELY(cut >= 0)) { // Skip over Coordinates, read ID and comment + text = text.sliced(cut + 1); + cut = text.indexOf('\t'); // < 0 if line has no comment + if (Q_LIKELY(cut)) { + const QByteArray id = (cut > 0 ? text.first(cut) : text).toByteArray(); + if (cut > 0) + zone.comment = text.sliced(cut + 1).toByteArray(); + zonesHash.insert(id, zone); + } + } } } return zonesHash; |