From 40d6e8adf5e3cc45b3bd4a94ad3b57f9444e447f Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 1 Oct 2014 10:56:14 +0200 Subject: QList: prepare for tag dispatching based on memory layout Add one tag class for each of QList's three different memory layouts to QListData, and inherit QList::MemoryLayout from exactly one of them. To simplify overloading, added tag classes that express the negation of the two extreme poles of memory layout (C-compatible and heap), too. The "missing" one could be added when needed, too. Change-Id: I45ea603731499fd3fdfb37d60a0a98fb22ac15ec Reviewed-by: Thiago Macieira --- tests/auto/corelib/tools/qlist/tst_qlist.cpp | 32 ++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'tests/auto/corelib/tools/qlist/tst_qlist.cpp') diff --git a/tests/auto/corelib/tools/qlist/tst_qlist.cpp b/tests/auto/corelib/tools/qlist/tst_qlist.cpp index 95744051e4..1207986dde 100644 --- a/tests/auto/corelib/tools/qlist/tst_qlist.cpp +++ b/tests/auto/corelib/tools/qlist/tst_qlist.cpp @@ -35,6 +35,17 @@ #include #include +template +class is_qlist_array_memory_layout { + struct No { char c; }; + struct Yes { No n[2]; }; + Q_STATIC_ASSERT(sizeof(No) != sizeof(Yes)); + static No check(...); + static Yes check(MemoryLayout); +public: + enum { value = sizeof(check(typename QList::MemoryLayout())) == sizeof(Yes) }; +}; + struct Movable { Movable(char input = 'j') : i(input) @@ -235,6 +246,27 @@ Q_STATIC_ASSERT(!QTypeInfo::isStatic); Q_STATIC_ASSERT(QTypeInfo::isComplex); Q_STATIC_ASSERT(QTypeInfo::isStatic); Q_STATIC_ASSERT(QTypeInfo::isComplex); +// iow: +Q_STATIC_ASSERT(( is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT((!is_qlist_array_memory_layout ::value)); + +Q_STATIC_ASSERT((!is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT((!is_qlist_array_memory_layout::value)); +Q_STATIC_ASSERT(( is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT(( is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT((!is_qlist_array_memory_layout ::value)); + +Q_STATIC_ASSERT(( is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT(( is_qlist_array_memory_layout::value)); +Q_STATIC_ASSERT(( is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT((!is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT((!is_qlist_array_memory_layout ::value)); + +Q_STATIC_ASSERT((!is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT(( is_qlist_array_memory_layout::value)); +Q_STATIC_ASSERT((!is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT((!is_qlist_array_memory_layout ::value)); +Q_STATIC_ASSERT(( is_qlist_array_memory_layout ::value)); class tst_QList : public QObject { -- cgit v1.2.3