Qt 6.x
The Qt SDK
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
24
26{
27public:
29
31
35
36 void addref();
37 void release();
39
41 return ref->d;
42 }
43
45 {
46 if (!m_elementType) {
49 }
50
51 return m_elementType;
52 }
53
54private:
55 const QMetaObject *m_elementType = nullptr;
56};
57
58template<typename T>
60public:
62 using iterator_category = std::random_access_iterator_tag;
63 using value_type = T*;
64
66 {
67 public:
68 explicit reference(const QQmlListIterator *iter) : m_iter(iter) {}
69 reference(const reference &) = default;
70 reference(reference &&) = default;
71 ~reference() = default;
72
73 operator T *() const
74 {
75 if (m_iter == nullptr)
76 return nullptr;
77 return m_iter->m_list->at(m_iter->m_list, m_iter->m_i);
78 }
79
81 m_iter->m_list->replace(m_iter->m_list, m_iter->m_i, value);
82 return *this;
83 }
84
85 reference &operator=(const reference &value) { return operator=((T *)(value)); }
87
88 friend void swap(reference a, reference b)
89 {
90 T *tmp = a;
91 a = b;
92 b = std::move(tmp);
93 }
94 private:
95 const QQmlListIterator *m_iter;
96 };
97
98 class pointer
99 {
100 public:
101 explicit pointer(const QQmlListIterator *iter) : m_iter(iter) {}
102 reference operator*() const { return reference(m_iter); }
103 QQmlListIterator operator->() const { return *m_iter; }
104
105 private:
106 const QQmlListIterator *m_iter;
107 };
108
109 QQmlListIterator() = default;
111
113 {
114 ++m_i;
115 return *this;
116 }
117
119 {
120 QQmlListIterator result = *this;
121 ++m_i;
122 return result;
123 }
124
126 {
127 --m_i;
128 return *this;
129 }
130
132 {
133 QQmlListIterator result = *this;
134 --m_i;
135 return result;
136 }
137
139 {
140 m_i += j;
141 return *this;
142 }
143
145 {
146 m_i -= j;
147 return *this;
148 }
149
151 {
152 return QQmlListIterator(m_list, m_i + j);
153 }
154
156 {
157 return QQmlListIterator(m_list, m_i - j);
158 }
159
161 {
162 return reference(this);
163 }
164
166 {
167 return pointer(this);
168 }
169
170private:
171 friend inline bool operator==(const QQmlListIterator &a, const QQmlListIterator &b)
172 {
173 return a.m_list == b.m_list && a.m_i == b.m_i;
174 }
175
176 friend inline bool operator!=(const QQmlListIterator &a, const QQmlListIterator &b)
177 {
178 return a.m_list != b.m_list || a.m_i != b.m_i;
179 }
180
181 friend inline bool operator<(const QQmlListIterator &i, const QQmlListIterator &j)
182 {
183 return i - j < 0;
184 }
185
186 friend inline bool operator>=(const QQmlListIterator &i, const QQmlListIterator &j)
187 {
188 return !(i < j);
189 }
190
191 friend inline bool operator>(const QQmlListIterator &i, const QQmlListIterator &j)
192 {
193 return i - j > 0;
194 }
195
196 friend inline bool operator<=(const QQmlListIterator &i, const QQmlListIterator &j)
197 {
198 return !(i > j);
199 }
200
202 {
203 return j + i;
204 }
205
207 {
208 return i.m_i - j.m_i;
209 }
210
211 QQmlListProperty<T> *m_list = nullptr;
212 qsizetype m_i = 0;
213};
214
215template<typename T>
217{
218 return QQmlListIterator<T>(&list, 0);
219}
220
221template<typename T>
223{
225}
226
228
229#endif // QQMLLIST_P_H
qsizetype count() const noexcept
Definition qlist.h:387
\inmodule QtCore
Definition qmetatype.h:320
\inmodule QtCore
Definition qpointer.h:18
reference operator*() const
Definition qqmllist_p.h:102
pointer(const QQmlListIterator *iter)
Definition qqmllist_p.h:101
QQmlListIterator operator->() const
Definition qqmllist_p.h:103
reference(const QQmlListIterator *iter)
Definition qqmllist_p.h:68
reference(reference &&)=default
reference & operator=(reference &&value)
Definition qqmllist_p.h:86
reference & operator=(const reference &value)
Definition qqmllist_p.h:85
reference & operator=(T *value)
Definition qqmllist_p.h:80
reference(const reference &)=default
friend void swap(reference a, reference b)
Definition qqmllist_p.h:88
friend QQmlListIterator operator+(qsizetype i, const QQmlListIterator &j)
Definition qqmllist_p.h:201
qsizetype difference_type
Definition qqmllist_p.h:61
friend bool operator<=(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:196
QQmlListIterator operator-(qsizetype j)
Definition qqmllist_p.h:155
reference operator*() const
Definition qqmllist_p.h:160
friend qsizetype operator-(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:206
pointer operator->() const
Definition qqmllist_p.h:165
friend bool operator==(const QQmlListIterator &a, const QQmlListIterator &b)
Definition qqmllist_p.h:171
QQmlListIterator(QQmlListProperty< T > *list, qsizetype i)
Definition qqmllist_p.h:110
friend bool operator>=(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:186
QQmlListIterator operator+(qsizetype j)
Definition qqmllist_p.h:150
std::random_access_iterator_tag iterator_category
Definition qqmllist_p.h:62
QQmlListIterator & operator++()
Definition qqmllist_p.h:112
friend bool operator>(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:191
friend bool operator<(const QQmlListIterator &i, const QQmlListIterator &j)
Definition qqmllist_p.h:181
QQmlListIterator & operator-=(qsizetype j)
Definition qqmllist_p.h:144
QQmlListIterator operator++(int)
Definition qqmllist_p.h:118
friend bool operator!=(const QQmlListIterator &a, const QQmlListIterator &b)
Definition qqmllist_p.h:176
QQmlListIterator()=default
QQmlListIterator & operator--()
Definition qqmllist_p.h:125
QQmlListIterator & operator+=(qsizetype j)
Definition qqmllist_p.h:138
QQmlListIterator operator--(int)
Definition qqmllist_p.h:131
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
Definition qqmllist.h:24
static QQmlListReference init(const QQmlListProperty< QObject > &, QMetaType)
Definition qqmllist.cpp:25
const QMetaObject * elementType()
Definition qqmllist_p.h:44
QPointer< QObject > object
Definition qqmllist_p.h:32
QQmlListProperty< QObject > property
Definition qqmllist_p.h:33
static QQmlListReferencePrivate * get(QQmlListReference *ref)
Definition qqmllist_p.h:40
The QQmlListReference class allows the manipulation of QQmlListProperty properties.
Definition qqmllist.h:183
const QMetaObject * metaObject() const
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 ref
GLuint64EXT * result
[6]
QQmlListIterator< T > begin(QQmlListProperty< T > &list)
Definition qqmllist_p.h:216
ptrdiff_t qsizetype
Definition qtypes.h:70
QList< int > list
[14]
\inmodule QtCore