summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThorbjørn Martsum <tmartsum@gmail.com>2013-02-16 20:20:35 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-03-07 06:13:06 +0100
commitab52e722926d495e29263e59a466ad5ff0106275 (patch)
tree75bb1f0b3e408b20f944b325b6c55141eb2829cd
parent510660080de6fab87e117de2663c33eff5ae451b (diff)
QVector - add functions takeFirst and takeLast
This patch adds takeFirst and takeLast which are functions that QList also has. Change-Id: I761f90b529774edc8fa96e07c6fcf76226123b20 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r--src/corelib/tools/qvector.cpp26
-rw-r--r--src/corelib/tools/qvector.h2
-rw-r--r--tests/auto/corelib/tools/qvector/tst_qvector.cpp15
3 files changed, 40 insertions, 3 deletions
diff --git a/src/corelib/tools/qvector.cpp b/src/corelib/tools/qvector.cpp
index 5ece011f0b..e72c1964a2 100644
--- a/src/corelib/tools/qvector.cpp
+++ b/src/corelib/tools/qvector.cpp
@@ -551,7 +551,7 @@
the vector can be empty, call isEmpty() before calling this
function.
- \sa remove(), isEmpty()
+ \sa remove(), takeFirst(), isEmpty()
*/
/*! \fn void QVector::removeLast()
@@ -561,9 +561,31 @@
empty. If the vector can be empty, call isEmpty() before calling
this function.
- \sa remove(), removeFirst(), isEmpty()
+ \sa remove(), takeLast(), removeFirst(), isEmpty()
*/
+/*! \fn T QVector::takeFirst()
+
+ Removes the first item in the vector and returns it. This function
+ assumes the vector is not empty. To avoid failure, call isEmpty()
+ before calling this function.
+
+ \sa takeLast(), removeFirst()
+*/
+
+/*! \fn T QVector::takeLast()
+
+ Removes the last item in the list and returns it. This function
+ assumes the vector is not empty. To avoid failure, call isEmpty()
+ before calling this function.
+
+ If you don't use the return value, removeLast() is more
+ efficient.
+
+ \sa takeFirst(), removeLast()
+*/
+
+
/*! \fn QVector &QVector::fill(const T &value, int size = -1)
Assigns \a value to all items in the vector. If \a size is
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index f6fe316a15..e2c28e4060 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -140,6 +140,8 @@ public:
void remove(int i, int n);
inline void removeFirst() { Q_ASSERT(!isEmpty()); erase(d->begin()); }
inline void removeLast() { Q_ASSERT(!isEmpty()); erase(d->end() - 1); }
+ inline T takeFirst() { Q_ASSERT(!isEmpty()); T r = first(); removeFirst(); return r; }
+ inline T takeLast() { Q_ASSERT(!isEmpty()); T r = last(); removeLast(); return r; }
QVector<T> &fill(const T &t, int size = -1);
diff --git a/tests/auto/corelib/tools/qvector/tst_qvector.cpp b/tests/auto/corelib/tools/qvector/tst_qvector.cpp
index 3acd5ddb10..99fbb9cf98 100644
--- a/tests/auto/corelib/tools/qvector/tst_qvector.cpp
+++ b/tests/auto/corelib/tools/qvector/tst_qvector.cpp
@@ -1410,11 +1410,12 @@ struct RemoveLastTestClass
void tst_QVector::removeFirstLast() const
{
// pop_pack - pop_front
- QVector<int> t;
+ QVector<int> t, t2;
t.append(1);
t.append(2);
t.append(3);
t.append(4);
+ t2 = t;
t.pop_front();
QCOMPARE(t.size(), 3);
QCOMPARE(t.at(0), 2);
@@ -1423,6 +1424,18 @@ void tst_QVector::removeFirstLast() const
QCOMPARE(t.at(0), 2);
QCOMPARE(t.at(1), 3);
+ // takefirst - takeLast
+ int n1 = t2.takeLast();
+ QCOMPARE(t2.size(), 3);
+ QCOMPARE(n1, 4);
+ QCOMPARE(t2.at(0), 1);
+ QCOMPARE(t2.at(2), 3);
+ n1 = t2.takeFirst();
+ QCOMPARE(t2.size(), 2);
+ QCOMPARE(n1, 1);
+ QCOMPARE(t2.at(0), 2);
+ QCOMPARE(t2.at(1), 3);
+
// remove first
QVector<int> x, y;
x.append(1);