QtCore: replace qSwap with std::swap/member-swap where possible
qSwap() is a monster that looks for ADL overloads of swap() and also detects the noexcept of the wrapped swap() function, so it should only be used when the argument type is unknown. In the vast majority of cases, the type is known to be efficiently std::swap()able or to have a member-swap. Call either of these. For the common case of pointer types, circumvent the expensive trait checks on std::swap() by providing a hand-rolled qt_ptr_swap() template, the advantage being that it can be unconditionally noexcept, removing all type traits instantiations. Don't document it, otherwise we'd be unable to pick it to 6.2. Effects on Clang -ftime-trace of a PCH'ed libQt6Gui.so build: before: **** Template sets that took longest to instantiate: [...] 27766 ms: qSwap<$> (9073 times, avg 3 ms) [...] 2806 ms: std::swap<$> (1229 times, avg 2 ms) (30572ms) after: **** Template sets that took longest to instantiate: [...] 5047 ms: qSwap<$> (641 times, avg 7 ms) [...] 3371 ms: std::swap<$> (1376 times, avg 2 ms) [qt_ptr_swap<$> does not appear in the top 400, so < 905ms] (< 9323ms) As a drive-by, remove superfluous inline keywords and template ornaments. Task-number: QTBUG-97601 Pick-to: 6.3 6.2 Change-Id: I88f9b4e3cbece268c4a1238b6d50e5712a1bab5a Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Joerg Bornemann <joerg.bornemann@qt.io> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
parent
b083c27d0a
commit
b1b0c2970e
@ -1174,6 +1174,15 @@ constexpr void qSwap(T &value1, T &value2)
|
|||||||
swap(value1, value2);
|
swap(value1, value2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// pure compile-time micro-optimization for our own headers, so not documented:
|
||||||
|
template <typename T>
|
||||||
|
constexpr inline void qt_ptr_swap(T* &lhs, T* &rhs) noexcept
|
||||||
|
{
|
||||||
|
T *tmp = lhs;
|
||||||
|
lhs = rhs;
|
||||||
|
rhs = tmp;
|
||||||
|
}
|
||||||
|
|
||||||
QT_WARNING_POP
|
QT_WARNING_POP
|
||||||
|
|
||||||
Q_CORE_EXPORT void *qMallocAligned(size_t size, size_t alignment) Q_ALLOC_SIZE(1);
|
Q_CORE_EXPORT void *qMallocAligned(size_t size, size_t alignment) Q_ALLOC_SIZE(1);
|
||||||
|
@ -105,7 +105,7 @@ public:
|
|||||||
inline QDebug &operator=(const QDebug &other);
|
inline QDebug &operator=(const QDebug &other);
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QDebug)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QDebug)
|
||||||
~QDebug();
|
~QDebug();
|
||||||
inline void swap(QDebug &other) noexcept { qSwap(stream, other.stream); }
|
void swap(QDebug &other) noexcept { qt_ptr_swap(stream, other.stream); }
|
||||||
|
|
||||||
QDebug &resetFormat();
|
QDebug &resetFormat();
|
||||||
|
|
||||||
|
@ -124,7 +124,7 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QDir)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QDir)
|
||||||
|
|
||||||
void swap(QDir &other) noexcept
|
void swap(QDir &other) noexcept
|
||||||
{ qSwap(d_ptr, other.d_ptr); }
|
{ d_ptr.swap(other.d_ptr); }
|
||||||
|
|
||||||
void setPath(const QString &path);
|
void setPath(const QString &path);
|
||||||
#ifdef Q_CLANG_QDOC
|
#ifdef Q_CLANG_QDOC
|
||||||
|
@ -91,7 +91,7 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QFileInfo)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QFileInfo)
|
||||||
|
|
||||||
void swap(QFileInfo &other) noexcept
|
void swap(QFileInfo &other) noexcept
|
||||||
{ qSwap(d_ptr, other.d_ptr); }
|
{ d_ptr.swap(other.d_ptr); }
|
||||||
|
|
||||||
bool operator==(const QFileInfo &fileinfo) const;
|
bool operator==(const QFileInfo &fileinfo) const;
|
||||||
inline bool operator!=(const QFileInfo &fileinfo) const { return !(operator==(fileinfo)); }
|
inline bool operator!=(const QFileInfo &fileinfo) const { return !(operator==(fileinfo)); }
|
||||||
|
@ -74,7 +74,7 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QProcessEnvironment)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QProcessEnvironment)
|
||||||
QProcessEnvironment &operator=(const QProcessEnvironment &other);
|
QProcessEnvironment &operator=(const QProcessEnvironment &other);
|
||||||
|
|
||||||
void swap(QProcessEnvironment &other) noexcept { qSwap(d, other.d); }
|
void swap(QProcessEnvironment &other) noexcept { d.swap(other.d); }
|
||||||
|
|
||||||
bool operator==(const QProcessEnvironment &other) const;
|
bool operator==(const QProcessEnvironment &other) const;
|
||||||
inline bool operator!=(const QProcessEnvironment &other) const
|
inline bool operator!=(const QProcessEnvironment &other) const
|
||||||
|
@ -65,7 +65,7 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QStorageInfo)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QStorageInfo)
|
||||||
|
|
||||||
inline void swap(QStorageInfo &other) noexcept
|
inline void swap(QStorageInfo &other) noexcept
|
||||||
{ qSwap(d, other.d); }
|
{ d.swap(other.d); }
|
||||||
|
|
||||||
void setPath(const QString &path);
|
void setPath(const QString &path);
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QUrl)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QUrl)
|
||||||
~QUrl();
|
~QUrl();
|
||||||
|
|
||||||
inline void swap(QUrl &other) noexcept { qSwap(d, other.d); }
|
void swap(QUrl &other) noexcept { qt_ptr_swap(d, other.d); }
|
||||||
|
|
||||||
void setUrl(const QString &url, ParsingMode mode = TolerantMode);
|
void setUrl(const QString &url, ParsingMode mode = TolerantMode);
|
||||||
QString url(FormattingOptions options = FormattingOptions(PrettyDecoded)) const;
|
QString url(FormattingOptions options = FormattingOptions(PrettyDecoded)) const;
|
||||||
|
@ -74,7 +74,7 @@ public:
|
|||||||
bool operator!=(const QUrlQuery &other) const
|
bool operator!=(const QUrlQuery &other) const
|
||||||
{ return !(*this == other); }
|
{ return !(*this == other); }
|
||||||
|
|
||||||
void swap(QUrlQuery &other) noexcept { qSwap(d, other.d); }
|
void swap(QUrlQuery &other) noexcept { d.swap(other.d); }
|
||||||
|
|
||||||
bool isEmpty() const;
|
bool isEmpty() const;
|
||||||
bool isDetached() const;
|
bool isDetached() const;
|
||||||
|
@ -222,7 +222,7 @@ public:
|
|||||||
inline QPersistentModelIndex(QPersistentModelIndex &&other) noexcept
|
inline QPersistentModelIndex(QPersistentModelIndex &&other) noexcept
|
||||||
: d(qExchange(other.d, nullptr)) {}
|
: d(qExchange(other.d, nullptr)) {}
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QPersistentModelIndex)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QPersistentModelIndex)
|
||||||
inline void swap(QPersistentModelIndex &other) noexcept { qSwap(d, other.d); }
|
void swap(QPersistentModelIndex &other) noexcept { qt_ptr_swap(d, other.d); }
|
||||||
bool operator==(const QModelIndex &other) const;
|
bool operator==(const QModelIndex &other) const;
|
||||||
bool operator!=(const QModelIndex &other) const;
|
bool operator!=(const QModelIndex &other) const;
|
||||||
QPersistentModelIndex &operator=(const QModelIndex &other);
|
QPersistentModelIndex &operator=(const QModelIndex &other);
|
||||||
|
@ -60,8 +60,8 @@ public:
|
|||||||
|
|
||||||
void swap(QItemSelectionRange &other) noexcept
|
void swap(QItemSelectionRange &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(tl, other.tl);
|
tl.swap(other.tl);
|
||||||
qSwap(br, other.br);
|
br.swap(other.br);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int top() const { return tl.row(); }
|
inline int top() const { return tl.row(); }
|
||||||
|
@ -63,7 +63,7 @@ public:
|
|||||||
|
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QBasicTimer)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QBasicTimer)
|
||||||
|
|
||||||
void swap(QBasicTimer &other) noexcept { qSwap(id, other.id); }
|
void swap(QBasicTimer &other) noexcept { std::swap(id, other.id); }
|
||||||
|
|
||||||
bool isActive() const noexcept { return id != 0; }
|
bool isActive() const noexcept { return id != 0; }
|
||||||
int timerId() const noexcept { return id; }
|
int timerId() const noexcept { return id; }
|
||||||
|
@ -70,7 +70,7 @@ public:
|
|||||||
explicit QDeadlineTimer(qint64 msecs, Qt::TimerType type = Qt::CoarseTimer) noexcept;
|
explicit QDeadlineTimer(qint64 msecs, Qt::TimerType type = Qt::CoarseTimer) noexcept;
|
||||||
|
|
||||||
void swap(QDeadlineTimer &other) noexcept
|
void swap(QDeadlineTimer &other) noexcept
|
||||||
{ qSwap(t1, other.t1); qSwap(t2, other.t2); qSwap(type, other.type); }
|
{ std::swap(t1, other.t1); std::swap(t2, other.t2); std::swap(type, other.type); }
|
||||||
|
|
||||||
constexpr bool isForever() const noexcept
|
constexpr bool isForever() const noexcept
|
||||||
{ return t1 == (std::numeric_limits<qint64>::max)(); }
|
{ return t1 == (std::numeric_limits<qint64>::max)(); }
|
||||||
|
@ -463,7 +463,7 @@ public:
|
|||||||
|
|
||||||
Connection(Connection &&other) noexcept : d_ptr(qExchange(other.d_ptr, nullptr)) {}
|
Connection(Connection &&other) noexcept : d_ptr(qExchange(other.d_ptr, nullptr)) {}
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(Connection)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(Connection)
|
||||||
void swap(Connection &other) noexcept { qSwap(d_ptr, other.d_ptr); }
|
void swap(Connection &other) noexcept { qt_ptr_swap(d_ptr, other.d_ptr); }
|
||||||
};
|
};
|
||||||
|
|
||||||
inline void swap(QMetaObject::Connection &lhs, QMetaObject::Connection &rhs) noexcept
|
inline void swap(QMetaObject::Connection &lhs, QMetaObject::Connection &rhs) noexcept
|
||||||
|
@ -121,7 +121,7 @@ public:
|
|||||||
bool operator!() const noexcept { return d == nullptr; }
|
bool operator!() const noexcept { return d == nullptr; }
|
||||||
|
|
||||||
void swap(QPropertyBindingPrivatePtr &other) noexcept
|
void swap(QPropertyBindingPrivatePtr &other) noexcept
|
||||||
{ qSwap(d, other.d); }
|
{ qt_ptr_swap(d, other.d); }
|
||||||
|
|
||||||
friend bool operator==(const QPropertyBindingPrivatePtr &p1, const QPropertyBindingPrivatePtr &p2) noexcept
|
friend bool operator==(const QPropertyBindingPrivatePtr &p1, const QPropertyBindingPrivatePtr &p2) noexcept
|
||||||
{ return p1.d == p2.d; }
|
{ return p1.d == p2.d; }
|
||||||
|
@ -81,7 +81,7 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QMimeType)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QMimeType)
|
||||||
void swap(QMimeType &other) noexcept
|
void swap(QMimeType &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
d.swap(other.d);
|
||||||
}
|
}
|
||||||
explicit QMimeType(const QMimeTypePrivate &dd);
|
explicit QMimeType(const QMimeTypePrivate &dd);
|
||||||
~QMimeType();
|
~QMimeType();
|
||||||
|
@ -176,7 +176,7 @@ public:
|
|||||||
|
|
||||||
void swap(QCborArray &other) noexcept
|
void swap(QCborArray &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
d.swap(other.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
QCborValue toCborValue() const { return *this; }
|
QCborValue toCborValue() const { return *this; }
|
||||||
|
@ -178,7 +178,7 @@ public:
|
|||||||
|
|
||||||
void swap(QCborMap &other) noexcept
|
void swap(QCborMap &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
d.swap(other.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
QCborValue toCborValue() const { return *this; }
|
QCborValue toCborValue() const { return *this; }
|
||||||
|
@ -187,9 +187,9 @@ public:
|
|||||||
|
|
||||||
void swap(QCborValue &other) noexcept
|
void swap(QCborValue &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(n, other.n);
|
std::swap(n, other.n);
|
||||||
qSwap(container, other.container);
|
qt_ptr_swap(container, other.container);
|
||||||
qSwap(t, other.t);
|
std::swap(t, other.t);
|
||||||
}
|
}
|
||||||
|
|
||||||
Type type() const { return t; }
|
Type type() const { return t; }
|
||||||
|
@ -101,7 +101,7 @@ public:
|
|||||||
|
|
||||||
void swap(QJsonArray &other) noexcept
|
void swap(QJsonArray &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(a, other.a);
|
a.swap(other.a);
|
||||||
}
|
}
|
||||||
|
|
||||||
class const_iterator;
|
class const_iterator;
|
||||||
|
@ -74,7 +74,7 @@ public:
|
|||||||
|
|
||||||
void swap(QJsonObject &other) noexcept
|
void swap(QJsonObject &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(o, other.o);
|
o.swap(other.o);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QJsonObject fromVariantMap(const QVariantMap &map);
|
static QJsonObject fromVariantMap(const QVariantMap &map);
|
||||||
|
@ -58,12 +58,12 @@ public:
|
|||||||
QXmlString(QStringPrivate &&d) : m_string(std::move(d)) {}
|
QXmlString(QStringPrivate &&d) : m_string(std::move(d)) {}
|
||||||
QXmlString(const QString &s) : m_string(s.data_ptr()) {}
|
QXmlString(const QString &s) : m_string(s.data_ptr()) {}
|
||||||
QXmlString & operator=(const QString &s) { m_string = s.data_ptr(); return *this; }
|
QXmlString & operator=(const QString &s) { m_string = s.data_ptr(); return *this; }
|
||||||
QXmlString & operator=(QString &&s) { qSwap(m_string, s.data_ptr()); return *this; }
|
QXmlString & operator=(QString &&s) { m_string.swap(s.data_ptr()); return *this; }
|
||||||
inline constexpr QXmlString() {}
|
inline constexpr QXmlString() {}
|
||||||
|
|
||||||
void swap(QXmlString &other) noexcept
|
void swap(QXmlString &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(m_string, other.m_string);
|
m_string.swap(other.m_string);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline operator QStringView() const { return QStringView(m_string.data(), m_string.size); }
|
inline operator QStringView() const { return QStringView(m_string.data(), m_string.size); }
|
||||||
|
@ -124,7 +124,7 @@ public:
|
|||||||
{ qSwap(d, other.d); }
|
{ qSwap(d, other.d); }
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QByteArray)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QByteArray)
|
||||||
inline void swap(QByteArray &other) noexcept
|
inline void swap(QByteArray &other) noexcept
|
||||||
{ qSwap(d, other.d); }
|
{ d.swap(other.d); }
|
||||||
|
|
||||||
bool isEmpty() const noexcept { return size() == 0; }
|
bool isEmpty() const noexcept { return size() == 0; }
|
||||||
void resize(qsizetype size);
|
void resize(qsizetype size);
|
||||||
@ -629,8 +629,8 @@ public:
|
|||||||
|
|
||||||
void swap(QByteArray::FromBase64Result &other) noexcept
|
void swap(QByteArray::FromBase64Result &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(decoded, other.decoded);
|
decoded.swap(other.decoded);
|
||||||
qSwap(decodingStatus, other.decodingStatus);
|
std::swap(decodingStatus, other.decodingStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit operator bool() const noexcept { return decodingStatus == QByteArray::Base64DecodingStatus::Ok; }
|
explicit operator bool() const noexcept { return decodingStatus == QByteArray::Base64DecodingStatus::Ok; }
|
||||||
|
@ -87,7 +87,7 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QCollator)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_MOVE_AND_SWAP(QCollator)
|
||||||
|
|
||||||
void swap(QCollator &other) noexcept
|
void swap(QCollator &other) noexcept
|
||||||
{ qSwap(d, other.d); }
|
{ qt_ptr_swap(d, other.d); }
|
||||||
|
|
||||||
void setLocale(const QLocale &locale);
|
void setLocale(const QLocale &locale);
|
||||||
QLocale locale() const;
|
QLocale locale() const;
|
||||||
|
@ -938,7 +938,7 @@ public:
|
|||||||
QLocale &operator=(const QLocale &other);
|
QLocale &operator=(const QLocale &other);
|
||||||
~QLocale();
|
~QLocale();
|
||||||
|
|
||||||
void swap(QLocale &other) noexcept { qSwap(d, other.d); }
|
void swap(QLocale &other) noexcept { d.swap(other.d); }
|
||||||
|
|
||||||
Language language() const;
|
Language language() const;
|
||||||
Script script() const;
|
Script script() const;
|
||||||
|
@ -423,7 +423,7 @@ public:
|
|||||||
inline QString(QString &&other) noexcept
|
inline QString(QString &&other) noexcept
|
||||||
{ qSwap(d, other.d); }
|
{ qSwap(d, other.d); }
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QString)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QString)
|
||||||
inline void swap(QString &other) noexcept { qSwap(d, other.d); }
|
void swap(QString &other) noexcept { d.swap(other.d); }
|
||||||
inline qsizetype size() const { return d.size; }
|
inline qsizetype size() const { return d.size; }
|
||||||
inline qsizetype count() const { return d.size; }
|
inline qsizetype count() const { return d.size; }
|
||||||
inline qsizetype length() const { return d.size; }
|
inline qsizetype length() const { return d.size; }
|
||||||
|
@ -72,7 +72,7 @@ public:
|
|||||||
QUnhandledException(QUnhandledException &&other) noexcept;
|
QUnhandledException(QUnhandledException &&other) noexcept;
|
||||||
QUnhandledException(const QUnhandledException &other) noexcept;
|
QUnhandledException(const QUnhandledException &other) noexcept;
|
||||||
|
|
||||||
void swap(QUnhandledException &other) noexcept { qSwap(d, other.d); }
|
void swap(QUnhandledException &other) noexcept { d.swap(other.d); }
|
||||||
|
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QUnhandledException)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QUnhandledException)
|
||||||
QUnhandledException &operator=(const QUnhandledException &other) noexcept;
|
QUnhandledException &operator=(const QUnhandledException &other) noexcept;
|
||||||
|
@ -106,7 +106,7 @@ public:
|
|||||||
|
|
||||||
void swap(QPromise<T> &other) noexcept
|
void swap(QPromise<T> &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(this->d, other.d);
|
d.swap(other.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(Q_CLANG_QDOC) // documentation-only simplified signatures
|
#if defined(Q_CLANG_QDOC) // documentation-only simplified signatures
|
||||||
|
@ -109,8 +109,8 @@ public:
|
|||||||
|
|
||||||
void swap(QSemaphoreReleaser &other) noexcept
|
void swap(QSemaphoreReleaser &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(m_sem, other.m_sem);
|
qt_ptr_swap(m_sem, other.m_sem);
|
||||||
qSwap(m_n, other.m_n);
|
std::swap(m_n, other.m_n);
|
||||||
}
|
}
|
||||||
|
|
||||||
QSemaphore *semaphore() const noexcept
|
QSemaphore *semaphore() const noexcept
|
||||||
|
@ -149,9 +149,9 @@ public:
|
|||||||
|
|
||||||
void swap(QArrayDataPointer &other) noexcept
|
void swap(QArrayDataPointer &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
qt_ptr_swap(d, other.d);
|
||||||
qSwap(ptr, other.ptr);
|
qt_ptr_swap(ptr, other.ptr);
|
||||||
qSwap(size, other.size);
|
std::swap(size, other.size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void clear() noexcept(std::is_nothrow_destructible<T>::value)
|
void clear() noexcept(std::is_nothrow_destructible<T>::value)
|
||||||
|
@ -62,7 +62,7 @@ public:
|
|||||||
inline QBitArray(QBitArray &&other) noexcept : d(std::move(other.d)) {}
|
inline QBitArray(QBitArray &&other) noexcept : d(std::move(other.d)) {}
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QBitArray)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QBitArray)
|
||||||
|
|
||||||
inline void swap(QBitArray &other) noexcept { qSwap(d, other.d); }
|
void swap(QBitArray &other) noexcept { d.swap(other.d); }
|
||||||
|
|
||||||
inline qsizetype size() const { return (d.size() << 3) - *d.constData(); }
|
inline qsizetype size() const { return (d.size() << 3) - *d.constData(); }
|
||||||
inline qsizetype count() const { return (d.size() << 3) - *d.constData(); }
|
inline qsizetype count() const { return (d.size() << 3) - *d.constData(); }
|
||||||
|
@ -64,8 +64,8 @@ class QCache
|
|||||||
}
|
}
|
||||||
Value &operator=(Value &&other) noexcept
|
Value &operator=(Value &&other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(t, other.t);
|
qt_ptr_swap(t, other.t);
|
||||||
qSwap(cost, other.cost);
|
std::swap(cost, other.cost);
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
~Value() { delete t; }
|
~Value() { delete t; }
|
||||||
|
@ -75,7 +75,7 @@ public:
|
|||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCommandLineOption)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QCommandLineOption)
|
||||||
|
|
||||||
void swap(QCommandLineOption &other) noexcept
|
void swap(QCommandLineOption &other) noexcept
|
||||||
{ qSwap(d, other.d); }
|
{ d.swap(other.d); }
|
||||||
|
|
||||||
QStringList names() const;
|
QStringList names() const;
|
||||||
|
|
||||||
|
@ -97,7 +97,7 @@ public:
|
|||||||
|
|
||||||
QContiguousCache<T> &operator=(const QContiguousCache<T> &other);
|
QContiguousCache<T> &operator=(const QContiguousCache<T> &other);
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QContiguousCache)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QContiguousCache)
|
||||||
inline void swap(QContiguousCache<T> &other) noexcept { qSwap(d, other.d); }
|
void swap(QContiguousCache &other) noexcept { qt_ptr_swap(d, other.d); }
|
||||||
|
|
||||||
#ifndef Q_CLANG_QDOC
|
#ifndef Q_CLANG_QDOC
|
||||||
template <typename U = T>
|
template <typename U = T>
|
||||||
|
@ -81,7 +81,7 @@ public:
|
|||||||
QEasingCurve(QEasingCurve &&other) noexcept : d_ptr(other.d_ptr) { other.d_ptr = nullptr; }
|
QEasingCurve(QEasingCurve &&other) noexcept : d_ptr(other.d_ptr) { other.d_ptr = nullptr; }
|
||||||
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QEasingCurve)
|
QT_MOVE_ASSIGNMENT_OPERATOR_IMPL_VIA_PURE_SWAP(QEasingCurve)
|
||||||
|
|
||||||
void swap(QEasingCurve &other) noexcept { qSwap(d_ptr, other.d_ptr); }
|
void swap(QEasingCurve &other) noexcept { qt_ptr_swap(d_ptr, other.d_ptr); }
|
||||||
|
|
||||||
bool operator==(const QEasingCurve &other) const;
|
bool operator==(const QEasingCurve &other) const;
|
||||||
inline bool operator!=(const QEasingCurve &other) const
|
inline bool operator!=(const QEasingCurve &other) const
|
||||||
|
@ -911,7 +911,7 @@ public:
|
|||||||
insert(f->first, f->second);
|
insert(f->first, f->second);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
void swap(QHash &other) noexcept { qSwap(d, other.d); }
|
void swap(QHash &other) noexcept { qt_ptr_swap(d, other.d); }
|
||||||
|
|
||||||
#ifndef Q_CLANG_QDOC
|
#ifndef Q_CLANG_QDOC
|
||||||
template <typename AKey = Key, typename AT = T>
|
template <typename AKey = Key, typename AT = T>
|
||||||
@ -1446,7 +1446,12 @@ public:
|
|||||||
{
|
{
|
||||||
unite(std::move(other));
|
unite(std::move(other));
|
||||||
}
|
}
|
||||||
void swap(QMultiHash &other) noexcept { qSwap(d, other.d); qSwap(m_size, other.m_size); }
|
|
||||||
|
void swap(QMultiHash &other) noexcept
|
||||||
|
{
|
||||||
|
qt_ptr_swap(d, other.d);
|
||||||
|
std::swap(m_size, other.m_size);
|
||||||
|
}
|
||||||
|
|
||||||
#ifndef Q_CLANG_QDOC
|
#ifndef Q_CLANG_QDOC
|
||||||
template <typename AKey = Key, typename AT = T>
|
template <typename AKey = Key, typename AT = T>
|
||||||
|
@ -351,7 +351,7 @@ public:
|
|||||||
|
|
||||||
// compiler-generated special member functions are fine!
|
// compiler-generated special member functions are fine!
|
||||||
|
|
||||||
void swap(QList<T> &other) noexcept { qSwap(d, other.d); }
|
void swap(QList &other) noexcept { d.swap(other.d); }
|
||||||
|
|
||||||
#ifndef Q_CLANG_QDOC
|
#ifndef Q_CLANG_QDOC
|
||||||
template <typename U = T>
|
template <typename U = T>
|
||||||
|
@ -238,7 +238,7 @@ public:
|
|||||||
|
|
||||||
void swap(QMap<Key, T> &other) noexcept
|
void swap(QMap<Key, T> &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
d.swap(other.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
QMap(std::initializer_list<std::pair<Key, T>> list)
|
QMap(std::initializer_list<std::pair<Key, T>> list)
|
||||||
@ -849,7 +849,7 @@ public:
|
|||||||
|
|
||||||
void swap(QMultiMap<Key, T> &other) noexcept
|
void swap(QMultiMap<Key, T> &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
d.swap(other.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit QMultiMap(const QMap<Key, T> &other)
|
explicit QMultiMap(const QMap<Key, T> &other)
|
||||||
|
@ -173,7 +173,7 @@ public:
|
|||||||
QT_DEPRECATED_VERSION_X_6_2("Use std::unique_ptr instead of QScopedPointer.")
|
QT_DEPRECATED_VERSION_X_6_2("Use std::unique_ptr instead of QScopedPointer.")
|
||||||
void swap(QScopedPointer<T, Cleanup> &other) noexcept
|
void swap(QScopedPointer<T, Cleanup> &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
qt_ptr_swap(d, other.d);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ public:
|
|||||||
bool operator!() const noexcept { return d == nullptr; }
|
bool operator!() const noexcept { return d == nullptr; }
|
||||||
|
|
||||||
void swap(QSharedDataPointer &other) noexcept
|
void swap(QSharedDataPointer &other) noexcept
|
||||||
{ qSwap(d, other.d); }
|
{ qt_ptr_swap(d, other.d); }
|
||||||
|
|
||||||
#define DECLARE_COMPARE_SET(T1, A1, T2, A2) \
|
#define DECLARE_COMPARE_SET(T1, A1, T2, A2) \
|
||||||
friend bool operator<(T1, T2) noexcept \
|
friend bool operator<(T1, T2) noexcept \
|
||||||
@ -222,7 +222,7 @@ public:
|
|||||||
bool operator!() const noexcept { return d == nullptr; }
|
bool operator!() const noexcept { return d == nullptr; }
|
||||||
|
|
||||||
void swap(QExplicitlySharedDataPointer &other) noexcept
|
void swap(QExplicitlySharedDataPointer &other) noexcept
|
||||||
{ qSwap(d, other.d); }
|
{ qt_ptr_swap(d, other.d); }
|
||||||
|
|
||||||
DECLARE_COMPARE_SET(const QExplicitlySharedDataPointer &p1, p1.d, const QExplicitlySharedDataPointer &p2, p2.d)
|
DECLARE_COMPARE_SET(const QExplicitlySharedDataPointer &p1, p1.d, const QExplicitlySharedDataPointer &p2, p2.d)
|
||||||
DECLARE_COMPARE_SET(const QExplicitlySharedDataPointer &p1, p1.d, const T *ptr, ptr)
|
DECLARE_COMPARE_SET(const QExplicitlySharedDataPointer &p1, p1.d, const T *ptr, ptr)
|
||||||
|
@ -138,7 +138,7 @@ public:
|
|||||||
|
|
||||||
constexpr void swap(QExplicitlySharedDataPointerV2 &other) noexcept
|
constexpr void swap(QExplicitlySharedDataPointerV2 &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
qt_ptr_swap(d, other.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
// important change from QExplicitlySharedDataPointer: deep const
|
// important change from QExplicitlySharedDataPointer: deep const
|
||||||
|
@ -508,8 +508,8 @@ private:
|
|||||||
|
|
||||||
void internalSwap(QSharedPointer &other) noexcept
|
void internalSwap(QSharedPointer &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
qt_ptr_swap(d, other.d);
|
||||||
qSwap(this->value, other.value);
|
qt_ptr_swap(this->value, other.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class X> friend class QSharedPointer;
|
template <class X> friend class QSharedPointer;
|
||||||
@ -538,8 +538,8 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
qSwap(d, o);
|
qt_ptr_swap(d, o);
|
||||||
qSwap(this->value, actual);
|
qt_ptr_swap(this->value, actual);
|
||||||
if (!d || d->strongref.loadRelaxed() == 0)
|
if (!d || d->strongref.loadRelaxed() == 0)
|
||||||
this->value = nullptr;
|
this->value = nullptr;
|
||||||
|
|
||||||
@ -609,8 +609,8 @@ public:
|
|||||||
|
|
||||||
void swap(QWeakPointer &other) noexcept
|
void swap(QWeakPointer &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(this->d, other.d);
|
qt_ptr_swap(this->d, other.d);
|
||||||
qSwap(this->value, other.value);
|
qt_ptr_swap(this->value, other.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline QWeakPointer(const QSharedPointer<T> &o) : d(o.d), value(o.data())
|
inline QWeakPointer(const QSharedPointer<T> &o) : d(o.d), value(o.data())
|
||||||
|
@ -144,7 +144,7 @@ public:
|
|||||||
|
|
||||||
void swap(QTaggedPointer &other) noexcept
|
void swap(QTaggedPointer &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(d, other.d);
|
std::swap(d, other.d);
|
||||||
}
|
}
|
||||||
|
|
||||||
friend inline bool operator==(QTaggedPointer lhs, QTaggedPointer rhs) noexcept
|
friend inline bool operator==(QTaggedPointer lhs, QTaggedPointer rhs) noexcept
|
||||||
|
@ -131,7 +131,7 @@ class QVersionNumber
|
|||||||
|
|
||||||
void swap(SegmentStorage &other) noexcept
|
void swap(SegmentStorage &other) noexcept
|
||||||
{
|
{
|
||||||
qSwap(dummy, other.dummy);
|
std::swap(dummy, other.dummy);
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit SegmentStorage(QList<int> &&seg)
|
explicit SegmentStorage(QList<int> &&seg)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user