From 5a92bc9760eb0bff73ac312850f81059f05eb5a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Abecasis?= Date: Fri, 6 Jan 2012 14:38:57 +0100 Subject: [PATCH] Don't allocate when inserting overlapping data MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (This is only for a test case, but still...) Change-Id: Ied205860e5469000249e15a5478c10db53f1fdaa Reviewed-by: Thiago Macieira Reviewed-by: Jędrzej Nowacki --- tests/auto/corelib/tools/qarraydata/simplevector.h | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/auto/corelib/tools/qarraydata/simplevector.h b/tests/auto/corelib/tools/qarraydata/simplevector.h index e7032f06085..54c5fd2f614 100644 --- a/tests/auto/corelib/tools/qarraydata/simplevector.h +++ b/tests/auto/corelib/tools/qarraydata/simplevector.h @@ -237,11 +237,15 @@ public: return; } - // Temporarily copy overlapping data, if needed if ((first >= where && first < end) || (last > where && last <= end)) { - SimpleVector tmp(first, last); - d->insert(where, tmp.constBegin(), tmp.constEnd()); + // Copy overlapping data first and only then shuffle it into place + T *start = d->begin() + position; + T *middle = d->end(); + + d->copyAppend(first, last); + std::rotate(start, middle, d->end()); + return; }