diff options
Diffstat (limited to 'src/corelib/codecs')
-rw-r--r-- | src/corelib/codecs/qiconvcodec.cpp | 4 | ||||
-rw-r--r-- | src/corelib/codecs/qicucodec_p.h | 10 | ||||
-rw-r--r-- | src/corelib/codecs/qisciicodec_p.h | 8 | ||||
-rw-r--r-- | src/corelib/codecs/qlatincodec_p.h | 20 | ||||
-rw-r--r-- | src/corelib/codecs/qtextcodec.cpp | 53 | ||||
-rw-r--r-- | src/corelib/codecs/qtextcodec.h | 19 | ||||
-rw-r--r-- | src/corelib/codecs/qtsciicodec_p.h | 8 | ||||
-rw-r--r-- | src/corelib/codecs/qutfcodec.cpp | 163 | ||||
-rw-r--r-- | src/corelib/codecs/qutfcodec_p.h | 59 |
9 files changed, 283 insertions, 61 deletions
diff --git a/src/corelib/codecs/qiconvcodec.cpp b/src/corelib/codecs/qiconvcodec.cpp index d6362b6fbc..330eb7c038 100644 --- a/src/corelib/codecs/qiconvcodec.cpp +++ b/src/corelib/codecs/qiconvcodec.cpp @@ -53,7 +53,7 @@ QT_REQUIRE_CONFIG(iconv); // unistd.h is needed for the _XOPEN_UNIX macro #include <unistd.h> -#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF) +#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX) # include <langinfo.h> #endif @@ -447,7 +447,7 @@ iconv_t QIconvCodec::createIconv_t(const char *to, const char *from) const char *codeset = 0; #endif -#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF) +#if defined(_XOPEN_UNIX) && !defined(Q_OS_QNX) if (cd == (iconv_t) -1) { codeset = nl_langinfo(CODESET); if (codeset) diff --git a/src/corelib/codecs/qicucodec_p.h b/src/corelib/codecs/qicucodec_p.h index 3a373ce5b3..0c2dbe17d6 100644 --- a/src/corelib/codecs/qicucodec_p.h +++ b/src/corelib/codecs/qicucodec_p.h @@ -74,12 +74,12 @@ public: static QTextCodec *codecForNameUnlocked(const char *name); static QTextCodec *codecForMibUnlocked(int mib); - QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE; - QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE; + QString convertToUnicode(const char *, int, ConverterState *) const override; + QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override; - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; private: QIcuCodec(const char *name); diff --git a/src/corelib/codecs/qisciicodec_p.h b/src/corelib/codecs/qisciicodec_p.h index f92c0091ce..f818e7d83e 100644 --- a/src/corelib/codecs/qisciicodec_p.h +++ b/src/corelib/codecs/qisciicodec_p.h @@ -65,11 +65,11 @@ public: static QTextCodec *create(const char *name); - QByteArray name() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + int mibEnum() const override; - QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE; - QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE; + QString convertToUnicode(const char *, int, ConverterState *) const override; + QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override; private: int idx; diff --git a/src/corelib/codecs/qlatincodec_p.h b/src/corelib/codecs/qlatincodec_p.h index 1042c3b80d..3e258e5ae1 100644 --- a/src/corelib/codecs/qlatincodec_p.h +++ b/src/corelib/codecs/qlatincodec_p.h @@ -63,12 +63,12 @@ class QLatin1Codec : public QTextCodec public: ~QLatin1Codec(); - QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE; - QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE; + QString convertToUnicode(const char *, int, ConverterState *) const override; + QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override; - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; }; @@ -78,12 +78,12 @@ class QLatin15Codec: public QTextCodec public: ~QLatin15Codec(); - QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE; - QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE; + QString convertToUnicode(const char *, int, ConverterState *) const override; + QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override; - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; }; #endif // QT_NO_TEXTCODEC diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp index aed3532024..1541c498e6 100644 --- a/src/corelib/codecs/qtextcodec.cpp +++ b/src/corelib/codecs/qtextcodec.cpp @@ -43,6 +43,7 @@ #ifndef QT_NO_TEXTCODEC +#include "qbytearraymatcher.h" #include "qlist.h" #include "qfile.h" #include "qstringlist.h" @@ -87,7 +88,7 @@ #include <stdlib.h> #include <ctype.h> #include <locale.h> -#if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_OSF) && !defined(Q_OS_ANDROID) +#if defined (_XOPEN_UNIX) && !defined(Q_OS_QNX) && !defined(Q_OS_ANDROID) # include <langinfo.h> #endif @@ -179,7 +180,7 @@ static QTextCodec *setupLocaleMapper() // This is because the builtin utf8 codec is around 5 times faster // then the using QIconvCodec -#if defined (_XOPEN_UNIX) && !defined(Q_OS_OSF) +#if defined (_XOPEN_UNIX) char *charset = nl_langinfo(CODESET); if (charset) locale = QTextCodec::codecForName(charset); @@ -803,6 +804,7 @@ QTextEncoder* QTextCodec::makeEncoder(QTextCodec::ConversionFlags flags) const The \a state of the convertor used is updated. */ +#if QT_STRINGVIEW_LEVEL < 2 /*! Converts \a str from Unicode to the encoding of this codec, and returns the result in a QByteArray. @@ -811,6 +813,19 @@ QByteArray QTextCodec::fromUnicode(const QString& str) const { return convertFromUnicode(str.constData(), str.length(), 0); } +#endif + +/*! + \overload + \since 5.10 + + Converts \a str from Unicode to the encoding of this codec, and + returns the result in a QByteArray. +*/ +QByteArray QTextCodec::fromUnicode(QStringView str) const +{ + return convertFromUnicode(str.data(), str.length(), nullptr); +} /*! \fn QString QTextCodec::toUnicode(const char *input, int size, @@ -844,6 +859,7 @@ bool QTextCodec::canEncode(QChar ch) const return (state.invalidChars == 0); } +#if QT_STRINGVIEW_LEVEL < 2 /*! \overload @@ -856,7 +872,22 @@ bool QTextCodec::canEncode(const QString& s) const convertFromUnicode(s.constData(), s.length(), &state); return (state.invalidChars == 0); } +#endif + +/*! + \overload + \since 5.10 + Returns \c true if the Unicode string \a s can be fully encoded + with this codec; otherwise returns \c false. +*/ +bool QTextCodec::canEncode(QStringView s) const +{ + ConverterState state; + state.flags = ConvertInvalidToNull; + convertFromUnicode(s.data(), s.length(), &state); + return !state.invalidChars; +} /*! \overload @@ -921,6 +952,7 @@ bool QTextEncoder::hasFailure() const return state.invalidChars != 0; } +#if QT_STRINGVIEW_LEVEL < 2 /*! Converts the Unicode string \a str into an encoded QByteArray. */ @@ -929,6 +961,17 @@ QByteArray QTextEncoder::fromUnicode(const QString& str) QByteArray result = c->fromUnicode(str.constData(), str.length(), &state); return result; } +#endif + +/*! + \overload + \since 5.10 + Converts the Unicode string \a str into an encoded QByteArray. +*/ +QByteArray QTextEncoder::fromUnicode(QStringView str) +{ + return c->fromUnicode(str.data(), str.length(), &state); +} /*! \overload @@ -1050,10 +1093,12 @@ QTextCodec *QTextCodec::codecForHtml(const QByteArray &ba, QTextCodec *defaultCo // determine charset QTextCodec *c = QTextCodec::codecForUtfText(ba, 0); if (!c) { + static Q_RELAXED_CONSTEXPR auto matcher = qMakeStaticByteArrayMatcher("meta "); QByteArray header = ba.left(1024).toLower(); - int pos = header.indexOf("meta "); + int pos = matcher.indexIn(header); if (pos != -1) { - pos = header.indexOf("charset=", pos); + static Q_RELAXED_CONSTEXPR auto matcher = qMakeStaticByteArrayMatcher("charset="); + pos = matcher.indexIn(header, pos); if (pos != -1) { pos += qstrlen("charset="); diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h index 47b2fe6eed..8153bebac8 100644 --- a/src/corelib/codecs/qtextcodec.h +++ b/src/corelib/codecs/qtextcodec.h @@ -79,11 +79,17 @@ public: static QTextCodec *codecForUtfText(const QByteArray &ba, QTextCodec *defaultCodec); bool canEncode(QChar) const; +#if QT_STRINGVIEW_LEVEL < 2 bool canEncode(const QString&) const; +#endif + bool canEncode(QStringView) const; QString toUnicode(const QByteArray&) const; QString toUnicode(const char* chars) const; +#if QT_STRINGVIEW_LEVEL < 2 QByteArray fromUnicode(const QString& uc) const; +#endif + QByteArray fromUnicode(QStringView uc) const; enum ConversionFlag { DefaultConversion, ConvertInvalidToNull = 0x80000000, @@ -94,7 +100,7 @@ public: struct Q_CORE_EXPORT ConverterState { ConverterState(ConversionFlags f = DefaultConversion) - : flags(f), remainingChars(0), invalidChars(0), d(Q_NULLPTR) { state_data[0] = state_data[1] = state_data[2] = 0; } + : flags(f), remainingChars(0), invalidChars(0), d(nullptr) { state_data[0] = state_data[1] = state_data[2] = 0; } ~ConverterState(); ConversionFlags flags; int remainingChars; @@ -105,9 +111,9 @@ public: Q_DISABLE_COPY(ConverterState) }; - QString toUnicode(const char *in, int length, ConverterState *state = Q_NULLPTR) const + QString toUnicode(const char *in, int length, ConverterState *state = nullptr) const { return convertToUnicode(in, length, state); } - QByteArray fromUnicode(const QChar *in, int length, ConverterState *state = Q_NULLPTR) const + QByteArray fromUnicode(const QChar *in, int length, ConverterState *state = nullptr) const { return convertFromUnicode(in, length, state); } QTextDecoder* makeDecoder(ConversionFlags flags = DefaultConversion) const; @@ -133,9 +139,12 @@ class Q_CORE_EXPORT QTextEncoder { Q_DISABLE_COPY(QTextEncoder) public: explicit QTextEncoder(const QTextCodec *codec) : c(codec), state() {} - QTextEncoder(const QTextCodec *codec, QTextCodec::ConversionFlags flags); + explicit QTextEncoder(const QTextCodec *codec, QTextCodec::ConversionFlags flags); ~QTextEncoder(); +#if QT_STRINGVIEW_LEVEL < 2 QByteArray fromUnicode(const QString& str); +#endif + QByteArray fromUnicode(QStringView str); QByteArray fromUnicode(const QChar *uc, int len); bool hasFailure() const; private: @@ -147,7 +156,7 @@ class Q_CORE_EXPORT QTextDecoder { Q_DISABLE_COPY(QTextDecoder) public: explicit QTextDecoder(const QTextCodec *codec) : c(codec), state() {} - QTextDecoder(const QTextCodec *codec, QTextCodec::ConversionFlags flags); + explicit QTextDecoder(const QTextCodec *codec, QTextCodec::ConversionFlags flags); ~QTextDecoder(); QString toUnicode(const char* chars, int len); QString toUnicode(const QByteArray &ba); diff --git a/src/corelib/codecs/qtsciicodec_p.h b/src/corelib/codecs/qtsciicodec_p.h index 68ab01f7b5..78f9350a19 100644 --- a/src/corelib/codecs/qtsciicodec_p.h +++ b/src/corelib/codecs/qtsciicodec_p.h @@ -91,11 +91,11 @@ class QTsciiCodec : public QTextCodec { public: ~QTsciiCodec(); - QByteArray name() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + int mibEnum() const override; - QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE; - QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE; + QString convertToUnicode(const char *, int, ConverterState *) const override; + QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override; }; #endif // QT_NO_CODECS diff --git a/src/corelib/codecs/qutfcodec.cpp b/src/corelib/codecs/qutfcodec.cpp index 74a716db4a..ce1b092a54 100644 --- a/src/corelib/codecs/qutfcodec.cpp +++ b/src/corelib/codecs/qutfcodec.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. -** Copyright (C) 2016 Intel Corporation. +** Copyright (C) 2018 Intel Corporation. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. @@ -152,6 +152,44 @@ static inline bool simdDecodeAscii(ushort *&dst, const uchar *&nextAscii, const } return src == end; } + +static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end, const uchar *&nextAscii) +{ + // do sixteen characters at a time + for ( ; end - src >= 16; src += 16) { + __m128i data = _mm_loadu_si128(reinterpret_cast<const __m128i*>(src)); + + // check if everything is ASCII + // movemask extracts the high bit of every byte, so n is non-zero if something isn't ASCII + uint n = _mm_movemask_epi8(data); + if (!n) + continue; + + // find the next probable ASCII character + // we don't want to load 16 bytes again in this loop if we know there are non-ASCII + // characters still coming + nextAscii = src + qBitScanReverse(n) + 1; + + // return the non-ASCII character + return src + qCountTrailingZeroBits(n); + } + + // do four characters at a time + for ( ; end - src >= 4; src += 4) { + quint32 data = qFromUnaligned<quint32>(src); + data &= 0x80808080U; + if (!data) + continue; + + // We don't try to guess which of the three bytes is ASCII and which + // one isn't. The chance that at least two of them are non-ASCII is + // better than 75%. + nextAscii = src; + return src; + } + nextAscii = end; + return src; +} #elif defined(__ARM_NEON__) && defined(Q_PROCESSOR_ARM_64) // vaddv is only available on Aarch64 static inline bool simdEncodeAscii(uchar *&dst, const ushort *&nextAscii, const ushort *&src, const ushort *end) { @@ -220,6 +258,34 @@ static inline bool simdDecodeAscii(ushort *&dst, const uchar *&nextAscii, const } return src == end; } + +static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end, const uchar *&nextAscii) +{ + // The SIMD code below is untested, so just force an early return until + // we've had the time to verify it works. + nextAscii = end; + return src; + + // do eight characters at a time + uint8x8_t msb_mask = vdup_n_u8(0x80); + uint8x8_t add_mask = { 1, 1 << 1, 1 << 2, 1 << 3, 1 << 4, 1 << 5, 1 << 6, 1 << 7 }; + for ( ; end - src >= 8; src += 8) { + uint8x8_t c = vld1_u8(src); + uint8_t n = vaddv_u8(vand_u8(vcge_u8(c, msb_mask), add_mask)); + if (!n) + continue; + + // find the next probable ASCII character + // we don't want to load 16 bytes again in this loop if we know there are non-ASCII + // characters still coming + nextAscii = src + qBitScanReverse(n) + 1; + + // return the non-ASCII character + return src + qCountTrailingZeroBits(n); + } + nextAscii = end; + return src; +} #else static inline bool simdEncodeAscii(uchar *, const ushort *, const ushort *, const ushort *) { @@ -230,6 +296,12 @@ static inline bool simdDecodeAscii(ushort *, const uchar *, const uchar *, const { return false; } + +static inline const uchar *simdFindNonAscii(const uchar *src, const uchar *end, const uchar *&nextAscii) +{ + nextAscii = end; + return src; +} #endif QByteArray QUtf8::convertFromUnicode(const QChar *uc, int len) @@ -518,6 +590,95 @@ QString QUtf8::convertToUnicode(const char *chars, int len, QTextCodec::Converte return result; } +struct QUtf8NoOutputTraits : public QUtf8BaseTraitsNoAscii +{ + struct NoOutput {}; + static void appendUtf16(const NoOutput &, ushort) {} + static void appendUcs4(const NoOutput &, uint) {} +}; + +QUtf8::ValidUtf8Result QUtf8::isValidUtf8(const char *chars, qsizetype len) +{ + const uchar *src = reinterpret_cast<const uchar *>(chars); + const uchar *end = src + len; + const uchar *nextAscii = src; + bool isValidAscii = true; + + while (src < end) { + if (src >= nextAscii) + src = simdFindNonAscii(src, end, nextAscii); + if (src == end) + break; + + do { + uchar b = *src++; + if ((b & 0x80) == 0) + continue; + + isValidAscii = false; + QUtf8NoOutputTraits::NoOutput output; + int res = QUtf8Functions::fromUtf8<QUtf8NoOutputTraits>(b, output, src, end); + if (res < 0) { + // decoding error + return { false, false }; + } + } while (src < nextAscii); + } + + return { true, isValidAscii }; +} + +int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, const QChar *utf16, int u16len) +{ + uint uc1, uc2; + auto src1 = reinterpret_cast<const uchar *>(utf8); + auto end1 = src1 + u8len; + QStringIterator src2(utf16, utf16 + u16len); + + while (src1 < end1 && src2.hasNext()) { + uchar b = *src1++; + uint *output = &uc1; + int res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1); + if (res < 0) { + // decoding error + uc1 = QChar::ReplacementCharacter; + } + + uc2 = src2.next(); + if (uc1 != uc2) + return int(uc1) - int(uc2); + } + + // the shorter string sorts first + return (end1 > src1) - int(src2.hasNext()); +} + +int QUtf8::compareUtf8(const char *utf8, qsizetype u8len, QLatin1String s) +{ + uint uc1; + auto src1 = reinterpret_cast<const uchar *>(utf8); + auto end1 = src1 + u8len; + auto src2 = reinterpret_cast<const uchar *>(s.latin1()); + auto end2 = src2 + s.size(); + + while (src1 < end1 && src2 < end2) { + uchar b = *src1++; + uint *output = &uc1; + int res = QUtf8Functions::fromUtf8<QUtf8BaseTraits>(b, output, src1, end1); + if (res < 0) { + // decoding error + uc1 = QChar::ReplacementCharacter; + } + + uint uc2 = *src2++; + if (uc1 != uc2) + return int(uc1) - int(uc2); + } + + // the shorter string sorts first + return (end1 > src1) - (end2 > src2); +} + QByteArray QUtf16::convertFromUnicode(const QChar *uc, int len, QTextCodec::ConverterState *state, DataEndianness e) { DataEndianness endian = e; diff --git a/src/corelib/codecs/qutfcodec_p.h b/src/corelib/codecs/qutfcodec_p.h index 152fe174c4..659a229dae 100644 --- a/src/corelib/codecs/qutfcodec_p.h +++ b/src/corelib/codecs/qutfcodec_p.h @@ -290,6 +290,13 @@ struct QUtf8 static QString convertToUnicode(const char *, int, QTextCodec::ConverterState *); static QByteArray convertFromUnicode(const QChar *, int); static QByteArray convertFromUnicode(const QChar *, int, QTextCodec::ConverterState *); + struct ValidUtf8Result { + bool isValidUtf8; + bool isValidAscii; + }; + static ValidUtf8Result isValidUtf8(const char *, qsizetype); + static int compareUtf8(const char *, qsizetype, const QChar *, int); + static int compareUtf8(const char *, qsizetype, QLatin1String s); }; struct QUtf16 @@ -310,11 +317,11 @@ class QUtf8Codec : public QTextCodec { public: ~QUtf8Codec(); - QByteArray name() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + int mibEnum() const override; - QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE; - QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE; + QString convertToUnicode(const char *, int, ConverterState *) const override; + QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override; void convertToUnicode(QString *target, const char *, int, ConverterState *) const; }; @@ -324,12 +331,12 @@ public: QUtf16Codec() { e = DetectEndianness; } ~QUtf16Codec(); - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; - QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE; - QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE; + QString convertToUnicode(const char *, int, ConverterState *) const override; + QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override; protected: DataEndianness e; @@ -338,17 +345,17 @@ protected: class QUtf16BECodec : public QUtf16Codec { public: QUtf16BECodec() : QUtf16Codec() { e = BigEndianness; } - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; }; class QUtf16LECodec : public QUtf16Codec { public: QUtf16LECodec() : QUtf16Codec() { e = LittleEndianness; } - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; }; class QUtf32Codec : public QTextCodec { @@ -356,12 +363,12 @@ public: QUtf32Codec() { e = DetectEndianness; } ~QUtf32Codec(); - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; - QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE; - QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE; + QString convertToUnicode(const char *, int, ConverterState *) const override; + QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const override; protected: DataEndianness e; @@ -370,17 +377,17 @@ protected: class QUtf32BECodec : public QUtf32Codec { public: QUtf32BECodec() : QUtf32Codec() { e = BigEndianness; } - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; }; class QUtf32LECodec : public QUtf32Codec { public: QUtf32LECodec() : QUtf32Codec() { e = LittleEndianness; } - QByteArray name() const Q_DECL_OVERRIDE; - QList<QByteArray> aliases() const Q_DECL_OVERRIDE; - int mibEnum() const Q_DECL_OVERRIDE; + QByteArray name() const override; + QList<QByteArray> aliases() const override; + int mibEnum() const override; }; |