From 61e8487e8e922f82811cda67550a0aa3905761bc Mon Sep 17 00:00:00 2001 From: Stephen Kelly Date: Tue, 24 Jan 2012 23:27:34 +0100 Subject: [PATCH] Mark the single argument containers as movable. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I1557b9f3c2d3ad805e1ab7bf4d49973f08664a79 Reviewed-by: João Abecasis Reviewed-by: Jędrzej Nowacki --- src/corelib/global/qglobal.h | 25 +++++++++++++++++ .../corelib/kernel/qvariant/tst_qvariant.cpp | 28 +++++++++++++++++++ 2 files changed, 53 insertions(+) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 72d384e464..43632cb41c 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -2050,6 +2050,31 @@ public: }; }; + +#define Q_DECLARE_MOVABLE_CONTAINER(CONTAINER) \ +template class CONTAINER; \ +template \ +class QTypeInfo< CONTAINER > \ +{ \ +public: \ + enum { \ + isPointer = false, \ + isComplex = true, \ + isStatic = false, \ + isLarge = (sizeof(CONTAINER) > sizeof(void*)), \ + isDummy = false \ + }; \ +}; + +Q_DECLARE_MOVABLE_CONTAINER(QList) +Q_DECLARE_MOVABLE_CONTAINER(QVector) +Q_DECLARE_MOVABLE_CONTAINER(QQueue) +Q_DECLARE_MOVABLE_CONTAINER(QStack) +Q_DECLARE_MOVABLE_CONTAINER(QLinkedList) +Q_DECLARE_MOVABLE_CONTAINER(QSet) + +#undef Q_DECLARE_MOVABLE_CONTAINER + /* Specialize a specific type with: diff --git a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp index f88e795167..27eaa69a32 100644 --- a/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp +++ b/tests/auto/corelib/kernel/qvariant/tst_qvariant.cpp @@ -3254,6 +3254,34 @@ void tst_QVariant::moreCustomTypes() PLAY_WITH_VARIANT(d, false, QString(), 0, false); } QCOMPARE(MyMovable::count, 0); + + { + QList > data; + PLAY_WITH_VARIANT(data, false, QString(), 0, false); + data << (QList() << 42); + PLAY_WITH_VARIANT(data, false, QString(), 0, false); + } + + { + QList > data; + PLAY_WITH_VARIANT(data, false, QString(), 0, false); + data << (QVector() << 42); + PLAY_WITH_VARIANT(data, false, QString(), 0, false); + } + + { + QList > data; + PLAY_WITH_VARIANT(data, false, QString(), 0, false); + data << (QSet() << 42); + PLAY_WITH_VARIANT(data, false, QString(), 0, false); + } + + { + QList > data; + PLAY_WITH_VARIANT(data, false, QString(), 0, false); + data << (QLinkedList() << 42); + PLAY_WITH_VARIANT(data, false, QString(), 0, false); + } } void tst_QVariant::movabilityTest()