summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/tools/qarraydata
diff options
context:
space:
mode:
authorJoão Abecasis <joao.abecasis@nokia.com>2011-11-24 17:22:37 +0100
committerQt by Nokia <qt-info@nokia.com>2012-01-06 14:25:42 +0100
commit51048e1f31df5be45e71a75fc535111dd36c4c9e (patch)
treee635d03d302cf6c1205a4831ed1c12932271a914 /tests/auto/corelib/tools/qarraydata
parentb29338e80588b97efdb57d62cd3ca474f16db965 (diff)
Adding detach to QArrayDataPointer
Detaching operations added to SimpleVector Change-Id: I5f549582cf579569f08cb8d53a6d12fe32b862e6 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/auto/corelib/tools/qarraydata')
-rw-r--r--tests/auto/corelib/tools/qarraydata/simplevector.h25
-rw-r--r--tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp37
2 files changed, 56 insertions, 6 deletions
diff --git a/tests/auto/corelib/tools/qarraydata/simplevector.h b/tests/auto/corelib/tools/qarraydata/simplevector.h
index c5e19f3c55..9ab28a9ddd 100644
--- a/tests/auto/corelib/tools/qarraydata/simplevector.h
+++ b/tests/auto/corelib/tools/qarraydata/simplevector.h
@@ -93,15 +93,35 @@ public:
size_t size() const { return d->size; }
size_t capacity() const { return d->alloc; }
+ iterator begin() { detach(); return d->begin(); }
+ iterator end() { detach(); return d->end(); }
+
const_iterator begin() const { return d->begin(); }
const_iterator end() const { return d->end(); }
const_iterator constBegin() const { return begin(); }
const_iterator constEnd() const { return end(); }
+ T &operator[](size_t i) { Q_ASSERT(i < size_t(d->size)); detach(); return begin()[i]; }
+ T &at(size_t i) { Q_ASSERT(i < size_t(d->size)); detach(); return begin()[i]; }
+
const T &operator[](size_t i) const { Q_ASSERT(i < size_t(d->size)); return begin()[i]; }
const T &at(size_t i) const { Q_ASSERT(i < size_t(d->size)); return begin()[i]; }
+ T &front()
+ {
+ Q_ASSERT(!isEmpty());
+ detach();
+ return *begin();
+ }
+
+ T &back()
+ {
+ Q_ASSERT(!isEmpty());
+ detach();
+ return *(end() - 1);
+ }
+
const T &front() const
{
Q_ASSERT(!isEmpty());
@@ -231,6 +251,11 @@ public:
d.clear();
}
+ void detach()
+ {
+ d.detach();
+ }
+
private:
QArrayDataPointer<T> d;
};
diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
index 63a26ed926..e9a3218331 100644
--- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
+++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp
@@ -81,6 +81,8 @@ private slots:
void arrayOps();
};
+template <class T> const T &const_(const T &t) { return t; }
+
void tst_QArrayData::referenceCounting()
{
{
@@ -320,13 +322,36 @@ void tst_QArrayData::simpleVector()
QVERIFY(v6 >= v1);
QVERIFY(!(v1 >= v6));
- QCOMPARE(v6.front(), 0);
- QCOMPARE(v6.back(), 6);
+ {
+ SimpleVector<int> temp(v6);
+
+ QCOMPARE(const_(v6).front(), 0);
+ QCOMPARE(const_(v6).back(), 6);
+
+ QVERIFY(temp.isShared());
+ QVERIFY(temp.isSharedWith(v6));
+
+ QCOMPARE(temp.front(), 0);
+ QCOMPARE(temp.back(), 6);
+
+ // Detached
+ QVERIFY(!temp.isShared());
+ const int *const tempBegin = temp.begin();
+
+ for (size_t i = 0; i < v6.size(); ++i) {
+ QCOMPARE(const_(v6)[i], int(i));
+ QCOMPARE(const_(v6).at(i), int(i));
+ QCOMPARE(&const_(v6)[i], &const_(v6).at(i));
+
+ QCOMPARE(const_(v8)[i], const_(v6)[i]);
+
+ QCOMPARE(temp[i], int(i));
+ QCOMPARE(temp.at(i), int(i));
+ QCOMPARE(&temp[i], &temp.at(i));
+ }
- for (size_t i = 0; i < v6.size(); ++i) {
- QCOMPARE(v6[i], int(i));
- QCOMPARE(v6.at(i), int(i));
- QCOMPARE(&v6[i], &v6.at(i));
+ // A single detach should do
+ QCOMPARE(temp.begin(), tempBegin);
}
{