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 <thiago.macieira@intel.com>
This commit is contained in:
Lars Knoll 2019-11-14 11:40:46 +01:00
parent 20041afe3b
commit f8d2975b6a
5 changed files with 16 additions and 15 deletions

View File

@ -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();
}

View File

@ -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

View File

@ -4895,7 +4895,7 @@ QString QString::mid(int position, int n) const
case QContainerImplHelper::Empty:
{
QPair<Data *, ushort *> 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<uint> 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<Data *, ushort *> 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();

View File

@ -247,6 +247,8 @@ class Q_CORE_EXPORT QString
{
typedef QTypedArrayData<ushort> 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; }
};
//

View File

@ -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<QString &>(str).data_ptr();
QString::DataPointer strDataPtr = const_cast<QString &>(str).data_ptr();
// Skip if isStatic() or fromRawData(), as those offer no guarantees
if (strDataPtr.d->isStatic() || !strDataPtr.d->isMutable())