From f8d2975b6a8b36bf8dd304c99783947a72081b79 Mon Sep 17 00:00:00 2001 From: Lars Knoll Date: Thu, 14 Nov 2019 11:40:46 +0100 Subject: Use QString::DataPointer instead of QStringPrivate Preparations to move QString over to use QArrayDataPointer instead of it's own private struct. Change-Id: I7796a595393394083f6a85863e3c710ebbdea149 Reviewed-by: Thiago Macieira --- src/corelib/serialization/qbinaryjsonvalue.cpp | 2 +- src/corelib/serialization/qbinaryjsonvalue_p.h | 2 +- src/corelib/text/qstring.cpp | 12 ++++++------ src/corelib/text/qstring.h | 13 +++++++------ tests/auto/corelib/text/qstring/tst_qstring.cpp | 2 +- 5 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/corelib/serialization/qbinaryjsonvalue.cpp b/src/corelib/serialization/qbinaryjsonvalue.cpp index 92a8fd7ec5..b24bd0fc89 100644 --- a/src/corelib/serialization/qbinaryjsonvalue.cpp +++ b/src/corelib/serialization/qbinaryjsonvalue.cpp @@ -82,7 +82,7 @@ QBinaryJsonValue::QBinaryJsonValue(QBinaryJsonPrivate::MutableData *data, QBinaryJsonValue::QBinaryJsonValue(QString string) : d(nullptr), t(QJsonValue::String) { - stringData = *(QStringPrivate *)(&string); + stringData = string.data_ptr(); stringData.d->ref(); } diff --git a/src/corelib/serialization/qbinaryjsonvalue_p.h b/src/corelib/serialization/qbinaryjsonvalue_p.h index f2ca1a8094..4b39b05316 100644 --- a/src/corelib/serialization/qbinaryjsonvalue_p.h +++ b/src/corelib/serialization/qbinaryjsonvalue_p.h @@ -121,7 +121,7 @@ private: quint64 ui; bool b; double dbl; - QStringPrivate stringData; + QString::DataPointer stringData; const QBinaryJsonPrivate::Base *base; }; QBinaryJsonPrivate::MutableData *d = nullptr; // needed for Objects and Arrays diff --git a/src/corelib/text/qstring.cpp b/src/corelib/text/qstring.cpp index d394b8aebc..0f313e21ed 100644 --- a/src/corelib/text/qstring.cpp +++ b/src/corelib/text/qstring.cpp @@ -4895,7 +4895,7 @@ QString QString::mid(int position, int n) const case QContainerImplHelper::Empty: { QPair pair = Data::allocate(0); - QStringPrivate empty = { pair.first, pair.second, 0 }; + DataPointer empty = { pair.first, pair.second, 0 }; return QString(empty); } case QContainerImplHelper::Full: @@ -5345,9 +5345,9 @@ QVector QtPrivate::convertToUcs4(QStringView string) return qt_convert_to_ucs4(string); } -QStringPrivate QString::fromLatin1_helper(const char *str, int size) +QString::DataPointer QString::fromLatin1_helper(const char *str, int size) { - QStringPrivate d; + DataPointer d; if (!str) { d.d = Data::sharedNull(); d.b = Data::sharedNullData(); @@ -5373,7 +5373,7 @@ QStringPrivate QString::fromLatin1_helper(const char *str, int size) return d; } -QStringPrivate QString::fromAscii_helper(const char *str, int size) +QString::DataPointer QString::fromAscii_helper(const char *str, int size) { QString s = fromUtf8(str, size); s.d.d->ref(); @@ -5423,7 +5423,7 @@ QString QString::fromLocal8Bit_helper(const char *str, int size) return QString(); if (size == 0 || (!*str && size < 0)) { QPair pair = Data::allocate(0); - QStringPrivate empty = { pair.first, pair.second, 0 }; + QString::DataPointer empty = { pair.first, pair.second, 0 }; return QString(empty); } #if QT_CONFIG(textcodec) @@ -9098,7 +9098,7 @@ bool QString::isRightToLeft() const */ QString QString::fromRawData(const QChar *unicode, int size) { - QStringPrivate x; + QString::DataPointer x; x.size = size; if (!unicode) { x.d = Data::sharedNull(); diff --git a/src/corelib/text/qstring.h b/src/corelib/text/qstring.h index 3048c7a8cc..27dc99b2e5 100644 --- a/src/corelib/text/qstring.h +++ b/src/corelib/text/qstring.h @@ -247,6 +247,8 @@ class Q_CORE_EXPORT QString { typedef QTypedArrayData Data; public: + typedef QStringPrivate DataPointer; + inline QString() noexcept; explicit QString(const QChar *unicode, int size = -1); QString(QChar c); @@ -916,7 +918,7 @@ public: bool isRightToLeft() const; QString(int size, Qt::Initialization); - explicit QString(QStringPrivate dd) : d(dd) {} + explicit QString(DataPointer dd) : d(dd) {} private: #if defined(QT_NO_CAST_FROM_ASCII) @@ -928,7 +930,7 @@ private: QString &operator=(const QByteArray &a); #endif - QStringPrivate d; + DataPointer d; friend inline bool operator==(QChar, const QString &) noexcept; friend inline bool operator< (QChar, const QString &) noexcept; @@ -966,8 +968,8 @@ private: static QString trimmed_helper(QString &str); static QString simplified_helper(const QString &str); static QString simplified_helper(QString &str); - static QStringPrivate fromLatin1_helper(const char *str, int size = -1); - static QStringPrivate fromAscii_helper(const char *str, int size = -1); + static DataPointer fromLatin1_helper(const char *str, int size = -1); + static DataPointer fromAscii_helper(const char *str, int size = -1); static QString fromUtf8_helper(const char *str, int size); static QString fromLocal8Bit_helper(const char *, int size); static QByteArray toLatin1_helper(const QString &); @@ -1002,8 +1004,7 @@ private: } public: - typedef QStringPrivate DataPtr; - inline DataPtr &data_ptr() { return d; } + inline DataPointer &data_ptr() { return d; } }; // diff --git a/tests/auto/corelib/text/qstring/tst_qstring.cpp b/tests/auto/corelib/text/qstring/tst_qstring.cpp index 4f3ebe869d..d88f93b25a 100644 --- a/tests/auto/corelib/text/qstring/tst_qstring.cpp +++ b/tests/auto/corelib/text/qstring/tst_qstring.cpp @@ -605,7 +605,7 @@ QString verifyZeroTermination(const QString &str) { // This test does some evil stuff, it's all supposed to work. - QString::DataPtr strDataPtr = const_cast(str).data_ptr(); + QString::DataPointer strDataPtr = const_cast(str).data_ptr(); // Skip if isStatic() or fromRawData(), as those offer no guarantees if (strDataPtr.d->isStatic() || !strDataPtr.d->isMutable()) -- cgit v1.2.3