QVector: add removeOne(), removeAll() for QList compatibility
Eases migration from QList to QVector. [ChangeLog][QtCore][QVector] Added removeOne(), removeAll() for QList compatibility. Change-Id: I4211afb2e077c187d0a39f0ac4528f0c66721fb3 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
This commit is contained in:
parent
9157a1f97a
commit
84c10500b1
@ -576,6 +576,28 @@
|
||||
\sa remove(), QList::removeAt()
|
||||
*/
|
||||
|
||||
/*! \fn int QVector::removeAll(const T &t)
|
||||
\since 5.4
|
||||
|
||||
Removes all elements that compare equal to \a t from the
|
||||
vector. Returns the number of elements removed, if any.
|
||||
|
||||
Provided for compatibility with QList.
|
||||
|
||||
\sa removeOne(), QList::removeAll()
|
||||
*/
|
||||
|
||||
/*! \fn bool QVector::removeOne(const T &t)
|
||||
\since 5.4
|
||||
|
||||
Removes the first element that compares equal to \a t from the
|
||||
vector. Returns whether an element was, in fact, removed.
|
||||
|
||||
Provided for compatibility with QList.
|
||||
|
||||
\sa removeAll(), QList::removeOne()
|
||||
*/
|
||||
|
||||
/*! \fn int QVector::length() const
|
||||
\since 5.2
|
||||
|
||||
|
@ -154,6 +154,24 @@ public:
|
||||
|
||||
// QList compatibility
|
||||
void removeAt(int i) { remove(i); }
|
||||
int removeAll(const T &t)
|
||||
{
|
||||
const const_iterator ce = this->cend(), cit = std::find(this->cbegin(), ce, t);
|
||||
if (cit == ce)
|
||||
return 0;
|
||||
const iterator e = end(), it = std::remove(c2m(cit), e, t);
|
||||
const int result = std::distance(it, e);
|
||||
erase(it, e);
|
||||
return result;
|
||||
}
|
||||
bool removeOne(const T &t)
|
||||
{
|
||||
const int i = indexOf(t);
|
||||
if (i < 0)
|
||||
return false;
|
||||
remove(i);
|
||||
return true;
|
||||
}
|
||||
int length() const { return size(); }
|
||||
T takeAt(int i) { T t = at(i); remove(i); return t; }
|
||||
|
||||
@ -250,6 +268,7 @@ private:
|
||||
{
|
||||
return (i <= d->end()) && (d->begin() <= i);
|
||||
}
|
||||
iterator c2m(const_iterator it) { return begin() + (it - cbegin()); }
|
||||
class AlignmentDummy { Data header; T array[1]; };
|
||||
};
|
||||
|
||||
|
@ -1423,13 +1423,28 @@ void tst_QVector::remove() const
|
||||
T val1 = SimpleValue<T>::at(1);
|
||||
T val2 = SimpleValue<T>::at(2);
|
||||
T val3 = SimpleValue<T>::at(3);
|
||||
T val4 = SimpleValue<T>::at(4);
|
||||
myvec << val1 << val2 << val3;
|
||||
myvec << val1 << val2 << val3;
|
||||
myvec << val1 << val2 << val3;
|
||||
// remove middle
|
||||
myvec.remove(1);
|
||||
QCOMPARE(myvec, QVector<T>() << val1 << val3);
|
||||
QCOMPARE(myvec, QVector<T>() << val1 << val3 << val1 << val2 << val3 << val1 << val2 << val3);
|
||||
|
||||
// removeOne()
|
||||
QVERIFY(!myvec.removeOne(val4));
|
||||
QVERIFY(myvec.removeOne(val2));
|
||||
QCOMPARE(myvec, QVector<T>() << val1 << val3 << val1 << val3 << val1 << val2 << val3);
|
||||
|
||||
// removeAll()
|
||||
QCOMPARE(myvec.removeAll(val4), 0);
|
||||
QCOMPARE(myvec.removeAll(val1), 3);
|
||||
QCOMPARE(myvec, QVector<T>() << val3 << val3 << val2 << val3);
|
||||
QCOMPARE(myvec.removeAll(val2), 1);
|
||||
QCOMPARE(myvec, QVector<T>() << val3 << val3 << val3);
|
||||
|
||||
// remove rest
|
||||
myvec.remove(0, 2);
|
||||
myvec.remove(0, 3);
|
||||
QCOMPARE(myvec, QVector<T>());
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user