From 9400295a7ca6411cb220cd7161db393e11e1f807 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Sat, 7 Feb 2015 00:22:27 +0100 Subject: QTzTimeZonePrivate: replace an inefficient QList with QVector (IV) The QTimeZonePrivate::Data type is larger than void*, so holding them in QLists is horribly inefficient. In addition, this type is held elsewhere in QVector, so do that here, too. As well as being faster, also saves 1.3K of text size on optimized AMD64 builds. Change-Id: I1ecf3ee0d955f6b19d2269204e2febc2ba2a9d9d Reviewed-by: Thiago Macieira --- src/corelib/tools/qtimezoneprivate_tz.cpp | 34 +++++++++++++++---------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'src/corelib/tools') diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp index 233dd9d516..74499bf52f 100644 --- a/src/corelib/tools/qtimezoneprivate_tz.cpp +++ b/src/corelib/tools/qtimezoneprivate_tz.cpp @@ -397,11 +397,11 @@ static int parsePosixOffset(const QByteArray &timeRule) return 0; } -static QList calculatePosixTransitions(const QByteArray &posixRule, - int startYear, int endYear, - int lastTranMSecs) +static QVector calculatePosixTransitions(const QByteArray &posixRule, + int startYear, int endYear, + int lastTranMSecs) { - QList list; + QVector result; // Limit year by qint64 max size for msecs if (startYear > 292278994) @@ -448,8 +448,8 @@ static QList calculatePosixTransitions(const QByteArray data.standardTimeOffset = utcOffset; data.daylightTimeOffset = 0; data.abbreviation = stdName; - list << data; - return list; + result << data; + return result; } // If not populated the total dst offset is 1 hour @@ -493,17 +493,17 @@ static QList calculatePosixTransitions(const QByteArray // Part of the high year will overflow if (year == 292278994 && (dstData.atMSecsSinceEpoch < 0 || stdData.atMSecsSinceEpoch < 0)) { if (dstData.atMSecsSinceEpoch > 0) { - list << dstData; + result << dstData; } else if (stdData.atMSecsSinceEpoch > 0) { - list << stdData; + result << stdData; } } else if (dst < std) { - list << dstData << stdData; + result << dstData << stdData; } else { - list << stdData << dstData; + result << stdData << dstData; } } - return list; + return result; } // Create the system default time zone @@ -812,8 +812,8 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const &&!m_posixRule.isEmpty() && forMSecsSinceEpoch >= 0) { const int year = QDateTime::fromMSecsSinceEpoch(forMSecsSinceEpoch, Qt::UTC).date().year(); const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0; - QList posixTrans = calculatePosixTransitions(m_posixRule, year - 1, - year + 1, lastMSecs); + QVector posixTrans = calculatePosixTransitions(m_posixRule, year - 1, + year + 1, lastMSecs); for (int i = posixTrans.size() - 1; i >= 0; --i) { if (posixTrans.at(i).atMSecsSinceEpoch <= forMSecsSinceEpoch) { QTimeZonePrivate::Data data; @@ -856,8 +856,8 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::nextTransition(qint64 afterMSecsSince &&!m_posixRule.isEmpty() && afterMSecsSinceEpoch >= 0) { const int year = QDateTime::fromMSecsSinceEpoch(afterMSecsSinceEpoch, Qt::UTC).date().year(); const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0; - QList posixTrans = calculatePosixTransitions(m_posixRule, year - 1, - year + 1, lastMSecs); + QVector posixTrans = calculatePosixTransitions(m_posixRule, year - 1, + year + 1, lastMSecs); for (int i = 0; i < posixTrans.size(); ++i) { if (posixTrans.at(i).atMSecsSinceEpoch > afterMSecsSinceEpoch) return posixTrans.at(i); @@ -882,8 +882,8 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::previousTransition(qint64 beforeMSecs &&!m_posixRule.isEmpty() && beforeMSecsSinceEpoch > 0) { const int year = QDateTime::fromMSecsSinceEpoch(beforeMSecsSinceEpoch, Qt::UTC).date().year(); const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0; - QList posixTrans = calculatePosixTransitions(m_posixRule, year - 1, - year + 1, lastMSecs); + QVector posixTrans = calculatePosixTransitions(m_posixRule, year - 1, + year + 1, lastMSecs); for (int i = posixTrans.size() - 1; i >= 0; --i) { if (posixTrans.at(i).atMSecsSinceEpoch < beforeMSecsSinceEpoch) return posixTrans.at(i); -- cgit v1.2.3