diff options
author | Isak Fyksen <isak.fyksen@qt.io> | 2023-11-17 17:52:03 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@qt.io> | 2024-01-15 20:52:54 +0000 |
commit | 8a23e3aa323443d2ea958b1213b00031e5b13aed (patch) | |
tree | 15b00f6674e5c9fe08807f58de5833710157485b /src/testlib | |
parent | 5e49fa2739bd43e919863b343821c22b3d583afb (diff) |
Make adding new rows to QTestTable more efficient
Added QDuplicateTracker to keep track of used tags, rather than looping
through QTestTablePrivate::dataList for every added tag.
Removed method `hasRow`, instead calling `QDuplicateTracker::hasSeen`
directly in `newData`.
Pick-to: 6.7
Task-number: QTBUG-118619
Change-Id: Idaab70d8c94227f75620924e0f1ead477f93b27a
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Diffstat (limited to 'src/testlib')
-rw-r--r-- | src/testlib/qtesttable.cpp | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/testlib/qtesttable.cpp b/src/testlib/qtesttable.cpp index 5dc3a12661..2276365505 100644 --- a/src/testlib/qtesttable.cpp +++ b/src/testlib/qtesttable.cpp @@ -5,6 +5,7 @@ #include <QtTest/qtestdata.h> #include <QtTest/qtestassert.h> +#include <QtCore/private/qduplicatetracker_p.h> #include <QtCore/qmetaobject.h> #include <string.h> @@ -35,9 +36,11 @@ public: using DataList = std::vector<QTestData *>; DataList dataList; + using TagSet = QDuplicateTracker<std::string>; + TagSet tagSet; + void addColumn(int elemType, const char *elemName) { elementList.push_back(Element(elemName, elemType)); } void addRow(QTestData *data) { dataList.push_back(data); } - bool hasRow(const char *name) const; static QTestTable *currentTestTable; static QTestTable *gTable; @@ -73,7 +76,8 @@ bool QTestTable::isEmpty() const QTestData *QTestTable::newData(const char *tag) { - if (d->hasRow(tag)) + QTEST_ASSERT(tag); + if (d->tagSet.hasSeen(tag)) qWarning("Duplicate data tag \"%s\" - please rename.", tag); QTestData *dt = new QTestData(tag, this); @@ -123,12 +127,6 @@ private: const char *m_needle; }; -bool QTestTablePrivate::hasRow(const char *rowName) const -{ - QTEST_ASSERT(rowName); - return std::find_if(dataList.begin(), dataList.end(), NamePredicate(rowName)) != dataList.end(); -} - int QTestTable::indexOf(const char *elementName) const { QTEST_ASSERT(elementName); |