forked from qt-creator/qt-creator
Utils: Improve string conversion for Qt6
Skip the creation auf a QByteArray. Use QStringEncoder instead. Change-Id: I3d2297b1fef27acb2136a64587c5af9099d92aa6 Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
This commit is contained in:
@@ -34,6 +34,9 @@
|
||||
|
||||
#include <QByteArray>
|
||||
#include <QString>
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
#include <QStringEncoder>
|
||||
#endif
|
||||
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
@@ -135,6 +138,10 @@ public:
|
||||
: BasicSmallString(BasicSmallString::fromQString(qString))
|
||||
{}
|
||||
|
||||
BasicSmallString(const QStringView qStringView)
|
||||
: BasicSmallString(BasicSmallString::fromQStringView(qStringView))
|
||||
{}
|
||||
|
||||
BasicSmallString(const QByteArray &qByteArray)
|
||||
: BasicSmallString(qByteArray.constData(), qByteArray.size())
|
||||
{}
|
||||
@@ -353,16 +360,23 @@ public:
|
||||
return end();
|
||||
}
|
||||
|
||||
static
|
||||
BasicSmallString fromQString(const QString &qString)
|
||||
static BasicSmallString fromQString(const QString &qString)
|
||||
{
|
||||
const QByteArray &utf8ByteArray = qString.toUtf8();
|
||||
BasicSmallString string;
|
||||
string.append(qString);
|
||||
|
||||
return BasicSmallString(utf8ByteArray.constData(), uint(utf8ByteArray.size()));
|
||||
return string;
|
||||
}
|
||||
|
||||
static
|
||||
BasicSmallString fromQByteArray(const QByteArray &utf8ByteArray)
|
||||
static BasicSmallString fromQStringView(QStringView qStringView)
|
||||
{
|
||||
BasicSmallString string;
|
||||
string.append(qStringView);
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
static BasicSmallString fromQByteArray(const QByteArray &utf8ByteArray)
|
||||
{
|
||||
return BasicSmallString(utf8ByteArray.constData(), uint(utf8ByteArray.size()));
|
||||
}
|
||||
@@ -467,6 +481,24 @@ public:
|
||||
setSize(newSize);
|
||||
}
|
||||
|
||||
void append(QStringView string)
|
||||
{
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
QStringEncoder encoder{QStringEncoder::Utf8};
|
||||
|
||||
size_type oldSize = size();
|
||||
size_type newSize = oldSize + static_cast<size_type>(encoder.requiredSpace(string.size()));
|
||||
|
||||
reserve(optimalCapacity(newSize));
|
||||
auto newEnd = encoder.appendToBuffer(data() + size(), string);
|
||||
*newEnd = 0;
|
||||
setSize(newEnd - data());
|
||||
#else
|
||||
QByteArray array = string.toUtf8();
|
||||
append(SmallStringView{array.data(), static_cast<size_type>(array.size())});
|
||||
#endif
|
||||
}
|
||||
|
||||
BasicSmallString &operator+=(SmallStringView string)
|
||||
{
|
||||
append(string);
|
||||
@@ -474,6 +506,13 @@ public:
|
||||
return *this;
|
||||
}
|
||||
|
||||
BasicSmallString &operator+=(QStringView string)
|
||||
{
|
||||
append(string);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
BasicSmallString &operator+=(std::initializer_list<SmallStringView> list)
|
||||
{
|
||||
appendInitializerList(list, size());
|
||||
|
@@ -825,6 +825,15 @@ TEST(SmallString, AppendNullSmallString)
|
||||
ASSERT_THAT(text, SmallString("text"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendNullQString)
|
||||
{
|
||||
SmallString text("text");
|
||||
|
||||
text += QString();
|
||||
|
||||
ASSERT_THAT(text, SmallString("text"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendEmptySmallString)
|
||||
{
|
||||
SmallString text("text");
|
||||
@@ -834,6 +843,15 @@ TEST(SmallString, AppendEmptySmallString)
|
||||
ASSERT_THAT(text, SmallString("text"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendEmptyQString)
|
||||
{
|
||||
SmallString text("text");
|
||||
|
||||
text += QString("");
|
||||
|
||||
ASSERT_THAT(text, SmallString("text"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendShortSmallString)
|
||||
{
|
||||
SmallString text("some ");
|
||||
@@ -843,6 +861,15 @@ TEST(SmallString, AppendShortSmallString)
|
||||
ASSERT_THAT(text, SmallString("some text"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendShortQString)
|
||||
{
|
||||
SmallString text("some ");
|
||||
|
||||
text += QString("text");
|
||||
|
||||
ASSERT_THAT(text, SmallString("some text"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendLongSmallStringToShortSmallString)
|
||||
{
|
||||
SmallString text("some ");
|
||||
@@ -852,14 +879,36 @@ TEST(SmallString, AppendLongSmallStringToShortSmallString)
|
||||
ASSERT_THAT(text, SmallString("some very very very very very long string"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendLongQStringToShortSmallString)
|
||||
{
|
||||
SmallString text("some ");
|
||||
|
||||
text += QString("very very very very very long string");
|
||||
|
||||
ASSERT_THAT(text, SmallString("some very very very very very long string"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendLongSmallString)
|
||||
{
|
||||
SmallString longText("some very very very very very very very very very very very long string");
|
||||
longText+= SmallString(" text");
|
||||
|
||||
longText += SmallString(" text");
|
||||
|
||||
ASSERT_THAT(longText, SmallString("some very very very very very very very very very very very long string text"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendLongQString)
|
||||
{
|
||||
SmallString longText("some very very very very very very very very very very very long string");
|
||||
|
||||
longText += QString(" text");
|
||||
|
||||
ASSERT_THAT(
|
||||
longText,
|
||||
SmallString(
|
||||
"some very very very very very very very very very very very long string text"));
|
||||
}
|
||||
|
||||
TEST(SmallString, AppendInitializerList)
|
||||
{
|
||||
SmallString text("some text");
|
||||
|
Reference in New Issue
Block a user