MetaType: Fix operator{++,--}(int) with the type-erased const_iterators.
Similar to commit 8b062418 (MetaType: Fix operator{+,-}(int)
with the type-erased const_iterators., 2013-09-11), explicitly
create a copy of the iterator and intialise it.
Change-Id: I8b9edef40ca00c826f72768cba4a0992e55371f8
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
bb10
parent
bcb68461c9
commit
2af188c6d0
|
|
@ -610,9 +610,9 @@ public:
|
|||
inline bool operator==(const const_iterator &o) const { return m_impl.equal(o.m_impl); }
|
||||
inline bool operator!=(const const_iterator &o) const { return !m_impl.equal(o.m_impl); }
|
||||
inline const_iterator &operator++() { m_impl.advance(1); return *this; }
|
||||
inline const_iterator operator++(int) { QtMetaTypePrivate::QSequentialIterableImpl impl = m_impl; m_impl.advance(1); return const_iterator(impl, this->ref); }
|
||||
inline const_iterator operator++(int) { QtMetaTypePrivate::QSequentialIterableImpl impl; impl.copy(m_impl); m_impl.advance(1); return const_iterator(impl, new QAtomicInt(0)); }
|
||||
inline const_iterator &operator--() { m_impl.advance(-1); return *this; }
|
||||
inline const_iterator operator--(int) { QtMetaTypePrivate::QSequentialIterableImpl impl = m_impl; m_impl.advance(-1); return const_iterator(impl, this->ref); }
|
||||
inline const_iterator operator--(int) { QtMetaTypePrivate::QSequentialIterableImpl impl; impl.copy(m_impl); m_impl.advance(-1); return const_iterator(impl, new QAtomicInt(0)); }
|
||||
inline const_iterator &operator+=(int j) { m_impl.advance(j); return *this; }
|
||||
inline const_iterator &operator-=(int j) { m_impl.advance(-j); return *this; }
|
||||
inline const_iterator operator+(int j) const { QtMetaTypePrivate::QSequentialIterableImpl impl; impl.copy(m_impl); impl.advance(j); return const_iterator(impl, new QAtomicInt(0)); }
|
||||
|
|
@ -695,9 +695,9 @@ public:
|
|||
inline bool operator==(const const_iterator &o) const { return m_impl.equal(o.m_impl); }
|
||||
inline bool operator!=(const const_iterator &o) const { return !m_impl.equal(o.m_impl); }
|
||||
inline const_iterator &operator++() { m_impl.advance(1); return *this; }
|
||||
inline const_iterator operator++(int) { QtMetaTypePrivate::QAssociativeIterableImpl impl = m_impl; m_impl.advance(1); return const_iterator(impl, this->ref); }
|
||||
inline const_iterator operator++(int) { QtMetaTypePrivate::QAssociativeIterableImpl impl; impl.copy(m_impl); m_impl.advance(1); return const_iterator(impl, new QAtomicInt(0)); }
|
||||
inline const_iterator &operator--() { m_impl.advance(-1); return *this; }
|
||||
inline const_iterator operator--(int) { QtMetaTypePrivate::QAssociativeIterableImpl impl = m_impl; m_impl.advance(-1); return const_iterator(impl, this->ref); }
|
||||
inline const_iterator operator--(int) { QtMetaTypePrivate::QAssociativeIterableImpl impl; impl.copy(m_impl); m_impl.advance(-1); return const_iterator(impl, new QAtomicInt(0)); }
|
||||
inline const_iterator &operator+=(int j) { m_impl.advance(j); return *this; }
|
||||
inline const_iterator &operator-=(int j) { m_impl.advance(-j); return *this; }
|
||||
inline const_iterator operator+(int j) const { QtMetaTypePrivate::QAssociativeIterableImpl impl; impl.copy(m_impl); impl.advance(j); return const_iterator(impl, new QAtomicInt(0)); }
|
||||
|
|
|
|||
|
|
@ -3831,6 +3831,19 @@ void tst_QVariant::iterateContainerElements()
|
|||
QCOMPARE(ints.at(i), *it);
|
||||
}
|
||||
}
|
||||
{
|
||||
QVariantList ints;
|
||||
ints << 1 << 2 << 3;
|
||||
QVariant var = QVariant::fromValue(ints);
|
||||
QSequentialIterable iter = var.value<QSequentialIterable>();
|
||||
QSequentialIterable::const_iterator it = iter.begin();
|
||||
|
||||
QVariantList intsCopy;
|
||||
intsCopy << *(it++);
|
||||
intsCopy << *(it++);
|
||||
intsCopy << *(it++);
|
||||
QCOMPARE(ints, intsCopy);
|
||||
}
|
||||
|
||||
#define TEST_ASSOCIATIVE_ITERATION(CONTAINER, KEY_TYPE, MAPPED_TYPE) \
|
||||
{ \
|
||||
|
|
@ -3882,6 +3895,23 @@ void tst_QVariant::iterateContainerElements()
|
|||
QCOMPARE(*(mapping.begin() + i), (*it).toString());
|
||||
}
|
||||
}
|
||||
{
|
||||
QVariantList nums;
|
||||
nums << "one" << "two" << "three";
|
||||
QMap<int, QString> mapping;
|
||||
mapping.insert(1, "one");
|
||||
mapping.insert(2, "two");
|
||||
mapping.insert(3, "three");
|
||||
QVariant var = QVariant::fromValue(mapping);
|
||||
QAssociativeIterable iter = var.value<QAssociativeIterable>();
|
||||
QAssociativeIterable::const_iterator it = iter.begin();
|
||||
|
||||
QVariantList numsCopy;
|
||||
numsCopy << *(it++);
|
||||
numsCopy << *(it++);
|
||||
numsCopy << *(it++);
|
||||
QCOMPARE(nums, numsCopy);
|
||||
}
|
||||
}
|
||||
|
||||
void tst_QVariant::pairElements()
|
||||
|
|
|
|||
Loading…
Reference in New Issue