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>
This commit is contained in:
parent
a2136a073e
commit
db295b6d6e
@ -532,6 +532,18 @@ QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds() const
|
|||||||
return QList<QByteArray>();
|
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
|
QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(QLocale::Territory territory) const
|
||||||
{
|
{
|
||||||
// Default fall-back mode, use the zoneTable to find Region of know Zones
|
// 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());
|
regions << QByteArray(l1.data(), l1.size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return selectAvailable(std::move(regions), availableTimeZoneIds());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) const
|
QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) const
|
||||||
@ -572,17 +574,7 @@ QList<QByteArray> QTimeZonePrivate::availableTimeZoneIds(int offsetFromUtc) cons
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return selectAvailable(std::move(offsets), availableTimeZoneIds());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_DATASTREAM
|
#ifndef QT_NO_DATASTREAM
|
||||||
|
Loading…
x
Reference in New Issue
Block a user