Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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
4#ifndef QQMLLIST_P_H
5#define QQMLLIST_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include "qqmllist.h"
19#include "qqmlmetaobject_p.h"
20#include "qqmlmetatype_p.h"
21#include <QtQml/private/qbipointer_p.h>
22
23#include <QtCore/qpointer.h>
24
26
28{
29public:
31
32 static QQmlListReference init(const QQmlListProperty<QObject> &, QMetaType);
33
34 QPointer<QObject> object;
35 QQmlListProperty<QObject> property;
37
38 void addref();
39 void release();
41
43 return ref->d;
44 }
45
47 {
48 if (!m_elementType) {
51 }
52
53 return m_elementType;
54 }
55
56private:
57 const QMetaObject *m_elementType = nullptr;
58};
59
60template<typename T>
62public:
64 using iterator_category = std::random_access_iterator_tag;
65 using value_type = T*;
66
68 {
69 public:
70 explicit reference(const QQmlListIterator *iter) : m_iter(iter) {}
71 reference(const reference &) = default;
72 reference(reference &&) = default;
73 ~reference() = default;
74
75 operator T *() const
76 {
77 if (m_iter == nullptr)
78 return nullptr;
79 return m_iter->m_list->at(m_iter->m_list, m_iter->m_i);
80 }
81
83 m_iter->m_list->replace(m_iter->m_list, m_iter->m_i, value);
84 return *this;
85 }
86
87 reference &operator=(const reference &value) { return operator=((T *)(value)); }
89
90 friend void swap(reference a, reference b)
91 {
92 T *tmp = a;
93 a = b;
94 b = std::move(tmp);
95 }
96 private:
97 const QQmlListIterator *m_iter;
98 };
99
101 {
102 public:
103 explicit pointer(const QQmlListIterator *iter) : m_iter(iter) {}
104 reference operator*() const { return reference(m_iter); }
105 QQmlListIterator operator->() const { return *m_iter; }
106
107 private:
108 const QQmlListIterator *m_iter;
109 };
110
111 QQmlListIterator() = default;
112 QQmlListIterator(QQmlListProperty<T> *list, qsizetype i) : m_list(list), m_i(i) {}
113
115 {
116 ++m_i;
117 return *this;
118 }
119
121 {
122 QQmlListIterator result = *this;
123 ++m_i;
124 return result;
125 }
126
128 {
129 --m_i;
130 return *this;
131 }
132
134 {
135 QQmlListIterator result = *this;
136 --m_i;
137 return result;
138 }
139
141 {
142 m_i += j;
143 return *this;
144 }
145
147 {
148 m_i -= j;
149 return *this;
150 }
151
153 {
154 return QQmlListIterator(m_list, m_i + j);
155 }
156
158 {
159 return QQmlListIterator(m_list, m_i - j);
160 }
161
163 {
164 return reference(this);
165 }
166
168 {
169 return pointer(this);
170 }
171
172private:
173 friend inline bool operator==(const QQmlListIterator &a, const QQmlListIterator &b)
174 {
175 return a.m_list == b.m_list && a.m_i == b.m_i;
176 }
177
178 friend inline bool operator!=(const QQmlListIterator &a, const QQmlListIterator &b)
179 {
180 return a.m_list != b.m_list || a.m_i != b.m_i;
181 }
182
183 friend inline bool operator<(const QQmlListIterator &i, const QQmlListIterator &j)
184 {
185 return i - j < 0;
186 }
187
188 friend inline bool operator>=(const QQmlListIterator &i, const QQmlListIterator &j)
189 {
190 return !(i < j);
191 }
192
193 friend inline bool operator>(const QQmlListIterator &i, const QQmlListIterator &j)
194 {
195 return i - j > 0;
196 }
197
198 friend inline bool operator<=(const QQmlListIterator &i, const QQmlListIterator &j)
199 {
200 return !(i > j);
201 }
202
204 {
205 return j + i;
206 }
207
209 {
210 return i.m_i - j.m_i;
211 }
212
213 QQmlListProperty<T> *m_list = nullptr;
214 qsizetype m_i = 0;
215};
216
217template<typename T>
218QQmlListIterator<T> begin(QQmlListProperty<T> &list)
219{
220 return QQmlListIterator<T>(&list, 0);
221}
222
223template<typename T>
224QQmlListIterator<T> end(QQmlListProperty<T> &list)
225{
226 return QQmlListIterator<T>(&list, list.count(&list));
227}
228
230
231#endif // QQMLLIST_P_H
qsizetype count() const noexcept
Definition qlist.h:398
\inmodule QtCore
Definition qmetatype.h:341
reference operator*() const
Definition qqmllist_p.h:104
pointer(const QQmlListIterator *iter)
Definition qqmllist_p.h:103
QQmlListIterator operator->() const
Definition qqmllist_p.h:105
reference(const QQmlListIterator *iter)
Definition qqmllist_p.h:70
reference(reference &&)=default
reference & operator=(reference &&value)
Definition qqmllist_p.h:88
reference & operator=(const reference &value)
Definition qqmllist_p.h:87
reference & operator=(T *value)
Definition qqmllist_p.h:82
reference(const reference &)=default
friend void swap(reference a, reference b)
Definition qqmllist_p.h:90
friend QQmlListIterator operator+(qsizetype i, const QQmlListIterator &j)
Definition qqmllist_p.h:203
qsizetype difference_type
Definition qqmllist_p.h:63
friend bool operator<=(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:198
QQmlListIterator operator-(qsizetype j)
Definition qqmllist_p.h:157
reference operator*() const
Definition qqmllist_p.h:162
friend qsizetype operator-(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:208
pointer operator->() const
Definition qqmllist_p.h:167
friend bool operator==(const QQmlListIterator &a, const QQmlListIterator &b)
Definition qqmllist_p.h:173
QQmlListIterator(QQmlListProperty< T > *list, qsizetype i)
Definition qqmllist_p.h:112
friend bool operator>=(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:188
QQmlListIterator operator+(qsizetype j)
Definition qqmllist_p.h:152
std::random_access_iterator_tag iterator_category
Definition qqmllist_p.h:64
QQmlListIterator & operator++()
Definition qqmllist_p.h:114
friend bool operator>(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:193
friend bool operator<(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:183
QQmlListIterator & operator-=(qsizetype j)
Definition qqmllist_p.h:146
QQmlListIterator operator++(int)
Definition qqmllist_p.h:120
friend bool operator!=(const QQmlListIterator &a, const QQmlListIterator &b)
Definition qqmllist_p.h:178
QQmlListIterator()=default
QQmlListIterator & operator--()
Definition qqmllist_p.h:127
QQmlListIterator & operator+=(qsizetype j)
Definition qqmllist_p.h:140
QQmlListIterator operator--(int)
Definition qqmllist_p.h:133
static QQmlListReference init(const QQmlListProperty< QObject > &, QMetaType)
Definition qqmllist.cpp:25
const QMetaObject * elementType()
Definition qqmllist_p.h:46
QPointer< QObject > object
Definition qqmllist_p.h:34
QQmlListProperty< QObject > property
Definition qqmllist_p.h:35
static QQmlListReferencePrivate * get(QQmlListReference *ref)
Definition qqmllist_p.h:42
The QQmlListReference class allows the manipulation of QQmlListProperty properties.
Definition qqmllist.h:183
static QMetaType listValueType(QMetaType type)
static QQmlMetaObject rawMetaObjectForType(QMetaType metaType)
Combined button and popup list for selecting options.
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter * iter
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
GLboolean GLboolean GLboolean b
GLboolean GLboolean GLboolean GLboolean a
[7]
GLuint GLuint end
GLint reference
GLint ref
GLsizei const void * pointer
Definition qopenglext.h:384
GLuint64EXT * result
[6]
QQmlListIterator< T > begin(QQmlListProperty< T > &list)
Definition qqmllist_p.h:218
ptrdiff_t qsizetype
Definition qtypes.h:165
QList< int > list
[14]
\inmodule QtCore