summaryrefslogtreecommitdiffstats
path: root/src/corelib/itemmodels/qitemselectionmodel.cpp
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2020-05-02 23:03:39 +0200
committerMarc Mutz <marc.mutz@kdab.com>2020-05-05 07:27:35 +0200
commitc86aa0043137e95d8fc5c1ab69b613b5a2cc8650 (patch)
tree418abcf213e82b6d47a9fb28ad3b04c312bbded0 /src/corelib/itemmodels/qitemselectionmodel.cpp
parentf5a32861e321a839e8293e3f5b28169b26128592 (diff)
QItemSelectionModel: port a local QSet to QDuplicateTracker
Apart from a more fitting, minimal, API, QDuplicateTracker also transparently uses C++17 pmr::monotonic_buffer_resource to avoid, or at least reduce, memory allocations. Change-Id: I5d7d32c52ad19d37c0e1191e822304349944d7e6 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/itemmodels/qitemselectionmodel.cpp')
-rw-r--r--src/corelib/itemmodels/qitemselectionmodel.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp
index 7327b5deee..418c425810 100644
--- a/src/corelib/itemmodels/qitemselectionmodel.cpp
+++ b/src/corelib/itemmodels/qitemselectionmodel.cpp
@@ -39,6 +39,7 @@
#include "qitemselectionmodel.h"
#include <private/qitemselectionmodel_p.h>
+#include <private/qduplicatetracker_p.h>
#include <qdebug.h>
#include <algorithm>
@@ -1738,6 +1739,8 @@ size_t qHash(const RowOrColumnDefinition &key, size_t seed = 0) noexcept
return seed;
}
+QT_SPECIALIZE_STD_HASH_TO_CALL_QHASH_BY_CREF(RowOrColumnDefinition)
+
/*!
\since 4.2
Returns the indexes in the given \a column for the rows where all columns are selected.
@@ -1749,16 +1752,14 @@ QModelIndexList QItemSelectionModel::selectedRows(int column) const
{
QModelIndexList indexes;
- QSet<RowOrColumnDefinition> rowsSeen;
+ QDuplicateTracker<RowOrColumnDefinition> rowsSeen;
const QItemSelection ranges = selection();
for (int i = 0; i < ranges.count(); ++i) {
const QItemSelectionRange &range = ranges.at(i);
QModelIndex parent = range.parent();
for (int row = range.top(); row <= range.bottom(); row++) {
- RowOrColumnDefinition rowDef = {parent, row};
- if (!rowsSeen.contains(rowDef)) {
- rowsSeen << rowDef;
+ if (!rowsSeen.hasSeen({parent, row})) {
if (isRowSelected(row, parent)) {
indexes.append(model()->index(row, column, parent));
}
@@ -1780,16 +1781,14 @@ QModelIndexList QItemSelectionModel::selectedColumns(int row) const
{
QModelIndexList indexes;
- QSet<RowOrColumnDefinition> columnsSeen;
+ QDuplicateTracker<RowOrColumnDefinition> columnsSeen;
const QItemSelection ranges = selection();
for (int i = 0; i < ranges.count(); ++i) {
const QItemSelectionRange &range = ranges.at(i);
QModelIndex parent = range.parent();
for (int column = range.left(); column <= range.right(); column++) {
- RowOrColumnDefinition columnDef = {parent, column};
- if (!columnsSeen.contains(columnDef)) {
- columnsSeen << columnDef;
+ if (!columnsSeen.hasSeen({parent, column})) {
if (isColumnSelected(column, parent)) {
indexes.append(model()->index(row, column, parent));
}