Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qsequentialiterable.h
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QSEQUENTIALITERABLE_H
5#define QSEQUENTIALITERABLE_H
6
7#include <QtCore/qiterable.h>
8#include <QtCore/qvariant.h>
9
11
12class Q_CORE_EXPORT QSequentialIterator : public QIterator<QMetaSequence>
13{
14public:
15 using value_type = QVariant;
16 using reference = QVariantRef<QSequentialIterator>;
17 using pointer = QVariantPointer<QSequentialIterator>;
18
19 QSequentialIterator(QIterator &&it)
20 : QIterator(std::move(it))
21 {}
22
23 QVariantRef<QSequentialIterator> operator*() const;
24 QVariantPointer<QSequentialIterator> operator->() const;
25};
26
27class Q_CORE_EXPORT QSequentialConstIterator : public QConstIterator<QMetaSequence>
28{
29public:
30 using value_type = QVariant;
31 using reference = const QVariant &;
32 using pointer = QVariantConstPointer;
33
34 QSequentialConstIterator(QConstIterator &&it)
35 : QConstIterator(std::move(it))
36 {}
37
38 QVariant operator*() const;
39 QVariantConstPointer operator->() const;
40};
41
42class Q_CORE_EXPORT QSequentialIterable : public QIterable<QMetaSequence>
43{
44public:
45 using iterator = QTaggedIterator<QSequentialIterator, void>;
46 using const_iterator = QTaggedIterator<QSequentialConstIterator, void>;
47
48 using RandomAccessIterator = QTaggedIterator<iterator, std::random_access_iterator_tag>;
49 using BidirectionalIterator = QTaggedIterator<iterator, std::bidirectional_iterator_tag>;
50 using ForwardIterator = QTaggedIterator<iterator, std::forward_iterator_tag>;
51 using InputIterator = QTaggedIterator<iterator, std::input_iterator_tag>;
52
53 using RandomAccessConstIterator = QTaggedIterator<const_iterator, std::random_access_iterator_tag>;
54 using BidirectionalConstIterator = QTaggedIterator<const_iterator, std::bidirectional_iterator_tag>;
55 using ForwardConstIterator = QTaggedIterator<const_iterator, std::forward_iterator_tag>;
56 using InputConstIterator = QTaggedIterator<const_iterator, std::input_iterator_tag>;
57
58 template<class T>
59 QSequentialIterable(const T *p)
60 : QIterable(QMetaSequence::fromContainer<T>(), p)
61 {
62 Q_UNUSED(m_revision);
63 }
64
65 template<class T>
66 QSequentialIterable(T *p)
67 : QIterable(QMetaSequence::fromContainer<T>(), p)
68 {
69 }
70
71 QSequentialIterable()
72 : QIterable(QMetaSequence(), nullptr)
73 {
74 }
75
76 template<typename Pointer>
77 QSequentialIterable(const QMetaSequence &metaSequence, Pointer iterable)
78 : QIterable(metaSequence, iterable)
79 {
80 }
81
82 // ### Qt7: Pass QMetaType as value rather than const ref.
83 QSequentialIterable(const QMetaSequence &metaSequence, const QMetaType &metaType,
84 void *iterable)
85 : QIterable(metaSequence, metaType.alignOf(), iterable)
86 {
87 }
88
89 // ### Qt7: Pass QMetaType as value rather than const ref.
90 QSequentialIterable(const QMetaSequence &metaSequence, const QMetaType &metaType,
91 const void *iterable)
92 : QIterable(metaSequence, metaType.alignOf(), iterable)
93 {
94 }
95
96 QSequentialIterable(QIterable<QMetaSequence> &&other) : QIterable(std::move(other)) {}
97
98 QSequentialIterable &operator=(QIterable<QMetaSequence> &&other)
99 {
100 QIterable::operator=(std::move(other));
101 return *this;
102 }
103
104 const_iterator begin() const { return constBegin(); }
105 const_iterator end() const { return constEnd(); }
106
107 const_iterator constBegin() const { return const_iterator(QIterable::constBegin()); }
108 const_iterator constEnd() const { return const_iterator(QIterable::constEnd()); }
109
110 iterator mutableBegin() { return iterator(QIterable::mutableBegin()); }
111 iterator mutableEnd() { return iterator(QIterable::mutableEnd()); }
112
113 QVariant at(qsizetype idx) const;
114 void set(qsizetype idx, const QVariant &value);
115
116 enum Position { Unspecified, AtBegin, AtEnd };
117 void addValue(const QVariant &value, Position position = Unspecified);
118 void removeValue(Position position = Unspecified);
119
120 QMetaType valueMetaType() const;
121};
122
123template<>
124inline QVariantRef<QSequentialIterator>::operator QVariant() const
125{
126 if (m_pointer == nullptr)
127 return QVariant();
128 const QMetaType metaType(m_pointer->metaContainer().valueMetaType());
129 QVariant v(metaType);
130 void *dataPtr = metaType == QMetaType::fromType<QVariant>() ? &v : v.data();
131 m_pointer->metaContainer().valueAtIterator(m_pointer->constIterator(), dataPtr);
132 return v;
133}
134
135template<>
136inline QVariantRef<QSequentialIterator> &QVariantRef<QSequentialIterator>::operator=(
137 const QVariant &value)
138{
139 if (m_pointer == nullptr)
140 return *this;
141
142 QtPrivate::QVariantTypeCoercer coercer;
143 m_pointer->metaContainer().setValueAtIterator(
144 m_pointer->constIterator(),
145 coercer.coerce(value, m_pointer->metaContainer().valueMetaType()));
146 return *this;
147}
148
149Q_DECLARE_TYPEINFO(QSequentialIterable, Q_RELOCATABLE_TYPE);
150Q_DECLARE_TYPEINFO(QSequentialIterable::iterator, Q_RELOCATABLE_TYPE);
151Q_DECLARE_TYPEINFO(QSequentialIterable::const_iterator, Q_RELOCATABLE_TYPE);
152
153QT_END_NAMESPACE
154
155#endif // QSEQUENTIALITERABLE_H
The QAssociativeIterable class is an iterable interface for an associative container in a QVariant.
\inmodule QtCore\reentrant
Definition qcborarray.h:21
\inmodule QtCore\reentrant
Definition qcbormap.h:35
bool isBool() const
Definition qcborvalue.h:321
QCborArray toArray(const QCborArray &a) const
Definition qcborarray.h:384
QCborMap toMap(const QCborMap &m) const
Definition qcbormap.h:495
QCborMap toMap() const
Definition qcbormap.h:490
QVariant toVariant() const
Definition qcborvalue.h:385
bool isInteger() const
Definition qcborvalue.h:313
bool isDateTime() const
Definition qcborvalue.h:325
bool isDouble() const
Definition qcborvalue.h:324
bool isString() const
Definition qcborvalue.h:315
QCborValueConstRef & operator=(const QCborValueConstRef &)=delete
bool isUrl() const
Definition qcborvalue.h:326
bool isNull() const
Definition qcborvalue.h:322
QCborArray toArray() const
Definition qcborarray.h:379
bool isContainer() const
Definition qcborvalue.h:330
bool toBool(bool defaultValue=false) const
Definition qcborvalue.h:346
QCborValue taggedValue(const QCborValue &defaultValue=QCborValue()) const
Definition qcborvalue.h:341
bool isByteArray() const
Definition qcborvalue.h:314
QCborSimpleType toSimpleType(QCborSimpleType defaultValue=QCborSimpleType::Undefined) const
Definition qcborvalue.h:334
bool isMap() const
Definition qcborvalue.h:317
bool isSimpleType() const
Definition qcborvalue.h:331
bool isRegularExpression() const
Definition qcborvalue.h:327
bool isUndefined() const
Definition qcborvalue.h:323
QCborValue::Type type() const
Definition qcborvalue.h:312
bool isInvalid() const
Definition qcborvalue.h:329
QCborValueConstRef(const QCborValueConstRef &)=default
bool isUuid() const
Definition qcborvalue.h:328
QCborTag tag(QCborTag defaultValue=QCborTag(-1)) const
Definition qcborvalue.h:339
constexpr QCborValueConstRef()
Definition qcborvalue.h:452
QByteArray toByteArray(const QByteArray &defaultValue={}) const
Definition qcborvalue.h:351
qint64 toInteger(qint64 defaultValue=0) const
Definition qcborvalue.h:344
bool isSimpleType(QCborSimpleType st) const
Definition qcborvalue.h:332
bool isTrue() const
Definition qcborvalue.h:320
QUuid toUuid(const QUuid &defaultValue={}) const
Definition qcborvalue.h:368
QCborContainerPrivate * d
Definition qcborvalue.h:456
bool isFalse() const
Definition qcborvalue.h:319
QAnyStringView toStringView(QAnyStringView defaultValue={}) const
Definition qcborvalue.h:355
friend bool comparesEqual(const QCborValueConstRef &lhs, const QCborValueConstRef &rhs) noexcept
Definition qcborvalue.h:409
bool isTag() const
Definition qcborvalue.h:318
friend bool comparesEqual(const QCborValueConstRef &lhs, const QCborValue &rhs) noexcept
Definition qcborvalue.h:425
QString toDiagnosticNotation(QCborValue::DiagnosticNotationOptions opt=QCborValue::Compact) const
Definition qcborvalue.h:395
bool isArray() const
Definition qcborvalue.h:316
int compare(const QCborValue &other) const
Definition qcborvalue.h:382
friend Qt::strong_ordering compareThreeWay(const QCborValueConstRef &lhs, const QCborValue &rhs) noexcept
Definition qcborvalue.h:430
operator QCborValue() const
Definition qcborvalue.h:310
friend Qt::strong_ordering compareThreeWay(const QCborValueConstRef &lhs, const QCborValueConstRef &rhs) noexcept
Definition qcborvalue.h:414
constexpr QCborValueConstRef(QCborContainerPrivate *dd, qsizetype ii)
Definition qcborvalue.h:453
QCborValue concrete() const noexcept
Definition qcborvalue.h:404
QString toString(const QString &defaultValue={}) const
Definition qcborvalue.h:353
QUrl toUrl(const QUrl &defaultValue={}) const
Definition qcborvalue.h:362
QJsonValue toJsonValue() const
double toDouble(double defaultValue=0) const
Definition qcborvalue.h:348
\inmodule QtCore\reentrant
Definition qcborvalue.h:48
\inmodule QtCore\reentrant
Definition qdatastream.h:50
\inmodule QtCore
Definition qhash.h:837
\inmodule QtCore\reentrant
Definition qjsonarray.h:19
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
Definition qjsonobject.h:34
friend bool comparesEqual(const QJsonValueConstRef &lhs, const QJsonValue &rhs)
Definition qjsonvalue.h:185
constexpr QJsonValueConstRef(QCborContainerPrivate *d, size_t index, bool is_object)
Definition qjsonvalue.h:236
friend bool comparesEqual(const QJsonValueConstRef &lhs, const QJsonValueConstRef &rhs)
Definition qjsonvalue.h:180
bool isBool() const
Definition qjsonvalue.h:153
operator QJsonValue() const
Definition qjsonvalue.h:148
bool isArray() const
Definition qjsonvalue.h:156
bool isDouble() const
Definition qjsonvalue.h:154
QAnyStringView objectKeyView() const
Definition qjsonvalue.h:210
void rebind(QJsonValueConstRef other)
Definition qjsonvalue.h:244
bool isString() const
Definition qjsonvalue.h:155
bool isObject() const
Definition qjsonvalue.h:157
QString objectKey() const
Definition qjsonvalue.h:207
QAnyStringView toStringView(QAnyStringView defaultValue={}) const
Definition qjsonvalue.h:170
QJsonValueConstRef(const QJsonValueConstRef &)=default
qint64 toInteger(qint64 defaultValue=0) const
Definition qjsonvalue.h:164
bool toBool(bool defaultValue=false) const
Definition qjsonvalue.h:160
QJsonValueConstRef & operator=(const QJsonValueConstRef &)=delete
QString toString(const QString &defaultValue={}) const
Definition qjsonvalue.h:168
QJsonValue::Type type() const
Definition qjsonvalue.h:151
QJsonValueConstRef(QJsonArray *array, qsizetype idx)
Definition qjsonarray.h:322
QCborContainerPrivate * d
Definition qjsonvalue.h:250
bool isNull() const
Definition qjsonvalue.h:152
QJsonValueConstRef(QJsonObject *object, qsizetype idx)
double toDouble(double defaultValue=0) const
Definition qjsonvalue.h:166
int toInt(int defaultValue=0) const
Definition qjsonvalue.h:162
const QJsonValue operator[](QStringView key) const
Definition qjsonvalue.h:175
bool isUndefined() const
Definition qjsonvalue.h:158
\inmodule QtCore\reentrant
Definition qjsonvalue.h:30
\inmodule QtCore\compares equality \compareswith equality QLine \endcompareswith
Definition qline.h:193
\inmodule QtCore\compares equality \compareswith equality QLineF \endcompareswith
Definition qline.h:19
Definition qlist.h:80
void remove(int from, int to)
bool insertIfNotContains(Key k, const T &f)
bool contains(Key k) const
const T * function(Key k) const
\inmodule QtCore\reentrant
Definition qpoint.h:231
\inmodule QtCore\reentrant
Definition qpoint.h:29
The QSequentialIterable class is an iterable interface for a container in a QVariant.
LegacyRegisterOp legacyRegisterOp
Definition qmetatype.h:312
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
Definition qfloat16.h:48
QMutableListIterator< QByteArray > QMutableByteArrayListIterator
Q_DECLARE_TYPEINFO(QByteArrayView, Q_PRIMITIVE_TYPE)
QCborSimpleType
Definition qcborcommon.h:29
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2568
QList< QVariant > QVariantList
Definition qjsonarray.h:16
Q_DECLARE_TYPEINFO(QLine, Q_PRIMITIVE_TYPE)
Q_DECLARE_TYPEINFO(QLineF, Q_PRIMITIVE_TYPE)
#define qCWarning(category,...)
#define Q_STATIC_LOGGING_CATEGORY(name,...)
#define CONVERT_CBOR_AND_JSON(To)
#define NS(x)
Definition qmetatype.cpp:70
#define QMETATYPE_CONVERTER_ASSIGN_QCHAR(From)
#define QMETATYPE_CONVERTER_ASSIGN_DOUBLE(To, From)
#define INTEGRAL_CONVERTER(To)
static bool tryConvertBuiltinTypes(const void *from, int fromTypeId, void *to, int toTypeId)
#define QMETATYPE_CONVERTER_ASSIGN_NUMBER(To, From)
static bool qIntegerConversionFromFPHelper(From from, To *to)
#define FLOAT_CONVERTER(To)
#define QT_FOR_EACH_STATIC_CORE_POINTER(F)
Definition qmetatype.h:137
#define QT_FOR_EACH_STATIC_PRIMITIVE_TYPE(F)
Definition qmetatype.h:70
#define QT_FOR_EACH_STATIC_PRIMITIVE_NON_VOID_TYPE(F)
Definition qmetatype.h:50
#define QT_FOR_EACH_STATIC_CORE_TEMPLATE(F)
Definition qmetatype.h:151
#define QT_FOR_EACH_STATIC_PRIMITIVE_POINTER(F)
Definition qmetatype.h:74
#define QT_IMPL_METATYPE_EXTERN_TAGGED(TYPE, TAG)
Definition qmetatype.h:1365
#define QT_FOR_EACH_STATIC_CORE_CLASS(F)
Definition qmetatype.h:105
#define QT_FOR_EACH_STATIC_ALIAS_TYPE(F)
Definition qmetatype.h:193
#define QT_FOR_EACH_STATIC_TYPE(F)
Definition qmetatype.h:223
#define QMETATYPE_CONVERTER(To, From, assign_and_return)
Definition qmetatype_p.h:23
#define QMETATYPE_CONVERTER_ASSIGN(To, From)
Definition qmetatype_p.h:34
#define QStringLiteral(str)
Definition qstring.h:1826
\inmodule QtCore\reentrant
Definition qcborvalue.h:38
QString errorString() const
\variable QCborParserError::offset
Definition qcborvalue.h:42
QCborError error
Definition qcborvalue.h:40
QListSpecialMethods & operator=(const QListSpecialMethods &)=default
QListSpecialMethods(QListSpecialMethods &&)=default
QListSpecialMethods & operator=(QListSpecialMethods &&)=default
QListSpecialMethods(const QListSpecialMethods &)=default
QByteArray join(QByteArrayView sep={}) const
static T value(const Iterator &it)
Definition qcbormap.h:27
static T value(Iterator &it)
Definition qcbormap.h:28
static QCborValueConstRef key(Iterator &it)
Definition qcbormap.h:26
static QCborValueConstRef key(const Iterator &it)
Definition qcbormap.h:25
static QAnyStringView key(Iterator &it)
Definition qjsonobject.h:26
static T value(const Iterator &it)
Definition qjsonobject.h:27
static QAnyStringView key(const Iterator &it)
Definition qjsonobject.h:25
static T value(Iterator &it)
Definition qjsonobject.h:28