summaryrefslogtreecommitdiffstats
path: root/src/corelib/time
diff options
context:
space:
mode:
authorEdward Welbourne <edward.welbourne@qt.io>2021-03-02 12:30:54 +0100
committerEdward Welbourne <edward.welbourne@qt.io>2021-03-16 11:50:51 +0100
commiteefaf54d9e4d77c2e67a3926c7e5080b376f7067 (patch)
treeda004a28bea2083afbc59cf19bc6476b27c9ea91 /src/corelib/time
parent17bf553b76ebd688e58e4de4271407e2058d89ef (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.cpp36
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;