diff options
author | Liang Qi <liang.qi@qt.io> | 2016-05-03 15:49:15 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-05-03 15:49:15 +0200 |
commit | 6357813207c866c99aadfd91af8fb3affe891f1d (patch) | |
tree | 69464d415b12ebaa3e57d88d7b5cd113878be988 /src/corelib | |
parent | 5a76a3fb03f8d1dc8cb367de1a1dc6a37048376a (diff) | |
parent | b3fcaea5f2b97d3f562add97aee48cbb469c875a (diff) |
Merge remote-tracking branch 'origin/5.7' into dev
Conflicts:
configure
src/3rdparty/double-conversion/include/double-conversion/utils.h
src/corelib/global/qnamespace.qdoc
src/corelib/tools/qsimd_p.h
tests/auto/corelib/io/qfile/tst_qfile.cpp
Change-Id: I3ca1007bab5355d251c13002a18e93d81c254d34
Diffstat (limited to 'src/corelib')
36 files changed, 141 insertions, 109 deletions
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 2bd87626c2..7e4e09c6c7 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -1183,13 +1183,13 @@ bool qSharedBuild() Q_DECL_NOTHROW QSysInfo::MacintoshVersion variable gives the version of the system on which the application is run. - \value MV_9 Mac OS 9 (unsupported) - \value MV_10_0 Mac OS X 10.0 (unsupported) - \value MV_10_1 Mac OS X 10.1 (unsupported) - \value MV_10_2 Mac OS X 10.2 (unsupported) - \value MV_10_3 Mac OS X 10.3 (unsupported) - \value MV_10_4 Mac OS X 10.4 (unsupported) - \value MV_10_5 Mac OS X 10.5 (unsupported) + \value MV_9 Mac OS 9 + \value MV_10_0 Mac OS X 10.0 + \value MV_10_1 Mac OS X 10.1 + \value MV_10_2 Mac OS X 10.2 + \value MV_10_3 Mac OS X 10.3 + \value MV_10_4 Mac OS X 10.4 + \value MV_10_5 Mac OS X 10.5 \value MV_10_6 Mac OS X 10.6 \value MV_10_7 Mac OS X 10.7 \value MV_10_8 OS X 10.8 diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 268f555c25..c8699c15fe 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1339,7 +1339,7 @@ public: ImPlatformData = 0x80000000, ImQueryInput = ImCursorRectangle | ImCursorPosition | ImSurroundingText | - ImCurrentSelection | ImAnchorPosition, + ImCurrentSelection | ImAnchorRectangle | ImAnchorPosition, ImQueryAll = 0xffffffff }; Q_DECLARE_FLAGS(InputMethodQueries, InputMethodQuery) diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc index f028cff6e4..13e2b55e2a 100644 --- a/src/corelib/global/qnamespace.qdoc +++ b/src/corelib/global/qnamespace.qdoc @@ -234,6 +234,11 @@ set to true won't use the native dialogs provided by the platform. This value has been added in Qt 5.7. + \value AA_SynthesizeMouseForUnhandledTabletEvents All tablet events + that are not accepted by the application will be translated + to mouse events instead. This attribute is enabled + by default. This value has been added in Qt 5.7. + \value AA_DontCheckOpenGLContextThreadAffinity When making a context current using QOpenGLContext, do not check that the \l{QObject#Thread Affinity}{QObject thread affinity} @@ -2575,6 +2580,8 @@ \value ImTextAfterCursor The plain text after the cursor. The widget can decide how much text to return, but \b{must} not return an empty string unless the cursor is at the end of the document. \value ImEnterKeyType The Enter key type. + \value ImAnchorRectangle The bounding rectangle of the selection anchor. + This value has been added in Qt 5.7. Masks: diff --git a/src/corelib/io/qipaddress.cpp b/src/corelib/io/qipaddress.cpp index 13636ebb8b..02b12f635a 100644 --- a/src/corelib/io/qipaddress.cpp +++ b/src/corelib/io/qipaddress.cpp @@ -117,6 +117,9 @@ static bool parseIp4Internal(IPv4Address &address, const char *ptr, bool acceptL return false; else if (dotCount == 3 || *endptr == '\0') return true; + if (*endptr != '.') + return false; + ++dotCount; ptr = endptr + 1; } diff --git a/src/corelib/io/qlockfile_p.h b/src/corelib/io/qlockfile_p.h index b41b9b4604..d7f2a1d52d 100644 --- a/src/corelib/io/qlockfile_p.h +++ b/src/corelib/io/qlockfile_p.h @@ -81,7 +81,8 @@ public: // Returns \c true if the lock belongs to dead PID, or is old. // The attempt to delete it will tell us if it was really stale or not, though. bool isApparentlyStale() const; - static QString processNameByPid(qint64 pid); + // used in dbusmenu + Q_CORE_EXPORT static QString processNameByPid(qint64 pid); #ifdef Q_OS_UNIX static int checkFcntlWorksAfterFlock(const QString &fn); diff --git a/src/corelib/io/qlockfile_unix.cpp b/src/corelib/io/qlockfile_unix.cpp index 3455305858..7255414bdc 100644 --- a/src/corelib/io/qlockfile_unix.cpp +++ b/src/corelib/io/qlockfile_unix.cpp @@ -148,6 +148,8 @@ static QBasicMutex fcntlLock; static bool fcntlWorksAfterFlock(const QString &fn) { QMutexLocker lock(&fcntlLock); + if (fcntlOK.isDestroyed()) + return QLockFilePrivate::checkFcntlWorksAfterFlock(fn); bool *worksPtr = fcntlOK->object(fn); if (!worksPtr) { worksPtr = new bool(QLockFilePrivate::checkFcntlWorksAfterFlock(fn)); diff --git a/src/corelib/io/qprocess.cpp b/src/corelib/io/qprocess.cpp index 8b794df6df..439f9fce5a 100644 --- a/src/corelib/io/qprocess.cpp +++ b/src/corelib/io/qprocess.cpp @@ -2297,8 +2297,7 @@ void QProcess::start(const QString &command, OpenMode mode) return; } - QString prog = args.first(); - args.removeFirst(); + const QString prog = args.takeFirst(); start(prog, args, mode); } @@ -2540,8 +2539,7 @@ bool QProcess::startDetached(const QString &command) if (args.isEmpty()) return false; - QString prog = args.first(); - args.removeFirst(); + const QString prog = args.takeFirst(); return QProcessPrivate::startDetached(prog, args); } diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index ad24b43568..1ead114235 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -1259,8 +1259,10 @@ bool QResourceFileEngine::open(QIODevice::OpenMode flags) } if(flags & QIODevice::WriteOnly) return false; - if(!d->resource.isValid()) - return false; + if (!d->resource.isValid()) { + d->errorString = qt_error_string(ENOENT); + return false; + } return true; } diff --git a/src/corelib/io/qsettings_mac.cpp b/src/corelib/io/qsettings_mac.cpp index ceee165459..d73cc4d298 100644 --- a/src/corelib/io/qsettings_mac.cpp +++ b/src/corelib/io/qsettings_mac.cpp @@ -149,7 +149,7 @@ static QCFType<CFPropertyListRef> macValue(const QVariant &value) bool singleton = (values.count() == 1); if (singleton) { - switch (values.first().type()) { + switch (values.constFirst().type()) { // should be same as above (look for LIST) case QVariant::List: case QVariant::StringList: @@ -161,7 +161,7 @@ static QCFType<CFPropertyListRef> macValue(const QVariant &value) } cfkeys[numUniqueKeys] = QCFString::toCFStringRef(key); - cfvalues[numUniqueKeys] = singleton ? macValue(values.first()) : macList(values); + cfvalues[numUniqueKeys] = singleton ? macValue(values.constFirst()) : macList(values); ++numUniqueKeys; } diff --git a/src/corelib/io/qstandardpaths_mac.mm b/src/corelib/io/qstandardpaths_mac.mm index 33c34d41af..f08a6dac53 100644 --- a/src/corelib/io/qstandardpaths_mac.mm +++ b/src/corelib/io/qstandardpaths_mac.mm @@ -273,7 +273,7 @@ QString QStandardPaths::displayName(StandardLocation type) return QCoreApplication::translate("QStandardPaths", "Applications"); if (QCFType<CFURLRef> url = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, - standardLocations(type).first().toCFString(), + standardLocations(type).constFirst().toCFString(), kCFURLPOSIXPathStyle, true)) { QCFString name; CFURLCopyResourcePropertyForKey(url, kCFURLLocalizedNameKey, &name, NULL); diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp index 02b1e1c306..54afb8a974 100644 --- a/src/corelib/itemmodels/qabstractitemmodel.cpp +++ b/src/corelib/itemmodels/qabstractitemmodel.cpp @@ -58,8 +58,8 @@ QPersistentModelIndexData *QPersistentModelIndexData::create(const QModelIndex & QPersistentModelIndexData *d = 0; QAbstractItemModel *model = const_cast<QAbstractItemModel *>(index.model()); QHash<QModelIndex, QPersistentModelIndexData *> &indexes = model->d_func()->persistent.indexes; - const QHash<QModelIndex, QPersistentModelIndexData *>::iterator it = indexes.find(index); - if (it != indexes.end()) { + const auto it = indexes.constFind(index); + if (it != indexes.cend()) { d = (*it); } else { d = new QPersistentModelIndexData(index); @@ -603,13 +603,13 @@ void QAbstractItemModelPrivate::removePersistentIndexData(QPersistentModelIndexD } // make sure our optimization still works for (int i = persistent.moved.count() - 1; i >= 0; --i) { - int idx = persistent.moved[i].indexOf(data); + int idx = persistent.moved.at(i).indexOf(data); if (idx >= 0) persistent.moved[i].remove(idx); } // update the references to invalidated persistent indexes for (int i = persistent.invalidated.count() - 1; i >= 0; --i) { - int idx = persistent.invalidated[i].indexOf(data); + int idx = persistent.invalidated.at(i).indexOf(data); if (idx >= 0) persistent.invalidated[i].remove(idx); } @@ -2544,13 +2544,13 @@ bool QAbstractItemModel::decodeData(int row, int column, const QModelIndex &pare for (int i = 0; i < rows.count(); ++i) rowsToInsert[rows.at(i)] = 1; for (int i = 0; i < rowsToInsert.count(); ++i) { - if (rowsToInsert[i] == 1){ + if (rowsToInsert.at(i) == 1){ rowsToInsert[i] = dragRowCount; ++dragRowCount; } } for (int i = 0; i < rows.count(); ++i) - rows[i] = top + rowsToInsert[rows[i]]; + rows[i] = top + rowsToInsert.at(rows.at(i)); QBitArray isWrittenTo(dragRowCount * dragColumnCount); diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp index 56df8fd55a..6390d5f389 100644 --- a/src/corelib/itemmodels/qitemselectionmodel.cpp +++ b/src/corelib/itemmodels/qitemselectionmodel.cpp @@ -863,7 +863,7 @@ void QItemSelectionModelPrivate::_q_layoutAboutToBeChanged(const QList<QPersiste // optimization for when all indexes are selected // (only if there is lots of items (1000) because this is not entirely correct) if (ranges.isEmpty() && currentSelection.count() == 1) { - QItemSelectionRange range = currentSelection.first(); + QItemSelectionRange range = currentSelection.constFirst(); QModelIndex parent = range.parent(); tableRowCount = model->rowCount(parent); tableColCount = model->columnCount(parent); diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp index 18cb49d483..98202b71ae 100644 --- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp +++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp @@ -275,7 +275,7 @@ public: const QVector<int> &source_to_proxy, const QVector<int> &source_items, int &proxy_low, int &proxy_high) const; - QModelIndexPairList store_persistent_indexes(); + QModelIndexPairList store_persistent_indexes() const; void update_persistent_indexes(const QModelIndexPairList &source_indexes); void filter_about_to_be_changed(const QModelIndex &source_parent = QModelIndex()); @@ -1014,9 +1014,9 @@ void QSortFilterProxyModelPrivate::build_source_to_proxy_mapping( Maps the persistent proxy indexes to source indexes and returns the list of source indexes. */ -QModelIndexPairList QSortFilterProxyModelPrivate::store_persistent_indexes() +QModelIndexPairList QSortFilterProxyModelPrivate::store_persistent_indexes() const { - Q_Q(QSortFilterProxyModel); + Q_Q(const QSortFilterProxyModel); QModelIndexPairList source_indexes; source_indexes.reserve(persistent.indexes.count()); for (QPersistentModelIndexData *data : qAsConst(persistent.indexes)) { diff --git a/src/corelib/itemmodels/qstringlistmodel.cpp b/src/corelib/itemmodels/qstringlistmodel.cpp index 1a1b2b9fb6..f70c318ff7 100644 --- a/src/corelib/itemmodels/qstringlistmodel.cpp +++ b/src/corelib/itemmodels/qstringlistmodel.cpp @@ -187,7 +187,7 @@ bool QStringListModel::setData(const QModelIndex &index, const QVariant &value, if (index.row() >= 0 && index.row() < lst.size() && (role == Qt::EditRole || role == Qt::DisplayRole)) { lst.replace(index.row(), value.toString()); - emit dataChanged(index, index, QVector<int>() << role); + emit dataChanged(index, index, QVector<int>(1, role)); return true; } return false; diff --git a/src/corelib/kernel/qcoreapplication_win.cpp b/src/corelib/kernel/qcoreapplication_win.cpp index 61576daba2..8ad4ba273c 100644 --- a/src/corelib/kernel/qcoreapplication_win.cpp +++ b/src/corelib/kernel/qcoreapplication_win.cpp @@ -59,12 +59,12 @@ int appCmdShow = 0; Q_CORE_EXPORT QString qAppFileName() { - return QFileInfo(QCoreApplication::arguments().first()).filePath(); + return QFileInfo(QCoreApplication::arguments().constFirst()).filePath(); } QString QCoreApplicationPrivate::appName() const { - return QFileInfo(QCoreApplication::arguments().first()).baseName(); + return QFileInfo(QCoreApplication::arguments().constFirst()).baseName(); } #else diff --git a/src/corelib/kernel/qeventdispatcher_glib.cpp b/src/corelib/kernel/qeventdispatcher_glib.cpp index 8c2b47dccb..8ca2ac1c39 100644 --- a/src/corelib/kernel/qeventdispatcher_glib.cpp +++ b/src/corelib/kernel/qeventdispatcher_glib.cpp @@ -143,7 +143,7 @@ static gboolean timerSourceCheckHelper(GTimerSource *src) || (src->processEventsFlags & QEventLoop::X11ExcludeTimers)) return false; - if (src->timerList.updateCurrentTime() < src->timerList.first()->timeout) + if (src->timerList.updateCurrentTime() < src->timerList.constFirst()->timeout) return false; return true; diff --git a/src/corelib/kernel/qtimerinfo_unix.cpp b/src/corelib/kernel/qtimerinfo_unix.cpp index 8f5e8c9523..56337bdb45 100644 --- a/src/corelib/kernel/qtimerinfo_unix.cpp +++ b/src/corelib/kernel/qtimerinfo_unix.cpp @@ -591,7 +591,7 @@ int QTimerInfoList::activateTimers() if (isEmpty()) break; - QTimerInfo *currentTimerInfo = first(); + QTimerInfo *currentTimerInfo = constFirst(); if (currentTime < currentTimerInfo->timeout) break; // no timer has expired diff --git a/src/corelib/mimetypes/qmimedatabase.cpp b/src/corelib/mimetypes/qmimedatabase.cpp index da84523dcb..a32031a788 100644 --- a/src/corelib/mimetypes/qmimedatabase.cpp +++ b/src/corelib/mimetypes/qmimedatabase.cpp @@ -406,7 +406,7 @@ QMimeType QMimeDatabase::mimeTypeForFile(const QString &fileName, MatchMode mode { if (mode == MatchExtension) { QMutexLocker locker(&d->mutex); - QStringList matches = d->mimeTypeForFileName(fileName); + const QStringList matches = d->mimeTypeForFileName(fileName); const int matchCount = matches.count(); if (matchCount == 0) { return d->mimeTypeForName(d->defaultMimeType()); diff --git a/src/corelib/mimetypes/qmimeprovider.cpp b/src/corelib/mimetypes/qmimeprovider.cpp index 677e87077f..dc6eb05d9a 100644 --- a/src/corelib/mimetypes/qmimeprovider.cpp +++ b/src/corelib/mimetypes/qmimeprovider.cpp @@ -205,7 +205,7 @@ bool QMimeBinaryProvider::isValid() return false; // We found exactly one file; is it the user-modified mimes, or a system file? - const QString foundFile = m_cacheFiles.first()->file.fileName(); + const QString foundFile = m_cacheFiles.constFirst()->file.fileName(); const QString localCacheFile = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation) + QLatin1String("/mime/mime.cache"); return foundFile != localCacheFile; @@ -629,7 +629,7 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data) // Let's assume that shared-mime-info is at least version 0.70 // Otherwise we would need 1) a version check, and 2) code for parsing patterns from the globs file. #if 1 - if (!mainPattern.isEmpty() && (data.globPatterns.isEmpty() || data.globPatterns.first() != mainPattern)) { + if (!mainPattern.isEmpty() && (data.globPatterns.isEmpty() || data.globPatterns.constFirst() != mainPattern)) { // ensure it's first in the list of patterns data.globPatterns.removeAll(mainPattern); data.globPatterns.prepend(mainPattern); @@ -637,7 +637,7 @@ void QMimeBinaryProvider::loadMimeTypePrivate(QMimeTypePrivate &data) #else const bool globsInXml = sharedMimeInfoVersion() >= QT_VERSION_CHECK(0, 70, 0); if (globsInXml) { - if (!mainPattern.isEmpty() && data.globPatterns.first() != mainPattern) { + if (!mainPattern.isEmpty() && data.globPatterns.constFirst() != mainPattern) { // ensure it's first in the list of patterns data.globPatterns.removeAll(mainPattern); data.globPatterns.prepend(mainPattern); diff --git a/src/corelib/statemachine/qhistorystate.cpp b/src/corelib/statemachine/qhistorystate.cpp index c3361ad17e..338c89c688 100644 --- a/src/corelib/statemachine/qhistorystate.cpp +++ b/src/corelib/statemachine/qhistorystate.cpp @@ -209,6 +209,11 @@ QAbstractState *QHistoryState::defaultState() const return d->defaultTransition ? d->defaultTransition->targetState() : Q_NULLPTR; } +static inline bool isSoleEntry(const QList<QAbstractState*> &states, const QAbstractState * state) +{ + return states.size() == 1 && states.first() == state; +} + /*! Sets this history state's default state to be the given \a state. \a state must be a sibling of this history state. @@ -224,9 +229,7 @@ void QHistoryState::setDefaultState(QAbstractState *state) "to this history state's group (%p)", state, parentState()); return; } - if (!d->defaultTransition - || d->defaultTransition->targetStates().size() != 1 - || d->defaultTransition->targetStates().first() != state) { + if (!d->defaultTransition || !isSoleEntry(d->defaultTransition->targetStates(), state)) { if (!d->defaultTransition || !qobject_cast<DefaultStateTransition*>(d->defaultTransition)) { d->defaultTransition = new DefaultStateTransition(this, state); emit defaultTransitionChanged(QHistoryState::QPrivateSignal()); diff --git a/src/corelib/statemachine/qsignaltransition.cpp b/src/corelib/statemachine/qsignaltransition.cpp index 9972487eb5..c4ba8e5315 100644 --- a/src/corelib/statemachine/qsignaltransition.cpp +++ b/src/corelib/statemachine/qsignaltransition.cpp @@ -159,9 +159,8 @@ QSignalTransition::QSignalTransition(const QObject *sender, const char *signal, Constructs a new signal transition associated with the given \a signal of the given \a sender object and with the given \a sourceState. - This constructor is enabled if compiler supports delegating constructor. - - \sa Q_COMPILER_DELEGATING_CONSTRUCTORS + This constructor is enabled if the compiler supports delegating constructors, + as indicated by the presence of the macro Q_COMPILER_DELEGATING_CONSTRUCTORS. */ /*! diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp index 62a4c03d26..d5b01f3c8a 100644 --- a/src/corelib/statemachine/qstatemachine.cpp +++ b/src/corelib/statemachine/qstatemachine.cpp @@ -692,7 +692,7 @@ void QStateMachinePrivate::microstep(QEvent *event, const QList<QAbstractTransit // Add "implicit" assignments for restored properties to the first // (outermost) entered state Q_ASSERT(!enteredStates.isEmpty()); - QAbstractState *s = enteredStates.first(); + QAbstractState *s = enteredStates.constFirst(); assignmentsForEnteredStates[s] << restorablesToPropertyList(pendingRestorables); } diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h index 5f7d01f50f..adcd98b609 100644 --- a/src/corelib/thread/qthread_p.h +++ b/src/corelib/thread/qthread_p.h @@ -121,7 +121,7 @@ public: void addEvent(const QPostEvent &ev) { int priority = ev.priority; if (isEmpty() || - last().priority >= priority || + constLast().priority >= priority || insertionOffset >= size()) { // optimization: we can simply append if the last event in // the queue has higher or equal priority diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp index 9230854600..7ce757064f 100644 --- a/src/corelib/thread/qthreadpool.cpp +++ b/src/corelib/thread/qthreadpool.cpp @@ -228,7 +228,7 @@ int QThreadPoolPrivate::activeThreadCount() const void QThreadPoolPrivate::tryToStartMoreThreads() { // try to push tasks on the queue to any available threads - while (!queue.isEmpty() && tryStart(queue.first().first)) + while (!queue.isEmpty() && tryStart(queue.constFirst().first)) queue.removeFirst(); } diff --git a/src/corelib/thread/qwaitcondition_win.cpp b/src/corelib/thread/qwaitcondition_win.cpp index 34db71808d..e6610f18c8 100644 --- a/src/corelib/thread/qwaitcondition_win.cpp +++ b/src/corelib/thread/qwaitcondition_win.cpp @@ -136,7 +136,7 @@ void QWaitConditionPrivate::post(QWaitConditionEvent *wce, bool ret) // wakeups delivered after the timeout should be forwarded to the next waiter if (!ret && wce->wokenUp && !queue.isEmpty()) { - QWaitConditionEvent *other = queue.first(); + QWaitConditionEvent *other = queue.constFirst(); SetEvent(other->event); other->wokenUp = true; } diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h index bf4175d67e..6ecfcf96ad 100644 --- a/src/corelib/tools/qbytearray.h +++ b/src/corelib/tools/qbytearray.h @@ -604,41 +604,41 @@ inline bool QByteArray::contains(const QByteArray &a) const { return indexOf(a) != -1; } inline bool QByteArray::contains(char c) const { return indexOf(c) != -1; } -inline bool operator==(const QByteArray &a1, const QByteArray &a2) +inline bool operator==(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW { return (a1.size() == a2.size()) && (memcmp(a1.constData(), a2.constData(), a1.size())==0); } -inline bool operator==(const QByteArray &a1, const char *a2) +inline bool operator==(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW { return a2 ? qstrcmp(a1,a2) == 0 : a1.isEmpty(); } -inline bool operator==(const char *a1, const QByteArray &a2) +inline bool operator==(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW { return a1 ? qstrcmp(a1,a2) == 0 : a2.isEmpty(); } -inline bool operator!=(const QByteArray &a1, const QByteArray &a2) +inline bool operator!=(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW { return !(a1==a2); } -inline bool operator!=(const QByteArray &a1, const char *a2) +inline bool operator!=(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW { return a2 ? qstrcmp(a1,a2) != 0 : !a1.isEmpty(); } -inline bool operator!=(const char *a1, const QByteArray &a2) +inline bool operator!=(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW { return a1 ? qstrcmp(a1,a2) != 0 : !a2.isEmpty(); } -inline bool operator<(const QByteArray &a1, const QByteArray &a2) +inline bool operator<(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) < 0; } - inline bool operator<(const QByteArray &a1, const char *a2) + inline bool operator<(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) < 0; } -inline bool operator<(const char *a1, const QByteArray &a2) +inline bool operator<(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) < 0; } -inline bool operator<=(const QByteArray &a1, const QByteArray &a2) +inline bool operator<=(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) <= 0; } -inline bool operator<=(const QByteArray &a1, const char *a2) +inline bool operator<=(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) <= 0; } -inline bool operator<=(const char *a1, const QByteArray &a2) +inline bool operator<=(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) <= 0; } -inline bool operator>(const QByteArray &a1, const QByteArray &a2) +inline bool operator>(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) > 0; } -inline bool operator>(const QByteArray &a1, const char *a2) +inline bool operator>(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) > 0; } -inline bool operator>(const char *a1, const QByteArray &a2) +inline bool operator>(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) > 0; } -inline bool operator>=(const QByteArray &a1, const QByteArray &a2) +inline bool operator>=(const QByteArray &a1, const QByteArray &a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) >= 0; } -inline bool operator>=(const QByteArray &a1, const char *a2) +inline bool operator>=(const QByteArray &a1, const char *a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) >= 0; } -inline bool operator>=(const char *a1, const QByteArray &a2) +inline bool operator>=(const char *a1, const QByteArray &a2) Q_DECL_NOTHROW { return qstrcmp(a1, a2) >= 0; } #if !defined(QT_USE_QSTRINGBUILDER) inline const QByteArray operator+(const QByteArray &a1, const QByteArray &a2) diff --git a/src/corelib/tools/qcommandlineparser.cpp b/src/corelib/tools/qcommandlineparser.cpp index c0bd132fc3..2450484ce9 100644 --- a/src/corelib/tools/qcommandlineparser.cpp +++ b/src/corelib/tools/qcommandlineparser.cpp @@ -901,7 +901,8 @@ QStringList QCommandLineParser::values(const QString &optionName) const bool QCommandLineParser::isSet(const QCommandLineOption &option) const { // option.names() might be empty if the constructor failed - return !option.names().isEmpty() && isSet(option.names().first()); + const auto names = option.names(); + return !names.isEmpty() && isSet(names.first()); } /*! @@ -919,7 +920,7 @@ bool QCommandLineParser::isSet(const QCommandLineOption &option) const */ QString QCommandLineParser::value(const QCommandLineOption &option) const { - return value(option.names().first()); + return value(option.names().constFirst()); } /*! @@ -937,7 +938,7 @@ QString QCommandLineParser::value(const QCommandLineOption &option) const */ QStringList QCommandLineParser::values(const QCommandLineOption &option) const { - return values(option.names().first()); + return values(option.names().constFirst()); } /*! diff --git a/src/corelib/tools/qdatetimeparser.cpp b/src/corelib/tools/qdatetimeparser.cpp index 867aea4184..c1abdf11a7 100644 --- a/src/corelib/tools/qdatetimeparser.cpp +++ b/src/corelib/tools/qdatetimeparser.cpp @@ -167,7 +167,7 @@ bool QDateTimeParser::setDigit(QDateTime &v, int index, int newVal) const break; } - if (!(node.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong))) { + if (!(node.type & DaySectionMask)) { if (day < cachedDay) day = cachedDay; const int max = QDate(year, month, 1).daysInMonth(); @@ -633,6 +633,10 @@ int QDateTimeParser::sectionMaxSize(Section s, int count) const case Internal: case TimeSectionMask: case DateSectionMask: + case HourSectionMask: + case YearSectionMask: + case DayOfWeekSectionMask: + case DaySectionMask: qWarning("QDateTimeParser::sectionMaxSize: Invalid section %s", SectionNode::name(s).toLatin1().constData()); @@ -987,33 +991,27 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos if (state != Invalid) { if (parserType != QVariant::Time) { - if (year % 100 != year2digits) { - switch (isSet & (YearSection2Digits|YearSection)) { - case YearSection2Digits: + if (year % 100 != year2digits && (isSet & YearSection2Digits)) { + if (!(isSet & YearSection)) { year = (year / 100) * 100; year += year2digits; - break; - case ((uint)YearSection2Digits|(uint)YearSection): { + } else { conflicts = true; const SectionNode &sn = sectionNode(currentSectionIndex); if (sn.type == YearSection2Digits) { year = (year / 100) * 100; year += year2digits; } - break; } - default: - break; } } const QDate date(year, month, day); const int diff = dayofweek - date.dayOfWeek(); - if (diff != 0 && state == Acceptable - && isSet & (DayOfWeekSectionShort | DayOfWeekSectionLong)) { + if (diff != 0 && state == Acceptable && isSet & DayOfWeekSectionMask) { if (isSet & DaySection) conflicts = true; const SectionNode &sn = sectionNode(currentSectionIndex); - if (sn.type & (DayOfWeekSectionShort|DayOfWeekSectionLong) || currentSectionIndex == -1) { + if (sn.type & DayOfWeekSectionMask || currentSectionIndex == -1) { // dayofweek should be preferred day += diff; if (day <= 0) { @@ -1025,8 +1023,9 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos << diff << QDate(year, month, day).dayOfWeek(); } } + bool needfixday = false; - if (sectionType(currentSectionIndex) & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong)) { + if (sectionType(currentSectionIndex) & DaySectionMask) { cachedDay = day; } else if (cachedDay > day) { day = cachedDay; @@ -1054,7 +1053,7 @@ QDateTimeParser::StateNode QDateTimeParser::parse(QString &input, int &cursorPos const SectionNode sn = sectionNode(i); if (sn.type & DaySection) { input.replace(sectionPos(sn), sectionSize(i), loc.toString(day)); - } else if (sn.type & (DayOfWeekSectionShort | DayOfWeekSectionLong)) { + } else if (sn.type & DayOfWeekSectionMask) { const int dayOfWeek = QDate(year, month, day).dayOfWeek(); const QLocale::FormatType dayFormat = (sn.type == DayOfWeekSectionShort @@ -1313,7 +1312,7 @@ int QDateTimeParser::findDay(const QString &str1, int startDay, int sectionIndex int bestCount = 0; if (!str1.isEmpty()) { const SectionNode &sn = sectionNode(sectionIndex); - if (!(sn.type & (DaySection|DayOfWeekSectionShort|DayOfWeekSectionLong))) { + if (!(sn.type & DaySectionMask)) { qWarning("QDateTimeParser::findDay Internal error"); return -1; } diff --git a/src/corelib/tools/qdatetimeparser_p.h b/src/corelib/tools/qdatetimeparser_p.h index ad403f695b..9689d88616 100644 --- a/src/corelib/tools/qdatetimeparser_p.h +++ b/src/corelib/tools/qdatetimeparser_p.h @@ -120,14 +120,20 @@ public: MinuteSection = 0x00008, Hour12Section = 0x00010, Hour24Section = 0x00020, - TimeSectionMask = (AmPmSection|MSecSection|SecondSection|MinuteSection|Hour12Section|Hour24Section), + HourSectionMask = (Hour12Section | Hour24Section), + TimeSectionMask = (MSecSection | SecondSection | MinuteSection | + HourSectionMask | AmPmSection), + DaySection = 0x00100, MonthSection = 0x00200, YearSection = 0x00400, YearSection2Digits = 0x00800, + YearSectionMask = YearSection | YearSection2Digits, DayOfWeekSectionShort = 0x01000, DayOfWeekSectionLong = 0x02000, - DateSectionMask = (DaySection|MonthSection|YearSection|YearSection2Digits|DayOfWeekSectionShort|DayOfWeekSectionLong), + DayOfWeekSectionMask = DayOfWeekSectionShort | DayOfWeekSectionLong, + DaySectionMask = DaySection | DayOfWeekSectionMask, + DateSectionMask = DaySectionMask | MonthSection | YearSectionMask, Internal = 0x10000, FirstSection = 0x20000 | Internal, @@ -138,7 +144,7 @@ public: FirstSectionIndex = -2, LastSectionIndex = -3, CalendarPopupIndex = -4 - }; // duplicated from qdatetimeedit.h + }; // extending qdatetimeedit.h's equivalent Q_DECLARE_FLAGS(Sections, Section) struct Q_CORE_EXPORT SectionNode { @@ -224,6 +230,7 @@ public: FieldInfo fieldInfo(int index) const; + void setDefaultLocale(const QLocale &loc) { defaultLocale = loc; } virtual QDateTime getMinimum() const; virtual QDateTime getMaximum() const; virtual int cursorPosition() const { return -1; } diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp index 2851dc81d6..4b5f5e7830 100644 --- a/src/corelib/tools/qeasingcurve.cpp +++ b/src/corelib/tools/qeasingcurve.cpp @@ -444,7 +444,7 @@ struct BezierEase : public QEasingCurveFunction void init() { - if (_bezierCurves.last() == QPointF(1.0, 1.0)) { + if (_bezierCurves.constLast() == QPointF(1.0, 1.0)) { _init = true; _curveCount = _bezierCurves.count() / 3; diff --git a/src/corelib/tools/qelapsedtimer_generic.cpp b/src/corelib/tools/qelapsedtimer_generic.cpp index e053d4ced4..8c724247be 100644 --- a/src/corelib/tools/qelapsedtimer_generic.cpp +++ b/src/corelib/tools/qelapsedtimer_generic.cpp @@ -85,7 +85,8 @@ void QElapsedTimer::start() Q_DECL_NOTHROW and then starting the timer again with start(), but it does so in one single operation, avoiding the need to obtain the clock value twice. - Restarting the timer makes it valid again. + Calling this function on a QElapsedTimer that is invalid + results in undefined behavior. The following example illustrates how to use this function to calibrate a parameter to a slow operation (for example, an iteration count) so that @@ -93,7 +94,7 @@ void QElapsedTimer::start() Q_DECL_NOTHROW \snippet qelapsedtimer/main.cpp 3 - \sa start(), invalidate(), elapsed() + \sa start(), invalidate(), elapsed(), isValid() */ qint64 QElapsedTimer::restart() Q_DECL_NOTHROW { @@ -106,8 +107,10 @@ qint64 QElapsedTimer::restart() Q_DECL_NOTHROW /*! \since 4.8 Returns the number of nanoseconds since this QElapsedTimer was last - started. Calling this function in a QElapsedTimer that was invalidated - will result in undefined results. + started. + + Calling this function on a QElapsedTimer that is invalid + results in undefined behavior. On platforms that do not provide nanosecond resolution, the value returned will be the best estimate available. @@ -121,10 +124,12 @@ qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW /*! Returns the number of milliseconds since this QElapsedTimer was last - started. Calling this function in a QElapsedTimer that was invalidated - will result in undefined results. + started. - \sa start(), restart(), hasExpired(), invalidate() + Calling this function on a QElapsedTimer that is invalid + results in undefined behavior. + + \sa start(), restart(), hasExpired(), isValid(), invalidate() */ qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW { @@ -172,7 +177,8 @@ qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW \a other was started before this object, the returned value will be negative. If it was started later, the returned value will be positive. - The return value is undefined if this object or \a other were invalidated. + Calling this function on or with a QElapsedTimer that is invalid + results in undefined behavior. \sa msecsTo(), elapsed() */ diff --git a/src/corelib/tools/qlocale.cpp b/src/corelib/tools/qlocale.cpp index 241d3808a1..52f82827f2 100644 --- a/src/corelib/tools/qlocale.cpp +++ b/src/corelib/tools/qlocale.cpp @@ -1831,7 +1831,7 @@ QTime QLocale::toTime(const QString &string, const QString &format) const QTime time; #ifndef QT_BOOTSTRAPPED QDateTimeParser dt(QVariant::Time, QDateTimeParser::FromString); - dt.defaultLocale = *this; + dt.setDefaultLocale(*this); if (dt.parseFormat(format)) dt.fromString(string, 0, &time); #else @@ -1862,7 +1862,7 @@ QDate QLocale::toDate(const QString &string, const QString &format) const QDate date; #ifndef QT_BOOTSTRAPPED QDateTimeParser dt(QVariant::Date, QDateTimeParser::FromString); - dt.defaultLocale = *this; + dt.setDefaultLocale(*this); if (dt.parseFormat(format)) dt.fromString(string, &date, 0); #else @@ -1895,7 +1895,7 @@ QDateTime QLocale::toDateTime(const QString &string, const QString &format) cons QDate date; QDateTimeParser dt(QVariant::DateTime, QDateTimeParser::FromString); - dt.defaultLocale = *this; + dt.setDefaultLocale(*this); if (dt.parseFormat(format) && dt.fromString(string, &date, &time)) return QDateTime(date, time); #else diff --git a/src/corelib/tools/qlocale_unix.cpp b/src/corelib/tools/qlocale_unix.cpp index 9b0d338e46..095001e0a3 100644 --- a/src/corelib/tools/qlocale_unix.cpp +++ b/src/corelib/tools/qlocale_unix.cpp @@ -122,7 +122,7 @@ QLocale QSystemLocale::fallbackUiLocale() const // the first part of LANGUAGE if LANGUAGE is set and has a first part: QByteArray language = qgetenv("LANGUAGE"); if (!language.isEmpty()) { - language = language.split(':').first(); + language = language.split(':').constFirst(); if (!language.isEmpty()) return QLocale(QString::fromLatin1(language)); } diff --git a/src/corelib/tools/qringbuffer.cpp b/src/corelib/tools/qringbuffer.cpp index db2004dfd9..4a2dfdec2b 100644 --- a/src/corelib/tools/qringbuffer.cpp +++ b/src/corelib/tools/qringbuffer.cpp @@ -74,14 +74,14 @@ void QRingBuffer::free(qint64 bytes) Q_ASSERT(bytes <= bufferSize); while (bytes > 0) { - const qint64 blockSize = buffers.first().size() - head; + const qint64 blockSize = buffers.constFirst().size() - head; if (tailBuffer == 0 || blockSize > bytes) { // keep a single block around if it does not exceed // the basic block size, to avoid repeated allocations // between uses of the buffer if (bufferSize <= bytes) { - if (buffers.first().size() <= basicBlockSize) { + if (buffers.constFirst().size() <= basicBlockSize) { bufferSize = 0; head = tail = 0; } else { @@ -114,8 +114,8 @@ char *QRingBuffer::reserve(qint64 bytes) } else { const qint64 newSize = bytes + tail; // if need buffer reallocation - if (newSize > buffers.last().size()) { - if (newSize > buffers.last().capacity() && (tail >= basicBlockSize + if (newSize > buffers.constLast().size()) { + if (newSize > buffers.constLast().capacity() && (tail >= basicBlockSize || newSize >= MaxByteArraySize)) { // shrink this buffer to its current size buffers.last().resize(tail); @@ -180,7 +180,7 @@ void QRingBuffer::chop(qint64 bytes) // the basic block size, to avoid repeated allocations // between uses of the buffer if (bufferSize <= bytes) { - if (buffers.first().size() <= basicBlockSize) { + if (buffers.constFirst().size() <= basicBlockSize) { bufferSize = 0; head = tail = 0; } else { @@ -198,7 +198,7 @@ void QRingBuffer::chop(qint64 bytes) bytes -= tail; buffers.removeLast(); --tailBuffer; - tail = buffers.last().size(); + tail = buffers.constLast().size(); } } diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp index accdb83608..43ef67b3b5 100644 --- a/src/corelib/tools/qstring.cpp +++ b/src/corelib/tools/qstring.cpp @@ -5841,7 +5841,9 @@ QString QString::toUpper_helper(QString &str) } /*! - \obsolete Use asprintf(), arg() or QTextStream instead. + \obsolete + + Use asprintf(), arg() or QTextStream instead. */ QString &QString::sprintf(const char *cformat, ...) { @@ -5897,7 +5899,9 @@ QString QString::asprintf(const char *cformat, ...) } /*! - \obsolete Use vasprintf(), arg() or QTextStream instead. + \obsolete + + Use vasprintf(), arg() or QTextStream instead. */ QString &QString::vsprintf(const char *cformat, va_list ap) { @@ -10643,7 +10647,7 @@ float QStringRef::toFloat(bool *ok) const \obsolete \fn QString Qt::escape(const QString &plain) - \sa QString::toHtmlEscaped() + Use QString::toHtmlEscaped() instead. */ /*! diff --git a/src/corelib/tools/qtimezoneprivate_mac.mm b/src/corelib/tools/qtimezoneprivate_mac.mm index 14b0523ca7..3a665c2b00 100644 --- a/src/corelib/tools/qtimezoneprivate_mac.mm +++ b/src/corelib/tools/qtimezoneprivate_mac.mm @@ -243,7 +243,7 @@ QTimeZonePrivate::Data QMacTimeZonePrivate::previousTransition(qint64 beforeMSec } } if (secsList.size() >= 1) - return data(qint64(secsList.last()) * 1000); + return data(qint64(secsList.constLast()) * 1000); else return invalidData(); } |