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
qiterable.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 QITERABLE_H
5#define QITERABLE_H
6
7#include <QtCore/qglobal.h>
8#include <QtCore/qtypeinfo.h>
9#include <QtCore/qmetacontainer.h>
10#include <QtCore/qtaggedpointer.h>
11
13
14namespace QtPrivate {
15 template<typename Type, typename Storage = Type>
17 {
18 enum Tag : bool { Const, Mutable };
19 QTaggedPointer<Storage, Tag> m_pointer;
20
21 public:
22 Q_NODISCARD_CTOR QConstPreservingPointer(std::nullptr_t) : m_pointer(nullptr, Const) {}
23
25 : m_pointer(reinterpret_cast<Storage *>(const_cast<void *>(pointer)), Const)
26 {
28 Q_ASSERT(alignment > qsizetype(alignof(Storage)));
29 }
30
32 : m_pointer(reinterpret_cast<Storage *>(pointer), Mutable)
33 {
35 Q_ASSERT(alignment > qsizetype(alignof(Storage)));
36 }
37
38 template<typename InputType>
40 : m_pointer(reinterpret_cast<Storage *>(const_cast<InputType *>(pointer)), Const)
41 {
42 static_assert(alignof(InputType) >= alignof(Storage));
43 }
44
45 template<typename InputType>
47 : m_pointer(reinterpret_cast<Storage *>(pointer), Mutable)
48 {
49 static_assert(alignof(InputType) >= alignof(Storage));
50 }
51
53
54 const Type *constPointer() const
55 {
56 return reinterpret_cast<const Type *>(m_pointer.data());
57 }
58
60 {
61 return m_pointer.tag() == Mutable ? reinterpret_cast<Type *>(m_pointer.data()) : nullptr;
62 }
63 };
64}
65
66template<class Iterator, typename IteratorCategory>
67class QTaggedIterator : public Iterator
68{
69public:
70 using iterator_category = IteratorCategory;
71 QTaggedIterator(Iterator &&it) : Iterator(std::move(it))
72 {
73 const QMetaContainer metaContainer = this->metaContainer();
74 if constexpr (std::is_base_of_v<std::random_access_iterator_tag, IteratorCategory>) {
75 if (!metaContainer.hasRandomAccessIterator()) {
76 qFatal("You cannot use this iterator as a random access iterator");
77 this->clearIterator();
78 }
79 }
80
81 if constexpr (std::is_base_of_v<std::bidirectional_iterator_tag, IteratorCategory>) {
82 if (!metaContainer.hasBidirectionalIterator()) {
83 qFatal("You cannot use this iterator as a bidirectional iterator");
84 this->clearIterator();
85 }
86 }
87
88 if constexpr (std::is_base_of_v<std::forward_iterator_tag, IteratorCategory>) {
89 if (!metaContainer.hasForwardIterator()) {
90 qFatal("You cannot use this iterator as a forward iterator");
91 this->clearIterator();
92 }
93 }
94
95 if constexpr (std::is_base_of_v<std::input_iterator_tag, IteratorCategory>) {
96 if (!metaContainer.hasInputIterator()) {
97 qFatal("You cannot use this iterator as an input iterator");
98 this->clearIterator();
99 }
100 }
101 }
102
103 bool operator==(const QTaggedIterator &o) const { return Iterator::operator==(o); }
104 bool operator!=(const QTaggedIterator &o) const { return Iterator::operator!=(o); }
105 QTaggedIterator &operator++() { Iterator::operator++(); return *this; }
106 QTaggedIterator operator++(int x) { return QTaggedIterator(Iterator::operator++(x)); }
107 QTaggedIterator &operator--() { Iterator::operator--(); return *this; }
108 QTaggedIterator operator--(int x) { return QTaggedIterator(Iterator::operator--(x)); }
109 QTaggedIterator &operator+=(qsizetype j) { Iterator::operator+=(j); return *this; }
110 QTaggedIterator &operator-=(qsizetype j) { Iterator::operator-=(j); return *this; }
111 QTaggedIterator operator+(qsizetype j) const { return QTaggedIterator(Iterator::operator+(j)); }
112 QTaggedIterator operator-(qsizetype j) const { return QTaggedIterator(Iterator::operator-(j)); }
113 qsizetype operator-(const QTaggedIterator &j) const { return Iterator::operator-(j); }
114
115 bool operator<(const QTaggedIterator &j) { return operator-(j) < 0; }
116 bool operator>=(const QTaggedIterator &j) { return !operator<(j); }
117 bool operator>(const QTaggedIterator &j) { return operator-(j) > 0; }
118 bool operator<=(const QTaggedIterator &j) { return !operator>(j); }
119
120 friend inline QTaggedIterator operator+(qsizetype j, const QTaggedIterator &k) { return k + j; }
121};
122
123template<class Container>
124class QIterable;
125
126template<class Container>
128{
129private:
131 void *m_iterator = nullptr;
132
133protected:
134 QBaseIterator() = default;
135 QBaseIterator(const QIterable<Container> *iterable, void *iterator)
136 : m_iterable(iterable), m_iterator(iterator)
137 {}
138
139 QBaseIterator(QIterable<Container> *iterable, void *iterator)
140 : m_iterable(iterable), m_iterator(iterator)
141 {}
142
144 : m_iterable(std::move(other.m_iterable)), m_iterator(std::move(other.m_iterator))
145 {
146 other.m_iterator = nullptr;
147 }
148
150 : m_iterable(other.m_iterable)
151 {
152 initIterator(other.m_iterator);
153 }
154
156
158 {
159 if (this != &other) {
161 m_iterable = std::move(other.m_iterable);
162 m_iterator = std::move(other.m_iterator);
163 other.m_iterator = nullptr;
164 }
165 return *this;
166 }
167
169 {
170 if (this != &other) {
172 m_iterable = other.m_iterable;
173 initIterator(other.m_iterator);
174 }
175 return *this;
176 }
177
178 QIterable<Container> *mutableIterable() const
179 {
180 return m_iterable.mutablePointer();
181 }
182
183 const QIterable<Container> *constIterable() const
184 {
185 return m_iterable.constPointer();
186 }
187
188 void initIterator(const void *copy)
189 {
190 if (!copy)
191 return;
192 if (auto *mutableIt = mutableIterable()) {
193 m_iterator = metaContainer().begin(mutableIt->mutableIterable());
194 metaContainer().copyIterator(m_iterator, copy);
195 } else if (auto *constIt = constIterable()) {
196 m_iterator = metaContainer().constBegin(constIt->constIterable());
197 metaContainer().copyConstIterator(m_iterator, copy);
198 }
199 }
200
202 {
203 if (!m_iterator)
204 return;
205 if (mutableIterable())
206 metaContainer().destroyIterator(m_iterator);
207 else
208 metaContainer().destroyConstIterator(m_iterator);
209 }
210
211public:
212 void *mutableIterator() { return m_iterator; }
213 const void *constIterator() const { return m_iterator; }
214 Container metaContainer() const { return constIterable()->m_metaContainer; }
215};
216
217template<class Container>
218struct QIterator : public QBaseIterator<Container>
219{
220public:
222
223 explicit QIterator(QIterable<Container> *iterable, void *iterator)
224 : QBaseIterator<Container>(iterable, iterator)
225 {
226 Q_ASSERT(iterable != nullptr);
227 }
228
229 bool operator==(const QIterator &o) const
230 {
231 return this->metaContainer().compareIterator(this->constIterator(), o.constIterator());
232 }
233
234 bool operator!=(const QIterator &o) const
235 {
236 return !this->metaContainer().compareIterator(this->constIterator(), o.constIterator());
237 }
238
240 {
241 this->metaContainer().advanceIterator(this->mutableIterator(), 1);
242 return *this;
243 }
244
246 {
247 QIterable<Container> *iterable = this->mutableIterable();
248 const Container metaContainer = this->metaContainer();
249 QIterator result(iterable, metaContainer.begin(iterable->mutableIterable()));
250 metaContainer.copyIterator(result.mutableIterator(), this->constIterator());
251 metaContainer.advanceIterator(this->mutableIterator(), 1);
252 return result;
253 }
254
256 {
257 this->metaContainer().advanceIterator(this->mutableIterator(), -1);
258 return *this;
259 }
260
262 {
263 QIterable<Container> *iterable = this->mutableIterable();
264 const Container metaContainer = this->metaContainer();
265 QIterator result(iterable, metaContainer.begin(iterable->mutableIterable()));
266 metaContainer.copyIterator(result.mutableIterator(), this->constIterator());
267 metaContainer.advanceIterator(this->mutableIterator(), -1);
268 return result;
269 }
270
272 {
273 this->metaContainer().advanceIterator(this->mutableIterator(), j);
274 return *this;
275 }
276
278 {
279 this->metaContainer().advanceIterator(this->mutableIterator(), -j);
280 return *this;
281 }
282
284 {
285 QIterable<Container> *iterable = this->mutableIterable();
286 const Container metaContainer = this->metaContainer();
287 QIterator result(iterable, metaContainer.begin(iterable->mutableIterable()));
288 metaContainer.copyIterator(result.mutableIterator(), this->constIterator());
289 metaContainer.advanceIterator(result.mutableIterator(), j);
290 return result;
291 }
292
294 {
295 QIterable<Container> *iterable = this->mutableIterable();
296 const Container metaContainer = this->metaContainer();
297 QIterator result(iterable, metaContainer.begin(iterable->mutableIterable()));
298 metaContainer.copyIterator(result.mutableIterator(), this->constIterator());
299 metaContainer.advanceIterator(result.mutableIterator(), -j);
300 return result;
301 }
302
304 {
305 return this->metaContainer().diffIterator(this->constIterator(), j.constIterator());
306 }
307
308 friend inline QIterator operator+(qsizetype j, const QIterator &k) { return k + j; }
309};
310
311template<class Container>
312struct QConstIterator : public QBaseIterator<Container>
313{
314public:
316
317 explicit QConstIterator(const QIterable<Container> *iterable, void *iterator)
318 : QBaseIterator<Container>(iterable, iterator)
319 {
320 }
321
322 bool operator==(const QConstIterator &o) const
323 {
324 return this->metaContainer().compareConstIterator(
325 this->constIterator(), o.constIterator());
326 }
327
328 bool operator!=(const QConstIterator &o) const
329 {
330 return !this->metaContainer().compareConstIterator(
331 this->constIterator(), o.constIterator());
332 }
333
335 {
336 this->metaContainer().advanceConstIterator(this->mutableIterator(), 1);
337 return *this;
338 }
339
341 {
342 const Container metaContainer = this->metaContainer();
343 QConstIterator result(this->constIterable(), metaContainer.constBegin(
344 this->constIterable()->constIterable()));
345 metaContainer.copyConstIterator(result.mutableIterator(), this->constIterator());
346 metaContainer.advanceConstIterator(this->mutableIterator(), 1);
347 return result;
348 }
349
351 {
352 this->metaContainer().advanceConstIterator(this->mutableIterator(), -1);
353 return *this;
354 }
355
357 {
358 const Container metaContainer = this->metaContainer();
359 QConstIterator result(this->constIterable(), metaContainer.constBegin(
360 this->constIterable()->constIterable()));
361 metaContainer.copyConstIterator(result.mutableIterator(), this->constIterator());
362 metaContainer.advanceConstIterator(this->mutableIterator(), -1);
363 return result;
364 }
365
367 {
368 this->metaContainer().advanceConstIterator(this->mutableIterator(), j);
369 return *this;
370 }
371
373 {
374 this->metaContainer().advanceConstIterator(this->mutableIterator(), -j);
375 return *this;
376 }
377
379 {
380 const Container metaContainer = this->metaContainer();
382 this->constIterable(),
383 metaContainer.constBegin(this->constIterable()->constIterable()));
384 metaContainer.copyConstIterator(result.mutableIterator(), this->constIterator());
385 metaContainer.advanceConstIterator(result.mutableIterator(), j);
386 return result;
387 }
388
390 {
391 const Container metaContainer = this->metaContainer();
392 QConstIterator result(this->constIterable(), metaContainer.constBegin(
393 this->constIterable()->constIterable()));
394 metaContainer.copyConstIterator(result.mutableIterator(), this->constIterator());
395 metaContainer.advanceConstIterator(result.mutableIterator(), -j);
396 return result;
397 }
398
400 {
401 return this->metaContainer().diffIterator(this->constIterator(), j.constIterator());
402 }
403
405 {
406 return k + j;
407 }
408};
409
410template<class Container>
412{
413 friend class QBaseIterator<Container>;
414
415protected:
419
420public:
421 template<class T>
422 QIterable(const Container &metaContainer, const T *p)
424 {
425 }
426
427 template<class T>
428 QIterable(const Container &metaContainer, T *p)
430 {
431 }
432
433 template<typename Pointer>
434 QIterable(const Container &metaContainer, Pointer iterable)
436 {
437 }
438
439 QIterable(const Container &metaContainer, qsizetype alignment, const void *p)
441 {
442 }
443
448
449 bool canInputIterate() const
450 {
451 return m_metaContainer.hasInputIterator();
452 }
453
454 bool canForwardIterate() const
455 {
456 return m_metaContainer.hasForwardIterator();
457 }
458
459 bool canReverseIterate() const
460 {
461 return m_metaContainer.hasBidirectionalIterator();
462 }
463
465 {
466 return m_metaContainer.hasRandomAccessIterator();
467 }
468
469 const void *constIterable() const { return m_iterable.constPointer(); }
471
472 QConstIterator<Container> constBegin() const
473 {
474 return QConstIterator(this, m_metaContainer.constBegin(constIterable()));
475 }
476
477 QConstIterator<Container> constEnd() const
478 {
479 return QConstIterator(this, m_metaContainer.constEnd(constIterable()));
480 }
481
482 QIterator<Container> mutableBegin()
483 {
484 return QIterator(this, m_metaContainer.begin(mutableIterable()));
485 }
486
487 QIterator<Container> mutableEnd()
488 {
489 return QIterator(this, m_metaContainer.end(mutableIterable()));
490 }
491
493 {
494 const void *container = constIterable();
495 if (m_metaContainer.hasSize())
496 return m_metaContainer.size(container);
497 if (!m_metaContainer.hasConstIterator())
498 return -1;
499
500 const void *begin = m_metaContainer.constBegin(container);
501 const void *end = m_metaContainer.constEnd(container);
502 const qsizetype size = m_metaContainer.diffConstIterator(end, begin);
503 m_metaContainer.destroyConstIterator(begin);
504 m_metaContainer.destroyConstIterator(end);
505 return size;
506 }
507
508 Container metaContainer() const
509 {
510 return m_metaContainer;
511 }
512};
513
515
516#endif // QITERABLE_H
\inmodule QtCore QBaseIterator forms the common base class for all iterators operating on subclasses ...
Definition qiterable.h:128
void * mutableIterator()
Returns a non-const pointer to the internal native iterator.
Definition qiterable.h:212
const void * constIterator() const
Returns a const pointer to the internal native iterator.
Definition qiterable.h:213
const QIterable< Container > * constIterable() const
Definition qiterable.h:183
QBaseIterator & operator=(QBaseIterator &&other)
Definition qiterable.h:157
void clearIterator()
Definition qiterable.h:201
QBaseIterator(const QIterable< Container > *iterable, void *iterator)
Definition qiterable.h:135
QBaseIterator(QBaseIterator &&other)
Definition qiterable.h:143
QBaseIterator & operator=(const QBaseIterator &other)
Definition qiterable.h:168
void initIterator(const void *copy)
Definition qiterable.h:188
QBaseIterator(const QBaseIterator &other)
Definition qiterable.h:149
QBaseIterator(QIterable< Container > *iterable, void *iterator)
Definition qiterable.h:139
QBaseIterator()=default
QIterable< Container > * mutableIterable() const
Definition qiterable.h:178
Container metaContainer() const
Definition qiterable.h:214
\inmodule QtCore
Definition qiterable.h:412
qsizetype size() const
Returns the number of values in the container.
Definition qiterable.h:492
uint m_revision
Definition qiterable.h:416
bool canRandomAccessIterate() const
Returns whether it is possible to efficiently skip over multiple values using and iterator.
Definition qiterable.h:464
QConstIterator< Container > constBegin() const
Returns a QConstIterator for the beginning of the container.
Definition qiterable.h:472
QIterable(const Container &metaContainer, Pointer iterable)
Definition qiterable.h:434
bool canInputIterate() const
Returns whether the container has an input iterator.
Definition qiterable.h:449
QIterator< Container > mutableEnd()
Returns a QSequentialIterable::iterator for the end of the container.
Definition qiterable.h:487
const void * constIterable() const
Definition qiterable.h:469
QIterable(const Container &metaContainer, qsizetype alignment, const void *p)
Definition qiterable.h:439
Container m_metaContainer
Definition qiterable.h:418
QIterable(const Container &metaContainer, const T *p)
Definition qiterable.h:422
void * mutableIterable()
Definition qiterable.h:470
QIterator< Container > mutableBegin()
Returns a QIterator for the beginning of the container.
Definition qiterable.h:482
Container metaContainer() const
Definition qiterable.h:508
QtPrivate::QConstPreservingPointer< void, quint16 > m_iterable
Definition qiterable.h:417
QIterable(const Container &metaContainer, T *p)
Definition qiterable.h:428
bool canForwardIterate() const
Returns whether it is possible to iterate over the container in forward direction.
Definition qiterable.h:454
QIterable(const Container &metaContainer, qsizetype alignment, void *p)
Definition qiterable.h:444
bool canReverseIterate() const
Returns whether it is possible to iterate over the container in reverse.
Definition qiterable.h:459
QConstIterator< Container > constEnd() const
Returns a Qterable::QConstIterator for the end of the container.
Definition qiterable.h:477
bool hasRandomAccessIterator() const
Returns true if the underlying container provides a random access iterator as defined by std::random_...
bool hasInputIterator() const
Returns true if the underlying container provides at least an input iterator as defined by std::input...
bool hasBidirectionalIterator() const
Returns true if the underlying container provides a bi-directional iterator or a random access iterat...
bool hasForwardIterator() const
Returns true if the underlying container provides at least a forward iterator as defined by std::forw...
QTaggedIterator is a template class that wraps an iterator and exposes standard iterator traits.
Definition qiterable.h:68
bool operator!=(const QTaggedIterator &o) const
Returns true if other points to a different item than this iterator; otherwise returns false.
Definition qiterable.h:104
QTaggedIterator & operator++()
The prefix {++} operator ({++it}) advances the iterator to the next item in the container and returns...
Definition qiterable.h:105
bool operator<(const QTaggedIterator &j)
Definition qiterable.h:115
QTaggedIterator & operator-=(qsizetype j)
Makes the iterator go back by j items.
Definition qiterable.h:110
friend QTaggedIterator operator+(qsizetype j, const QTaggedIterator &k)
Returns an iterator to the item at j positions forward from iterator k.
Definition qiterable.h:120
QTaggedIterator(Iterator &&it)
Constructs a QTaggedIterator from an iterator or QConstIterator it.
Definition qiterable.h:71
bool operator<=(const QTaggedIterator &j)
Definition qiterable.h:118
QTaggedIterator operator+(qsizetype j) const
Returns an iterator to the item at j positions forward from this iterator.
Definition qiterable.h:111
qsizetype operator-(const QTaggedIterator &j) const
Returns the distance between this iterator and j.
Definition qiterable.h:113
QTaggedIterator & operator+=(qsizetype j)
Advances the iterator by j items.
Definition qiterable.h:109
bool operator>(const QTaggedIterator &j)
Definition qiterable.h:117
QTaggedIterator operator--(int x)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:108
QTaggedIterator operator-(qsizetype j) const
Returns an iterator to the item at j positions backward from this iterator.
Definition qiterable.h:112
QTaggedIterator operator++(int x)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:106
QTaggedIterator & operator--()
The prefix {–} operator ({–it}) makes the preceding item current and returns an iterator to the new c...
Definition qiterable.h:107
bool operator==(const QTaggedIterator &o) const
Returns true if other points to the same item as this iterator; otherwise returns false.
Definition qiterable.h:103
IteratorCategory iterator_category
Definition qiterable.h:70
bool operator>=(const QTaggedIterator &j)
Definition qiterable.h:116
Q_NODISCARD_CTOR QConstPreservingPointer(const InputType *pointer)
Definition qiterable.h:39
Q_NODISCARD_CTOR QConstPreservingPointer(std::nullptr_t)
Definition qiterable.h:22
Q_NODISCARD_CTOR QConstPreservingPointer(InputType *pointer)
Definition qiterable.h:46
const Type * constPointer() const
Definition qiterable.h:54
Q_NODISCARD_CTOR QConstPreservingPointer(void *pointer, qsizetype alignment)
Definition qiterable.h:31
Q_NODISCARD_CTOR QConstPreservingPointer()=default
Q_NODISCARD_CTOR QConstPreservingPointer(const void *pointer, qsizetype alignment)
Definition qiterable.h:24
#define this
Definition dialogs.cpp:9
QSet< QString >::iterator it
uint alignment
Combined button and popup list for selecting options.
\macro QT_NO_KEYWORDS >
static jboolean copy(JNIEnv *, jobject)
#define Q_NODISCARD_CTOR
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 int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void
#define qFatal
Definition qlogging.h:168
GLint GLint GLint GLint GLint x
[0]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLuint end
GLsizei const void * pointer
Definition qopenglext.h:384
GLuint64EXT * result
[6]
GLfloat GLfloat p
[1]
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
QtPrivate::QRegularExpressionMatchIteratorRangeBasedForIterator begin(const QRegularExpressionMatchIterator &iterator)
#define Q_UNUSED(x)
ptrdiff_t qsizetype
Definition qtypes.h:165
unsigned int uint
Definition qtypes.h:34
QObject::connect nullptr
QSharedPointer< T > other(t)
[5]
The QConstIterator allows iteration over a container in a QVariant.
Definition qiterable.h:313
bool operator==(const QConstIterator &o) const
Returns true if other points to the same item as this iterator; otherwise returns false.
Definition qiterable.h:322
QConstIterator operator--(int)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:356
QConstIterator operator-(qsizetype j) const
Returns an iterator to the item at j positions backward from this iterator.
Definition qiterable.h:389
QConstIterator & operator--()
The prefix {–} operator ({–it}) makes the preceding item current and returns an iterator to the new c...
Definition qiterable.h:350
QConstIterator operator+(qsizetype j) const
Returns an iterator to the item at j positions forward from this iterator.
Definition qiterable.h:378
friend QConstIterator operator+(qsizetype j, const QConstIterator &k)
Definition qiterable.h:404
qsizetype difference_type
Definition qiterable.h:315
QConstIterator & operator++()
The prefix {++} operator ({++it}) advances the iterator to the next item in the container and returns...
Definition qiterable.h:334
qsizetype operator-(const QConstIterator &j) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:399
QConstIterator & operator+=(qsizetype j)
Advances the iterator by j items.
Definition qiterable.h:366
QConstIterator(const QIterable< Container > *iterable, void *iterator)
Creates a QConstIterator to wrap iterator, operating on iterable.
Definition qiterable.h:317
QConstIterator operator++(int)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:340
bool operator!=(const QConstIterator &o) const
Returns true if other points to a different item than this iterator; otherwise returns false.
Definition qiterable.h:328
QConstIterator & operator-=(qsizetype j)
Makes the iterator go back by j items.
Definition qiterable.h:372
The QIterator is a template class that allows iteration over a container in a QVariant.
Definition qiterable.h:219
bool operator!=(const QIterator &o) const
Returns true if other points to a different item than this iterator; otherwise returns false.
Definition qiterable.h:234
QIterator & operator++()
The prefix {++} operator ({++it}) advances the iterator to the next item in the container and returns...
Definition qiterable.h:239
QIterator & operator-=(qsizetype j)
Makes the iterator go back by j items.
Definition qiterable.h:277
QIterator operator++(int)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:245
qsizetype operator-(const QIterator &j) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:303
QIterator & operator+=(qsizetype j)
Advances the iterator by j items.
Definition qiterable.h:271
QIterator(QIterable< Container > *iterable, void *iterator)
Creates an iterator from an iterable and a pointer to a native iterator.
Definition qiterable.h:223
QIterator operator+(qsizetype j) const
Returns an iterator to the item at j positions forward from this iterator.
Definition qiterable.h:283
QIterator operator--(int)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:261
QIterator & operator--()
The prefix {–} operator ({–it}) makes the preceding item current and returns an iterator to the new c...
Definition qiterable.h:255
qsizetype difference_type
Definition qiterable.h:221
bool operator==(const QIterator &o) const
Returns true if other points to the same item as this iterator; otherwise returns false.
Definition qiterable.h:229
friend QIterator operator+(qsizetype j, const QIterator &k)
Returns an iterator to the item at j positions forward from iterator k.
Definition qiterable.h:308
QIterator operator-(qsizetype j) const
Returns an iterator to the item at j positions backward from this iterator.
Definition qiterable.h:293
Definition moc.h:23