5#ifndef QASSOCIATIVEITERABLE_H
6#define QASSOCIATIVEITERABLE_H
8#include <QtCore/qiterable.h>
9#include <QtCore/qvariant.h>
13#if QT_DEPRECATED_SINCE(6
, 15
)
15QT_WARNING_DISABLE_DEPRECATED
18class Q_CORE_EXPORT QT_DEPRECATED_VERSION_X_6_15(
"Use QMetaAssociation's iterables and iterators instead.") QAssociativeIterator :
public QIterator<QMetaAssociation>
21 using key_type = QVariant;
22 using mapped_type = QVariant;
23 using reference = QVariantRef<QAssociativeIterator>;
24 using pointer = QVariantPointer<QAssociativeIterator>;
26 QAssociativeIterator(QIterator &&it)
27 : QIterator(std::move(it))
31 QVariantRef<QAssociativeIterator> value()
const;
33 QVariantRef<QAssociativeIterator> operator*()
const;
34 QVariantPointer<QAssociativeIterator> operator->()
const;
38class Q_CORE_EXPORT QT_DEPRECATED_VERSION_X_6_15(
"Use QMetaAssociation's iterables and iterators instead.") QAssociativeConstIterator :
public QConstIterator<QMetaAssociation>
41 using key_type = QVariant;
42 using mapped_type = QVariant;
43 using reference =
const QVariant &;
44 using pointer = QVariantConstPointer;
46 QAssociativeConstIterator(QConstIterator &&it)
47 : QConstIterator(std::move(it))
51 QVariant value()
const;
53 QVariant operator*()
const;
54 QVariantConstPointer operator->()
const;
58class Q_CORE_EXPORT QT_DEPRECATED_VERSION_X_6_15(
"Use QMetaAssociation's iterables and iterators instead.") QAssociativeIterable :
public QIterable<QMetaAssociation>
61 using iterator = QTaggedIterator<QAssociativeIterator,
void>;
62 using const_iterator = QTaggedIterator<QAssociativeConstIterator,
void>;
64 using RandomAccessIterator = QTaggedIterator<iterator, std::random_access_iterator_tag>;
65 using BidirectionalIterator = QTaggedIterator<iterator, std::bidirectional_iterator_tag>;
66 using ForwardIterator = QTaggedIterator<iterator, std::forward_iterator_tag>;
67 using InputIterator = QTaggedIterator<iterator, std::input_iterator_tag>;
69 using RandomAccessConstIterator = QTaggedIterator<const_iterator, std::random_access_iterator_tag>;
70 using BidirectionalConstIterator = QTaggedIterator<const_iterator, std::bidirectional_iterator_tag>;
71 using ForwardConstIterator = QTaggedIterator<const_iterator, std::forward_iterator_tag>;
72 using InputConstIterator = QTaggedIterator<const_iterator, std::input_iterator_tag>;
75 QAssociativeIterable(
const T *p)
76 : QIterable(QMetaAssociation::fromContainer<T>(), p)
81 QAssociativeIterable(T *p)
82 : QIterable(QMetaAssociation::fromContainer<T>(), p)
86 QAssociativeIterable()
87 : QIterable(QMetaAssociation(),
nullptr)
91 template<
typename Pointer>
92 QAssociativeIterable(
const QMetaAssociation &metaAssociation, Pointer iterable)
93 : QIterable(metaAssociation, iterable)
97 QAssociativeIterable(
const QMetaAssociation &metaAssociation,
const QMetaType &metaType,
99 : QIterable(metaAssociation, metaType.alignOf(), iterable)
103 QAssociativeIterable(
const QMetaAssociation &metaAssociation,
const QMetaType &metaType,
104 const void *iterable)
105 : QIterable(metaAssociation, metaType.alignOf(), iterable)
109 QAssociativeIterable(QIterable<QMetaAssociation> &&other) : QIterable(std::move(other)) {}
111 QAssociativeIterable &operator=(QIterable<QMetaAssociation> &&other)
113 QIterable::operator=(std::move(other));
117 const_iterator begin()
const {
return constBegin(); }
118 const_iterator end()
const {
return constEnd(); }
120 const_iterator constBegin()
const {
return const_iterator(QIterable::constBegin()); }
121 const_iterator constEnd()
const {
return const_iterator(QIterable::constEnd()); }
123 iterator mutableBegin() {
return iterator(QIterable::mutableBegin()); }
124 iterator mutableEnd() {
return iterator(QIterable::mutableEnd()); }
126 const_iterator find(
const QVariant &key)
const;
127 const_iterator constFind(
const QVariant &key)
const {
return find(key); }
128 iterator mutableFind(
const QVariant &key);
130 bool containsKey(
const QVariant &key);
131 void insertKey(
const QVariant &key);
132 void removeKey(
const QVariant &key);
134 QVariant value(
const QVariant &key)
const;
135 void setValue(
const QVariant &key,
const QVariant &mapped);
139 constexpr bool canRandomAccessIterate()
const {
return false; }
143inline QVariantRef<QAssociativeIterator>::operator QVariant()
const
145 if (m_pointer ==
nullptr)
148 const auto metaAssociation = m_pointer->metaContainer();
149 const QMetaType metaType(metaAssociation.mappedMetaType());
150 if (!metaType.isValid())
151 return m_pointer->key();
154 QVariant v(metaType);
155 metaAssociation.mappedAtIterator(m_pointer->constIterator(),
156 metaType == QMetaType::fromType<QVariant>() ? &v : v.data());
162inline QVariantRef<QAssociativeIterator> &QVariantRef<QAssociativeIterator>::operator=(
163 const QVariant &value)
165 if (m_pointer ==
nullptr)
168 const auto metaAssociation = m_pointer->metaContainer();
169 const QMetaType metaType(metaAssociation.mappedMetaType());
170 if (metaType.isValid()) {
171 QtPrivate::QVariantTypeCoercer coercer;
172 metaAssociation.setMappedAtIterator(m_pointer->constIterator(),
173 coercer.coerce(value, metaType));
179Q_DECLARE_TYPEINFO(QAssociativeIterable, Q_RELOCATABLE_TYPE);
180Q_DECLARE_TYPEINFO(QAssociativeIterable::iterator, Q_RELOCATABLE_TYPE);
181Q_DECLARE_TYPEINFO(QAssociativeIterable::const_iterator, Q_RELOCATABLE_TYPE);
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
Combined button and popup list for selecting options.
QList< QVariant > QVariantList
#define qCWarning(category,...)
#define Q_STATIC_LOGGING_CATEGORY(name,...)
#define QStringLiteral(str)