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
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"
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
37
38 void addref();
39 void release();
41
42 static inline QQmlListReferencePrivate *get(QQmlListReference *ref) {
43 return ref->d;
44 }
45
46 const QMetaObject *elementType()
47 {
48 if (!m_elementType) {
49 m_elementType = QQmlMetaType::rawMetaObjectForType(
50 QQmlMetaType::listValueType(propertyType)).metaObject();
51 }
52
53 return m_elementType;
54 }
55
56private:
57 const QMetaObject *m_elementType = nullptr;
58};
59
60template<typename T>
62public:
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
82 reference &operator=(T *value) {
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)); }
88 reference &operator=(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
203 friend inline QQmlListIterator operator+(qsizetype i, const QQmlListIterator &j)
204 {
205 return j + i;
206 }
207
208 friend inline qsizetype operator-(const QQmlListIterator &i, const QQmlListIterator &j)
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>
219{
220 return QQmlListIterator<T>(&list, 0);
221}
222
223template<typename T>
225{
226 return QQmlListIterator<T>(&list, list.count(&list));
227}
228
229QT_END_NAMESPACE
230
231#endif // QQMLLIST_P_H
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
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
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
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
Definition qqmllist.h:24
QQmlListProperty(QObject *o, QList< T * > *list)
Definition qqmllist.h:37
ClearFunction clear
Definition qqmllist.h:87
bool operator==(const QQmlListProperty &o) const
Returns true if this QQmlListProperty is equal to other, otherwise false.
Definition qqmllist.h:70
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:42
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:66
AtFunction at
Definition qqmllist.h:86
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:54
QObject * object
Definition qqmllist.h:81
RemoveLastFunction removeLast
Definition qqmllist.h:89
CountFunction count
Definition qqmllist.h:85
AppendFunction append
Definition qqmllist.h:84
QQmlListProperty()=default
\macro QML_LIST_PROPERTY_ASSIGN_BEHAVIOR_APPEND
ReplaceFunction replace
Definition qqmllist.h:88
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 \l QQmlListProperty properties.
Definition qqmllist.h:183
Combined button and popup list for selecting options.
static QT_BEGIN_NAMESPACE bool isObjectCompatible(QObject *object, QQmlListReferencePrivate *d)
Definition qqmllist.cpp:10
QQmlListIterator< T > end(QQmlListProperty< T > &list)
Definition qqmllist_p.h:224
QQmlListIterator< T > begin(QQmlListProperty< T > &list)
Definition qqmllist_p.h:218