From 29115f0d7c27dcde41b5a549f3b926186da993a7 Mon Sep 17 00:00:00 2001 From: Artem Dyomin Date: Wed, 2 Apr 2025 15:55:54 +0200 Subject: [PATCH] QGIM: simplify constant for one-dimensional ranges Introduce constant that we can check against directly rather than comparing repeatedly against 0. Change-Id: I717a5c3684d855f83ac28655b3fc2fc011b49865 Reviewed-by: Volker Hilsheimer --- src/corelib/itemmodels/qgenericitemmodel.h | 13 +++++++------ src/corelib/itemmodels/qgenericitemmodel_impl.h | 4 +++- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/corelib/itemmodels/qgenericitemmodel.h b/src/corelib/itemmodels/qgenericitemmodel.h index ba8f729ce8a..e57814425e3 100644 --- a/src/corelib/itemmodels/qgenericitemmodel.h +++ b/src/corelib/itemmodels/qgenericitemmodel.h @@ -178,6 +178,7 @@ protected: static constexpr int static_row_count = QGenericItemModelDetails::static_size_v; static constexpr bool rows_are_pointers = std::is_pointer_v; static constexpr int static_column_count = QGenericItemModelDetails::static_size_v; + static constexpr bool one_dimensional_range = static_column_count == 0; static constexpr bool dynamicRows() { return isMutable() && static_row_count < 0; } static constexpr bool dynamicColumns() { return static_column_count < 0; } @@ -412,7 +413,7 @@ public: const_row_reference row = rowData(index); if constexpr (dynamicColumns()) readData(*std::next(std::cbegin(row), index.column())); - else if constexpr (static_column_count == 0) + else if constexpr (one_dimensional_range) readData(row); else if (QGenericItemModelDetails::isValid(row)) for_element_at(row, index.column(), readData); @@ -475,7 +476,7 @@ public: const_row_reference row = rowData(index); if constexpr (dynamicColumns()) readItemData(*std::next(std::cbegin(row), index.column())); - else if constexpr (static_column_count == 0) + else if constexpr (one_dimensional_range) readItemData(row); else if (QGenericItemModelDetails::isValid(row)) for_element_at(row, index.column(), readItemData); @@ -544,7 +545,7 @@ public: row_reference row = rowData(index); if constexpr (dynamicColumns()) { success = writeData(*std::next(std::begin(row), index.column())); - } else if constexpr (static_column_count == 0) { + } else if constexpr (one_dimensional_range) { success = writeData(row); } else if (QGenericItemModelDetails::isValid(row)) { for_element_at(row, index.column(), [&writeData, &success](auto &&target){ @@ -656,7 +657,7 @@ public: row_reference row = rowData(index); if constexpr (dynamicColumns()) { success = writeItemData(*std::next(std::begin(row), index.column())); - } else if constexpr (static_column_count == 0) { + } else if constexpr (one_dimensional_range) { success = writeItemData(row); } else if (QGenericItemModelDetails::isValid(row)) { for_element_at(row, index.column(), [&writeItemData, &success](auto &&target){ @@ -708,7 +709,7 @@ public: row_reference row = rowData(index); if constexpr (dynamicColumns()) { success = clearData(*std::next(std::begin(row), index.column())); - } else if constexpr (static_column_count == 0) { + } else if constexpr (one_dimensional_range) { success = clearData(row); } else if (QGenericItemModelDetails::isValid(row)) { for_element_at(row, index.column(), [&clearData, &success](auto &&target){ @@ -1342,7 +1343,7 @@ protected: return int(Base::size(*this->m_data.model()) == 0 ? 0 : Base::size(*std::cbegin(*this->m_data.model()))); - } else if constexpr (Base::static_column_count == 0) { + } else if constexpr (Base::one_dimensional_range) { return row_traits::fixed_size(); } else { return Base::static_column_count; diff --git a/src/corelib/itemmodels/qgenericitemmodel_impl.h b/src/corelib/itemmodels/qgenericitemmodel_impl.h index f825e5f97d0..83fbf8ecd93 100644 --- a/src/corelib/itemmodels/qgenericitemmodel_impl.h +++ b/src/corelib/itemmodels/qgenericitemmodel_impl.h @@ -193,7 +193,9 @@ namespace QGenericItemModelDetails template struct row_traits { static constexpr bool is_range = is_range_v>; - // a static size of -1 indicates dynamically sized range + // A static size of -1 indicates dynamically sized range + // A static size of 0 indicates that the specified type doesn't + // represent static or dynamic range. static constexpr int static_size = is_range ? -1 : 0; static constexpr int fixed_size() { return 1; } };