diff options
author | Liang Qi <liang.qi@qt.io> | 2019-12-16 07:05:19 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2019-12-16 07:05:19 +0100 |
commit | ee71a9ba8169b9327b8dbaf2266ebeb515c64dbb (patch) | |
tree | a2eb41c9b1b47ac8cd6f22c289f7227569ee0a5a /src/corelib | |
parent | d6266c757d2f2ea4ff1e71dc8545f9bf97aa3bb1 (diff) | |
parent | 98f19f00361bf25097281cae5dfa833ba7db8a2f (diff) |
Merge remote-tracking branch 'origin/5.14' into 5.15
Conflicts:
src/network/ssl/qsslsocket.cpp
src/widgets/kernel/qapplication.cpp
Change-Id: Ib7421cc2df59d0969f89b3fbd65a17ea76ffef3b
Diffstat (limited to 'src/corelib')
-rw-r--r-- | src/corelib/doc/src/qtcore-index.qdoc | 2 | ||||
-rw-r--r-- | src/corelib/doc/src/resource-system.qdoc | 4 | ||||
-rw-r--r-- | src/corelib/global/qendian.cpp | 6 | ||||
-rw-r--r-- | src/corelib/global/qglobal.h | 6 | ||||
-rw-r--r-- | src/corelib/global/qlibraryinfo.cpp | 36 | ||||
-rw-r--r-- | src/corelib/io/qresource.cpp | 4 | ||||
-rw-r--r-- | src/corelib/itemmodels/qitemselectionmodel.cpp | 17 | ||||
-rw-r--r-- | src/corelib/thread/qatomic.cpp | 204 | ||||
-rw-r--r-- | src/corelib/thread/qatomic.h | 6 | ||||
-rw-r--r-- | src/corelib/time/qcalendar.cpp | 4 |
10 files changed, 200 insertions, 89 deletions
diff --git a/src/corelib/doc/src/qtcore-index.qdoc b/src/corelib/doc/src/qtcore-index.qdoc index 40a6584af0..29fc25f69d 100644 --- a/src/corelib/doc/src/qtcore-index.qdoc +++ b/src/corelib/doc/src/qtcore-index.qdoc @@ -56,7 +56,7 @@ \include module-use.qdocinc using qt module \quotefile overview/using-qt-core.cmake - See also the \l[QtDoc]{Building with CMake} overview. + See also the \l[QtDoc]{Build with CMake} overview. \section2 Building with qmake diff --git a/src/corelib/doc/src/resource-system.qdoc b/src/corelib/doc/src/resource-system.qdoc index 69ec5e556b..f9ef317799 100644 --- a/src/corelib/doc/src/resource-system.qdoc +++ b/src/corelib/doc/src/resource-system.qdoc @@ -189,13 +189,13 @@ XML file to indicate a file should be most compressed, regardless of which algorithms \c rcc supports. - \li \c{zstd}: use the \l{Zstandard}{https://zstd.net} library to compress + \li \c{zstd}: use the \l{https://zstd.net}{Zstandard} library to compress contents. Valid compression levels range from 1 to 19, 1 is least compression (least CPU time) and 19 is the most compression (most CPU time). The default level is 14. A special value of 0 tells the \c{zstd} library to choose an implementation-defined default. - \li \c{zlib}: use the \l{zlib}{https://zlib.net} library to compress + \li \c{zlib}: use the \l{https://zlib.net}{zlib} library to compress contents. Valid compression levels range from 1 to 9, with 1the least compression (least CPU time) and 9 the most compression (most CPU time). The special value 0 means "no compression" and should not be used. The diff --git a/src/corelib/global/qendian.cpp b/src/corelib/global/qendian.cpp index 7fd6e13d3b..98dc6a9a4b 100644 --- a/src/corelib/global/qendian.cpp +++ b/src/corelib/global/qendian.cpp @@ -137,7 +137,7 @@ QT_BEGIN_NAMESPACE \sa qToLittleEndian() */ /*! - \fn template <typename T> T qFromLittleEndian(const void *src) + \fn template <typename T> inline T qFromLittleEndian(const void *src) \since 4.3 \relates <QtEndian> @@ -159,7 +159,7 @@ QT_BEGIN_NAMESPACE \sa qToLittleEndian() */ /*! - \fn template <typename T> T qFromLittleEndian(T src) + \fn template <typename T> inline T qFromLittleEndian(T src) \since 4.3 \relates <QtEndian> \overload @@ -171,7 +171,7 @@ QT_BEGIN_NAMESPACE unmodified. */ /*! - \fn template <typename T> T qFromLittleEndian(const void *src, qsizetype count, void *dest) + \fn template <typename T> inline T qFromLittleEndian(const void *src, qsizetype count, void *dest) \since 5.12 \relates <QtEndian> diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 861f087c60..1bfe2c1615 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -944,6 +944,10 @@ QT_WARNING_POP # define Q_DUMMY_COMPARISON_OPERATOR(C) #endif +QT_WARNING_PUSH +// warning: noexcept-expression evaluates to ‘false’ because of a call to ‘void swap(..., ...)' +QT_WARNING_DISABLE_GCC("-Wnoexcept") + namespace QtPrivate { namespace SwapExceptionTester { // insulate users from the "using std::swap" below @@ -963,6 +967,8 @@ inline void qSwap(T &value1, T &value2) swap(value1, value2); } +QT_WARNING_POP + #if QT_DEPRECATED_SINCE(5, 0) Q_CORE_EXPORT QT_DEPRECATED void *qMalloc(size_t size) Q_ALLOC_SIZE(1); Q_CORE_EXPORT QT_DEPRECATED void qFree(void *ptr); diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp index ecd26233cd..fa2098c757 100644 --- a/src/corelib/global/qlibraryinfo.cpp +++ b/src/corelib/global/qlibraryinfo.cpp @@ -562,9 +562,39 @@ static QString getRelocatablePrefix() HMODULE hModule = getWindowsModuleHandle(); const int kBufferSize = 4096; wchar_t buffer[kBufferSize]; - const int pathSize = GetModuleFileName(hModule, buffer, kBufferSize); - if (pathSize > 0) - prefixPath = prefixFromQtCoreLibraryHelper(QString::fromWCharArray(buffer, pathSize)); + DWORD pathSize = GetModuleFileName(hModule, buffer, kBufferSize); + const QString qtCoreFilePath = QString::fromWCharArray(buffer, int(pathSize)); + const QString qtCoreDirPath = QFileInfo(qtCoreFilePath).absolutePath(); + pathSize = GetModuleFileName(NULL, buffer, kBufferSize); + const QString exeDirPath = QFileInfo(QString::fromWCharArray(buffer, int(pathSize))).absolutePath(); + if (QFileInfo(exeDirPath) == QFileInfo(qtCoreDirPath)) { + // QtCore DLL is next to the executable. This is either a windeployqt'ed executable or an + // executable within the QT_HOST_BIN directory. We're detecting the latter case by checking + // whether there's an import library corresponding to our QtCore DLL in PREFIX/lib. + const QString libdir = QString::fromLatin1( + qt_configure_strs + qt_configure_str_offsets[QLibraryInfo::LibrariesPath - 1]); + const QLatin1Char slash('/'); +#if defined(Q_CC_MINGW) + const QString implibPrefix = QStringLiteral("lib"); + const QString implibSuffix = QStringLiteral(".a"); +#else + const QString implibPrefix; + const QString implibSuffix = QStringLiteral(".lib"); +#endif + const QString qtCoreImpLibFileName = implibPrefix + + QFileInfo(qtCoreFilePath).completeBaseName() + implibSuffix; + const QString qtCoreImpLibPath = qtCoreDirPath + + slash + QLatin1String(QT_CONFIGURE_LIBLOCATION_TO_PREFIX_PATH) + + slash + libdir + + slash + qtCoreImpLibFileName; + if (!QFileInfo::exists(qtCoreImpLibPath)) { + // We did not find a corresponding import library and conclude that this is a + // windeployqt'ed executable. + return exeDirPath; + } + } + if (!qtCoreFilePath.isEmpty()) + prefixPath = prefixFromQtCoreLibraryHelper(qtCoreFilePath); #else #error "The chosen platform / config does not support querying for a dynamic prefix." #endif diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 3664a63050..bb608d8a72 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -280,9 +280,9 @@ static inline QStringList *resourceSearchPaths() RCC tool used to compress the payload. \value NoCompression Contents are not compressed - \value ZlibCompression Contents are compressed using \l{zlib}{https://zlib.net} and can + \value ZlibCompression Contents are compressed using \l{https://zlib.net}{zlib} and can be decompressed using the qUncompress() function. - \value ZstdCompression Contents are compressed using \l{zstd}{https://zstd.net}. To + \value ZstdCompression Contents are compressed using \l{https://zstd.net}{zstd}. To decompress, use the \c{ZSTD_decompress} function from the zstd library. diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp index f4402c88dc..e4ac5da299 100644 --- a/src/corelib/itemmodels/qitemselectionmodel.cpp +++ b/src/corelib/itemmodels/qitemselectionmodel.cpp @@ -1627,10 +1627,9 @@ bool QItemSelectionModel::rowIntersectsSelection(int row, const QModelIndex &par QItemSelection sel = d->ranges; sel.merge(d->currentSelection, d->currentCommand); - for (int i = 0; i < sel.count(); ++i) { - QItemSelectionRange range = sel.at(i); + for (const QItemSelectionRange &range : qAsConst(sel)) { if (range.parent() != parent) - return false; + return false; int top = range.top(); int bottom = range.bottom(); int left = range.left(); @@ -1661,11 +1660,13 @@ bool QItemSelectionModel::columnIntersectsSelection(int column, const QModelInde QItemSelection sel = d->ranges; sel.merge(d->currentSelection, d->currentCommand); - for (int i = 0; i < sel.count(); ++i) { - int left = sel.at(i).left(); - int right = sel.at(i).right(); - int top = sel.at(i).top(); - int bottom = sel.at(i).bottom(); + for (const QItemSelectionRange &range : qAsConst(sel)) { + if (range.parent() != parent) + return false; + int top = range.top(); + int bottom = range.bottom(); + int left = range.left(); + int right = range.right(); if (left <= column && right >= column) { for (int j = top; j <= bottom; j++) { const Qt::ItemFlags flags = d->model->index(j, column, parent).flags(); diff --git a/src/corelib/thread/qatomic.cpp b/src/corelib/thread/qatomic.cpp index b1a7edad91..5c3ad9412f 100644 --- a/src/corelib/thread/qatomic.cpp +++ b/src/corelib/thread/qatomic.cpp @@ -234,22 +234,26 @@ \sa QAtomicPointer */ -/*! \fn QAtomicInt::QAtomicInt(int value) +/*! + \fn QAtomicInt::QAtomicInt(int value) Constructs a QAtomicInt with the given \a value. */ -/*! \fn QAtomicInteger<T>::QAtomicInteger(T value) +/*! + \fn template <typename T> QAtomicInteger<T>::QAtomicInteger(T value) Constructs a QAtomicInteger with the given \a value. */ -/*! \fn template <typename T> QAtomicInteger<T>::QAtomicInteger(const QAtomicInteger &other) +/*! + \fn template <typename T> QAtomicInteger<T>::QAtomicInteger(const QAtomicInteger &other) Constructs a copy of \a other. */ -/*! \fn template <typename T> QAtomicInteger &QAtomicInteger<T>::operator=(const QAtomicInteger &other) +/*! + \fn template <typename T> QAtomicInteger &QAtomicInteger<T>::operator=(const QAtomicInteger &other) Assigns \a other to this QAtomicInteger and returns a reference to this QAtomicInteger. @@ -344,19 +348,22 @@ \sa storeRelaxed(), storeRelease() */ -/*! \fn template <typename T> bool QAtomicInteger<T>::isReferenceCountingNative() +/*! + \fn template <typename T> bool QAtomicInteger<T>::isReferenceCountingNative() Returns \c true if reference counting is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::isReferenceCountingWaitFree() +/*! + \fn template <typename T> bool QAtomicInteger<T>::isReferenceCountingWaitFree() Returns \c true if atomic reference counting is wait-free, false otherwise. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::ref() +/*! + \fn template <typename T> bool QAtomicInteger<T>::ref() Atomically increments the value of this QAtomicInteger. Returns \c true if the new value is non-zero, false otherwise. @@ -394,7 +401,8 @@ \sa ref(), operator++(), operator--(int) */ -/*! \fn template <typename T> bool QAtomicInteger<T>::deref() +/*! + \fn template <typename T> bool QAtomicInteger<T>::deref() Atomically decrements the value of this QAtomicInteger. Returns \c true if the new value is non-zero, false otherwise. @@ -432,18 +440,21 @@ \sa deref(), operator--(), operator++(int) */ -/*! \fn template <typename T> bool QAtomicInteger<T>::isTestAndSetNative() +/*! + \fn template <typename T> bool QAtomicInteger<T>::isTestAndSetNative() Returns \c true if test-and-set is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::isTestAndSetWaitFree() +/*! + \fn template <typename T> bool QAtomicInteger<T>::isTestAndSetWaitFree() Returns \c true if atomic test-and-set is wait-free, false otherwise. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::testAndSetRelaxed(T expectedValue, T newValue) +/*! + \fn template <typename T> bool QAtomicInteger<T>::testAndSetRelaxed(T expectedValue, T newValue) Atomic test-and-set. @@ -457,7 +468,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::testAndSetAcquire(T expectedValue, T newValue) +/*! + \fn template <typename T> bool QAtomicInteger<T>::testAndSetAcquire(T expectedValue, T newValue) Atomic test-and-set. @@ -472,7 +484,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::testAndSetRelease(T expectedValue, T newValue) +/*! + \fn template <typename T> bool QAtomicInteger<T>::testAndSetRelease(T expectedValue, T newValue) Atomic test-and-set. @@ -487,7 +500,8 @@ re-ordered after the atomic operation. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::testAndSetOrdered(T expectedValue, T newValue) +/*! + \fn template <typename T> bool QAtomicInteger<T>::testAndSetOrdered(T expectedValue, T newValue) Atomic test-and-set. @@ -502,19 +516,22 @@ may not be re-ordered. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::isFetchAndStoreNative() +/*! + \fn template <typename T> bool QAtomicInteger<T>::isFetchAndStoreNative() Returns \c true if fetch-and-store is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::isFetchAndStoreWaitFree() +/*! + \fn template <typename T> bool QAtomicInteger<T>::isFetchAndStoreWaitFree() Returns \c true if atomic fetch-and-store is wait-free, false otherwise. */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreRelaxed(T newValue) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreRelaxed(T newValue) Atomic fetch-and-store. @@ -526,7 +543,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreAcquire(T newValue) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreAcquire(T newValue) Atomic fetch-and-store. @@ -539,7 +557,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreRelease(T newValue) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreRelease(T newValue) Atomic fetch-and-store. @@ -552,7 +571,8 @@ re-ordered after the atomic operation. */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreOrdered(T newValue) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndStoreOrdered(T newValue) Atomic fetch-and-store. @@ -565,19 +585,22 @@ may not be re-ordered. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::isFetchAndAddNative() +/*! + \fn template <typename T> bool QAtomicInteger<T>::isFetchAndAddNative() Returns \c true if fetch-and-add is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template <typename T> bool QAtomicInteger<T>::isFetchAndAddWaitFree() +/*! + \fn template <typename T> bool QAtomicInteger<T>::isFetchAndAddWaitFree() Returns \c true if atomic fetch-and-add is wait-free, false otherwise. */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAddRelaxed(T valueToAdd) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndAddRelaxed(T valueToAdd) Atomic fetch-and-add. @@ -591,7 +614,8 @@ \sa operator+=(), fetchAndSubRelaxed() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAddAcquire(T valueToAdd) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndAddAcquire(T valueToAdd) Atomic fetch-and-add. @@ -606,7 +630,8 @@ \sa operator+=(), fetchAndSubAcquire() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAddRelease(T valueToAdd) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndAddRelease(T valueToAdd) Atomic fetch-and-add. @@ -621,7 +646,8 @@ \sa operator+=(), fetchAndSubRelease() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAddOrdered(T valueToAdd) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndAddOrdered(T valueToAdd) Atomic fetch-and-add. @@ -636,7 +662,8 @@ \sa operator+=(), fetchAndSubOrdered() */ -/*! \fn template <typename T> T QAtomicInteger<T>::operator+=(T value) +/*! + \fn template <typename T> T QAtomicInteger<T>::operator+=(T value) \since 5.3 Atomic add-and-fetch. @@ -650,7 +677,8 @@ \sa fetchAndAddOrdered(), operator-=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndSubRelaxed(T valueToSub) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndSubRelaxed(T valueToSub) \since 5.3 Atomic fetch-and-sub. @@ -665,7 +693,8 @@ \sa operator-=(), fetchAndAddRelaxed() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndSubAcquire(T valueToSub) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndSubAcquire(T valueToSub) \since 5.3 Atomic fetch-and-sub. @@ -681,7 +710,8 @@ \sa operator-=(), fetchAndAddAcquire() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndSubRelease(T valueToSub) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndSubRelease(T valueToSub) \since 5.3 Atomic fetch-and-sub. @@ -697,7 +727,8 @@ \sa operator-=(), fetchAndAddRelease() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndSubOrdered(T valueToSub) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndSubOrdered(T valueToSub) \since 5.3 Atomic fetch-and-sub. @@ -713,7 +744,8 @@ \sa operator-=(), fetchAndAddOrdered() */ -/*! \fn template <typename T> T QAtomicInteger<T>::operator-=(T value) +/*! + \fn template <typename T> T QAtomicInteger<T>::operator-=(T value) \since 5.3 Atomic sub-and-fetch. @@ -727,7 +759,8 @@ \sa fetchAndSubOrdered(), operator+=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndOrRelaxed(T valueToOr) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndOrRelaxed(T valueToOr) \since 5.3 Atomic fetch-and-or. @@ -742,7 +775,8 @@ \sa operator|=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndOrAcquire(T valueToOr) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndOrAcquire(T valueToOr) \since 5.3 Atomic fetch-and-or. @@ -758,7 +792,8 @@ \sa operator|=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndOrRelease(T valueToOr) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndOrRelease(T valueToOr) \since 5.3 Atomic fetch-and-or. @@ -774,7 +809,8 @@ \sa operator|=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndOrOrdered(T valueToOr) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndOrOrdered(T valueToOr) \since 5.3 Atomic fetch-and-or. @@ -790,7 +826,8 @@ \sa operator|=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::operator|=(T value) +/*! + \fn template <typename T> T QAtomicInteger<T>::operator|=(T value) \since 5.3 Atomic or-and-fetch. @@ -804,7 +841,8 @@ \sa fetchAndOrOrdered() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndXorRelaxed(T valueToXor) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndXorRelaxed(T valueToXor) \since 5.3 Atomic fetch-and-xor. @@ -819,7 +857,8 @@ \sa operator^=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndXorAcquire(T valueToXor) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndXorAcquire(T valueToXor) \since 5.3 Atomic fetch-and-xor. @@ -835,7 +874,8 @@ \sa operator^=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndXorRelease(T valueToXor) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndXorRelease(T valueToXor) \since 5.3 Atomic fetch-and-xor. @@ -851,7 +891,8 @@ \sa operator^=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndXorOrdered(T valueToXor) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndXorOrdered(T valueToXor) \since 5.3 Atomic fetch-and-xor. @@ -867,7 +908,8 @@ \sa operator^=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::operator^=(T value) +/*! + \fn template <typename T> T QAtomicInteger<T>::operator^=(T value) \since 5.3 Atomic xor-and-fetch. @@ -881,7 +923,8 @@ \sa fetchAndXorOrdered() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAndRelaxed(T valueToAnd) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndAndRelaxed(T valueToAnd) \since 5.3 Atomic fetch-and-and. @@ -896,7 +939,8 @@ \sa operator&=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAndAcquire(T valueToAnd) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndAndAcquire(T valueToAnd) \since 5.3 Atomic fetch-and-and. @@ -912,7 +956,8 @@ \sa operator&=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAndRelease(T valueToAnd) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndAndRelease(T valueToAnd) \since 5.3 Atomic fetch-and-and. @@ -928,7 +973,8 @@ \sa operator&=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::fetchAndAndOrdered(T valueToAnd) +/*! + \fn template <typename T> T QAtomicInteger<T>::fetchAndAndOrdered(T valueToAnd) \since 5.3 Atomic fetch-and-and. @@ -944,7 +990,8 @@ \sa operator&=() */ -/*! \fn template <typename T> T QAtomicInteger<T>::operator&=(T value) +/*! + \fn template <typename T> T QAtomicInteger<T>::operator&=(T value) \since 5.3 Atomic add-and-fetch. @@ -1287,17 +1334,20 @@ \sa QAtomicInteger */ -/*! \fn template <typename T> QAtomicPointer<T>::QAtomicPointer(T *value) +/*! + \fn template <typename T> QAtomicPointer<T>::QAtomicPointer(T *value) Constructs a QAtomicPointer with the given \a value. */ -/*! \fn template <typename T> QAtomicPointer<T>::QAtomicPointer(const QAtomicPointer<T> &other) +/*! + \fn template <typename T> QAtomicPointer<T>::QAtomicPointer(const QAtomicPointer<T> &other) Constructs a copy of \a other. */ -/*! \fn template <typename T> QAtomicPointer &QAtomicPointer<T>::operator=(const QAtomicPointer &other) +/*! + \fn template <typename T> QAtomicPointer &QAtomicPointer<T>::operator=(const QAtomicPointer &other) Assigns \a other to this QAtomicPointer and returns a reference to this QAtomicPointer. @@ -1369,18 +1419,21 @@ \sa storeRelaxed(), loadRelaxed() */ -/*! \fn template <typename T> bool QAtomicPointer<T>::isTestAndSetNative() +/*! + \fn template <typename T> bool QAtomicPointer<T>::isTestAndSetNative() Returns \c true if test-and-set is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::isTestAndSetWaitFree() +/*! + \fn template <typename T> bool QAtomicPointer<T>::isTestAndSetWaitFree() Returns \c true if atomic test-and-set is wait-free, false otherwise. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue) +/*! + \fn template <typename T> bool QAtomicPointer<T>::testAndSetRelaxed(T *expectedValue, T *newValue) Atomic test-and-set. @@ -1394,7 +1447,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue) +/*! + \fn template <typename T> bool QAtomicPointer<T>::testAndSetAcquire(T *expectedValue, T *newValue) Atomic test-and-set. @@ -1409,7 +1463,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue) +/*! + \fn template <typename T> bool QAtomicPointer<T>::testAndSetRelease(T *expectedValue, T *newValue) Atomic test-and-set. @@ -1424,7 +1479,8 @@ re-ordered after the atomic operation. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue) +/*! + \fn template <typename T> bool QAtomicPointer<T>::testAndSetOrdered(T *expectedValue, T *newValue) Atomic test-and-set. @@ -1439,19 +1495,22 @@ may not be re-ordered. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::isFetchAndStoreNative() +/*! + \fn template <typename T> bool QAtomicPointer<T>::isFetchAndStoreNative() Returns \c true if fetch-and-store is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::isFetchAndStoreWaitFree() +/*! + \fn template <typename T> bool QAtomicPointer<T>::isFetchAndStoreWaitFree() Returns \c true if atomic fetch-and-store is wait-free, false otherwise. */ -/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue) +/*! + \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreRelaxed(T *newValue) Atomic fetch-and-store. @@ -1463,7 +1522,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreAcquire(T *newValue) +/*! + \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreAcquire(T *newValue) Atomic fetch-and-store. @@ -1476,7 +1536,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreRelease(T *newValue) +/*! + \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreRelease(T *newValue) Atomic fetch-and-store. @@ -1489,7 +1550,8 @@ re-ordered after the atomic operation. */ -/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreOrdered(T *newValue) +/*! + \fn template <typename T> T *QAtomicPointer<T>::fetchAndStoreOrdered(T *newValue) Atomic fetch-and-store. @@ -1502,19 +1564,22 @@ may not be re-ordered. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::isFetchAndAddNative() +/*! + \fn template <typename T> bool QAtomicPointer<T>::isFetchAndAddNative() Returns \c true if fetch-and-add is implemented using atomic processor instructions, false otherwise. */ -/*! \fn template <typename T> bool QAtomicPointer<T>::isFetchAndAddWaitFree() +/*! + \fn template <typename T> bool QAtomicPointer<T>::isFetchAndAddWaitFree() Returns \c true if atomic fetch-and-add is wait-free, false otherwise. */ -/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd) +/*! + \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddRelaxed(qptrdiff valueToAdd) Atomic fetch-and-add. @@ -1526,7 +1591,8 @@ processor to freely reorder memory accesses. */ -/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd) +/*! + \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddAcquire(qptrdiff valueToAdd) Atomic fetch-and-add. @@ -1539,7 +1605,8 @@ be re-ordered before the atomic operation. */ -/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd) +/*! + \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddRelease(qptrdiff valueToAdd) Atomic fetch-and-add. @@ -1552,7 +1619,8 @@ re-ordered after the atomic operation. */ -/*! \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd) +/*! + \fn template <typename T> T *QAtomicPointer<T>::fetchAndAddOrdered(qptrdiff valueToAdd) Atomic fetch-and-add. diff --git a/src/corelib/thread/qatomic.h b/src/corelib/thread/qatomic.h index a3b9be0729..aa57ddc610 100644 --- a/src/corelib/thread/qatomic.h +++ b/src/corelib/thread/qatomic.h @@ -50,6 +50,10 @@ QT_BEGIN_NAMESPACE QT_WARNING_PUSH QT_WARNING_DISABLE_GCC("-Wextra") +#ifdef Q_CLANG_QDOC +# undef QT_BASIC_ATOMIC_HAS_CONSTRUCTORS +#endif + // High-level atomic integer operations template <typename T> class QAtomicInteger : public QBasicAtomicInteger<T> @@ -194,7 +198,9 @@ public: #ifdef Q_QDOC T *load() const; T *loadAcquire() const; + T *loadRelaxed() const; void store(T *newValue); + void storeRelaxed(T *newValue); void storeRelease(T *newValue); static Q_DECL_CONSTEXPR bool isTestAndSetNative(); diff --git a/src/corelib/time/qcalendar.cpp b/src/corelib/time/qcalendar.cpp index d308aeba2b..6a4623ce92 100644 --- a/src/corelib/time/qcalendar.cpp +++ b/src/corelib/time/qcalendar.cpp @@ -100,7 +100,7 @@ struct Registry { if (id == QCalendar::System::User) { byId.push_back(calendar); } else { - Q_ASSERT(byId.at(size_t(id)) == nullptr); + Q_ASSERT(byId[size_t(id)] == nullptr); byId[size_t(id)] = calendar; } if (id == QCalendar::System::Gregorian) { @@ -618,7 +618,7 @@ const QCalendarBackend *QCalendarBackend::fromEnum(QCalendar::System system) if (calendarRegistry.isDestroyed() || system == QCalendar::System::User) return nullptr; Q_ASSERT(calendarRegistry->byId.size() >= size_t(system)); - if (auto *c = calendarRegistry->byId.at(size_t(system))) + if (auto *c = calendarRegistry->byId[size_t(system)]) return c; switch (system) { case QCalendar::System::Gregorian: |