summaryrefslogtreecommitdiffstats
path: root/src/corelib/kernel/qvariant.h
diff options
context:
space:
mode:
authorStephen Kelly <stephen.kelly@kdab.com>2013-09-17 11:13:10 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2013-09-20 12:02:57 +0200
commitdd6b053b6c40feeca845b89af08d026d8d487426 (patch)
treeca3e9b405a4dfb86b476b1e5c3c6a268e4df148e /src/corelib/kernel/qvariant.h
parent229f931d6e0227108e44d85586c88c562500eb12 (diff)
MetaType: de-inline the container iterables.
This means the *Iterables and corresponding const_iterators need to be exported. Change-Id: Ic93283616bda96e0d7752b0e881bf0230a5c2146 Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
Diffstat (limited to 'src/corelib/kernel/qvariant.h')
-rw-r--r--src/corelib/kernel/qvariant.h208
1 files changed, 60 insertions, 148 deletions
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index b6d5c1aebd..5ff33cce5f 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -572,192 +572,104 @@ inline bool operator!=(const QVariant &v1, const QVariantComparisonHelper &v2)
}
#endif
-class QSequentialIterable
+class Q_CORE_EXPORT QSequentialIterable
{
QtMetaTypePrivate::QSequentialIterableImpl m_impl;
public:
- struct const_iterator
+ struct Q_CORE_EXPORT const_iterator
{
private:
QtMetaTypePrivate::QSequentialIterableImpl m_impl;
QAtomicInt *ref;
friend class QSequentialIterable;
- inline explicit const_iterator(const QSequentialIterable &iter, QAtomicInt *ref_)
- : m_impl(iter.m_impl), ref(ref_) { ref->ref(); }
+ explicit const_iterator(const QSequentialIterable &iter, QAtomicInt *ref_);
- inline explicit const_iterator(const QtMetaTypePrivate::QSequentialIterableImpl &impl, QAtomicInt *ref_)
- : m_impl(impl), ref(ref_) { ref->ref(); }
+ explicit const_iterator(const QtMetaTypePrivate::QSequentialIterableImpl &impl, QAtomicInt *ref_);
- inline void begin() { m_impl.moveToBegin(); }
- inline void end() { m_impl.moveToEnd(); }
+ void begin();
+ void end();
public:
- inline ~const_iterator() {
- if (!ref->deref()) {
- m_impl.destroyIter();
- delete ref;
- }
- }
-
- inline const_iterator(const const_iterator &other) : m_impl(other.m_impl), ref(other.ref) {
- ref->ref();
- }
-
- inline const_iterator& operator=(const const_iterator &other)
- {
- if (!m_impl.equal(other.m_impl)) {
- m_impl = other.m_impl;
- ref = other.ref;
- }
- ref->ref();
- return *this;
- }
-
- inline const QVariant operator*() const {
- const QtMetaTypePrivate::VariantData d = m_impl.getCurrent();
- if (d.metaTypeId == qMetaTypeId<QVariant>())
- return *reinterpret_cast<const QVariant*>(d.data);
- return QVariant(d.metaTypeId, d.data, d.flags);
- }
- 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; 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; 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)); }
- inline const_iterator operator-(int j) const { QtMetaTypePrivate::QSequentialIterableImpl impl; impl.copy(m_impl); impl.advance(-j); return const_iterator(impl, new QAtomicInt(0)); }
+ ~const_iterator();
+
+ const_iterator(const const_iterator &other);
+
+ const_iterator& operator=(const const_iterator &other);
+
+ const QVariant operator*() const;
+ bool operator==(const const_iterator &o) const;
+ bool operator!=(const const_iterator &o) const;
+ const_iterator &operator++();
+ const_iterator operator++(int);
+ const_iterator &operator--();
+ const_iterator operator--(int);
+ const_iterator &operator+=(int j);
+ const_iterator &operator-=(int j);
+ const_iterator operator+(int j) const;
+ const_iterator operator-(int j) const;
};
friend struct const_iterator;
- explicit QSequentialIterable(QtMetaTypePrivate::QSequentialIterableImpl impl)
- : m_impl(impl)
- {
- }
+ explicit QSequentialIterable(QtMetaTypePrivate::QSequentialIterableImpl impl);
- const_iterator begin() const { const_iterator it(*this, new QAtomicInt(0)); it.begin(); return it; }
- const_iterator end() const { const_iterator it(*this, new QAtomicInt(0)); it.end(); return it; }
+ const_iterator begin() const;
+ const_iterator end() const;
- QVariant at(int idx) const {
- const QtMetaTypePrivate::VariantData d = m_impl.at(idx);
- if (d.metaTypeId == qMetaTypeId<QVariant>())
- return *reinterpret_cast<const QVariant*>(d.data);
- return QVariant(d.metaTypeId, d.data, d.flags);
- }
- int size() const { return m_impl.size(); }
+ QVariant at(int idx) const;
+ int size() const;
- bool canReverseIterate() const
- { return m_impl._iteratorCapabilities & QtMetaTypePrivate::BiDirectionalCapability; }
+ bool canReverseIterate() const;
};
-class QAssociativeIterable
+class Q_CORE_EXPORT QAssociativeIterable
{
QtMetaTypePrivate::QAssociativeIterableImpl m_impl;
public:
- struct const_iterator
+ struct Q_CORE_EXPORT const_iterator
{
private:
QtMetaTypePrivate::QAssociativeIterableImpl m_impl;
QAtomicInt *ref;
friend class QAssociativeIterable;
- inline explicit const_iterator(const QAssociativeIterable &iter, QAtomicInt *ref_)
- : m_impl(iter.m_impl), ref(ref_) { ref->ref(); }
+ explicit const_iterator(const QAssociativeIterable &iter, QAtomicInt *ref_);
- inline explicit const_iterator(const QtMetaTypePrivate::QAssociativeIterableImpl &impl, QAtomicInt *ref_)
- : m_impl(impl), ref(ref_) { ref->ref(); }
+ explicit const_iterator(const QtMetaTypePrivate::QAssociativeIterableImpl &impl, QAtomicInt *ref_);
- inline void begin() { m_impl.begin(); }
- inline void end() { m_impl.end(); }
+ void begin();
+ void end();
public:
- inline ~const_iterator() {
- if (!ref->deref()) {
- m_impl.destroyIter();
- delete ref;
- }
- }
- inline const_iterator(const const_iterator &other) : m_impl(other.m_impl), ref(other.ref) {
- ref->ref();
- }
-
- inline const_iterator& operator=(const const_iterator &other)
- {
- if (!m_impl.equal(other.m_impl)) {
- m_impl = other.m_impl;
- ref = other.ref;
- }
- ref->ref();
- return *this;
- }
-
- inline const QVariant key() const {
- const QtMetaTypePrivate::VariantData d = m_impl.getCurrentKey();
- QVariant v(d.metaTypeId, d.data, d.flags);
- if (d.metaTypeId == qMetaTypeId<QVariant>())
- return *reinterpret_cast<const QVariant*>(d.data);
- return v;
- }
-
- inline const QVariant value() const {
- const QtMetaTypePrivate::VariantData d = m_impl.getCurrentValue();
- QVariant v(d.metaTypeId, d.data, d.flags);
- if (d.metaTypeId == qMetaTypeId<QVariant>())
- return *reinterpret_cast<const QVariant*>(d.data);
- return v;
- }
-
- inline const QVariant operator*() const {
- const QtMetaTypePrivate::VariantData d = m_impl.getCurrentValue();
- QVariant v(d.metaTypeId, d.data, d.flags);
- if (d.metaTypeId == qMetaTypeId<QVariant>())
- return *reinterpret_cast<const QVariant*>(d.data);
- return v;
- }
- 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; 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; 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)); }
- inline const_iterator operator-(int j) const { QtMetaTypePrivate::QAssociativeIterableImpl impl; impl.copy(m_impl); impl.advance(-j); return const_iterator(impl, new QAtomicInt(0)); }
+ ~const_iterator();
+ const_iterator(const const_iterator &other);
+
+ const_iterator& operator=(const const_iterator &other);
+
+ const QVariant key() const;
+
+ const QVariant value() const;
+
+ const QVariant operator*() const;
+ bool operator==(const const_iterator &o) const;
+ bool operator!=(const const_iterator &o) const;
+ const_iterator &operator++();
+ const_iterator operator++(int);
+ const_iterator &operator--();
+ const_iterator operator--(int);
+ const_iterator &operator+=(int j);
+ const_iterator &operator-=(int j);
+ const_iterator operator+(int j) const;
+ const_iterator operator-(int j) const;
};
friend struct const_iterator;
- explicit QAssociativeIterable(QtMetaTypePrivate::QAssociativeIterableImpl impl)
- : m_impl(impl)
- {
- }
+ explicit QAssociativeIterable(QtMetaTypePrivate::QAssociativeIterableImpl impl);
- const_iterator begin() const { const_iterator it(*this, new QAtomicInt(0)); it.begin(); return it; }
- const_iterator end() const { const_iterator it(*this, new QAtomicInt(0)); it.end(); return it; }
+ const_iterator begin() const;
+ const_iterator end() const;
- QVariant value(const QVariant &key) const
- {
- QVariant key_ = key;
- if (!key_.canConvert(m_impl._metaType_id_key))
- return QVariant();
- if (!key_.convert(m_impl._metaType_id_key))
- return QVariant();
- const QtMetaTypePrivate::VariantData dkey(key_.userType(), key_.constData(), 0 /*key.flags()*/);
- QtMetaTypePrivate::QAssociativeIterableImpl impl = m_impl;
- impl.find(dkey);
- QtMetaTypePrivate::QAssociativeIterableImpl endIt = m_impl;
- endIt.end();
- if (impl.equal(endIt))
- return QVariant();
- const QtMetaTypePrivate::VariantData d = impl.getCurrentValue();
- QVariant v(d.metaTypeId, d.data, d.flags);
- if (d.metaTypeId == qMetaTypeId<QVariant>())
- return *reinterpret_cast<const QVariant*>(d.data);
- return v;
- }
+ QVariant value(const QVariant &key) const;
- int size() const { return m_impl.size(); }
+ int size() const;
};
#ifndef QT_MOC