diff options
author | Fabian Kosmale <fabian.kosmale@qt.io> | 2022-02-08 20:39:31 +0100 |
---|---|---|
committer | Fabian Kosmale <fabian.kosmale@qt.io> | 2022-02-10 04:34:13 +0100 |
commit | ae7799a924c07f0f5de4e5c3321a87fe5bbafbb1 (patch) | |
tree | 28c08582b639bcbbd23ec110bdbeeef87903dff7 /src | |
parent | 2201934efa1b9889d474347e705784bf6925e120 (diff) |
qtextstream.h: streamline includes
[ChangeLog][Potentially Source-Incompatible Changes] The qtextstream
header no longer includes <QString>, <QStringEncoder> and
<QStringDecoder>. Code which relied on the implicit inclusion of those
classes might now need to include the headers explicitly.
Task-number: QTBUG-97601
Change-Id: Ifb8c8452026195a772c0588dbbbc53fb51cac548
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/corelib/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/corelib/serialization/qtextstream.h | 4 | ||||
-rw-r--r-- | src/corelib/serialization/qtextstream_p.h | 1 | ||||
-rw-r--r-- | src/corelib/text/qstringconverter.h | 142 | ||||
-rw-r--r-- | src/corelib/text/qstringconverter_base.h | 194 | ||||
-rw-r--r-- | src/network/socket/qlocalsocket_unix.cpp | 1 | ||||
-rw-r--r-- | src/widgets/widgets/qtextbrowser.cpp | 1 |
7 files changed, 208 insertions, 136 deletions
diff --git a/src/corelib/CMakeLists.txt b/src/corelib/CMakeLists.txt index be4bc7b2de..0c15c543f1 100644 --- a/src/corelib/CMakeLists.txt +++ b/src/corelib/CMakeLists.txt @@ -180,6 +180,7 @@ qt_internal_add_module(Core text/qstring.cpp text/qstring.h text/qstringalgorithms.h text/qstringalgorithms_p.h text/qstringbuilder.cpp text/qstringbuilder.h + text/qstringconverter_base.h text/qstringconverter.cpp text/qstringconverter.h text/qstringconverter_p.h text/qstringiterator_p.h text/qstringlist.cpp text/qstringlist.h diff --git a/src/corelib/serialization/qtextstream.h b/src/corelib/serialization/qtextstream.h index e69c6a67dc..33d5b57018 100644 --- a/src/corelib/serialization/qtextstream.h +++ b/src/corelib/serialization/qtextstream.h @@ -41,10 +41,9 @@ #define QTEXTSTREAM_H #include <QtCore/qiodevicebase.h> -#include <QtCore/qstring.h> #include <QtCore/qchar.h> #include <QtCore/qscopedpointer.h> -#include <QtCore/qstringconverter.h> +#include <QtCore/qstringconverter_base.h> #include <stdio.h> @@ -56,6 +55,7 @@ QT_BEGIN_NAMESPACE class QIODevice; class QLocale; +class QString; class QTextStreamPrivate; class Q_CORE_EXPORT QTextStream : public QIODeviceBase diff --git a/src/corelib/serialization/qtextstream_p.h b/src/corelib/serialization/qtextstream_p.h index 4a9f54ce1d..445a53703b 100644 --- a/src/corelib/serialization/qtextstream_p.h +++ b/src/corelib/serialization/qtextstream_p.h @@ -53,6 +53,7 @@ // #include <QtCore/private/qglobal_p.h> +#include <QtCore/qstringconverter.h> #include "qiodevice.h" #include "qlocale.h" #include "qtextstream.h" diff --git a/src/corelib/text/qstringconverter.h b/src/corelib/text/qstringconverter.h index 829b19d568..4d2138f143 100644 --- a/src/corelib/text/qstringconverter.h +++ b/src/corelib/text/qstringconverter.h @@ -37,16 +37,22 @@ ** ****************************************************************************/ +#if 0 +// keep existing syncqt header working after the move of the class +// into qstringconverter_base +#pragma qt_class(QStringConverter) +#pragma qt_class(QStringConverterBase) +#endif + #ifndef QSTRINGCONVERTER_H #define QSTRINGCONVERTER_H +#include <QtCore/qstringconverter_base.h> #include <QtCore/qstring.h> #if defined(QT_USE_FAST_OPERATOR_PLUS) || defined(QT_USE_QSTRINGBUILDER) #include <QtCore/qstringbuilder.h> #endif -#include <optional> - QT_BEGIN_NAMESPACE // work around a compiler bug in GCC 7 @@ -56,138 +62,6 @@ QT_BEGIN_NAMESPACE #define QSTRINGCONVERTER_CONSTEXPR constexpr #endif -class QStringConverterBase -{ -public: - enum class Flag { - Default = 0, - Stateless = 0x1, - ConvertInvalidToNull = 0x2, - WriteBom = 0x4, - ConvertInitialBom = 0x8 - }; - Q_DECLARE_FLAGS(Flags, Flag) - - struct State { - constexpr State(Flags f = Flag::Default) - : flags(f), state_data{0, 0, 0, 0} {} - ~State() { clear(); } - State(State &&other) - : flags(other.flags), - remainingChars(other.remainingChars), - invalidChars(other.invalidChars), - d{other.d[0], other.d[1]}, - clearFn(other.clearFn) - { other.clearFn = nullptr; } - State &operator=(State &&other) - { - clear(); - flags = other.flags; - remainingChars = other.remainingChars; - invalidChars = other.invalidChars; - d[0] = other.d[0]; - d[1] = other.d[1]; - clearFn = other.clearFn; - other.clearFn = nullptr; - return *this; - } - Q_CORE_EXPORT void clear(); - - Flags flags; - int internalState = 0; - qsizetype remainingChars = 0; - qsizetype invalidChars = 0; - - union { - uint state_data[4]; - void *d[2]; - }; - using ClearDataFn = void (*)(State *); - ClearDataFn clearFn = nullptr; - private: - Q_DISABLE_COPY(State) - }; -}; -Q_DECLARE_OPERATORS_FOR_FLAGS(QStringConverterBase::Flags) - -class QStringConverter : public QStringConverterBase -{ -public: - - enum Encoding { - Utf8, - Utf16, - Utf16LE, - Utf16BE, - Utf32, - Utf32LE, - Utf32BE, - Latin1, - System, - LastEncoding = System - }; -#ifdef Q_QDOC - // document the flags here - enum class Flag { - Default = 0, - Stateless = 0x1, - ConvertInvalidToNull = 0x2, - WriteBom = 0x4, - ConvertInitialBom = 0x8 - }; - Q_DECLARE_FLAGS(Flags, Flag) -#endif - -protected: - - struct Interface - { - using DecoderFn = QChar * (*)(QChar *out, QByteArrayView in, State *state); - using LengthFn = qsizetype (*)(qsizetype inLength); - using EncoderFn = char * (*)(char *out, QStringView in, State *state); - const char *name = nullptr; - DecoderFn toUtf16 = nullptr; - LengthFn toUtf16Len = nullptr; - EncoderFn fromUtf16 = nullptr; - LengthFn fromUtf16Len = nullptr; - }; - - QSTRINGCONVERTER_CONSTEXPR QStringConverter() - : iface(nullptr) - {} - QSTRINGCONVERTER_CONSTEXPR QStringConverter(Encoding encoding, Flags f) - : iface(&encodingInterfaces[int(encoding)]), state(f) - {} - QSTRINGCONVERTER_CONSTEXPR QStringConverter(const Interface *i) - : iface(i) - {} - Q_CORE_EXPORT QStringConverter(const char *name, Flags f); - - -public: - bool isValid() const { return iface != nullptr; } - - void resetState() - { - state.clear(); - } - bool hasError() const { return state.invalidChars != 0; } - - const char *name() const - { return isValid() ? iface->name : nullptr; } - - Q_CORE_EXPORT static std::optional<Encoding> encodingForName(const char *name); - Q_CORE_EXPORT static const char *nameForEncoding(Encoding e); - Q_CORE_EXPORT static std::optional<Encoding> encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0); - Q_CORE_EXPORT static std::optional<Encoding> encodingForHtml(QByteArrayView data); - -protected: - const Interface *iface; - State state; -private: - Q_CORE_EXPORT static const Interface encodingInterfaces[Encoding::LastEncoding + 1]; -}; - class QStringEncoder : public QStringConverter { protected: diff --git a/src/corelib/text/qstringconverter_base.h b/src/corelib/text/qstringconverter_base.h new file mode 100644 index 0000000000..ac147892ee --- /dev/null +++ b/src/corelib/text/qstringconverter_base.h @@ -0,0 +1,194 @@ +/**************************************************************************** +** +** Copyright (C) 2022 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSTRINGCONVERTER_BASE_H +#define QSTRINGCONVERTER_BASE_H + +#if 0 +// QStringConverter(Base) class are handled in qstringconverter +#pragma qt_sync_stop_processing +#endif + +#include <optional> + +#include <QtCore/qglobal.h> // QT_{BEGIN,END}_NAMESPACE +#include <QtCore/qflags.h> // Q_DECLARE_FLAGS + +QT_BEGIN_NAMESPACE + +class QByteArrayView; +class QChar; +class QByteArrayView; +class QStringView; + +class QStringConverterBase +{ +public: + enum class Flag { + Default = 0, + Stateless = 0x1, + ConvertInvalidToNull = 0x2, + WriteBom = 0x4, + ConvertInitialBom = 0x8 + }; + Q_DECLARE_FLAGS(Flags, Flag) + + struct State { + constexpr State(Flags f = Flag::Default) + : flags(f), state_data{0, 0, 0, 0} {} + ~State() { clear(); } + State(State &&other) + : flags(other.flags), + remainingChars(other.remainingChars), + invalidChars(other.invalidChars), + d{other.d[0], other.d[1]}, + clearFn(other.clearFn) + { other.clearFn = nullptr; } + State &operator=(State &&other) + { + clear(); + flags = other.flags; + remainingChars = other.remainingChars; + invalidChars = other.invalidChars; + d[0] = other.d[0]; + d[1] = other.d[1]; + clearFn = other.clearFn; + other.clearFn = nullptr; + return *this; + } + Q_CORE_EXPORT void clear(); + + Flags flags; + int internalState = 0; + qsizetype remainingChars = 0; + qsizetype invalidChars = 0; + + union { + uint state_data[4]; + void *d[2]; + }; + using ClearDataFn = void (*)(State *); + ClearDataFn clearFn = nullptr; + private: + Q_DISABLE_COPY(State) + }; +}; +Q_DECLARE_OPERATORS_FOR_FLAGS(QStringConverterBase::Flags) + +class QStringConverter : public QStringConverterBase +{ +public: + + enum Encoding { + Utf8, + Utf16, + Utf16LE, + Utf16BE, + Utf32, + Utf32LE, + Utf32BE, + Latin1, + System, + LastEncoding = System + }; +#ifdef Q_QDOC + // document the flags here + enum class Flag { + Default = 0, + Stateless = 0x1, + ConvertInvalidToNull = 0x2, + WriteBom = 0x4, + ConvertInitialBom = 0x8 + }; + Q_DECLARE_FLAGS(Flags, Flag) +#endif + +protected: + + struct Interface + { + using DecoderFn = QChar * (*)(QChar *out, QByteArrayView in, State *state); + using LengthFn = qsizetype (*)(qsizetype inLength); + using EncoderFn = char * (*)(char *out, QStringView in, State *state); + const char *name = nullptr; + DecoderFn toUtf16 = nullptr; + LengthFn toUtf16Len = nullptr; + EncoderFn fromUtf16 = nullptr; + LengthFn fromUtf16Len = nullptr; + }; + + constexpr QStringConverter() + : iface(nullptr) + {} + constexpr QStringConverter(Encoding encoding, Flags f) + : iface(&encodingInterfaces[int(encoding)]), state(f) + {} + constexpr QStringConverter(const Interface *i) + : iface(i) + {} + Q_CORE_EXPORT QStringConverter(const char *name, Flags f); + + +public: + bool isValid() const { return iface != nullptr; } + + void resetState() + { + state.clear(); + } + bool hasError() const { return state.invalidChars != 0; } + + const char *name() const + { return isValid() ? iface->name : nullptr; } + + Q_CORE_EXPORT static std::optional<Encoding> encodingForName(const char *name); + Q_CORE_EXPORT static const char *nameForEncoding(Encoding e); + Q_CORE_EXPORT static std::optional<Encoding> encodingForData(QByteArrayView data, char16_t expectedFirstCharacter = 0); + Q_CORE_EXPORT static std::optional<Encoding> encodingForHtml(QByteArrayView data); + +protected: + const Interface *iface; + State state; +private: + Q_CORE_EXPORT static const Interface encodingInterfaces[Encoding::LastEncoding + 1]; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/network/socket/qlocalsocket_unix.cpp b/src/network/socket/qlocalsocket_unix.cpp index 21f4f92d15..b31d27a5aa 100644 --- a/src/network/socket/qlocalsocket_unix.cpp +++ b/src/network/socket/qlocalsocket_unix.cpp @@ -51,6 +51,7 @@ #include <qdir.h> #include <qdebug.h> #include <qelapsedtimer.h> +#include <qstringconverter.h> #ifdef Q_OS_VXWORKS # include <selectLib.h> diff --git a/src/widgets/widgets/qtextbrowser.cpp b/src/widgets/widgets/qtextbrowser.cpp index 13c21146eb..9ab1635e1d 100644 --- a/src/widgets/widgets/qtextbrowser.cpp +++ b/src/widgets/widgets/qtextbrowser.cpp @@ -54,6 +54,7 @@ #endif #include <qtextobject.h> #include <qdesktopservices.h> +#include <qstringconverter.h> QT_BEGIN_NAMESPACE |