8#include <QtCore/qarraydatapointer.h>
9#include <QtCore/qcompare.h>
10#include <QtCore/qnamespace.h>
11#include <QtCore/qhashfunctions.h>
12#include <QtCore/qiterator.h>
13#include <QtCore/qcontainertools_impl.h>
14#include <QtCore/qnamespace.h>
15#include <QtCore/qttypetraits.h>
19#include <initializer_list>
27 template <
typename V,
typename U>
qsizetype indexOf(
const QList<V> &list,
const U &u, qsizetype from)
noexcept;
28 template <
typename V,
typename U>
qsizetype lastIndexOf(
const QList<V> &list,
const U &u, qsizetype from)
noexcept;
38 Self *
self() {
return static_cast<Self *>(
this); }
39 const Self *
self()
const {
return static_cast<
const Self *>(
this); }
42 template <
typename AT = T>
44 template <
typename AT = T>
47 template <
typename AT = T>
50 return self()->indexOf(t) != -1;
64template <>
struct QListSpecialMethods<QByteArray>;
67#if !defined(QT_STRICT_QLIST_ITERATORS) && (QT_VERSION >= QT_VERSION_CHECK(6
, 6
, 0
)) && !defined(Q_OS_WIN)
68#define QT_STRICT_QLIST_ITERATORS
72template<
typename T>
class QVector :
public QList<T> {};
84 class DisableRValueRefs {};
86 friend class ::tst_QList;
100 using const_pointer =
const T *;
101 using reference = T &;
102 using const_reference =
const T &;
120 friend class QList<T>;
123#ifdef QT_STRICT_QLIST_ITERATORS
129 using value_type = T;
130#ifdef QT_COMPILER_HAS_LWG3346
133 using element_type = value_type;
134 using iterator_category =
std::random_access_iterator_tag;
136 using reference = T &;
139#ifndef QT_STRICT_QLIST_ITERATORS
140 inline constexpr explicit iterator(T *n) : i(n) {}
144 inline T &
operator[](qsizetype j)
const {
return *(i + j); }
157 inline constexpr bool operator==(pointer p)
const {
return i == p; }
158 inline constexpr bool operator!=(pointer p)
const {
return i != p; }
164#if QT_DEPRECATED_SINCE(6
, 3
) && !defined(QT_STRICT_QLIST_ITERATORS)
166 "the implicit conversion between a QList/QVector::iterator "
190 friend class QList<T>;
192 const T *i =
nullptr;
193#ifdef QT_STRICT_QLIST_ITERATORS
199 using value_type = T;
200#ifdef QT_COMPILER_HAS_LWG3346
203 using element_type =
const value_type;
204 using iterator_category =
std::random_access_iterator_tag;
205 using pointer =
const T *;
206 using reference =
const T &;
209#ifndef QT_STRICT_QLIST_ITERATORS
210 inline constexpr explicit const_iterator(
const T *n) : i(n) {}
215 inline const T &
operator[](qsizetype j)
const {
return *(i + j); }
228 inline constexpr bool operator==(pointer p)
const {
return i == p; }
229 inline constexpr bool operator!=(pointer p)
const {
return i != p; }
235#if QT_DEPRECATED_SINCE(6
, 3
) && !defined(QT_STRICT_QLIST_ITERATORS)
237 "the implicit conversion between a QList/QVector::const_iterator "
239 inline operator const T*()
const {
return i; }
265 void resize_internal(qsizetype i);
268 const std::less<
const T*> less = {};
269 return !less(d->end(), i.i) && !less(i.i, d->begin());
272 void verify([[maybe_unused]] qsizetype pos = 0, [[maybe_unused]] qsizetype n = 1)
const
275 Q_ASSERT(pos <= size());
277 Q_ASSERT(n <= size() - pos);
286 constexpr QList()
noexcept =
default;
291 d->appendInitialize(size);
293 QList(qsizetype size, parameter_type t)
297 d->copyAppend(size, t);
304 d->copyAppend(args.begin(), args.end());
312 template <
typename InputIterator, if_input_iterator<InputIterator> =
true>
313 QList(InputIterator i1, InputIterator i2)
315 if constexpr (!
std::is_convertible_v<
typename std::iterator_traits<InputIterator>::iterator_category,
std::forward_iterator_tag>) {
316 std::copy(i1, i2,
std::back_inserter(*
this));
318 const auto distance =
std::distance(i1, i2);
320 d = DataPointer(qsizetype(distance));
323 if constexpr (std::is_same_v<std::decay_t<InputIterator>, iterator> ||
324 std::is_same_v<std::decay_t<InputIterator>, const_iterator>) {
325 d->copyAppend(i1.i, i2.i);
327 d->appendIteratorRange(i1, i2);
335 inline explicit QList(
const String &str)
342 d->appendUninitialized(size);
351 template <
typename U = T,
352 Qt::if_has_qt_compare_three_way<U, U> =
true>
355 return QtOrderingPrivate::lexicographicalCompareThreeWay(lhs.begin(), lhs.end(),
356 rhs.begin(), rhs.end());
359#if defined(__cpp_lib_three_way_comparison) && defined(__cpp_lib_concepts)
360 template <
typename U =
T,
371 template <
typename U = T>
374 if (size() != other.size())
376 if (begin() == other.begin())
380 return std::equal(begin(), end(), other.begin(), other.end());
383 template <
typename U = T>
386 return !(*
this == other);
389#ifndef __cpp_lib_three_way_comparison
390 template <
typename U = T>
391 QTypeTraits::compare_lt_result_container<QList, U> operator<(
const QList &other)
const
392 noexcept(
noexcept(std::lexicographical_compare<
typename QList<U>::const_iterator,
393 typename QList::const_iterator>(
394 std::declval<QList<U>>().begin(), std::declval<QList<U>>().end(),
395 other.begin(), other.end())))
397 return std::lexicographical_compare(begin(), end(),
398 other.begin(), other.end());
401 template <
typename U = T>
405 return other < *
this;
408 template <
typename U = T>
409 QTypeTraits::compare_lt_result_container<QList, U> operator<=(
const QList &other)
const
410 noexcept(
noexcept(other < std::declval<QList<U>>()))
412 return !(other < *
this);
415 template <
typename U = T>
419 return !(*
this < other);
436 constexpr size_t MaxSize = maxSize();
437 [[assume(size_t(d.size) <= MaxSize)]];
444 constexpr bool isEmpty()
const noexcept {
return size() == 0; }
448 resize_internal(size);
449 if (size >
this->size())
450 d->appendInitialize(size);
452 void resize(qsizetype size, parameter_type c)
454 resize_internal(size);
455 if (size >
this->size())
456 d->copyAppend(size -
this->size(), c);
460 resize_internal(size);
461 if (size >
this->size())
462 d->appendUninitialized(size);
475 const_pointer
data()
const noexcept {
return d->data(); }
476 const_pointer
constData()
const noexcept {
return d->data(); }
480 if (d->needsDetach()) {
482 DataPointer detached(d.allocatedCapacity());
489 const_reference
at(qsizetype i)
const noexcept
491 Q_ASSERT_X(size_t(i) < size_t(d->size),
"QList::at",
"index out of range");
496 Q_ASSERT_X(size_t(i) < size_t(d->size),
"QList::operator[]",
"index out of range");
500 const_reference
operator[](qsizetype i)
const noexcept {
return at(i); }
501 void append(parameter_type t) { emplaceBack(t); }
505 if constexpr (DataPointer::pass_parameter_by_value) {
508 emplaceBack(
std::move(t));
517 if constexpr (DataPointer::pass_parameter_by_value) {
520 emplaceFront(
std::move(t));
523 void prepend(parameter_type t) { emplaceFront(t); }
525 template<
typename... Args>
528 template <
typename ...Args>
532 {
return emplace(i, t); }
536 Q_ASSERT_X(isValidIterator(before),
"QList::insert",
"The specified iterator argument 'before' is invalid");
537 return insert(before, 1, t);
541 Q_ASSERT_X(isValidIterator(before),
"QList::insert",
"The specified iterator argument 'before' is invalid");
542 return insert(std::distance(constBegin(), before), n, t);
546 Q_ASSERT_X(isValidIterator(before),
"QList::insert",
"The specified iterator argument 'before' is invalid");
547 return insert(std::distance(constBegin(), before), std::move(t));
550 if constexpr (DataPointer::pass_parameter_by_value) {
555 return emplace(i,
std::move(t));
565 template <
typename InputIterator, if_input_iterator<InputIterator> =
true>
567 { d.assign(first, last);
return *
this; }
570 {
return assign(l.begin(), l.end()); }
572 template <
typename ...Args>
575 Q_ASSERT_X(isValidIterator(before),
"QList::emplace",
"The specified iterator argument 'before' is invalid");
579 template <
typename ...Args>
588 Q_ASSERT_X(i >= 0 && i < d->size,
"QList<T>::replace",
"index out of range");
595 if constexpr (DataPointer::pass_parameter_by_value) {
599 Q_ASSERT_X(i >= 0 && i < d->size,
"QList<T>::replace",
"index out of range");
602 d.data()[i] = std::move(t);
606 void remove(qsizetype i, qsizetype n = 1);
609 value_type
takeFirst() { Q_ASSERT(!isEmpty()); value_type v =
std::move(first()); d->eraseFirst();
return v; }
610 value_type
takeLast() { Q_ASSERT(!isEmpty()); value_type v =
std::move(last()); d->eraseLast();
return v; }
619 template <
typename AT>
621 template <
typename AT>
623 template <
typename AT>
627 template <
typename AT = T>
630 return qsizetype(std::count(data(), data() + size(), t));
634 template <
typename AT = T>
637 return QtPrivate::sequential_erase_with_copy(*
this, t);
640 template <
typename AT = T>
643 return QtPrivate::sequential_erase_one(*
this, t);
646 template <
typename Predicate>
649 return QtPrivate::sequential_erase_if(*
this, pred);
652 T
takeAt(qsizetype i) { T t =
std::move((*
this)[i]); remove(i);
return t; }
653 void move(qsizetype from, qsizetype to)
655 Q_ASSERT_X(from >= 0 && from < size(),
"QList::move(qsizetype, qsizetype)",
"'from' is out-of-range");
656 Q_ASSERT_X(to >= 0 && to < size(),
"QList::move(qsizetype, qsizetype)",
"'to' is out-of-range");
660 T *
const b = d->begin();
662 std::rotate(b + from, b + from + 1, b + to + 1);
664 std::rotate(b + to, b + from, b + from + 1);
677 reverse_iterator
rbegin() {
return reverse_iterator(end()); }
678 reverse_iterator
rend() {
return reverse_iterator(begin()); }
679 const_reverse_iterator
rbegin()
const noexcept {
return const_reverse_iterator(end()); }
680 const_reverse_iterator
rend()
const noexcept {
return const_reverse_iterator(begin()); }
681 const_reverse_iterator
crbegin()
const noexcept {
return const_reverse_iterator(end()); }
682 const_reverse_iterator
crend()
const noexcept {
return const_reverse_iterator(begin()); }
688 inline T&
first() { Q_ASSERT(!isEmpty());
return *begin(); }
689 inline const T &
first()
const noexcept { Q_ASSERT(!isEmpty());
return *begin(); }
690 inline const T &
constFirst()
const noexcept { Q_ASSERT(!isEmpty());
return *begin(); }
691 inline T&
last() { Q_ASSERT(!isEmpty());
return *(end()-1); }
692 inline const T &
last()
const noexcept { Q_ASSERT(!isEmpty());
return *(end()-1); }
693 inline const T &
constLast()
const noexcept { Q_ASSERT(!isEmpty());
return *(end()-1); }
694 inline bool startsWith(parameter_type t)
const {
return !isEmpty() && first() == t; }
695 inline bool endsWith(parameter_type t)
const {
return !isEmpty() && last() == t; }
696 QList<T>
mid(qsizetype pos, qsizetype len = -1)
const;
699 { verify(0, n);
return QList<T>(begin(), begin() + n); }
701 { verify(0, n);
return QList<T>(end() - n, end()); }
703 { verify(pos, 0);
return QList<T>(begin() + pos, end()); }
705 { verify(pos, n);
return QList<T>(begin() + pos, begin() + pos + n); }
707 T
value(qsizetype i)
const {
return value(i, T()); }
708 T
value(qsizetype i, parameter_type defaultValue)
const;
711 Q_ASSERT_X(i >= 0 && i < size() && j >= 0 && j < size(),
712 "QList<T>::swap",
"index out of range");
714 qSwap(d->begin()[i], d->begin()[j]);
725 template <
typename ...Args>
726 reference
emplace_back(Args&&... args) {
return emplaceBack(
std::forward<Args>(args)...); }
729 {
return d->size == 0; }
730 inline reference
front() {
return first(); }
731 inline const_reference
front()
const noexcept {
return first(); }
732 inline reference
back() {
return last(); }
733 inline const_reference
back()
const noexcept {
return last(); }
744 {
QList n = *
this; n += l;
return n; }
746 {
return std::move(*
this += l); }
748 {
QList n = *
this; n +=
std::move(l);
return n; }
750 {
return std::move(*
this +=
std::move(l)); }
752 { append(t);
return *
this; }
753 inline QList<T> &operator<< (parameter_type t)
754 { append(t);
return *
this; }
755 inline QList<T> &operator<<(
const QList<T> &l)
756 { *
this += l;
return *
this; }
758 { *
this +=
std::move(l);
return *
this; }
760 { append(
std::move(t));
return *
this; }
761 inline QList<T> &operator<<(rvalue_ref t)
762 { append(
std::move(t));
return *
this; }
771 template<qsizetype N>
774 return QList<T>({
nullptr,
const_cast<T *>(t), N });
778template <
typename InputIterator,
779 typename ValueType =
typename std::iterator_traits<InputIterator>::value_type,
780 QtPrivate::IfIsInputIterator<InputIterator> =
true>
784inline void QList<T>::resize_internal(qsizetype newSize)
786 Q_ASSERT(newSize >= 0);
788 if (d->needsDetach() || newSize > capacity() - d.freeSpaceAtBegin()) {
789 d.detachAndGrow(QArrayData::GrowsAtEnd, newSize - d.size,
nullptr,
nullptr);
790 }
else if (newSize < size()) {
791 d->truncate(newSize);
799 if (asize <= capacity() - d.freeSpaceAtBegin()) {
800 if (d->flags() & Data::CapacityReserved)
802 if (!d->isShared()) {
804 d->setFlag(Data::CapacityReserved);
809 DataPointer detached(qMax(asize, size()));
810 detached->copyAppend(d->begin(), d->end());
811 if (detached.d_ptr())
812 detached->setFlag(Data::CapacityReserved);
821 if (d->needsDetach() || size() < capacity()) {
823 DataPointer detached(size());
826 detached->copyAppend(d.data(), d.data() + d.size);
828 detached->moveAppend(d.data(), d.data() + d.size);
833 d->clearFlag(Data::CapacityReserved);
839 Q_ASSERT_X(size_t(i) + size_t(n) <= size_t(d->size),
"QList::remove",
"index out of range");
840 Q_ASSERT_X(n >= 0,
"QList::remove",
"invalid count");
846 d->erase(d->begin() + i, n);
852 Q_ASSERT(!isEmpty());
860 Q_ASSERT(!isEmpty());
867inline T
QList<T>::
value(qsizetype i, parameter_type defaultValue)
const
869 return size_t(i) < size_t(d->size) ? at(i) : defaultValue;
875 d->growAppend(i1.i, i2.i);
881 Q_ASSERT(&other !=
this);
884 if (other.d->needsDetach() || !
std::is_nothrow_move_constructible_v<T>)
885 return append(other);
888 d.detachAndGrow(QArrayData::GrowsAtEnd, other.size(),
nullptr,
nullptr);
889 Q_ASSERT(d.freeSpaceAtEnd() >= other.size());
890 d->moveAppend(other.d->begin(), other.d->end());
894template<
typename... Args>
897 d->emplace(0, std::forward<Args>(args)...);
906 Q_ASSERT_X(size_t(i) <= size_t(d->size),
"QList<T>::insert",
"index out of range");
907 Q_ASSERT_X(n >= 0,
"QList::insert",
"invalid count");
914template <
typename ...Args>
918 Q_ASSERT_X(i >= 0 && i <= d->size,
"QList<T>::insert",
"index out of range");
919 d->emplace(i, std::forward<Args>(args)...);
924template<
typename... Args>
927 d->emplace(d->size, std::forward<Args>(args)...);
934 Q_ASSERT_X(isValidIterator(abegin),
"QList::erase",
"The specified iterator argument 'abegin' is invalid");
935 Q_ASSERT_X(isValidIterator(aend),
"QList::erase",
"The specified iterator argument 'aend' is invalid");
936 Q_ASSERT(aend >= abegin);
939 qsizetype n =
std::distance(abegin, aend);
950 if (d->needsDetach() || newSize > capacity()) {
952 DataPointer detached(d->detachCapacity(newSize));
953 detached->copyAppend(newSize, t);
958 d->assign(d.begin(), d.begin() + qMin(size(), newSize), t);
959 if (newSize > size()) {
960 d->copyAppend(newSize - size(), copy);
961 }
else if (newSize < size()) {
962 d->truncate(newSize);
969template <
typename T,
typename U>
973 from = qMax(from + vector.size(), qsizetype(0));
974 if (from < vector.size()) {
975 auto n = vector.begin() + from - 1;
976 auto e = vector.end();
979 return qsizetype(n - vector.begin());
984template <
typename T,
typename U>
988 from += vector.d->size;
989 else if (from >= vector.size())
990 from = vector.size() - 1;
992 auto b = vector.begin();
993 auto n = vector.begin() + from + 1;
996 return qsizetype(n - b);
1003template <
typename T>
1004template <
typename AT>
1007 return QtPrivate::indexOf(*self(), t, from);
1010template <
typename T>
1011template <
typename AT>
1014 return QtPrivate::lastIndexOf(*self(), t, from);
1017template <
typename T>
1023 switch (QContainerImplHelper::mid(d.size, &p, &l)) {
1024 case QContainerImplHelper::Null:
1025 case QContainerImplHelper::Empty:
1027 case QContainerImplHelper::Full:
1029 case QContainerImplHelper::Subset:
1034 DataPointer copied(l);
1035 copied->copyAppend(data() + p, data() + p + l);
1039Q_DECLARE_SEQUENTIAL_ITERATOR(List)
1040Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR(List)
1042template <
typename T>
1043size_t qHash(
const QList<T> &key, size_t seed = 0)
1044 noexcept(
noexcept(qHashRange(key.cbegin(), key.cend(), seed)))
1046 return qHashRange(key.cbegin(), key.cend(), seed);
1049template <
typename T,
typename AT>
1052 return QtPrivate::sequential_erase(list, t);
1055template <
typename T,
typename Predicate>
1058 return QtPrivate::sequential_erase_if(list, pred);
1062QList<uint> QStringView::toUcs4()
const {
return QtPrivate::convertToUcs4(*
this); }
1066#include <QtCore/qbytearraylist.h>
1067#include <QtCore/qstringlist.h>
\inmodule QtCore\reentrant
constexpr bool operator==(iterator o) const
constexpr bool operator<(iterator other) const
constexpr bool operator<(const_iterator other) const
const_iterator operator-(qsizetype j) const
constexpr bool operator==(pointer p) const
constexpr bool operator>(const_iterator other) const
const T & operator[](qsizetype j) const
const_iterator & operator-=(qsizetype j)
constexpr const_iterator(iterator o)
constexpr const_iterator()=default
const T & operator*() const
constexpr bool operator!=(const_iterator o) const
const_iterator operator+(qsizetype j) const
constexpr bool operator<=(iterator other) const
const_iterator & operator++()
constexpr bool operator!=(pointer p) const
constexpr bool operator>(iterator other) const
qsizetype operator-(const_iterator j) const
constexpr bool operator==(const_iterator o) const
constexpr bool operator>=(iterator other) const
const_iterator operator--(int)
const_iterator & operator--()
const_iterator operator++(int)
constexpr bool operator!=(iterator o) const
const_iterator & operator+=(qsizetype j)
friend const_iterator operator+(qsizetype j, const_iterator k)
constexpr bool operator<=(const_iterator other) const
const T * operator->() const
constexpr bool operator>=(const_iterator other) const
constexpr bool operator>(iterator other) const
iterator operator+(qsizetype j) const
iterator & operator-=(qsizetype j)
T & operator[](qsizetype j) const
constexpr bool operator<(const_iterator other) const
constexpr bool operator!=(pointer p) const
constexpr bool operator<=(iterator other) const
constexpr bool operator!=(iterator o) const
constexpr bool operator<=(const_iterator other) const
constexpr bool operator>(const_iterator other) const
constexpr bool operator>=(iterator other) const
constexpr bool operator<(iterator other) const
friend iterator operator+(qsizetype j, iterator k)
constexpr bool operator!=(const_iterator o) const
constexpr bool operator==(const_iterator o) const
constexpr bool operator>=(const_iterator other) const
qsizetype operator-(iterator j) const
constexpr iterator()=default
iterator operator-(qsizetype j) const
constexpr bool operator==(iterator o) const
iterator & operator+=(qsizetype j)
constexpr bool operator==(pointer p) const
void append(const_iterator i1, const_iterator i2)
iterator insert(const_iterator before, parameter_type t)
void removeFirst() noexcept
QList< T > & fill(parameter_type t, qsizetype size=-1)
const_pointer constData() const noexcept
void push_front(rvalue_ref t)
const_iterator begin() const noexcept
bool isDetached() const noexcept
void removeAt(qsizetype i)
QList< T > last(qsizetype n) const
bool isSharedWith(const QList< T > &other) const
QList< T > & operator+=(const QList< T > &l)
QList< T > operator+(const QList< T > &l) &&
reference emplaceFront(Args &&... args)
reference emplace_back(Args &&... args)
const T & constLast() const noexcept
iterator erase(const_iterator begin, const_iterator end)
void resizeForOverwrite(qsizetype size)
QList< T > sliced(qsizetype pos, qsizetype n) const
QList(std::initializer_list< T > args)
constexpr qsizetype max_size() const noexcept
QTypeTraits::compare_eq_result_container< QList, U > operator==(const QList &other) const
iterator insert(qsizetype i, parameter_type t)
bool empty() const noexcept
bool removeOne(const AT &t)
QList< T > toList() const noexcept
QList(InputIterator i1, InputIterator i2)
static QList< T > fromReadOnlyData(const T(&t)[N]) noexcept
static QList< T > fromList(const QList< T > &list) noexcept
QList(qsizetype size, parameter_type t)
const_reference back() const noexcept
qsizetype capacity() const
void swapItemsAt(qsizetype i, qsizetype j)
void push_back(parameter_type t)
QList< T > operator+(const QList< T > &l) const &
const_iterator end() const noexcept
iterator erase(const_iterator pos)
bool endsWith(parameter_type t) const
qsizetype count(const AT &t) const noexcept
bool startsWith(parameter_type t) const
friend qsizetype QtPrivate::lastIndexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
QList< T > operator+(QList< T > &&l) &&
const_reference at(qsizetype i) const noexcept
constexpr qsizetype size() const noexcept
QList< T > sliced(qsizetype pos) const
QList< T > toVector() const noexcept
T value(qsizetype i) const
void swap(QList &other) noexcept
iterator insert(const_iterator before, qsizetype n, parameter_type t)
QList< T > & operator=(std::initializer_list< T > args)
void move(qsizetype from, qsizetype to)
QList(DataPointer dd) noexcept
const_reverse_iterator crbegin() const noexcept
reference operator[](qsizetype i)
const_iterator constBegin() const noexcept
const_reference operator[](qsizetype i) const noexcept
const_reverse_iterator rbegin() const noexcept
constexpr QList() noexcept=default
void remove(qsizetype i, qsizetype n=1)
const DataPointer & data_ptr() const &
qsizetype removeIf(Predicate pred)
DataPointer & data_ptr() &
qsizetype removeAll(const AT &t)
iterator emplace(qsizetype i, Args &&... args)
const T & first() const noexcept
iterator insert(qsizetype i, qsizetype n, parameter_type t)
void append(QList< T > &&l)
reference emplaceBack(Args &&... args)
QList< T > mid(qsizetype pos, qsizetype len=-1) const
QTypeTraits::compare_lt_result_container< QList, U > operator>(const QList &other) const noexcept(noexcept(other< std::declval< QList< U > >()))
void prepend(rvalue_ref t)
QList< T > operator+(QList< T > &&l) const &
QList & assign(std::initializer_list< T > l)
void resize(qsizetype size, parameter_type c)
QList< T > first(qsizetype n) const
const T & constFirst() const noexcept
static constexpr qsizetype maxSize()
iterator emplace(const_iterator before, Args &&... args)
void reserve(qsizetype size)
QList & assign(InputIterator first, InputIterator last)
static QList< T > fromVector(const QList< T > &vector) noexcept
void replace(qsizetype i, parameter_type t)
reverse_iterator rbegin()
void pop_front() noexcept
constexpr bool isEmpty() const noexcept
const T & last() const noexcept
constexpr qsizetype count() const noexcept
void removeLast() noexcept
void resize(qsizetype size)
friend auto compareThreeWay(const QList &lhs, const QList &rhs)
const_iterator cend() const noexcept
void append(parameter_type t)
QList< T > & operator+=(parameter_type t)
QTypeTraits::compare_eq_result_container< QList, U > operator!=(const QList &other) const
const_iterator constEnd() const noexcept
const_reverse_iterator rend() const noexcept
T value(qsizetype i, parameter_type defaultValue) const
const_iterator cbegin() const noexcept
QList & assign(qsizetype n, parameter_type t)
QTypeTraits::compare_lt_result_container< QList, U > operator>=(const QList &other) const noexcept(noexcept(std::declval< QList< U > >()< other))
const_pointer data() const noexcept
constexpr qsizetype length() const noexcept
const_reference front() const noexcept
QList< T > & operator+=(QList< T > &&l)
friend qsizetype QtPrivate::indexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
DataPointer && data_ptr() &&
void append(const QList< T > &l)
const_reverse_iterator crend() const noexcept
Combined button and popup list for selecting options.
QString && asString(QString &&s)
constexpr QAnyStringArg qStringLikeToArg(QAnyStringView s) noexcept
qsizetype indexOf(const QList< T > &vector, const U &u, qsizetype from) noexcept
const QString & asString(const QString &s)
qsizetype lastIndexOf(const QList< T > &vector, const U &u, qsizetype from) noexcept
qsizetype lastIndexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
qsizetype indexOf(const QList< V > &list, const U &u, qsizetype from) noexcept
static constexpr qsizetype lengthHelperPointer(const Char *data) noexcept
constexpr bool isLatin1(QLatin1StringView s) noexcept
QString operator""_s(const char16_t *str, size_t size) noexcept
QByteArrayView qToByteArrayViewIgnoringNull(const QByteArrayLike &b) noexcept
Q_DECLARE_TYPEINFO(QByteArrayView, Q_PRIMITIVE_TYPE)
#define __has_cpp_attribute(x)
Q_LOGGING_CATEGORY(lcEventDispatcher, "qt.eventdispatcher")
Q_CORE_EXPORT Q_DECL_CONST_FUNCTION unsigned int qt_int_sqrt(unsigned int n)
\inmodule QtCore \title Global Qt Declarations
qsizetype erase(QList< T > &list, const AT &t)
QList(InputIterator, InputIterator) -> QList< ValueType >
qsizetype erase_if(QList< T > &list, Predicate pred)
QString operator+(const QString &s1, QChar s2)
QString operator+(QString &&lhs, const QString &rhs)
qsizetype erase_if(QString &s, Predicate pred)
QString operator+(QString &&lhs, QChar rhs)
QString operator+(QChar s1, const QString &s2)
QString operator+(const QString &s1, const QString &s2)
qsizetype erase(QString &s, const T &t)
QList< QList< qInternalCallback > > callbacks
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
const Self * self() const
bool contains(const AT &t) const noexcept
QListSpecialMethodsBase()=default
qsizetype lastIndexOf(const AT &t, qsizetype from=-1) const noexcept
QListSpecialMethods()=default
constexpr QAnyStringArg(QAnyStringView v) noexcept
constexpr QLatin1StringArg(QLatin1StringView v) noexcept
QLatin1StringArg()=default
constexpr QStringViewArg(QStringView v) noexcept