diff options
author | Anton Kudryavtsev <anton.kudryavtsev@vk.team> | 2024-03-15 15:17:09 +0300 |
---|---|---|
committer | Anton Kudryavtsev <anton.kudryavtsev@vk.team> | 2024-03-16 17:41:03 +0300 |
commit | db295b6d6e951617fe4e47849e76d1e029d0b993 (patch) | |
tree | 1f5cbab2ae2c5f49adc358b4a51b8bf52d6b8fba /src/corelib/time | |
parent | a2136a073e9884b17c2147218960c886b9d4b083 (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.cpp | 36 |
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 |