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
qqmllist_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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// Qt-Security score:significant
4
5#ifndef QQMLLIST_P_H
6#define QQMLLIST_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include "qqmllist.h"
21#include "qqmlmetatype_p.h"
22#include <QtQml/private/qbipointer_p.h>
23
24#include <QtCore/qpointer.h>
25
27
29{
30public:
32
33 static QQmlListReference init(const QQmlListProperty<QObject> &, QMetaType);
34
38
39 void addref();
40 void release();
42
43 static inline QQmlListReferencePrivate *get(QQmlListReference *ref) {
44 return ref->d;
45 }
46
47 const QMetaObject *elementType()
48 {
49 if (!m_elementType) {
50 m_elementType = QQmlMetaType::rawMetaObjectForType(
51 QQmlMetaType::listValueType(propertyType)).metaObject();
52 }
53
54 return m_elementType;
55 }
56
57private:
58 const QMetaObject *m_elementType = nullptr;
59};
60
61template<typename T>
63public:
66 using value_type = T*;
67
69 {
70 public:
71 explicit reference(const QQmlListIterator *iter) : m_iter(iter) {}
72 reference(const reference &) = default;
73 reference(reference &&) = default;
74 ~reference() = default;
75
76 operator T *() const
77 {
78 if (m_iter == nullptr)
79 return nullptr;
80 return m_iter->m_list->at(m_iter->m_list, m_iter->m_i);
81 }
82
83 reference &operator=(T *value) {
84 m_iter->m_list->replace(m_iter->m_list, m_iter->m_i, value);
85 return *this;
86 }
87
88 reference &operator=(const reference &value) { return operator=((T *)(value)); }
89 reference &operator=(reference &&value) { return operator=((T *)(value)); }
90
91 friend void swap(reference a, reference b)
92 {
93 T *tmp = a;
94 a = b;
95 b = std::move(tmp);
96 }
97 private:
98 const QQmlListIterator *m_iter;
99 };
100
102 {
103 public:
104 explicit pointer(const QQmlListIterator *iter) : m_iter(iter) {}
105 reference operator*() const { return reference(m_iter); }
106 QQmlListIterator operator->() const { return *m_iter; }
107
108 private:
109 const QQmlListIterator *m_iter;
110 };
111
112 QQmlListIterator() = default;
113 QQmlListIterator(QQmlListProperty<T> *list, qsizetype i) : m_list(list), m_i(i) {}
114
116 {
117 ++m_i;
118 return *this;
119 }
120
122 {
123 QQmlListIterator result = *this;
124 ++m_i;
125 return result;
126 }
127
129 {
130 --m_i;
131 return *this;
132 }
133
135 {
136 QQmlListIterator result = *this;
137 --m_i;
138 return result;
139 }
140
142 {
143 m_i += j;
144 return *this;
145 }
146
148 {
149 m_i -= j;
150 return *this;
151 }
152
154 {
155 return QQmlListIterator(m_list, m_i + j);
156 }
157
159 {
160 return QQmlListIterator(m_list, m_i - j);
161 }
162
164 {
165 return reference(this);
166 }
167
169 {
170 return pointer(this);
171 }
172
173private:
174 friend inline bool operator==(const QQmlListIterator &a, const QQmlListIterator &b)
175 {
176 return a.m_list == b.m_list && a.m_i == b.m_i;
177 }
178
179 friend inline bool operator!=(const QQmlListIterator &a, const QQmlListIterator &b)
180 {
181 return a.m_list != b.m_list || a.m_i != b.m_i;
182 }
183
184 friend inline bool operator<(const QQmlListIterator &i, const QQmlListIterator &j)
185 {
186 return i - j < 0;
187 }
188
189 friend inline bool operator>=(const QQmlListIterator &i, const QQmlListIterator &j)
190 {
191 return !(i < j);
192 }
193
194 friend inline bool operator>(const QQmlListIterator &i, const QQmlListIterator &j)
195 {
196 return i - j > 0;
197 }
198
199 friend inline bool operator<=(const QQmlListIterator &i, const QQmlListIterator &j)
200 {
201 return !(i > j);
202 }
203
204 friend inline QQmlListIterator operator+(qsizetype i, const QQmlListIterator &j)
205 {
206 return j + i;
207 }
208
209 friend inline qsizetype operator-(const QQmlListIterator &i, const QQmlListIterator &j)
210 {
211 return i.m_i - j.m_i;
212 }
213
214 QQmlListProperty<T> *m_list = nullptr;
215 qsizetype m_i = 0;
216};
217
218template<typename T>
220{
221 return QQmlListIterator<T>(&list, 0);
222}
223
224template<typename T>
226{
227 return QQmlListIterator<T>(&list, list.count(&list));
228}
229
230QT_END_NAMESPACE
231
232#endif // QQMLLIST_P_H
reference operator*() const
Definition qqmllist_p.h:105
pointer(const QQmlListIterator *iter)
Definition qqmllist_p.h:104
QQmlListIterator operator->() const
Definition qqmllist_p.h:106
reference(const QQmlListIterator *iter)
Definition qqmllist_p.h:71
reference(reference &&)=default
reference & operator=(reference &&value)
Definition qqmllist_p.h:89
reference & operator=(const reference &value)
Definition qqmllist_p.h:88
reference & operator=(T *value)
Definition qqmllist_p.h:83
reference(const reference &)=default
friend void swap(reference a, reference b)
Definition qqmllist_p.h:91
friend QQmlListIterator operator+(qsizetype i, const QQmlListIterator &j)
Definition qqmllist_p.h:204
friend bool operator<=(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:199
QQmlListIterator operator-(qsizetype j)
Definition qqmllist_p.h:158
reference operator*() const
Definition qqmllist_p.h:163
friend qsizetype operator-(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:209
pointer operator->() const
Definition qqmllist_p.h:168
friend bool operator==(const QQmlListIterator &a, const QQmlListIterator &b)
Definition qqmllist_p.h:174
QQmlListIterator(QQmlListProperty< T > *list, qsizetype i)
Definition qqmllist_p.h:113
friend bool operator>=(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:189
QQmlListIterator operator+(qsizetype j)
Definition qqmllist_p.h:153
QQmlListIterator & operator++()
Definition qqmllist_p.h:115
friend bool operator>(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:194
friend bool operator<(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:184
QQmlListIterator & operator-=(qsizetype j)
Definition qqmllist_p.h:147
QQmlListIterator operator++(int)
Definition qqmllist_p.h:121
friend bool operator!=(const QQmlListIterator &a, const QQmlListIterator &b)
Definition qqmllist_p.h:179
QQmlListIterator()=default
QQmlListIterator & operator--()
Definition qqmllist_p.h:128
QQmlListIterator & operator+=(qsizetype j)
Definition qqmllist_p.h:141
QQmlListIterator operator--(int)
Definition qqmllist_p.h:134
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
Definition qqmllist.h:25
T *(*)(QQmlListProperty< T > *, qsizetype) AtFunction
Synonym for {T *(*)(QQmlListProperty<T> *property, qsizetype index)}.
Definition qqmllist.h:31
QQmlListProperty(QObject *o, QList< T * > *list)
Definition qqmllist.h:38
ClearFunction clear
Definition qqmllist.h:88
bool operator==(const QQmlListProperty &o) const
Returns true if this QQmlListProperty is equal to other, otherwise false.
Definition qqmllist.h:71
QQmlListProperty(QObject *o, void *d, AppendFunction a, CountFunction c, AtFunction t, ClearFunction r)
Construct a QQmlListProperty from a set of operation functions append, count, at, and clear.
Definition qqmllist.h:43
QQmlListProperty(QObject *o, void *d, CountFunction c, AtFunction a)
Construct a readonly QQmlListProperty from a set of operation functions count and at.
Definition qqmllist.h:67
void(*)(QQmlListProperty< T > *) RemoveLastFunction
Synonym for {void (*)(QQmlListProperty<T> *property)}.
Definition qqmllist.h:34
AtFunction at
Definition qqmllist.h:87
QQmlListProperty(QObject *o, void *d, AppendFunction a, CountFunction c, AtFunction t, ClearFunction r, ReplaceFunction s, RemoveLastFunction p)
Construct a QQmlListProperty from a set of operation functions append, count, at, clear,...
Definition qqmllist.h:55
void(*)(QQmlListProperty< T > *, qsizetype, T *) ReplaceFunction
Synonym for {void (*)(QQmlListProperty<T> *property, qsizetype index, T *value)}.
Definition qqmllist.h:33
QObject * object
Definition qqmllist.h:82
RemoveLastFunction removeLast
Definition qqmllist.h:90
void(*)(QQmlListProperty< T > *, T *) AppendFunction
Synonym for {void (*)(QQmlListProperty<T> *property, T *value)}.
Definition qqmllist.h:29
CountFunction count
Definition qqmllist.h:86
AppendFunction append
Definition qqmllist.h:85
QQmlListProperty()=default
\macro QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND
ReplaceFunction replace
Definition qqmllist.h:89
void(*)(QQmlListProperty< T > *) ClearFunction
Synonym for {void (*)(QQmlListProperty<T> *property)}.
Definition qqmllist.h:32
static QQmlListReference init(const QQmlListProperty< QObject > &, QMetaType)
Definition qqmllist.cpp:26
const QMetaObject * elementType()
Definition qqmllist_p.h:47
QPointer< QObject > object
Definition qqmllist_p.h:35
QQmlListProperty< QObject > property
Definition qqmllist_p.h:36
static QQmlListReferencePrivate * get(QQmlListReference *ref)
Definition qqmllist_p.h:43
The QQmlListReference class allows the manipulation of \l QQmlListProperty properties.
Definition qqmllist.h:190
Combined button and popup list for selecting options.
static QT_BEGIN_NAMESPACE bool isObjectCompatible(QObject *object, QQmlListReferencePrivate *d)
Definition qqmllist.cpp:11
QQmlListIterator< T > end(QQmlListProperty< T > &list)
Definition qqmllist_p.h:225
QQmlListIterator< T > begin(QQmlListProperty< T > &list)
Definition qqmllist_p.h:219