From e460addc423e6149f8d7dcfac19f87f8c08743aa Mon Sep 17 00:00:00 2001 From: Ulf Hermann Date: Wed, 26 Aug 2020 11:07:50 +0200 Subject: 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 --- src/corelib/kernel/qiterable.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'src/corelib/kernel/qiterable.cpp') 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; -- cgit v1.2.3