4#ifndef QASSOCIATIVEITERABLE_H
5#define QASSOCIATIVEITERABLE_H
7#include <QtCore/qiterable.h>
8#include <QtCore/qvariant.h>
12#if QT_DEPRECATED_SINCE(6
, 15
)
14QT_WARNING_DISABLE_DEPRECATED
17class Q_CORE_EXPORT QT_DEPRECATED_VERSION_X_6_15(
"Use QMetaAssociation's iterables and iterators instead.") QAssociativeIterator :
public QIterator<QMetaAssociation>
20 using key_type = QVariant;
21 using mapped_type = QVariant;
22 using reference = QVariantRef<QAssociativeIterator>;
23 using pointer = QVariantPointer<QAssociativeIterator>;
25 QAssociativeIterator(QIterator &&it)
26 : QIterator(std::move(it))
30 QVariantRef<QAssociativeIterator> value()
const;
32 QVariantRef<QAssociativeIterator> operator*()
const;
33 QVariantPointer<QAssociativeIterator> operator->()
const;
37class Q_CORE_EXPORT QT_DEPRECATED_VERSION_X_6_15(
"Use QMetaAssociation's iterables and iterators instead.") QAssociativeConstIterator :
public QConstIterator<QMetaAssociation>
40 using key_type = QVariant;
41 using mapped_type = QVariant;
42 using reference =
const QVariant &;
43 using pointer = QVariantConstPointer;
45 QAssociativeConstIterator(QConstIterator &&it)
46 : QConstIterator(std::move(it))
50 QVariant value()
const;
52 QVariant operator*()
const;
53 QVariantConstPointer operator->()
const;
57class Q_CORE_EXPORT QT_DEPRECATED_VERSION_X_6_15(
"Use QMetaAssociation's iterables and iterators instead.") QAssociativeIterable :
public QIterable<QMetaAssociation>
60 using iterator = QTaggedIterator<QAssociativeIterator,
void>;
61 using const_iterator = QTaggedIterator<QAssociativeConstIterator,
void>;
63 using RandomAccessIterator = QTaggedIterator<iterator, std::random_access_iterator_tag>;
64 using BidirectionalIterator = QTaggedIterator<iterator, std::bidirectional_iterator_tag>;
65 using ForwardIterator = QTaggedIterator<iterator, std::forward_iterator_tag>;
66 using InputIterator = QTaggedIterator<iterator, std::input_iterator_tag>;
68 using RandomAccessConstIterator = QTaggedIterator<const_iterator, std::random_access_iterator_tag>;
69 using BidirectionalConstIterator = QTaggedIterator<const_iterator, std::bidirectional_iterator_tag>;
70 using ForwardConstIterator = QTaggedIterator<const_iterator, std::forward_iterator_tag>;
71 using InputConstIterator = QTaggedIterator<const_iterator, std::input_iterator_tag>;
74 QAssociativeIterable(
const T *p)
75 : QIterable(QMetaAssociation::fromContainer<T>(), p)
80 QAssociativeIterable(T *p)
81 : QIterable(QMetaAssociation::fromContainer<T>(), p)
85 QAssociativeIterable()
86 : QIterable(QMetaAssociation(),
nullptr)
90 template<
typename Pointer>
91 QAssociativeIterable(
const QMetaAssociation &metaAssociation, Pointer iterable)
92 : QIterable(metaAssociation, iterable)
96 QAssociativeIterable(
const QMetaAssociation &metaAssociation,
const QMetaType &metaType,
98 : QIterable(metaAssociation, metaType.alignOf(), iterable)
102 QAssociativeIterable(
const QMetaAssociation &metaAssociation,
const QMetaType &metaType,
103 const void *iterable)
104 : QIterable(metaAssociation, metaType.alignOf(), iterable)
108 QAssociativeIterable(QIterable<QMetaAssociation> &&other) : QIterable(std::move(other)) {}
110 QAssociativeIterable &operator=(QIterable<QMetaAssociation> &&other)
112 QIterable::operator=(std::move(other));
116 const_iterator begin()
const {
return constBegin(); }
117 const_iterator end()
const {
return constEnd(); }
119 const_iterator constBegin()
const {
return const_iterator(QIterable::constBegin()); }
120 const_iterator constEnd()
const {
return const_iterator(QIterable::constEnd()); }
122 iterator mutableBegin() {
return iterator(QIterable::mutableBegin()); }
123 iterator mutableEnd() {
return iterator(QIterable::mutableEnd()); }
125 const_iterator find(
const QVariant &key)
const;
126 const_iterator constFind(
const QVariant &key)
const {
return find(key); }
127 iterator mutableFind(
const QVariant &key);
129 bool containsKey(
const QVariant &key);
130 void insertKey(
const QVariant &key);
131 void removeKey(
const QVariant &key);
133 QVariant value(
const QVariant &key)
const;
134 void setValue(
const QVariant &key,
const QVariant &mapped);
138inline QVariantRef<QAssociativeIterator>::operator QVariant()
const
140 if (m_pointer ==
nullptr)
143 const auto metaAssociation = m_pointer->metaContainer();
144 const QMetaType metaType(metaAssociation.mappedMetaType());
145 if (!metaType.isValid())
146 return m_pointer->key();
149 QVariant v(metaType);
150 metaAssociation.mappedAtIterator(m_pointer->constIterator(),
151 metaType == QMetaType::fromType<QVariant>() ? &v : v.data());
157inline QVariantRef<QAssociativeIterator> &QVariantRef<QAssociativeIterator>::operator=(
158 const QVariant &value)
160 if (m_pointer ==
nullptr)
163 const auto metaAssociation = m_pointer->metaContainer();
164 const QMetaType metaType(metaAssociation.mappedMetaType());
165 if (metaType.isValid()) {
166 QtPrivate::QVariantTypeCoercer coercer;
167 metaAssociation.setMappedAtIterator(m_pointer->constIterator(),
168 coercer.coerce(value, metaType));
174Q_DECLARE_TYPEINFO(QAssociativeIterable, Q_RELOCATABLE_TYPE);
175Q_DECLARE_TYPEINFO(QAssociativeIterable::iterator, Q_RELOCATABLE_TYPE);
176Q_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)