summaryrefslogtreecommitdiffstats
path: root/src/corelib/time
diff options
context:
space:
mode:
authorAnton Kudryavtsev <anton.kudryavtsev@vk.team>2024-03-15 15:17:09 +0300
committerAnton Kudryavtsev <anton.kudryavtsev@vk.team>2024-03-16 17:41:03 +0300
commitdb295b6d6e951617fe4e47849e76d1e029d0b993 (patch)
tree1f5cbab2ae2c5f49adc358b4a51b8bf52d6b8fba /src/corelib/time
parenta2136a073e9884b17c2147218960c886b9d4b083 (diff)
QTimeZonePrivate: extract method for available zone ids
according to DRY. Also don't use erase after unique call, just use new past-the-end iterator. Change-Id: I5c033b6433105842e72eca9a7a2d5ea9ec0032ec Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/time')
-rw-r--r--src/corelib/time/qtimezoneprivate.cpp36
1 files changed, 14 insertions, 22 deletions
diff --git a/src/corelib/time/qtimezoneprivate.cpp b/src/corelib/time/qtimezoneprivate.cpp
index 78671543a6..861ebefbdf 100644
--- a/src/corelib/time/qtimezoneprivate.cpp
+++ b/src/corelib/time/qtimezoneprivate.cpp
@@ -532,6 +532,18 @@ QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds() const
return QList<QByteArray>();
}
+static QList<QByteArray> selectAvailable(QList<QByteArray>&& desired, const QList<QByteArray>& all)
+{
+ std::sort(desired.begin(), desired.end());
+ const auto newEnd = std::unique(desired.begin(), desired.end());
+ const auto newSize = std::distance(desired.begin(), newEnd);
+ QList<QByteArray> result;
+ result.reserve(qMin(all.size(), newSize));
+ std::set_intersection(all.begin(), all.end(), desired.cbegin(),
+ std::next(desired.cbegin(), newSize), std::back_inserter(result));
+ return result;
+}
+
QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(QLocale::Territory territory) const
{
// Default fall-back mode, use the zoneTable to find Region of know Zones
@@ -544,17 +556,7 @@ QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(QLocale::Territory terr
regions << QByteArray(l1.data(), l1.size());
}
}
-
- std::sort(regions.begin(), regions.end());
- regions.erase(std::unique(regions.begin(), regions.end()), regions.end());
-
- // Then select just those that are available
- const QList<QByteArray> all = availableTimeZoneIds();
- QList<QByteArray> result;
- result.reserve(qMin(all.size(), regions.size()));
- std::set_intersection(all.begin(), all.end(), regions.cbegin(), regions.cend(),
- std::back_inserter(result));
- return result;
+ return selectAvailable(std::move(regions), availableTimeZoneIds());
}
QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) const
@@ -572,17 +574,7 @@ QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) cons
}
}
}
-
- std::sort(offsets.begin(), offsets.end());
- offsets.erase(std::unique(offsets.begin(), offsets.end()), offsets.end());
-
- // Then select just those that are available
- const QList<QByteArray> all = availableTimeZoneIds();
- QList<QByteArray> result;
- result.reserve(qMin(all.size(), offsets.size()));
- std::set_intersection(all.begin(), all.end(), offsets.cbegin(), offsets.cend(),
- std::back_inserter(result));
- return result;
+ return selectAvailable(std::move(offsets), availableTimeZoneIds());
}
#ifndef QT_NO_DATASTREAM