summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qarraydatapointer.h
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 /src/corelib/tools/qarraydatapointer.h
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 'src/corelib/tools/qarraydatapointer.h')
-rw-r--r--src/corelib/tools/qarraydatapointer.h24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/corelib/tools/qarraydatapointer.h b/src/corelib/tools/qarraydatapointer.h
index 0d072a510e..f1cd1dc4b1 100644
--- a/src/corelib/tools/qarraydatapointer.h
+++ b/src/corelib/tools/qarraydatapointer.h
@@ -121,7 +121,31 @@ public:
d = Data::sharedEmpty();
}
+ bool detach()
+ {
+ if (d->ref.isShared()) {
+ Data *copy = clone();
+ QArrayDataPointer old(d);
+ d = copy;
+ return true;
+ }
+
+ return false;
+ }
+
private:
+ Data *clone() const Q_REQUIRED_RESULT
+ {
+ QArrayDataPointer copy(Data::allocate(d->alloc ? d->alloc : d->size,
+ d->capacityReserved));
+ if (d->size)
+ copy->copyAppend(d->begin(), d->end());
+
+ Data *result = copy.d;
+ copy.d = Data::sharedNull();
+ return result;
+ }
+
Data *d;
};