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);
139inline QVariantRef<QAssociativeIterator>::operator QVariant()
const
141 if (m_pointer ==
nullptr)
144 const auto metaAssociation = m_pointer->metaContainer();
145 const QMetaType metaType(metaAssociation.mappedMetaType());
146 if (!metaType.isValid())
147 return m_pointer->key();
150 QVariant v(metaType);
151 metaAssociation.mappedAtIterator(m_pointer->constIterator(),
152 metaType == QMetaType::fromType<QVariant>() ? &v : v.data());
158inline QVariantRef<QAssociativeIterator> &QVariantRef<QAssociativeIterator>::operator=(
159 const QVariant &value)
161 if (m_pointer ==
nullptr)
164 const auto metaAssociation = m_pointer->metaContainer();
165 const QMetaType metaType(metaAssociation.mappedMetaType());
166 if (metaType.isValid()) {
167 QtPrivate::QVariantTypeCoercer coercer;
168 metaAssociation.setMappedAtIterator(m_pointer->constIterator(),
169 coercer.coerce(value, metaType));
175Q_DECLARE_TYPEINFO(QAssociativeIterable, Q_RELOCATABLE_TYPE);
176Q_DECLARE_TYPEINFO(QAssociativeIterable::iterator, Q_RELOCATABLE_TYPE);
177Q_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)