Revision control

++ // Copyright (C) 2021 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
++ // Qt-Security score:significant reason:default
++
++ #define QT_CORE_BUILD_REMOVED_API
++
++ #include "qglobal.h"
++
++ QT_USE_NAMESPACE
++
++ #if QT_CORE_REMOVED_SINCE(6, 1)
++
++ #include "qmetatype.h"
++
++ int QMetaType::id() const
++ {
++ return registerHelper();
++ }
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 1)
++
++ #if QT_CORE_REMOVED_SINCE(6, 2)
++
++ #include "qbindingstorage.h"
++
++ void QBindingStorage::maybeUpdateBindingAndRegister_helper(const QUntypedPropertyData *data) const
++ {
++ registerDependency_helper(data);
++ }
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 2)
++
++ #if QT_CORE_REMOVED_SINCE(6, 3)
++
++ #include "qbytearraymatcher.h"
++
++ # if QT_POINTER_SIZE != 4
++
++ int QStaticByteArrayMatcherBase::indexOfIn(const char *h, uint hl, const char *n, int nl, int from) const noexcept
++ {
++ qsizetype r = indexOfIn(h, size_t(hl), n, qsizetype(nl), qsizetype(from));
++ Q_ASSERT(r == int(r));
++ return r;
++ }
++
++ # endif // QT_POINTER_SIZE != 4
++
++ qsizetype QByteArrayMatcher::indexIn(const QByteArray &ba, qsizetype from) const
++ {
++ return indexIn(QByteArrayView{ba}, from); // ba.isNull() may be significant, so don't ignore it!
++ }
++
++ #include "tools/qcryptographichash.h"
++
++ void QCryptographicHash::addData(const QByteArray &data)
++ {
++ addData(QByteArrayView{data});
++ }
++
++ QByteArray QCryptographicHash::hash(const QByteArray &data, Algorithm method)
++ {
++ return hash(QByteArrayView{data}, method);
++ }
++
++ #include "qdatastream.h"
++
++ # ifndef QT_NO_DATASTREAM
++ # include "qfloat16.h"
++
++ QDataStream &QDataStream::operator>>(qfloat16 &f)
++ {
++ return *this >> reinterpret_cast<qint16&>(f);
++ }
++
++ QDataStream &QDataStream::operator<<(qfloat16 f)
++ {
++ return *this << reinterpret_cast<qint16&>(f);
++ }
++
++ # endif
++
++ #include "quuid.h"
++
++ QUuid::QUuid(const QString &text)
++ : QUuid{qToAnyStringViewIgnoringNull(text)}
++ {
++ }
++
++ QUuid::QUuid(const char *text)
++ : QUuid{QAnyStringView(text)}
++ {
++ }
++
++ QUuid::QUuid(const QByteArray &text)
++ : QUuid{qToAnyStringViewIgnoringNull(text)}
++ {
++ }
++
++ QUuid QUuid::fromString(QStringView string) noexcept
++ {
++ return fromString(QAnyStringView{string});
++ }
++
++ QUuid QUuid::fromString(QLatin1StringView string) noexcept
++ {
++ return fromString(QAnyStringView{string});
++ }
++
++ QUuid QUuid::fromRfc4122(const QByteArray &bytes)
++ {
++ return fromRfc4122(qToByteArrayViewIgnoringNull(bytes));
++ }
++
++ #include "qbytearraylist.h"
++
++ # if QT_POINTER_SIZE != 4
++ QByteArray QtPrivate::QByteArrayList_join(const QByteArrayList *that, const char *sep, int seplen)
++ {
++ return QByteArrayList_join(that, sep, qsizetype(seplen));
++ }
++ # endif
++
++ #include "qlocale.h"
++
++ QString QLocale::languageToCode(Language language)
++ {
++ return languageToCode(language, QLocale::AnyLanguageCode);
++ }
++
++ QLocale::Language QLocale::codeToLanguage(QStringView languageCode) noexcept
++ {
++ return codeToLanguage(languageCode, QLocale::AnyLanguageCode);
++ }
++
++ #include "qoperatingsystemversion.h"
++
++ QString QOperatingSystemVersion::name() const
++ {
++ return QOperatingSystemVersionBase::name();
++ }
++
++ int QOperatingSystemVersion::compare(const QOperatingSystemVersion &v1,
++ const QOperatingSystemVersion &v2)
++ {
++ return QOperatingSystemVersionBase::compare(v1, v2);
++ }
++
++ #include "qurl.h"
++
++ QString QUrl::fromAce(const QByteArray &domain)
++ {
++ return fromAce(domain, {});
++ }
++
++ QByteArray QUrl::toAce(const QString &domain)
++ {
++ return toAce(domain, {});
++ }
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 3)
++
++ #if QT_CORE_REMOVED_SINCE(6, 4)
++
++ #include "qbytearray.h" // uses QT_CORE_INLINE_SINCE
++
++ #include "qcalendar.h"
++
++ QCalendar::QCalendar(QStringView name)
++ : QCalendar(QAnyStringView{name}) {}
++
++ QCalendar::QCalendar(QLatin1StringView name)
++ : QCalendar(QAnyStringView{name}) {}
++
++ #include "qcollator.h" // inline function compare(ptr, n, ptr, n) (for MSVC)
++
++ #include "qhashfunctions.h"
++
++ size_t qHash(const QByteArray &key, size_t seed) noexcept
++ {
++ return qHashBits(key.constData(), size_t(key.size()), seed);
++ }
++
++ size_t qHash(const QByteArrayView &key, size_t seed) noexcept
++ {
++ return qHashBits(key.constData(), size_t(key.size()), seed);
++ }
++
++ #include "qobject.h"
++
++ void QObject::setObjectName(const QString &name)
++ {
++ setObjectName<void>(name);
++ }
++
++ #include "qlocale.h" // uses QT_CORE_INLINE_SINCE
++
++ #if QT_CONFIG(settings)
++
++ #include "qsettings.h"
++
++ void QSettings::beginGroup(const QString &prefix)
++ {
++ beginGroup(qToAnyStringViewIgnoringNull(prefix));
++ }
++
++ int QSettings::beginReadArray(const QString &prefix)
++ {
++ return beginReadArray(qToAnyStringViewIgnoringNull(prefix));
++ }
++
++ void QSettings::beginWriteArray(const QString &prefix, int size)
++ {
++ beginWriteArray(qToAnyStringViewIgnoringNull(prefix), size);
++ }
++
++ void QSettings::setValue(const QString &key, const QVariant &value)
++ {
++ setValue(qToAnyStringViewIgnoringNull(key), value);
++ }
++
++ void QSettings::remove(const QString &key)
++ {
++ remove(qToAnyStringViewIgnoringNull(key));
++ }
++
++ bool QSettings::contains(const QString &key) const
++ {
++ return contains(qToAnyStringViewIgnoringNull(key));
++ }
++
++ QVariant QSettings::value(const QString &key, const QVariant &defaultValue) const
++ {
++ return value(qToAnyStringViewIgnoringNull(key), defaultValue);
++ }
++
++ QVariant QSettings::value(const QString &key) const
++ {
++ return value(qToAnyStringViewIgnoringNull(key));
++ }
++
++ #endif // QT_CONFIG(settings)
++
++ #include "qversionnumber.h"
++
++ QT_WARNING_PUSH
++ QT_WARNING_DISABLE_DEPRECATED
++
++ QVersionNumber QVersionNumber::fromString(const QString &string, int *suffixIndex)
++ {
++ return fromString(qToAnyStringViewIgnoringNull(string), suffixIndex);
++ }
++
++ QVersionNumber QVersionNumber::fromString(QStringView string, int *suffixIndex)
++ {
++ return fromString(QAnyStringView{string}, suffixIndex);
++ }
++
++ QVersionNumber QVersionNumber::fromString(QLatin1StringView string, int *suffixIndex)
++ {
++ return fromString(QAnyStringView{string}, suffixIndex);
++ }
++
++ QT_WARNING_POP
++
++ // #include <qotherheader.h>
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 4)
++
++ #if QT_CORE_REMOVED_SINCE(6, 5)
++
++ #include "qbasictimer.h" // inlined API
++
++ #include "qbuffer.h" // inline removed API
++
++ #include "qdir.h"
++
++ uint QDir::count() const
++ {
++ return uint(count(QT6_CALL_NEW_OVERLOAD));
++ }
++
++ #if QT_POINTER_SIZE != 4
++ QString QDir::operator[](int i) const
++ {
++ return operator[](qsizetype{i});
++ }
++ #endif
++
++ #include "qtenvironmentvariables.h"
++
++ bool qputenv(const char *varName, const QByteArray &value)
++ {
++ return qputenv(varName, qToByteArrayViewIgnoringNull(value));
++ }
++
++ #include "qmetatype.h"
++
++ int QMetaType::idHelper() const
++ {
++ Q_ASSERT(d_ptr);
++ return registerHelper(d_ptr);
++ }
++
++ #if QT_CONFIG(sharedmemory)
++ #include "qsharedmemory.h"
++
++ void QSharedMemory::setNativeKey(const QString &key)
++ {
++ setNativeKey(key, QNativeIpcKey::legacyDefaultTypeForOs());
++ }
++ #endif
++
++ #include "qvariant.h"
++
++ // these implementations aren't as efficient as they used to be prior to
++ // replacement, but there's no way to call the ambiguous overload
++ QVariant::QVariant(const QUuid &uuid) : QVariant(QVariant::fromValue(uuid)) {}
++ #include "qline.h"
++ #include "qpoint.h"
++ #include "qrect.h"
++ #include "qsize.h"
++ QVariant::QVariant(const QPoint &pt) : QVariant(QVariant::fromValue(pt)) {}
++ QVariant::QVariant(const QPointF &pt) : QVariant(QVariant::fromValue(pt)) {}
++ QVariant::QVariant(const QRect &r) : QVariant(QVariant::fromValue(r)) {}
++ QVariant::QVariant(const QRectF &r) : QVariant(QVariant::fromValue(r)) {}
++ QVariant::QVariant(const QLine &l) : QVariant(QVariant::fromValue(l)) {}
++ QVariant::QVariant(const QLineF &l) : QVariant(QVariant::fromValue(l)) {}
++ QVariant::QVariant(const QSize &s) : QVariant(QVariant::fromValue(s)) {}
++ QVariant::QVariant(const QSizeF &s) : QVariant(QVariant::fromValue(s)) {}
++
++ #if QT_CONFIG(xmlstreamreader)
++
++ #include "qxmlstream.h"
++
++ QXmlStreamReader::QXmlStreamReader(const QByteArray &data)
++ : QXmlStreamReader(data, PrivateConstructorTag{})
++ {
++ }
++
++ QXmlStreamReader::QXmlStreamReader(const QString &data)
++ : QXmlStreamReader(qToAnyStringViewIgnoringNull(data))
++ {
++ }
++
++ QXmlStreamReader::QXmlStreamReader(const char *data)
++ : QXmlStreamReader(QAnyStringView(data))
++ {
++ }
++
++ void QXmlStreamReader::addData(const QByteArray &data)
++ {
++ addData<>(data);
++ }
++ void QXmlStreamReader::addData(const QString &data)
++ {
++ addData(qToAnyStringViewIgnoringNull(data));
++ }
++
++ void QXmlStreamReader::addData(const char *data)
++ {
++ addData(QAnyStringView(data));
++ }
++
++ #endif // QT_CONFIG(xmlstreamreader)
++
++ #if QT_CONFIG(xmlstreamwriter)
++
++ #include "qxmlstream.h"
++
++ void QXmlStreamWriter::writeAttribute(const QString &qualifiedName, const QString &value)
++ {
++ writeAttribute(qToAnyStringViewIgnoringNull(qualifiedName),
++ qToAnyStringViewIgnoringNull(value));
++ }
++
++ void QXmlStreamWriter::writeAttribute(const QString &namespaceUri, const QString &name, const QString &value)
++ {
++ writeAttribute(qToAnyStringViewIgnoringNull(namespaceUri),
++ qToAnyStringViewIgnoringNull(name),
++ qToAnyStringViewIgnoringNull(value));
++ }
++
++ void QXmlStreamWriter::writeCDATA(const QString &text)
++ {
++ writeCDATA(qToAnyStringViewIgnoringNull(text));
++ }
++
++ void QXmlStreamWriter::writeCharacters(const QString &text)
++ {
++ writeCharacters(qToAnyStringViewIgnoringNull(text));
++ }
++
++ void QXmlStreamWriter::writeComment(const QString &text)
++ {
++ writeComment(qToAnyStringViewIgnoringNull(text));
++ }
++
++ void QXmlStreamWriter::writeDTD(const QString &dtd)
++ {
++ writeDTD(qToAnyStringViewIgnoringNull(dtd));
++ }
++
++ void QXmlStreamWriter::writeEmptyElement(const QString &qualifiedName)
++ {
++ writeEmptyElement(qToAnyStringViewIgnoringNull(qualifiedName));
++ }
++
++ void QXmlStreamWriter::writeEmptyElement(const QString &namespaceUri, const QString &name)
++ {
++ writeEmptyElement(qToAnyStringViewIgnoringNull(namespaceUri),
++ qToAnyStringViewIgnoringNull(name));
++ }
++
++ void QXmlStreamWriter::writeTextElement(const QString &qualifiedName, const QString &text)
++ {
++ writeTextElement(qToAnyStringViewIgnoringNull(qualifiedName),
++ qToAnyStringViewIgnoringNull(text));
++ }
++
++ void QXmlStreamWriter::writeTextElement(const QString &namespaceUri, const QString &name, const QString &text)
++ {
++ writeTextElement(qToAnyStringViewIgnoringNull(namespaceUri),
++ qToAnyStringViewIgnoringNull(name),
++ qToAnyStringViewIgnoringNull(text));
++ }
++
++ void QXmlStreamWriter::writeEntityReference(const QString &name)
++ {
++ writeEntityReference(qToAnyStringViewIgnoringNull(name));
++ }
++
++ void QXmlStreamWriter::writeNamespace(const QString &namespaceUri, const QString &prefix)
++ {
++ writeNamespace(qToAnyStringViewIgnoringNull(namespaceUri),
++ qToAnyStringViewIgnoringNull(prefix));
++ }
++
++ void QXmlStreamWriter::writeDefaultNamespace(const QString &namespaceUri)
++ {
++ writeDefaultNamespace(qToAnyStringViewIgnoringNull(namespaceUri));
++ }
++
++ void QXmlStreamWriter::writeProcessingInstruction(const QString &target, const QString &data)
++ {
++ writeProcessingInstruction(qToAnyStringViewIgnoringNull(target),
++ qToAnyStringViewIgnoringNull(data));
++ }
++
++ void QXmlStreamWriter::writeStartDocument(const QString &version)
++ {
++ writeStartDocument(qToAnyStringViewIgnoringNull(version));
++ }
++
++ void QXmlStreamWriter::writeStartDocument(const QString &version, bool standalone)
++ {
++ writeStartDocument(qToAnyStringViewIgnoringNull(version),
++ standalone);
++ }
++
++ void QXmlStreamWriter::writeStartElement(const QString &qualifiedName)
++ {
++ writeStartElement(qToAnyStringViewIgnoringNull(qualifiedName));
++ }
++
++ void QXmlStreamWriter::writeStartElement(const QString &namespaceUri, const QString &name)
++ {
++ writeStartElement(qToAnyStringViewIgnoringNull(namespaceUri),
++ qToAnyStringViewIgnoringNull(name));
++ }
++
++ #endif // QT_CONFIG(xmlstreamwriter)
++
++ // inlined API
++ #include "qfloat16.h"
++ #include "qstring.h"
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 5)
++
++ #if QT_CORE_REMOVED_SINCE(6, 6)
++
++ #include "qmessageauthenticationcode.h"
++
++ QMessageAuthenticationCode::QMessageAuthenticationCode(QCryptographicHash::Algorithm method,
++ const QByteArray &key)
++ : QMessageAuthenticationCode(method, qToByteArrayViewIgnoringNull(key)) {}
++
++ void QMessageAuthenticationCode::setKey(const QByteArray &key)
++ {
++ setKey(qToByteArrayViewIgnoringNull(key));
++ }
++
++ void QMessageAuthenticationCode::addData(const QByteArray &data)
++ {
++ addData(qToByteArrayViewIgnoringNull(data));
++ }
++
++ QByteArray QMessageAuthenticationCode::hash(const QByteArray &msg, const QByteArray &key,
++ QCryptographicHash::Algorithm method)
++ {
++ return hash(qToByteArrayViewIgnoringNull(msg),
++ qToByteArrayViewIgnoringNull(key), method);
++ }
++
++ #include "qobject.h" // inlined API
++
++ #include "qrunnable.h"
++
++ QRunnable *QRunnable::create(std::function<void()> functionToRun)
++ {
++ return QRunnable::create<std::function<void()>>(std::move(functionToRun));
++ }
++
++ #include "qstring.h"
++
++ qsizetype QString::toUcs4_helper(const ushort *uc, qsizetype length, uint *out)
++ {
++ return toUcs4_helper(reinterpret_cast<const char16_t *>(uc), length,
++ reinterpret_cast<char32_t *>(out));
++ }
++
++ #if QT_CONFIG(thread)
++ #include "qreadwritelock.h"
++
++ bool QReadWriteLock::tryLockForRead()
++ {
++ return tryLockForRead(0);
++ }
++
++ bool QReadWriteLock::tryLockForWrite()
++ {
++ return tryLockForWrite(0);
++ }
++
++ #include "qthreadpool.h"
++ #include "private/qthreadpool_p.h"
++
++ void QThreadPool::start(std::function<void()> functionToRun, int priority)
++ {
++ if (!functionToRun)
++ return;
++ start(QRunnable::create(std::move(functionToRun)), priority);
++ }
++
++ bool QThreadPool::tryStart(std::function<void()> functionToRun)
++ {
++ if (!functionToRun)
++ return false;
++
++ Q_D(QThreadPool);
++ QMutexLocker locker(&d->mutex);
++ if (!d->allThreads.isEmpty() && d->areAllThreadsActive())
++ return false;
++
++ QRunnable *runnable = QRunnable::create(std::move(functionToRun));
++ if (d->tryStart(runnable))
++ return true;
++ delete runnable;
++ return false;
++ }
++
++ void QThreadPool::startOnReservedThread(std::function<void()> functionToRun)
++ {
++ if (!functionToRun)
++ return releaseThread();
++
++ startOnReservedThread(QRunnable::create(std::move(functionToRun)));
++ }
++
++ #endif // QT_CONFIG(thread)
++
++ #if QT_CONFIG(xmlstream)
++
++ #include "qxmlstream.h"
++
++ QStringView QXmlStreamAttributes::value(const QString &namespaceUri, const QString &name) const
++ {
++ return value(qToAnyStringViewIgnoringNull(namespaceUri), qToAnyStringViewIgnoringNull(name));
++ }
++
++ QStringView QXmlStreamAttributes::value(const QString &namespaceUri, QLatin1StringView name) const
++ {
++ return value(qToAnyStringViewIgnoringNull(namespaceUri), QAnyStringView(name));
++ }
++
++ QStringView QXmlStreamAttributes::value(QLatin1StringView namespaceUri, QLatin1StringView name) const
++ {
++ return value(QAnyStringView(namespaceUri), QAnyStringView(name));
++ }
++
++ QStringView QXmlStreamAttributes::value(const QString &qualifiedName) const
++ {
++ return value(qToAnyStringViewIgnoringNull(qualifiedName));
++ }
++
++ QStringView QXmlStreamAttributes::value(QLatin1StringView qualifiedName) const
++ {
++ return value(QAnyStringView(qualifiedName));
++ }
++
++ #endif // xmlstream
++
++ // inlined API
++ #if QT_CONFIG(thread)
++ #include "qmutex.h"
++ #include "qreadwritelock.h"
++ #include "qsemaphore.h"
++ #endif
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 6)
++
++ #if QT_CORE_REMOVED_SINCE(6, 7)
++
++ #include "qbitarray.h"
++
++ QBitArray QBitArray::operator~() const
++ {
++ return QBitArray(*this).inverted_inplace();
++ }
++
++ #include "qbytearray.h"
++
++ QByteArray QByteArray::left(qsizetype len) const
++ {
++ if (len >= size())
++ return *this;
++ if (len < 0)
++ len = 0;
++ return QByteArray(data(), len);
++ }
++
++ QByteArray QByteArray::right(qsizetype len) const
++ {
++ if (len >= size())
++ return *this;
++ if (len < 0)
++ len = 0;
++ return QByteArray(end() - len, len);
++ }
++
++ QByteArray QByteArray::mid(qsizetype pos, qsizetype len) const
++ {
++ qsizetype p = pos;
++ qsizetype l = len;
++ using namespace QtPrivate;
++ switch (QContainerImplHelper::mid(size(), &p, &l)) {
++ case QContainerImplHelper::Null:
++ return QByteArray();
++ case QContainerImplHelper::Empty:
++ {
++ return QByteArray(DataPointer::fromRawData(&_empty, 0));
++ }
++ case QContainerImplHelper::Full:
++ return *this;
++ case QContainerImplHelper::Subset:
++ return QByteArray(d.data() + p, l);
++ }
++ Q_UNREACHABLE_RETURN(QByteArray());
++ }
++
++ #ifdef Q_CC_MSVC
++ // previously inline methods, only needed for MSVC compat
++ QByteArray QByteArray::first(qsizetype n) const
++ { return sliced(0, n); }
++ QByteArray QByteArray::last(qsizetype n) const
++ { return sliced(size() - n, n); }
++ QByteArray QByteArray::sliced(qsizetype pos) const
++ { return sliced(pos, size() - pos); }
++ QByteArray QByteArray::sliced(qsizetype pos, qsizetype n) const
++ { verify(pos, n); return QByteArray(d.data() + pos, n); }
++ QByteArray QByteArray::chopped(qsizetype n) const
++ { return sliced(0, size() - n); }
++ #endif
++
++ #include "qcborstreamreader.h"
++
++ QCborError QCborStreamReader::lastError()
++ {
++ return std::as_const(*this).lastError();
++ }
++
++ #include "qdatetime.h" // also inlined API
++
++ QDateTime::QDateTime(QDate date, QTime time, const QTimeZone &timeZone)
++ : QDateTime(date, time, timeZone, TransitionResolution::LegacyBehavior) {}
++ QDateTime::QDateTime(QDate date, QTime time)
++ : QDateTime(date, time, TransitionResolution::LegacyBehavior) {}
++ void QDateTime::setDate(QDate date) { setDate(date, TransitionResolution::LegacyBehavior); }
++ void QDateTime::setTime(QTime time) { setTime(time, TransitionResolution::LegacyBehavior); }
++ void QDateTime::setTimeZone(const QTimeZone &toZone)
++ {
++ setTimeZone(toZone, TransitionResolution::LegacyBehavior);
++ }
++
++ bool QDateTime::precedes(const QDateTime &other) const
++ {
++ return compareThreeWay(*this, other) < 0;
++ }
++
++ #include "qdatastream.h"
++
++ QDataStream &QDataStream::writeBytes(const char *s, uint len)
++ {
++ return writeBytes(s, qint64(len));
++ }
++
++ int QDataStream::skipRawData(int len)
++ {
++ return int(skipRawData(qint64(len)));
++ }
++
++ int QDataStream::readBlock(char *data, int len)
++ {
++ return int(readBlock(data, qint64(len)));
++ }
++
++ int QDataStream::readRawData(char *s, int len)
++ {
++ return int(readRawData(s, qint64(len)));
++ }
++
++ int QDataStream::writeRawData(const char *s, int len)
++ {
++ return writeRawData(s, qint64(len));
++ }
++
++ #if defined(Q_OS_ANDROID)
++
++ #include "qjniobject.h"
++
++ jclass QJniObject::loadClass(const QByteArray &className, JNIEnv *env, bool /*binEncoded*/)
++ {
++ return QJniObject::loadClass(className, env);
++ }
++
++ QByteArray QJniObject::toBinaryEncClassName(const QByteArray &className)
++ {
++ return QByteArray(className).replace('/', '.');
++ }
++
++ void QJniObject::callVoidMethodV(JNIEnv *env, jmethodID id, va_list args) const
++ {
++ env->CallVoidMethodV(javaObject(), id, args);
++ }
++
++ #endif // Q_OS_ANDROID
++
++ #include "qlocale.h"
++ #include "qlist.h"
++ #include "qstringlist.h"
++
++ QStringList QLocale::uiLanguages() const
++ {
++ return uiLanguages(TagSeparator::Dash);
++ }
++
++ QString QLocale::name() const
++ {
++ return name(TagSeparator::Underscore);
++ }
++
++ QString QLocale::bcp47Name() const
++ {
++ return bcp47Name(TagSeparator::Dash);
++ }
++
++ #if QT_CONFIG(datestring)
++
++ QDate QLocale::toDate(const QString &string, FormatType format) const
++ {
++ return toDate(string, dateFormat(format), DefaultTwoDigitBaseYear);
++ }
++
++ QDate QLocale::toDate(const QString &string, FormatType format, QCalendar cal) const
++ {
++ return toDate(string, dateFormat(format), cal, DefaultTwoDigitBaseYear);
++ }
++
++ QDateTime QLocale::toDateTime(const QString &string, FormatType format) const
++ {
++ return toDateTime(string, dateTimeFormat(format), DefaultTwoDigitBaseYear);
++ }
++
++ QDateTime QLocale::toDateTime(const QString &string, FormatType format, QCalendar cal) const
++ {
++ return toDateTime(string, dateTimeFormat(format), cal, DefaultTwoDigitBaseYear);
++ }
++
++ QDate QLocale::toDate(const QString &string, const QString &format) const
++ {
++ return toDate(string, format, QCalendar(), DefaultTwoDigitBaseYear);
++ }
++
++ QDate QLocale::toDate(const QString &string, const QString &format, QCalendar cal) const
++ {
++ return toDate(string, format, cal, DefaultTwoDigitBaseYear);
++ }
++
++ QDateTime QLocale::toDateTime(const QString &string, const QString &format) const
++ {
++ return toDateTime(string, format, QCalendar(), DefaultTwoDigitBaseYear);
++ }
++
++ QDateTime QLocale::toDateTime(const QString &string, const QString &format, QCalendar cal) const
++ {
++ return toDateTime(string, format, cal, DefaultTwoDigitBaseYear);
++ }
++
++ #endif // datestring
++
++ #include "qobject.h"
++
++ void qt_qFindChildren_helper(const QObject *parent, const QMetaObject &mo,
++ QList<void*> *list, Qt::FindChildOptions options)
++ {
++ qt_qFindChildren_helper(parent, QAnyStringView(), mo, list, options);
++ }
++
++ void qt_qFindChildren_helper(const QObject *parent, const QString &name, const QMetaObject &mo,
++ QList<void*> *list, Qt::FindChildOptions options)
++ {
++ qt_qFindChildren_helper(parent, QAnyStringView{name}, mo, list, options);
++ }
++
++ QObject *qt_qFindChild_helper(const QObject *parent, const QString &name, const QMetaObject &mo,
++ Qt::FindChildOptions options)
++ {
++ return qt_qFindChild_helper(parent, QAnyStringView{name}, mo, options);
++ }
++
++ void QObject::moveToThread(QThread *targetThread)
++ {
++ moveToThread(targetThread, QT6_CALL_NEW_OVERLOAD);
++ }
++
++ #include "qobjectdefs.h"
++
++ bool QMetaObject::invokeMethodImpl(QObject *object, QtPrivate::QSlotObjectBase *slot, Qt::ConnectionType type, void *ret)
++ {
++ return invokeMethodImpl(object, slot, type, 1, &ret, nullptr, nullptr);
++ }
++
++ #include "qstring.h"
++
++ QString QString::left(qsizetype n) const
++ {
++ if (size_t(n) >= size_t(size()))
++ return *this;
++ return QString((const QChar*) d.data(), n);
++ }
++
++ QString QString::right(qsizetype n) const
++ {
++ if (size_t(n) >= size_t(size()))
++ return *this;
++ return QString(constData() + size() - n, n);
++ }
++
++ QString QString::mid(qsizetype position, qsizetype n) const
++ {
++ qsizetype p = position;
++ qsizetype l = n;
++ using namespace QtPrivate;
++ switch (QContainerImplHelper::mid(size(), &p, &l)) {
++ case QContainerImplHelper::Null:
++ return QString();
++ case QContainerImplHelper::Empty:
++ return QString(DataPointer::fromRawData(&_empty, 0));
++ case QContainerImplHelper::Full:
++ return *this;
++ case QContainerImplHelper::Subset:
++ return QString(constData() + p, l);
++ }
++ Q_UNREACHABLE_RETURN(QString());
++ }
++
++ #ifdef Q_CC_MSVC
++ // previously inline methods, only needed for MSVC compat
++ QString QString::first(qsizetype n) const
++ { return sliced(0, n); }
++ QString QString::last(qsizetype n) const
++ { return sliced(size() - n, n); }
++ QString QString::sliced(qsizetype pos) const
++ { return sliced(pos, size() - pos); }
++ QString QString::sliced(qsizetype pos, qsizetype n) const
++ { verify(pos, n); return QString(begin() + pos, n); }
++ QString QString::chopped(qsizetype n) const
++ { return sliced(0, size() - n); }
++ #endif
++
++ #include "qtimezone.h"
++
++ bool QTimeZone::operator==(const QTimeZone &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++
++ bool QTimeZone::operator!=(const QTimeZone &other) const
++ {
++ return !comparesEqual(*this, other);
++ }
++
++ #include "qurl.h"
++
++ QUrl QUrl::fromEncoded(const QByteArray &input, ParsingMode mode)
++ {
++ return QUrl::fromEncoded(QByteArrayView(input), mode);
++ }
++
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 7)
++
++ #if QT_CORE_REMOVED_SINCE(6, 8)
++
++ #if QT_CONFIG(itemmodel)
++ #include "qabstractitemmodel.h"
++
++ bool QPersistentModelIndex::operator<(const QPersistentModelIndex &other) const noexcept
++ {
++ return is_lt(compareThreeWay(*this, other));
++ }
++
++ bool QPersistentModelIndex::operator==(const QPersistentModelIndex &other) const noexcept
++ {
++ return comparesEqual(*this, other);
++ }
++
++ bool QPersistentModelIndex::operator==(const QModelIndex &other) const noexcept
++ {
++ return comparesEqual(*this, other);
++ }
++
++ bool QPersistentModelIndex::operator!=(const QModelIndex &other) const noexcept
++ {
++ return !comparesEqual(*this, other);
++ }
++
++ #endif // QT_CONFIG(itemmodel)
++
++ #include "qbitarray.h" // inlined API
++
++ #include "qbytearray.h" // inlined API
++
++ QT_BEGIN_NAMESPACE
++ namespace QtPrivate {
++ Q_CORE_EXPORT qsizetype lastIndexOf(QByteArrayView haystack, qsizetype from, char needle) noexcept
++ {
++ return lastIndexOf(haystack, from, uchar(needle));
++ }
++ }
++ QT_END_NAMESPACE
++
++ #include "qcborarray.h" // inlined API
++
++ #include "qcbormap.h" // inlined API
++
++ #include "qcborvalue.h" // inlined API
++
++ #include "qdatastream.h" // inlined API
++
++ QDataStream &QDataStream::operator<<(bool i)
++ {
++ return (*this << qint8(i));
++ }
++
++ #include "qdebug.h"
++
++ Q_CORE_EXPORT void qt_QMetaEnum_flagDebugOperator(QDebug &debug, size_t sizeofT, int value)
++ {
++ qt_QMetaEnum_flagDebugOperator(debug, sizeofT, uint(value));
++ }
++
++ #include "qdir.h" // inlined API
++
++ bool QDir::operator==(const QDir &dir) const
++ {
++ return comparesEqual(*this, dir);
++ }
++
++ #if QT_CONFIG(easingcurve)
++ #include "qeasingcurve.h"
++
++ bool QEasingCurve::operator==(const QEasingCurve &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++ #endif // QT_CONFIG(easingcurve)
++
++ #include "qfileinfo.h" // inlined API
++
++ bool QFileInfo::operator==(const QFileInfo &fileinfo) const
++ {
++ return comparesEqual(*this, fileinfo);
++ }
++
++ #if QT_CONFIG(itemmodel)
++ #include "qitemselectionmodel.h" // inlined API
++ #endif // itemmodel
++
++ #include "qjsonarray.h"
++
++ bool QJsonArray::operator==(const QJsonArray &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++
++ bool QJsonArray::operator!=(const QJsonArray &other) const
++ {
++ return !comparesEqual(*this, other);
++ }
++
++ #include "qjsondocument.h"
++
++ bool QJsonDocument::operator==(const QJsonDocument &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++
++ #include "qjsonobject.h"
++
++ bool QJsonObject::operator==(const QJsonObject &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++
++
++ bool QJsonObject::operator!=(const QJsonObject &other) const
++ {
++ return !comparesEqual(*this, other);
++ }
++
++ #include "qjsonvalue.h"
++
++ bool QJsonValue::operator==(const QJsonValue &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++
++ bool QJsonValue::operator!=(const QJsonValue &other) const
++ {
++ return !comparesEqual(*this, other);
++ }
++
++ #include "qline.h" // inlined API
++
++ #if QT_CONFIG(mimetype)
++ #include "qmimetype.h"
++
++ bool QMimeType::operator==(const QMimeType &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++ #endif // QT_CONFIG(mimetype)
++
++ #include "qobject.h"
++ #include "qnumeric.h"
++
++ int QObject::startTimer(std::chrono::milliseconds time, Qt::TimerType timerType)
++ {
++ using namespace std::chrono;
++ using ratio = std::ratio_divide<std::milli, std::nano>;
++ nanoseconds::rep r;
++ if (qMulOverflow<ratio::num>(time.count(), &r)) {
++ qWarning("QObject::startTimer(std::chrono::milliseconds): "
++ "'time' arg overflowed when converted to nanoseconds.");
++ r = nanoseconds::max().count();
++ }
++ return startTimer(nanoseconds{r}, timerType);
++ }
++
++ #if QT_CONFIG(processenvironment)
++ #include "qprocess.h" // inlined API
++
++ bool QProcessEnvironment::operator==(const QProcessEnvironment &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++ #endif // QT_CONFIG(processenvironment)
++
++ #if QT_CONFIG(regularexpression)
++ #include "qregularexpression.h"
++
++ bool QRegularExpressionMatch::hasCaptured(QStringView name) const
++ {
++ return hasCaptured(QAnyStringView(name));
++ }
++
++ QString QRegularExpressionMatch::captured(QStringView name) const
++ {
++ return captured(QAnyStringView(name));
++ }
++
++ QStringView QRegularExpressionMatch::capturedView(QStringView name) const
++ {
++ return capturedView(QAnyStringView(name));
++ }
++
++ qsizetype QRegularExpressionMatch::capturedStart(QStringView name) const
++ {
++ return capturedStart(QAnyStringView(name));
++ }
++
++ qsizetype QRegularExpressionMatch::capturedLength(QStringView name) const
++ {
++ return capturedLength(QAnyStringView(name));
++ }
++
++ qsizetype QRegularExpressionMatch::capturedEnd(QStringView name) const
++ {
++ return capturedEnd(QAnyStringView(name));
++ }
++
++ bool QRegularExpression::operator==(const QRegularExpression &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++ #endif // QT_CONFIG(regularexpression)
++
++ #if QT_CONFIG(future)
++ #include "qresultstore.h"
++
++ bool QtPrivate::ResultIteratorBase::operator==(const QtPrivate::ResultIteratorBase &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++
++ bool QtPrivate::ResultIteratorBase::operator!=(const QtPrivate::ResultIteratorBase &other) const
++ {
++ return !comparesEqual(*this, other);
++ }
++ #endif // QT_CONFIG(future)
++
++ #include "qstring.h" // inlined API
++
++ #include "qstringconverter.h"
++
++ QStringConverter::QStringConverter(const char *name, Flags f)
++ : QStringConverter(QAnyStringView{name}, f)
++ {}
++
++ auto QStringConverter::encodingForName(const char *name) noexcept -> std::optional<Encoding>
++ {
++ return encodingForName(QAnyStringView{name});
++ }
++
++ #if QT_CONFIG(thread)
++ # include "qthreadpool.h" // inlined API
++ #endif
++
++ #include "qtimer.h" // inlined API
++ // removed inline API (MSVC)
++
++ void QTimer::singleShot(std::chrono::milliseconds interval, Qt::TimerType timerType,
++ const QObject *receiver, const char *member)
++ {
++ singleShot(from_msecs(interval), timerType, receiver, member);
++ }
++
++ void QTimer::singleShotImpl(std::chrono::milliseconds interval, Qt::TimerType timerType,
++ const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj)
++ {
++ QtPrivate::SlotObjUniquePtr slot(slotObj); // don't leak if from_msecs throws
++ const auto ns = from_msecs(interval);
++ singleShotImpl(ns, timerType, receiver, slot.release());
++ }
++
++ #include "qurl.h"
++
++ bool QUrl::operator<(const QUrl &url) const
++ {
++ return is_lt(compareThreeWay(*this, url));
++ }
++
++ bool QUrl::operator==(const QUrl &url) const
++ {
++ return comparesEqual(*this, url);
++ }
++
++ bool QUrl::operator!=(const QUrl &url) const
++ {
++ return !comparesEqual(*this, url);
++ }
++
++ #include "qurlquery.h"
++
++ bool QUrlQuery::operator==(const QUrlQuery &other) const
++ {
++ return comparesEqual(*this, other);
++ }
++
++ #include "qbasictimer.h"
++
++ void QBasicTimer::start(std::chrono::milliseconds duration, QObject *object)
++ {
++ start(std::chrono::nanoseconds(duration), object);
++ }
++
++ void QBasicTimer::start(std::chrono::milliseconds duration, Qt::TimerType timerType, QObject *obj)
++ {
++ start(std::chrono::nanoseconds(duration), timerType, obj);
++ }
++
++ #include "quuid.h"
++
++ bool QUuid::operator<(const QUuid &other) const noexcept
++ {
++ return is_lt(compareThreeWay(*this, other));
++ }
++
++ bool QUuid::operator>(const QUuid &other) const noexcept
++ {
++ return is_gt(compareThreeWay(*this, other));
++ }
++
++ QUuid QUuid::createUuidV3(const QUuid &ns, const QByteArray &baseData) noexcept
++ {
++ return createUuidV3(ns, qToByteArrayViewIgnoringNull(baseData));
++ }
++
++ QUuid QUuid::createUuidV5(const QUuid &ns, const QByteArray &baseData) noexcept
++ {
++ return createUuidV5(ns, qToByteArrayViewIgnoringNull(baseData));
++ }
++
++ #if QT_CONFIG(xmlstream)
++ #include "qxmlstream.h" // inlined API
++ #endif // QT_CONFIG(xmlstream)
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 8)
++
++ #if QT_CORE_REMOVED_SINCE(6, 9)
++
++ #include "qchar.h" // inlined API
++
++
++ #include "qexceptionhandling.h"
++
++ QT_BEGIN_NAMESPACE
++ Q_NORETURN void qTerminate() noexcept
++ {
++ std::terminate();
++ }
++ QT_END_NAMESPACE
++
++
++ #include "qmetatype.h"
++
++ bool QMetaType::isRegistered() const
++ {
++ return isRegistered(QT6_CALL_NEW_OVERLOAD);
++ }
++
++ bool QMetaType::isValid() const
++ {
++ return isValid(QT6_CALL_NEW_OVERLOAD);
++ }
++
++
++ #include "qmetaobject.h"
++
++ const char *QMetaEnum::valueToKey(int value) const
++ {
++ return valueToKey(quint64(uint(value)));
++ }
++
++ QByteArray QMetaEnum::valueToKeys(int value) const
++ {
++ return valueToKeys(quint64(uint(value)));
++ }
++
++
++ #include "qmutex.h"
++
++ #if QT_CONFIG(thread)
++ void QBasicMutex::destroyInternal(QMutexPrivate *d)
++ {
++ destroyInternal(static_cast<void *>(d));
++ }
++ #endif
++
++
++ #include "qobject.h"
++ #include "private/qobject_p.h"
++
++ #ifdef Q_COMPILER_MANGLES_RETURN_TYPE
++ QMetaObject *QObjectData::dynamicMetaObject() const
++ {
++ // ### keep in sync with the master version in qobject.cpp
++ return metaObject->toDynamicMetaObject(q_ptr);
++ }
++ #endif // Q_COMPILER_MANGLES_RETURN_TYPE
++
++
++ #include "qstring.h"
++
++ QString QString::arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const
++ {
++ return arg_impl(a, fieldWidth, base, fillChar);
++ }
++
++ QString QString::arg(qulonglong a, int fieldWidth, int base, QChar fillChar) const
++ {
++ return arg_impl(a, fieldWidth, base, fillChar);
++ }
++
++ QString QString::arg(double a, int fieldWidth, char format, int precision, QChar fillChar) const
++ {
++ return arg_impl(a, fieldWidth, format, precision, fillChar);
++ }
++
++ QString QString::arg(char a, int fieldWidth, QChar fillChar) const
++ {
++ return arg_impl(QAnyStringView(a), fieldWidth, fillChar);
++ }
++
++ QString QString::arg(QChar a, int fieldWidth, QChar fillChar) const
++ {
++ return arg_impl(QAnyStringView{a}, fieldWidth, fillChar);
++ }
++
++ QString QString::arg(const QString &a, int fieldWidth, QChar fillChar) const
++ {
++ return arg_impl(qToAnyStringViewIgnoringNull(a), fieldWidth, fillChar);
++ }
++
++ QString QString::arg(QStringView a, int fieldWidth, QChar fillChar) const
++ {
++ return arg_impl(QAnyStringView(a), fieldWidth, fillChar);
++ }
++
++ QString QString::arg(QLatin1StringView a, int fieldWidth, QChar fillChar) const
++ {
++ return arg(QAnyStringView(a), fieldWidth, fillChar);
++ }
++
++ QString QtPrivate::argToQString(QStringView pattern, size_t n, const ArgBase **args)
++ {
++ return argToQString(QAnyStringView{pattern}, n, args);
++ }
++
++ QString QtPrivate::argToQString(QLatin1StringView pattern, size_t n, const ArgBase **args)
++ {
++ return argToQString(QAnyStringView{pattern}, n, args);
++ }
++
++
++ #include "quuid.h"
++
++ bool QUuid::isNull() const noexcept
++ {
++ return isNull(QT6_CALL_NEW_OVERLOAD);
++ }
++
++ QUuid::Variant QUuid::variant() const noexcept
++ {
++ return variant(QT6_CALL_NEW_OVERLOAD);
++ }
++
++ QUuid::Version QUuid::version() const noexcept
++ {
++ return version(QT6_CALL_NEW_OVERLOAD);
++ }
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 9)
++
++ #if QT_CORE_REMOVED_SINCE(6, 10)
++
++ #if QT_CONFIG(cborstreamwriter)
++ #include "qcborstreamwriter.h" // Q_WEAK_OVERLOAD added
++ #endif
++
++ #include "qcoreapplication.h"
++
++ #if QT_CONFIG(permissions)
++ void QCoreApplication::requestPermission(const QPermission &requestedPermission,
++ QtPrivate::QSlotObjectBase *slotObjRaw, const QObject *context)
++ {
++ return requestPermissionImpl(requestedPermission, slotObjRaw, context);
++ }
++ #endif
++
++ #include "qdir.h"
++
++ bool QDir::mkdir(const QString &dirName) const
++ {
++ return mkdir(dirName, std::nullopt);
++ }
++
++ bool QDir::mkdir(const QString &dirName, QFile::Permissions permissions) const
++ {
++ return mkdir(dirName, std::optional{permissions});
++ }
++
++ bool QDir::mkpath(const QString &dirPath) const
++ {
++ return mkpath(dirPath, std::nullopt);
++ }
++
++ #if QT_CONFIG(future)
++ #include "qfuture.h" // for ContinuationWrapper
++ #include "qfutureinterface.h"
++
++ void QtPrivate::watchContinuationImpl(const QObject *context,
++ QtPrivate::QSlotObjectBase *slotObj,
++ QFutureInterfaceBase &fi)
++ {
++ Q_ASSERT(context);
++ Q_ASSERT(slotObj);
++
++ auto slot = QtPrivate::SlotObjUniquePtr(slotObj);
++
++ // That is now a double-inderection, because the setContinuation() overload
++ // also uses QSlotObjectBase approach. But that's a solution for backwards
++ // compatibility, so should be fine.
++ // We pass a default-constructed QVariant() and an Unknown type, because
++ // that's effectively the same as passing a nullptr continuationData, and
++ // that's what the old code was doing.
++ fi.setContinuation(context, QtPrivate::ContinuationWrapper([slot = std::move(slot)]()
++ {
++ void *args[] = { nullptr }; // for `void` return value
++ slot->call(nullptr, args);
++ }), QVariant(), QFutureInterfaceBase::ContinuationType::Unknown);
++ }
++
++ void QFutureInterfaceBase::setContinuation(std::function<void(const QFutureInterfaceBase &)> func)
++ {
++ setContinuation(std::move(func), nullptr);
++ }
++
++ void QFutureInterfaceBase::setContinuation(std::function<void(const QFutureInterfaceBase &)> func,
++ QFutureInterfaceBasePrivate *continuationFutureData)
++ {
++ // Backwards compatibility - the continuation data was used for
++ // then-continuations
++ setContinuation(std::move(func), continuationFutureData, ContinuationType::Then);
++ }
++ #endif // QT_CONFIG(future)
++
++ #include "qlockfile.h" // inlined API
++
++ #include "qlogging.h"
++
++ QNoDebug QMessageLogger::noDebug() const noexcept
++ {
++ return QNoDebug();
++ }
++
++ #include "qmutex.h" // removed, previously-inline API
++
++ #include "qobject.h"
++
++ bool QObject::doSetProperty(const char *name, const QVariant *lvalue, QVariant *rvalue)
++ {
++ return doSetProperty(name, *lvalue, rvalue);
++ }
++
++ #include "qstring.h" // inlined API
++
++ #include "qvariant.h" // inlined API
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 10)
++
++ #if QT_CORE_REMOVED_SINCE(6, 11)
++
++ #include "qbytearray.h"
++
++ QByteArray QByteArray::percentDecoded(char percent) const
++ {
++ return fromPercentEncoding(*this, percent);
++ }
++
++ #if QT_CONFIG(thread)
++ // some of the previously inlined API became removed
++ #include "qreadwritelock.h"
++
++ void QReadWriteLock::lockForRead()
++ {
++ tryLockForRead(QDeadlineTimer(QDeadlineTimer::Forever));
++ }
++
++ bool QReadWriteLock::tryLockForRead(QDeadlineTimer timeout)
++ {
++ return QBasicReadWriteLock::tryLockForRead(timeout);
++ }
++
++ void QReadWriteLock::lockForWrite()
++ {
++ tryLockForWrite(QDeadlineTimer(QDeadlineTimer::Forever));
++ }
++
++ bool QReadWriteLock::tryLockForWrite(QDeadlineTimer timeout)
++ {
++ return QBasicReadWriteLock::tryLockForWrite(timeout);
++ }
++
++ void QReadWriteLock::unlock()
++ {
++ QBasicReadWriteLock::unlock();
++ }
++ #endif // QT_CONFIG(thread)
++
++ #include "qsavefile.h"
++
++ QSaveFile::QSaveFile(const QString &name)
++ : QSaveFile(name, nullptr)
++ {
++ }
++
++ #include "qtimer.h"
++
++ void QTimer::singleShotImpl(int msec, Qt::TimerType timerType,
++ const QObject *receiver, QtPrivate::QSlotObjectBase *slotObj)
++ {
++ singleShotImpl(std::chrono::milliseconds{msec}, timerType, receiver, slotObj);
++ }
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 11)
++
++ #if QT_CORE_REMOVED_SINCE(6, 12)
++
++ #include "qbytearrayalgorithms.h" // uses QT_CORE_CONSTEXPR_INLINE_SINCE
++
++ #include "qfile.h"
++
++ bool QFile::copy(const QString &newName)
++ {
++ return copy(newName, std::nullopt);
++ }
++
++ bool QFile::copy(const QString &fileName, const QString &newName)
++ {
++ return QFile(fileName).copy(newName, std::nullopt);
++ }
++
++ #include "qjsondocument.h" // uses QT_CORE_INLINE_SINCE
++ #include "qjsonvalue.h" // uses QT_CORE_INLINE_SINCE
++
++ #include "qobjectdefs.h" // uses QT_CORE_INLINE_SINCE
++
++ #include "qproperty.h"
++
++ QUntypedPropertyBinding::QUntypedPropertyBinding(QPropertyBindingPrivate *priv)
++ : QUntypedPropertyBinding(static_cast<void *>(priv))
++ {
++ }
++
++ #if QT_CONFIG(thread)
++ #include "qreadwritelock.h"
++
++ bool QBasicReadWriteLock::isContendedLockForRead(const void *dd)
++ {
++ return describeLockInternal(const_cast<void *>(dd)) & StateLockedForRead;
++ }
++
++ QReadWriteLockPrivate *QReadWriteLock::initRecursive()
++ {
++ return initRecursiveInline();
++ }
++
++ void QReadWriteLock::destroyRecursive(QReadWriteLockPrivate *d)
++ {
++ destroyRecursiveInline(d);
++ }
++ #endif
++
++ #if QT_CONFIG(timezone)
++ #include "qtimezone.h"
++
++ bool QTimeZone::isTimeZoneIdAvailable(const QByteArray &ianaId)
++ {
++ return isTimeZoneIdAvailable(QByteArrayView{ianaId});
++ }
++ #endif // QT_CONFIG(timezone)
++
++ #include "qurlquery.h" // uses QT_CORE_INLINE_SINCE
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 12)
++
++ #if QT_CORE_REMOVED_SINCE(6, 13)
++
++ #include "qbytearray.h" // uses QT_CORE_CONSTEXPR_DTOR_INLINE_SINCE
++ #include "qstring.h" // uses QT_CORE_CONSTEXPR_DTOR_INLINE_SINCE
++
++ // #include "qotherheader.h"
++ // // implement removed functions from qotherheader.h
++ // order sections alphabetically to reduce chances of merge conflicts
++
++ #endif // QT_CORE_REMOVED_SINCE(6, 13)