diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2020-05-02 23:03:39 +0200 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2020-05-05 07:27:35 +0200 |
commit | c86aa0043137e95d8fc5c1ab69b613b5a2cc8650 (patch) | |
tree | 418abcf213e82b6d47a9fb28ad3b04c312bbded0 /src/corelib/itemmodels | |
parent | f5a32861e321a839e8293e3f5b28169b26128592 (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')
-rw-r--r-- | src/corelib/itemmodels/qitemselectionmodel.cpp | 15 |
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)); } |