Qt 6.x
The Qt SDK
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
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 };
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 (std::is_base_of_v<std::random_access_iterator_tag, IteratorCategory>
75 && !metaContainer.hasRandomAccessIterator()) {
76 qFatal("You cannot use this iterator as a random access iterator");
77 this->clearIterator();
78 }
79
80 if (std::is_base_of_v<std::bidirectional_iterator_tag, IteratorCategory>
81 && !metaContainer.hasBidirectionalIterator()) {
82 qFatal("You cannot use this iterator as a bidirectional iterator");
83 this->clearIterator();
84 }
85
86 if (std::is_base_of_v<std::forward_iterator_tag, IteratorCategory>
87 && !metaContainer.hasForwardIterator()) {
88 qFatal("You cannot use this iterator as a forward iterator");
89 this->clearIterator();
90 }
91
92 if (std::is_base_of_v<std::input_iterator_tag, IteratorCategory>
93 && !metaContainer.hasInputIterator()) {
94 qFatal("You cannot use this iterator as an input iterator");
95 this->clearIterator();
96 }
97 }
98
99 bool operator==(const QTaggedIterator &o) const { return Iterator::operator==(o); }
100 bool operator!=(const QTaggedIterator &o) const { return Iterator::operator!=(o); }
101 QTaggedIterator &operator++() { Iterator::operator++(); return *this; }
102 QTaggedIterator operator++(int x) { return QTaggedIterator(Iterator::operator++(x)); }
103 QTaggedIterator &operator--() { Iterator::operator--(); return *this; }
104 QTaggedIterator operator--(int x) { return QTaggedIterator(Iterator::operator--(x)); }
105 QTaggedIterator &operator+=(qsizetype j) { Iterator::operator+=(j); return *this; }
106 QTaggedIterator &operator-=(qsizetype j) { Iterator::operator-=(j); return *this; }
107 QTaggedIterator operator+(qsizetype j) const { return QTaggedIterator(Iterator::operator+(j)); }
108 QTaggedIterator operator-(qsizetype j) const { return QTaggedIterator(Iterator::operator-(j)); }
109 qsizetype operator-(const QTaggedIterator &j) const { return Iterator::operator-(j); }
110
111 bool operator<(const QTaggedIterator &j) { return operator-(j) < 0; }
112 bool operator>=(const QTaggedIterator &j) { return !operator<(j); }
113 bool operator>(const QTaggedIterator &j) { return operator-(j) > 0; }
114 bool operator<=(const QTaggedIterator &j) { return !operator>(j); }
115
116 friend inline QTaggedIterator operator+(qsizetype j, const QTaggedIterator &k) { return k + j; }
117};
118
119template<class Container>
120class QIterable;
121
122template<class Container>
124{
125private:
127 void *m_iterator = nullptr;
128
129protected:
130 QBaseIterator() = default;
131 QBaseIterator(const QIterable<Container> *iterable, void *iterator)
132 : m_iterable(iterable), m_iterator(iterator)
133 {}
134
135 QBaseIterator(QIterable<Container> *iterable, void *iterator)
136 : m_iterable(iterable), m_iterator(iterator)
137 {}
138
140 : m_iterable(std::move(other.m_iterable)), m_iterator(std::move(other.m_iterator))
141 {
142 other.m_iterator = nullptr;
143 }
144
146 : m_iterable(other.m_iterable)
147 {
148 initIterator(other.m_iterator);
149 }
150
152
154 {
155 if (this != &other) {
157 m_iterable = std::move(other.m_iterable);
158 m_iterator = std::move(other.m_iterator);
159 other.m_iterator = nullptr;
160 }
161 return *this;
162 }
163
165 {
166 if (this != &other) {
168 m_iterable = other.m_iterable;
169 initIterator(other.m_iterator);
170 }
171 return *this;
172 }
173
175 {
176 return m_iterable.mutablePointer();
177 }
178
180 {
181 return m_iterable.constPointer();
182 }
183
184 void initIterator(const void *copy)
185 {
186 if (!copy)
187 return;
188 if (auto *mutableIt = mutableIterable()) {
189 m_iterator = metaContainer().begin(mutableIt->mutableIterable());
190 metaContainer().copyIterator(m_iterator, copy);
191 } else if (auto *constIt = constIterable()) {
192 m_iterator = metaContainer().constBegin(constIt->constIterable());
193 metaContainer().copyConstIterator(m_iterator, copy);
194 }
195 }
196
198 {
199 if (!m_iterator)
200 return;
201 if (mutableIterable())
202 metaContainer().destroyIterator(m_iterator);
203 else
204 metaContainer().destroyConstIterator(m_iterator);
205 }
206
207public:
208 void *mutableIterator() { return m_iterator; }
209 const void *constIterator() const { return m_iterator; }
210 Container metaContainer() const { return constIterable()->m_metaContainer; }
211};
212
213template<class Container>
214struct QIterator : public QBaseIterator<Container>
215{
216public:
218
219 explicit QIterator(QIterable<Container> *iterable, void *iterator)
220 : QBaseIterator<Container>(iterable, iterator)
221 {
222 Q_ASSERT(iterable != nullptr);
223 }
224
225 bool operator==(const QIterator &o) const
226 {
227 return this->metaContainer().compareIterator(this->constIterator(), o.constIterator());
228 }
229
230 bool operator!=(const QIterator &o) const
231 {
232 return !this->metaContainer().compareIterator(this->constIterator(), o.constIterator());
233 }
234
236 {
237 this->metaContainer().advanceIterator(this->mutableIterator(), 1);
238 return *this;
239 }
240
242 {
243 QIterable<Container> *iterable = this->mutableIterable();
244 const Container metaContainer = this->metaContainer();
245 QIterator result(iterable, metaContainer.begin(iterable->mutableIterable()));
246 metaContainer.copyIterator(result.mutableIterator(), this->constIterator());
247 metaContainer.advanceIterator(this->mutableIterator(), 1);
248 return result;
249 }
250
252 {
253 this->metaContainer().advanceIterator(this->mutableIterator(), -1);
254 return *this;
255 }
256
258 {
259 QIterable<Container> *iterable = this->mutableIterable();
260 const Container metaContainer = this->metaContainer();
261 QIterator result(iterable, metaContainer.begin(iterable->mutableIterable()));
262 metaContainer.copyIterator(result.mutableIterator(), this->constIterator());
263 metaContainer.advanceIterator(this->mutableIterator(), -1);
264 return result;
265 }
266
268 {
269 this->metaContainer().advanceIterator(this->mutableIterator(), j);
270 return *this;
271 }
272
274 {
275 this->metaContainer().advanceIterator(this->mutableIterator(), -j);
276 return *this;
277 }
278
280 {
281 QIterable<Container> *iterable = this->mutableIterable();
282 const Container metaContainer = this->metaContainer();
283 QIterator result(iterable, metaContainer.begin(iterable->mutableIterable()));
284 metaContainer.copyIterator(result.mutableIterator(), this->constIterator());
285 metaContainer.advanceIterator(result.mutableIterator(), j);
286 return result;
287 }
288
290 {
291 QIterable<Container> *iterable = this->mutableIterable();
292 const Container metaContainer = this->metaContainer();
293 QIterator result(iterable, metaContainer.begin(iterable->mutableIterable()));
294 metaContainer.copyIterator(result.mutableIterator(), this->constIterator());
295 metaContainer.advanceIterator(result.mutableIterator(), -j);
296 return result;
297 }
298
300 {
301 return this->metaContainer().diffIterator(this->constIterator(), j.constIterator());
302 }
303
304 friend inline QIterator operator+(qsizetype j, const QIterator &k) { return k + j; }
305};
306
307template<class Container>
308struct QConstIterator : public QBaseIterator<Container>
309{
310public:
312
313 explicit QConstIterator(const QIterable<Container> *iterable, void *iterator)
314 : QBaseIterator<Container>(iterable, iterator)
315 {
316 }
317
318 bool operator==(const QConstIterator &o) const
319 {
320 return this->metaContainer().compareConstIterator(
321 this->constIterator(), o.constIterator());
322 }
323
324 bool operator!=(const QConstIterator &o) const
325 {
326 return !this->metaContainer().compareConstIterator(
327 this->constIterator(), o.constIterator());
328 }
329
331 {
332 this->metaContainer().advanceConstIterator(this->mutableIterator(), 1);
333 return *this;
334 }
335
337 {
338 const Container metaContainer = this->metaContainer();
339 QConstIterator result(this->constIterable(), metaContainer.constBegin(
340 this->constIterable()->constIterable()));
341 metaContainer.copyConstIterator(result.mutableIterator(), this->constIterator());
342 metaContainer.advanceConstIterator(this->mutableIterator(), 1);
343 return result;
344 }
345
347 {
348 this->metaContainer().advanceConstIterator(this->mutableIterator(), -1);
349 return *this;
350 }
351
353 {
354 const Container metaContainer = this->metaContainer();
355 QConstIterator result(this->constIterable(), metaContainer.constBegin(
356 this->constIterable()->constIterable()));
357 metaContainer.copyConstIterator(result.mutableIterator(), this->constIterator());
358 metaContainer.advanceConstIterator(this->mutableIterator(), -1);
359 return result;
360 }
361
363 {
364 this->metaContainer().advanceConstIterator(this->mutableIterator(), j);
365 return *this;
366 }
367
369 {
370 this->metaContainer().advanceConstIterator(this->mutableIterator(), -j);
371 return *this;
372 }
373
375 {
376 const Container metaContainer = this->metaContainer();
378 this->constIterable(),
379 metaContainer.constBegin(this->constIterable()->constIterable()));
380 metaContainer.copyConstIterator(result.mutableIterator(), this->constIterator());
381 metaContainer.advanceConstIterator(result.mutableIterator(), j);
382 return result;
383 }
384
386 {
387 const Container metaContainer = this->metaContainer();
388 QConstIterator result(this->constIterable(), metaContainer.constBegin(
389 this->constIterable()->constIterable()));
390 metaContainer.copyConstIterator(result.mutableIterator(), this->constIterator());
391 metaContainer.advanceConstIterator(result.mutableIterator(), -j);
392 return result;
393 }
394
396 {
397 return this->metaContainer().diffIterator(this->constIterator(), j.constIterator());
398 }
399
401 {
402 return k + j;
403 }
404};
405
406template<class Container>
408{
409 friend class QBaseIterator<Container>;
410
411protected:
415
416public:
417 template<class T>
418 QIterable(const Container &metaContainer, const T *p)
420 {
421 }
422
423 template<class T>
424 QIterable(const Container &metaContainer, T *p)
426 {
427 }
428
429 template<typename Pointer>
430 QIterable(const Container &metaContainer, Pointer iterable)
432 {
433 }
434
435 QIterable(const Container &metaContainer, qsizetype alignment, const void *p)
437 {
438 }
439
440 QIterable(const Container &metaContainer, qsizetype alignment, void *p)
442 {
443 }
444
445 bool canInputIterate() const
446 {
447 return m_metaContainer.hasInputIterator();
448 }
449
450 bool canForwardIterate() const
451 {
452 return m_metaContainer.hasForwardIterator();
453 }
454
455 bool canReverseIterate() const
456 {
457 return m_metaContainer.hasBidirectionalIterator();
458 }
459
461 {
462 return m_metaContainer.hasRandomAccessIterator();
463 }
464
465 const void *constIterable() const { return m_iterable.constPointer(); }
467
469 {
470 return QConstIterator(this, m_metaContainer.constBegin(constIterable()));
471 }
472
474 {
475 return QConstIterator(this, m_metaContainer.constEnd(constIterable()));
476 }
477
479 {
480 return QIterator(this, m_metaContainer.begin(mutableIterable()));
481 }
482
484 {
485 return QIterator(this, m_metaContainer.end(mutableIterable()));
486 }
487
489 {
490 const void *container = constIterable();
491 if (m_metaContainer.hasSize())
492 return m_metaContainer.size(container);
493 if (!m_metaContainer.hasConstIterator())
494 return -1;
495
496 const void *begin = m_metaContainer.constBegin(container);
497 const void *end = m_metaContainer.constEnd(container);
498 const qsizetype size = m_metaContainer.diffConstIterator(end, begin);
499 m_metaContainer.destroyConstIterator(begin);
500 m_metaContainer.destroyConstIterator(end);
501 return size;
502 }
503
504 Container metaContainer() const
505 {
506 return m_metaContainer;
507 }
508};
509
511
512#endif // QITERABLE_H
\inmodule QtCore QBaseIterator forms the common base class for all iterators operating on subclasses ...
Definition qiterable.h:124
void * mutableIterator()
Returns a non-const pointer to the internal native iterator.
Definition qiterable.h:208
const void * constIterator() const
Returns a const pointer to the internal native iterator.
Definition qiterable.h:209
const QIterable< Container > * constIterable() const
Definition qiterable.h:179
QBaseIterator & operator=(QBaseIterator &&other)
Definition qiterable.h:153
void clearIterator()
Definition qiterable.h:197
QBaseIterator(const QIterable< Container > *iterable, void *iterator)
Definition qiterable.h:131
QBaseIterator(QBaseIterator &&other)
Definition qiterable.h:139
QBaseIterator & operator=(const QBaseIterator &other)
Definition qiterable.h:164
void initIterator(const void *copy)
Definition qiterable.h:184
QBaseIterator(const QBaseIterator &other)
Definition qiterable.h:145
QBaseIterator(QIterable< Container > *iterable, void *iterator)
Definition qiterable.h:135
QBaseIterator()=default
QIterable< Container > * mutableIterable() const
Definition qiterable.h:174
Container metaContainer() const
Definition qiterable.h:210
\inmodule QtCore
Definition qiterable.h:408
qsizetype size() const
Returns the number of values in the container.
Definition qiterable.h:488
uint m_revision
Definition qiterable.h:412
bool canRandomAccessIterate() const
Returns whether it is possible to efficiently skip over multiple values using and iterator.
Definition qiterable.h:460
QConstIterator< Container > constBegin() const
Returns a QConstIterator for the beginning of the container.
Definition qiterable.h:468
QIterable(const Container &metaContainer, Pointer iterable)
Definition qiterable.h:430
bool canInputIterate() const
Returns whether the container has an input iterator.
Definition qiterable.h:445
QIterator< Container > mutableEnd()
Returns a QSequentialIterable::iterator for the end of the container.
Definition qiterable.h:483
const void * constIterable() const
Definition qiterable.h:465
QIterable(const Container &metaContainer, qsizetype alignment, const void *p)
Definition qiterable.h:435
Container m_metaContainer
Definition qiterable.h:414
QIterable(const Container &metaContainer, const T *p)
Definition qiterable.h:418
void * mutableIterable()
Definition qiterable.h:466
QIterator< Container > mutableBegin()
Returns a QIterator for the beginning of the container.
Definition qiterable.h:478
Container metaContainer() const
Definition qiterable.h:504
QtPrivate::QConstPreservingPointer< void, quint16 > m_iterable
Definition qiterable.h:413
QIterable(const Container &metaContainer, T *p)
Definition qiterable.h:424
bool canForwardIterate() const
Returns whether it is possible to iterate over the container in forward direction.
Definition qiterable.h:450
QIterable(const Container &metaContainer, qsizetype alignment, void *p)
Definition qiterable.h:440
bool canReverseIterate() const
Returns whether it is possible to iterate over the container in reverse.
Definition qiterable.h:455
QConstIterator< Container > constEnd() const
Returns a Qterable::QConstIterator for the end of the container.
Definition qiterable.h:473
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:100
QTaggedIterator & operator++()
The prefix {++} operator ({++it}) advances the iterator to the next item in the container and returns...
Definition qiterable.h:101
bool operator<(const QTaggedIterator &j)
Definition qiterable.h:111
QTaggedIterator & operator-=(qsizetype j)
Makes the iterator go back by j items.
Definition qiterable.h:106
friend QTaggedIterator operator+(qsizetype j, const QTaggedIterator &k)
Returns an iterator to the item at j positions forward from iterator k.
Definition qiterable.h:116
QTaggedIterator(Iterator &&it)
Constructs a QTaggedIterator from an iterator or QConstIterator it.
Definition qiterable.h:71
bool operator<=(const QTaggedIterator &j)
Definition qiterable.h:114
QTaggedIterator operator+(qsizetype j) const
Returns an iterator to the item at j positions forward from this iterator.
Definition qiterable.h:107
qsizetype operator-(const QTaggedIterator &j) const
Returns the distance between this iterator and j.
Definition qiterable.h:109
QTaggedIterator & operator+=(qsizetype j)
Advances the iterator by j items.
Definition qiterable.h:105
bool operator>(const QTaggedIterator &j)
Definition qiterable.h:113
QTaggedIterator operator--(int x)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:104
QTaggedIterator operator-(qsizetype j) const
Returns an iterator to the item at j positions backward from this iterator.
Definition qiterable.h:108
QTaggedIterator operator++(int x)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:102
QTaggedIterator & operator--()
The prefix {–} operator ({–it}) makes the preceding item current and returns an iterator to the new c...
Definition qiterable.h:103
bool operator==(const QTaggedIterator &o) const
Returns true if other points to the same item as this iterator; otherwise returns false.
Definition qiterable.h:99
IteratorCategory iterator_category
Definition qiterable.h:70
bool operator>=(const QTaggedIterator &j)
Definition qiterable.h:112
T * data() const noexcept
Tag tag() const noexcept
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_NAMESPACE
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:164
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:70
unsigned int uint
Definition qtypes.h:29
QObject::connect nullptr
QSharedPointer< T > other(t)
[5]
The QConstIterator allows iteration over a container in a QVariant.
Definition qiterable.h:309
bool operator==(const QConstIterator &o) const
Returns true if other points to the same item as this iterator; otherwise returns false.
Definition qiterable.h:318
QConstIterator operator--(int)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:352
QConstIterator operator-(qsizetype j) const
Returns an iterator to the item at j positions backward from this iterator.
Definition qiterable.h:385
QConstIterator & operator--()
The prefix {–} operator ({–it}) makes the preceding item current and returns an iterator to the new c...
Definition qiterable.h:346
QConstIterator operator+(qsizetype j) const
Returns an iterator to the item at j positions forward from this iterator.
Definition qiterable.h:374
friend QConstIterator operator+(qsizetype j, const QConstIterator &k)
Definition qiterable.h:400
qsizetype difference_type
Definition qiterable.h:311
QConstIterator & operator++()
The prefix {++} operator ({++it}) advances the iterator to the next item in the container and returns...
Definition qiterable.h:330
qsizetype operator-(const QConstIterator &j) const
Returns the distance between the two iterators.
Definition qiterable.h:395
QConstIterator & operator+=(qsizetype j)
Advances the iterator by j items.
Definition qiterable.h:362
QConstIterator(const QIterable< Container > *iterable, void *iterator)
Creates a QConstIterator to wrap iterator, operating on iterable.
Definition qiterable.h:313
QConstIterator operator++(int)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:336
bool operator!=(const QConstIterator &o) const
Returns true if other points to a different item than this iterator; otherwise returns false.
Definition qiterable.h:324
QConstIterator & operator-=(qsizetype j)
Makes the iterator go back by j items.
Definition qiterable.h:368
The QIterator is a template class that allows iteration over a container in a QVariant.
Definition qiterable.h:215
bool operator!=(const QIterator &o) const
Returns true if other points to a different item than this iterator; otherwise returns false.
Definition qiterable.h:230
QIterator & operator++()
The prefix {++} operator ({++it}) advances the iterator to the next item in the container and returns...
Definition qiterable.h:235
QIterator & operator-=(qsizetype j)
Makes the iterator go back by j items.
Definition qiterable.h:273
QIterator operator++(int)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:241
qsizetype operator-(const QIterator &j) const
Returns the distance between the two iterators.
Definition qiterable.h:299
QIterator & operator+=(qsizetype j)
Advances the iterator by j items.
Definition qiterable.h:267
QIterator(QIterable< Container > *iterable, void *iterator)
Creates an iterator from an iterable and a pointer to a native iterator.
Definition qiterable.h:219
QIterator operator+(qsizetype j) const
Returns an iterator to the item at j positions forward from this iterator.
Definition qiterable.h:279
QIterator operator--(int)
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition qiterable.h:257
QIterator & operator--()
The prefix {–} operator ({–it}) makes the preceding item current and returns an iterator to the new c...
Definition qiterable.h:251
qsizetype difference_type
Definition qiterable.h:217
bool operator==(const QIterator &o) const
Returns true if other points to the same item as this iterator; otherwise returns false.
Definition qiterable.h:225
friend QIterator operator+(qsizetype j, const QIterator &k)
Returns an iterator to the item at j positions forward from iterator k.
Definition qiterable.h:304
QIterator operator-(qsizetype j) const
Returns an iterator to the item at j positions backward from this iterator.
Definition qiterable.h:289
Definition moc.h:24