QVector: add relational operators <,<=,>,>=
std::vector has them, too. [ChangeLog][QtCore][QVector] Added relational operators <, <=, >, >= if the element type supports operator<. Change-Id: I0bcb22dfcc43cb0362f17b4e06154ce18646580a Reviewed-by: Kai Koehne <kai.koehne@theqtcompany.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
929cc27ffe
commit
34c6fbf846
@ -290,6 +290,54 @@
|
||||
\sa operator==()
|
||||
*/
|
||||
|
||||
/*! \fn bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)
|
||||
\since 5.6
|
||||
\relates QVector
|
||||
|
||||
Returns \c true if vector \a lhs is
|
||||
\l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
|
||||
{lexicographically less than} \a rhs; otherwise returns \c false.
|
||||
|
||||
This function requires the value type to have an implementation
|
||||
of \c operator<().
|
||||
*/
|
||||
|
||||
/*! \fn bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
|
||||
\since 5.6
|
||||
\relates QVector
|
||||
|
||||
Returns \c true if vector \a lhs is
|
||||
\l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
|
||||
{lexicographically less than or equal to} \a rhs; otherwise returns \c false.
|
||||
|
||||
This function requires the value type to have an implementation
|
||||
of \c operator<().
|
||||
*/
|
||||
|
||||
/*! \fn bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)
|
||||
\since 5.6
|
||||
\relates QVector
|
||||
|
||||
Returns \c true if vector \a lhs is
|
||||
\l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
|
||||
{lexicographically greater than} \a rhs; otherwise returns \c false.
|
||||
|
||||
This function requires the value type to have an implementation
|
||||
of \c operator<().
|
||||
*/
|
||||
|
||||
/*! \fn bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
|
||||
\since 5.6
|
||||
\relates QVector
|
||||
|
||||
Returns \c true if vector \a lhs is
|
||||
\l{http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare}
|
||||
{lexicographically greater than or equal to} \a rhs; otherwise returns \c false.
|
||||
|
||||
This function requires the value type to have an implementation
|
||||
of \c operator<().
|
||||
*/
|
||||
|
||||
/*! \fn int QVector::size() const
|
||||
|
||||
Returns the number of items in the vector.
|
||||
|
@ -865,6 +865,36 @@ QList<T> QList<T>::fromVector(const QVector<T> &vector)
|
||||
Q_DECLARE_SEQUENTIAL_ITERATOR(Vector)
|
||||
Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR(Vector)
|
||||
|
||||
template <typename T>
|
||||
bool operator<(const QVector<T> &lhs, const QVector<T> &rhs)
|
||||
Q_DECL_NOEXCEPT_EXPR(noexcept(std::lexicographical_compare(lhs.begin(), lhs.end(),
|
||||
rhs.begin(), rhs.end())))
|
||||
{
|
||||
return std::lexicographical_compare(lhs.begin(), lhs.end(),
|
||||
rhs.begin(), rhs.end());
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator>(const QVector<T> &lhs, const QVector<T> &rhs)
|
||||
Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
|
||||
{
|
||||
return rhs < lhs;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator<=(const QVector<T> &lhs, const QVector<T> &rhs)
|
||||
Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
|
||||
{
|
||||
return !(lhs > rhs);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline bool operator>=(const QVector<T> &lhs, const QVector<T> &rhs)
|
||||
Q_DECL_NOEXCEPT_EXPR(noexcept(lhs < rhs))
|
||||
{
|
||||
return !(lhs < rhs);
|
||||
}
|
||||
|
||||
/*
|
||||
### Qt 5:
|
||||
### This needs to be removed for next releases of Qt. It is a workaround for vc++ because
|
||||
|
@ -123,6 +123,13 @@ struct Custom {
|
||||
return i == other.i;
|
||||
}
|
||||
|
||||
bool operator<(const Custom &other) const
|
||||
{
|
||||
check(&other);
|
||||
check(this);
|
||||
return i < other.i;
|
||||
}
|
||||
|
||||
Custom &operator=(const Custom &other)
|
||||
{
|
||||
check(&other);
|
||||
@ -2076,6 +2083,19 @@ void tst_QVector::testOperators() const
|
||||
// ==
|
||||
QVERIFY(myvec == combined);
|
||||
|
||||
// <, >, <=, >=
|
||||
QVERIFY(!(myvec < combined));
|
||||
QVERIFY(!(myvec > combined));
|
||||
QVERIFY( myvec <= combined);
|
||||
QVERIFY( myvec >= combined);
|
||||
combined.push_back("G");
|
||||
QVERIFY( myvec < combined);
|
||||
QVERIFY(!(myvec > combined));
|
||||
QVERIFY( myvec <= combined);
|
||||
QVERIFY(!(myvec >= combined));
|
||||
QVERIFY(combined > myvec);
|
||||
QVERIFY(combined >= myvec);
|
||||
|
||||
// []
|
||||
QCOMPARE(myvec[0], QLatin1String("A"));
|
||||
QCOMPARE(myvec[1], QLatin1String("B"));
|
||||
|
Loading…
Reference in New Issue
Block a user