diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2020-08-26 11:07:50 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2020-09-11 11:30:57 +0200 |
commit | e460addc423e6149f8d7dcfac19f87f8c08743aa (patch) | |
tree | 3110ee2232c1ba3eda0ce67e90361a2a776e311e /src/corelib/kernel/qiterable.cpp | |
parent | dd5e4f54c8341f38b452bb0cc6d8ecfcf4f4cadc (diff) |
Prepare QSequentialIterable for non-const operation
Introduce a smart pointer that saves its constness, even if the
constness of the parent object changes. This allows us to implement the
const and mutable iterators in the same class.
Change-Id: I156e564c7fa2ecc8981c6d71861d796a5cbfec66
Reviewed-by: Lars Knoll <lars.knoll@qt.io>
Diffstat (limited to 'src/corelib/kernel/qiterable.cpp')
-rw-r--r-- | src/corelib/kernel/qiterable.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/corelib/kernel/qiterable.cpp b/src/corelib/kernel/qiterable.cpp index f1c2512f36..d215296906 100644 --- a/src/corelib/kernel/qiterable.cpp +++ b/src/corelib/kernel/qiterable.cpp @@ -74,7 +74,7 @@ QSequentialIterable::const_iterator::const_iterator(const QSequentialIterable *i */ QSequentialIterable::const_iterator QSequentialIterable::begin() const { - return const_iterator(this, m_metaSequence.constBegin(m_iterable)); + return const_iterator(this, m_metaSequence.constBegin(m_iterable.constPointer())); } /*! @@ -85,7 +85,7 @@ QSequentialIterable::const_iterator QSequentialIterable::begin() const */ QSequentialIterable::const_iterator QSequentialIterable::end() const { - return const_iterator(this, m_metaSequence.constEnd(m_iterable)); + return const_iterator(this, m_metaSequence.constEnd(m_iterable.constPointer())); } /*! @@ -102,9 +102,9 @@ QVariant QSequentialIterable::at(qsizetype idx) const const QMetaSequence metaSequence = m_metaSequence; if (metaSequence.canGetElementAtIndex()) { - metaSequence.elementAtIndex(m_iterable, idx, dataPtr); + metaSequence.elementAtIndex(m_iterable.constPointer(), idx, dataPtr); } else if (metaSequence.canGetElementAtConstIterator()) { - void *iterator = metaSequence.constBegin(m_iterable); + void *iterator = metaSequence.constBegin(m_iterable.constPointer()); metaSequence.advanceConstIterator(iterator, idx); metaSequence.elementAtConstIterator(iterator, dataPtr); metaSequence.destroyConstIterator(iterator); @@ -119,7 +119,7 @@ QVariant QSequentialIterable::at(qsizetype idx) const qsizetype QSequentialIterable::size() const { const QMetaSequence metaSequence = m_metaSequence; - const void *container = m_iterable; + const void *container = m_iterable.constPointer(); if (metaSequence.hasSize()) return metaSequence.size(container); if (!metaSequence.hasConstIterator()) @@ -261,7 +261,7 @@ QSequentialIterable::const_iterator QSequentialIterable::const_iterator::operato { const_iterator result( m_iterable, - m_iterable->m_metaSequence.constBegin(m_iterable->m_iterable)); + m_iterable->m_metaSequence.constBegin(m_iterable->m_iterable.constPointer())); m_iterable->m_metaSequence.copyConstIterator(result.m_iterator, m_iterator); m_iterable->m_metaSequence.advanceConstIterator(m_iterator, 1); return result; @@ -299,7 +299,7 @@ QSequentialIterable::const_iterator QSequentialIterable::const_iterator::operato { const_iterator result( m_iterable, - m_iterable->m_metaSequence.constBegin(m_iterable->m_iterable)); + m_iterable->m_metaSequence.constBegin(m_iterable->m_iterable.constPointer())); m_iterable->m_metaSequence.copyConstIterator(result.m_iterator, m_iterator); m_iterable->m_metaSequence.advanceConstIterator(m_iterator, -1); return result; @@ -340,7 +340,7 @@ QSequentialIterable::const_iterator QSequentialIterable::const_iterator::operato { const_iterator result( m_iterable, - m_iterable->m_metaSequence.constBegin(m_iterable->m_iterable)); + m_iterable->m_metaSequence.constBegin(m_iterable->m_iterable.constPointer())); m_iterable->m_metaSequence.copyConstIterator(result.m_iterator, m_iterator); m_iterable->m_metaSequence.advanceConstIterator(result.m_iterator, j); return result; @@ -359,7 +359,7 @@ QSequentialIterable::const_iterator QSequentialIterable::const_iterator::operato { const_iterator result( m_iterable, - m_iterable->m_metaSequence.constBegin(m_iterable->m_iterable)); + m_iterable->m_metaSequence.constBegin(m_iterable->m_iterable.constPointer())); m_iterable->m_metaSequence.copyConstIterator(result.m_iterator, m_iterator); m_iterable->m_metaSequence.advanceConstIterator(result.m_iterator, -j); return result; |