diff options
author | João Abecasis <joao.abecasis@nokia.com> | 2011-11-24 17:22:37 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-01-06 14:25:42 +0100 |
commit | 51048e1f31df5be45e71a75fc535111dd36c4c9e (patch) | |
tree | e635d03d302cf6c1205a4831ed1c12932271a914 /src/corelib/tools/qarraydatapointer.h | |
parent | b29338e80588b97efdb57d62cd3ca474f16db965 (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.h | 24 |
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; }; |