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 <volker.hilsheimer@qt.io>
This commit is contained in:
Artem Dyomin 2025-04-02 15:55:54 +02:00 committed by Volker Hilsheimer
parent b6782d148c
commit 29115f0d7c
2 changed files with 10 additions and 7 deletions

View File

@ -178,6 +178,7 @@ protected:
static constexpr int static_row_count = QGenericItemModelDetails::static_size_v<range_type>;
static constexpr bool rows_are_pointers = std::is_pointer_v<row_type>;
static constexpr int static_column_count = QGenericItemModelDetails::static_size_v<row_type>;
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;

View File

@ -193,7 +193,9 @@ namespace QGenericItemModelDetails
template <typename T, typename = void>
struct row_traits {
static constexpr bool is_range = is_range_v<q20::remove_cvref_t<T>>;
// 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; }
};