Refactor QVersionNumber to use the public functions when possible
Use segmentCount() and segmentAt() instead of going to m_segments. This is done in preparation for a major refactor of QVersionNumber that will store the version numbers in the object itself, without QVector. Change-Id: I03dbdee59a3c74c21a0a4e70c1bb9182250f6223 Reviewed-by: Marc Mutz <marc.mutz@kdab.com>
This commit is contained in:
parent
f337e22401
commit
287971eb7f
@ -208,8 +208,13 @@ QT_BEGIN_NAMESPACE
|
|||||||
*/
|
*/
|
||||||
bool QVersionNumber::isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHROW
|
bool QVersionNumber::isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHROW
|
||||||
{
|
{
|
||||||
return m_segments.size() <= other.m_segments.size() &&
|
if (segmentCount() > other.segmentCount())
|
||||||
std::equal(m_segments.begin(), m_segments.end(), other.m_segments.begin());
|
return false;
|
||||||
|
for (int i = 0; i < segmentCount(); ++i) {
|
||||||
|
if (segmentAt(i) != other.segmentAt(i))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -227,30 +232,24 @@ bool QVersionNumber::isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHRO
|
|||||||
*/
|
*/
|
||||||
int QVersionNumber::compare(const QVersionNumber &v1, const QVersionNumber &v2) Q_DECL_NOTHROW
|
int QVersionNumber::compare(const QVersionNumber &v1, const QVersionNumber &v2) Q_DECL_NOTHROW
|
||||||
{
|
{
|
||||||
QVector<int>::const_iterator i1 = v1.m_segments.constBegin();
|
int commonlen = qMin(v1.segmentCount(), v2.segmentCount());
|
||||||
const QVector<int>::const_iterator e1 = v1.m_segments.constEnd();
|
for (int i = 0; i < commonlen; ++i) {
|
||||||
QVector<int>::const_iterator i2 = v2.m_segments.constBegin();
|
if (v1.segmentAt(i) != v2.segmentAt(i))
|
||||||
const QVector<int>::const_iterator e2 = v2.m_segments.constEnd();
|
return v1.segmentAt(i) - v2.segmentAt(i);
|
||||||
|
|
||||||
while (i1 != e1 && i2 != e2) {
|
|
||||||
if (*i1 != *i2)
|
|
||||||
return (*i1 - *i2);
|
|
||||||
++i1;
|
|
||||||
++i2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ran out of segments in v1 and/or v2 and need to check the first trailing
|
// ran out of segments in v1 and/or v2 and need to check the first trailing
|
||||||
// segment to finish the compare
|
// segment to finish the compare
|
||||||
if (i1 != e1) {
|
if (v1.segmentCount() > commonlen) {
|
||||||
// v1 is longer
|
// v1 is longer
|
||||||
if (*i1 != 0)
|
if (v1.segmentAt(commonlen) != 0)
|
||||||
return *i1;
|
return v1.segmentAt(commonlen);
|
||||||
else
|
else
|
||||||
return 1;
|
return 1;
|
||||||
} else if (i2 != e2) {
|
} else if (v2.segmentCount() > commonlen) {
|
||||||
// v2 is longer
|
// v2 is longer
|
||||||
if (*i2 != 0)
|
if (v2.segmentAt(commonlen) != 0)
|
||||||
return -*i2;
|
return -v2.segmentAt(commonlen);
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -270,13 +269,18 @@ int QVersionNumber::compare(const QVersionNumber &v1, const QVersionNumber &v2)
|
|||||||
QVersionNumber QVersionNumber::commonPrefix(const QVersionNumber &v1,
|
QVersionNumber QVersionNumber::commonPrefix(const QVersionNumber &v1,
|
||||||
const QVersionNumber &v2)
|
const QVersionNumber &v2)
|
||||||
{
|
{
|
||||||
int min = qMin(v1.m_segments.size(), v2.m_segments.size());
|
int commonlen = qMin(v1.segmentCount(), v2.segmentCount());
|
||||||
QVector<int>::const_iterator i1 = v1.m_segments.begin();
|
int i;
|
||||||
QVector<int>::const_iterator e1;
|
for (i = 0; i < commonlen; ++i) {
|
||||||
e1 = std::mismatch(i1,
|
if (v1.segmentAt(i) != v2.segmentAt(i))
|
||||||
v1.m_segments.begin() + min,
|
break;
|
||||||
v2.m_segments.begin()).first;
|
}
|
||||||
return QVersionNumber(v1.m_segments.mid(0, e1 - i1));
|
|
||||||
|
if (i == 0)
|
||||||
|
return QVersionNumber();
|
||||||
|
|
||||||
|
// will use a vector
|
||||||
|
return QVersionNumber(v1.m_segments.mid(0, i));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -347,12 +351,12 @@ QVersionNumber QVersionNumber::commonPrefix(const QVersionNumber &v1,
|
|||||||
QString QVersionNumber::toString() const
|
QString QVersionNumber::toString() const
|
||||||
{
|
{
|
||||||
QString version;
|
QString version;
|
||||||
version.reserve(qMax(m_segments.size() * 2 - 1, 0));
|
version.reserve(qMax(segmentCount() * 2 - 1, 0));
|
||||||
bool first = true;
|
bool first = true;
|
||||||
for (QVector<int>::const_iterator it = m_segments.begin(), end = m_segments.end(); it != end; ++it) {
|
for (int i = 0; i < segmentCount(); ++i) {
|
||||||
if (!first)
|
if (!first)
|
||||||
version += QLatin1Char('.');
|
version += QLatin1Char('.');
|
||||||
version += QString::number(*it);
|
version += QString::number(segmentAt(i));
|
||||||
first = false;
|
first = false;
|
||||||
}
|
}
|
||||||
return version;
|
return version;
|
||||||
@ -465,7 +469,11 @@ QDebug operator<<(QDebug debug, const QVersionNumber &version)
|
|||||||
*/
|
*/
|
||||||
uint qHash(const QVersionNumber &key, uint seed)
|
uint qHash(const QVersionNumber &key, uint seed)
|
||||||
{
|
{
|
||||||
return qHashRange(key.m_segments.begin(), key.m_segments.end(), seed);
|
QtPrivate::QHashCombine hash;
|
||||||
|
for (int i = 0; i < key.segmentCount(); ++i)
|
||||||
|
seed = hash(seed, key.segmentAt(i));
|
||||||
|
return seed;
|
||||||
}
|
}
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
|
||||||
|
@ -83,10 +83,10 @@ public:
|
|||||||
{ m_segments.reserve(3); m_segments << maj << min << mic; }
|
{ m_segments.reserve(3); m_segments << maj << min << mic; }
|
||||||
|
|
||||||
inline bool isNull() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
|
inline bool isNull() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
|
||||||
{ return m_segments.isEmpty(); }
|
{ return segmentCount() == 0; }
|
||||||
|
|
||||||
inline bool isNormalized() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
|
inline bool isNormalized() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
|
||||||
{ return isNull() || m_segments.last() != 0; }
|
{ return isNull() || segmentAt(segmentCount() - 1) != 0; }
|
||||||
|
|
||||||
inline int majorVersion() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
|
inline int majorVersion() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
|
||||||
{ return segmentAt(0); }
|
{ return segmentAt(0); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user