Add support for first(n), last(n) and sliced() to QList
This keeps the API symmetric with what we have in our string classes. Change-Id: I94c5b39b718ca2472f9ca645e7a42e4314636f67 Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>bb10
parent
9a9a1a2a2e
commit
792cb3989a
|
|
@ -378,6 +378,29 @@ public:
|
|||
inline bool endsWith(const T &t) const { return !isEmpty() && last() == t; }
|
||||
QList<T> mid(qsizetype pos, qsizetype len = -1) const;
|
||||
|
||||
QList<T> first(qsizetype n) const
|
||||
{
|
||||
Q_ASSERT(size_t(n) <= size_t(size()));
|
||||
return QList<T>(begin(), begin() + n);
|
||||
}
|
||||
QList<T> last(qsizetype n) const
|
||||
{
|
||||
Q_ASSERT(size_t(n) <= size_t(size()));
|
||||
return QList<T>(end() - n, end());
|
||||
}
|
||||
QList<T> sliced(qsizetype pos) const
|
||||
{
|
||||
Q_ASSERT(size_t(pos) <= size_t(size()));
|
||||
return QList<T>(begin() + pos, end());
|
||||
}
|
||||
QList<T> sliced(qsizetype pos, qsizetype n) const
|
||||
{
|
||||
Q_ASSERT(size_t(pos) <= size_t(size()));
|
||||
Q_ASSERT(n >= 0);
|
||||
Q_ASSERT(pos + n <= size());
|
||||
return QList<T>(begin() + pos, begin() + pos + n);
|
||||
}
|
||||
|
||||
T value(qsizetype i) const { return value(i, T()); }
|
||||
T value(qsizetype i, const T &defaultValue) const;
|
||||
|
||||
|
|
|
|||
|
|
@ -202,6 +202,55 @@
|
|||
are included.
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn template <typename T> QList<T> QList<T>::first(qsizetype n) const
|
||||
\since 6.0
|
||||
|
||||
Returns a sub-list that contains the first \a n elements
|
||||
of this list.
|
||||
|
||||
\note The behavior is undefined when \a n < 0 or \a n > size().
|
||||
|
||||
\sa last(), sliced()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn template <typename T> QList<T> QList<T>::last(qsizetype n) const
|
||||
\since 6.0
|
||||
|
||||
Returns a sub-list that contains the last \a n elements of this list.
|
||||
|
||||
\note The behavior is undefined when \a n < 0 or \a n > size().
|
||||
|
||||
\sa first(), sliced()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn template <typename T> QList<T> QList<T>::sliced(qsizetype pos, qsizetype n) const
|
||||
\since 6.0
|
||||
|
||||
Returns a sub-list that contains \a n elements of this list,
|
||||
starting at position \a pos.
|
||||
|
||||
\note The behavior is undefined when \a pos < 0, \a n < 0,
|
||||
or \a pos + \a n > size().
|
||||
|
||||
\sa first(), last()
|
||||
*/
|
||||
|
||||
/*!
|
||||
\fn template <typename T> QList<T> QList<T>::sliced(qsizetype pos) const
|
||||
\since 6.0
|
||||
\overload
|
||||
|
||||
Returns a sub-list that contains the elements of this list starting at
|
||||
position \a pos and extending to its end.
|
||||
|
||||
\note The behavior is undefined when \a pos < 0 or \a pos > size().
|
||||
|
||||
\sa first(), last()
|
||||
*/
|
||||
|
||||
|
||||
/*! \fn template <typename T> QList<T>::QList()
|
||||
|
||||
|
|
|
|||
|
|
@ -267,6 +267,7 @@ private slots:
|
|||
void last() const;
|
||||
void lastIndexOf() const;
|
||||
void mid() const;
|
||||
void sliced() const;
|
||||
void moveInt() const;
|
||||
void moveMovable() const;
|
||||
void moveCustom() const;
|
||||
|
|
@ -1287,6 +1288,13 @@ void tst_QList::first() const
|
|||
myvec.prepend(23);
|
||||
QCOMPARE(myvec.first(), 23);
|
||||
QCOMPARE(myvec.constFirst(), 23);
|
||||
|
||||
|
||||
QCOMPARE(QList<int>().first(0), QList<int>());
|
||||
QCOMPARE(myvec.first(0), QList<int>());
|
||||
QCOMPARE(myvec.first(1), (QList<int>{23}));
|
||||
QCOMPARE(myvec.first(2), (QList<int>{23, 42}));
|
||||
QCOMPARE(myvec.first(3), myvec);
|
||||
}
|
||||
|
||||
void tst_QList::constFirst() const
|
||||
|
|
@ -1546,6 +1554,12 @@ void tst_QList::last() const
|
|||
myvec.remove(3);
|
||||
QCOMPARE(myvec.last(), QLatin1String("C"));
|
||||
QCOMPARE(myvec.constLast(), QLatin1String("C"));
|
||||
|
||||
QCOMPARE(QList<QString>().last(0), QList<QString>());
|
||||
QCOMPARE(myvec.last(0), QList<QString>());
|
||||
QCOMPARE(myvec.last(1), (QList<QString>{QLatin1String("C")}));
|
||||
QCOMPARE(myvec.last(2), (QList<QString>{QLatin1String("B"), QLatin1String("C")}));
|
||||
QCOMPARE(myvec.last(3), myvec);
|
||||
}
|
||||
|
||||
void tst_QList::constLast() const
|
||||
|
|
@ -1648,6 +1662,22 @@ void tst_QList::mid() const
|
|||
QCOMPARE(list.mid(4), QList<QString>() << "buck" << "hello" << "kitty");
|
||||
}
|
||||
|
||||
void tst_QList::sliced() const
|
||||
{
|
||||
QList<QString> list;
|
||||
list << "foo" << "bar" << "baz" << "bak" << "buck" << "hello" << "kitty";
|
||||
|
||||
QCOMPARE(QList<QString>().sliced(0), QList<QString>());
|
||||
QCOMPARE(QList<QString>().sliced(0, 0), QList<QString>());
|
||||
QCOMPARE(list.sliced(3, 3), QList<QString>() << "bak" << "buck" << "hello");
|
||||
QCOMPARE(list.sliced(3), QList<QString>() << "bak" << "buck" << "hello" << "kitty");
|
||||
QCOMPARE(list.sliced(6, 1), QList<QString>() << "kitty");
|
||||
QCOMPARE(list.sliced(6), QList<QString>() << "kitty");
|
||||
QCOMPARE(list.sliced(0, list.size()), list);
|
||||
QCOMPARE(list.sliced(0), list);
|
||||
QCOMPARE(list.sliced(4), QList<QString>() << "buck" << "hello" << "kitty");
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void tst_QList::qhash() const
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue