Qt 6.x
The Qt SDK
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:
18
20 : QIterator(std::move(it))
21 {}
22
24 QVariantPointer<QSequentialIterator> operator->() const;
25};
26
27class Q_CORE_EXPORT QSequentialConstIterator : public QConstIterator<QMetaSequence>
28{
29public:
31 using reference = const QVariant &;
33
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:
47
52
57
58 template<class T>
60 : QIterable(QMetaSequence::fromContainer<T>(), p)
61 {
62 Q_UNUSED(m_revision);
63 }
64
65 template<class T>
67 : QIterable(QMetaSequence::fromContainer<T>(), p)
68 {
69 }
70
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
97
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
109
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<>
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<>
137 const QVariant &value)
138{
139 if (m_pointer == nullptr)
140 return *this;
141
143 m_pointer->metaContainer().setValueAtIterator(
144 m_pointer->constIterator(),
145 coercer.coerce(value, m_pointer->metaContainer().valueMetaType()));
146 return *this;
147}
148
152
154
155#endif // QSEQUENTIALITERABLE_H
\inmodule QtCore
Definition qiterable.h:408
QConstIterator< Container > constBegin() const
Returns a QConstIterator for the beginning of the container.
Definition qiterable.h:468
QIterator< Container > mutableEnd()
Returns a QSequentialIterable::iterator for the end of the container.
Definition qiterable.h:483
QIterator< Container > mutableBegin()
Returns a QIterator for the beginning of the container.
Definition qiterable.h:478
QConstIterator< Container > constEnd() const
Returns a Qterable::QConstIterator for the end of the container.
Definition qiterable.h:473
\inmodule QtCore
\inmodule QtCore
Definition qmetatype.h:320
QSequentialConstIterator(QConstIterator &&it)
The QSequentialIterable class is an iterable interface for a container in a QVariant.
const_iterator constBegin() const
QSequentialIterable & operator=(QIterable< QMetaSequence > &&other)
QSequentialIterable(const QMetaSequence &metaSequence, const QMetaType &metaType, const void *iterable)
const_iterator end() const
QSequentialIterable(QIterable< QMetaSequence > &&other)
const_iterator constEnd() const
QSequentialIterable(const QMetaSequence &metaSequence, Pointer iterable)
const_iterator begin() const
QSequentialIterable(const QMetaSequence &metaSequence, const QMetaType &metaType, void *iterable)
QSequentialIterator(QIterator &&it)
QTaggedIterator is a template class that wraps an iterator and exposes standard iterator traits.
Definition qiterable.h:68
Emulated const pointer to QVariant based on a pointer.
Definition qvariant.h:850
QVariantPointer is a template class that emulates a pointer to QVariant based on a pointer.
Definition qvariant.h:863
The QVariantRef acts as a non-const reference to a QVariant.
Definition qvariant.h:826
QVariantRef & operator=(const QVariant &value)
Assigns a new value to the value pointed to by the pointer this QVariantRef refers to.
\inmodule QtCore
Definition qvariant.h:64
const void * coerce(const QVariant &value, const QMetaType &type)
QSet< QString >::iterator it
Combined button and popup list for selecting options.
constexpr timespec operator*(const timespec &t1, int mul)
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLsizei const GLfloat * v
[13]
GLfloat GLfloat p
[1]
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_UNUSED(x)
@ Q_RELOCATABLE_TYPE
Definition qtypeinfo.h:145
#define Q_DECLARE_TYPEINFO(TYPE, FLAGS)
Definition qtypeinfo.h:163
ptrdiff_t qsizetype
Definition qtypes.h:70
QFuture< QSet< QChar > > set
[10]
QObject::connect nullptr
QSharedPointer< T > other(t)
[5]
QAction * at
The QConstIterator allows iteration over a container in a QVariant.
Definition qiterable.h:309
The QIterator is a template class that allows iteration over a container in a QVariant.
Definition qiterable.h:215