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 <QByteArray>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||||
|
#include <QStringEncoder>
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
@@ -135,6 +138,10 @@ public:
|
|||||||
: BasicSmallString(BasicSmallString::fromQString(qString))
|
: BasicSmallString(BasicSmallString::fromQString(qString))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
BasicSmallString(const QStringView qStringView)
|
||||||
|
: BasicSmallString(BasicSmallString::fromQStringView(qStringView))
|
||||||
|
{}
|
||||||
|
|
||||||
BasicSmallString(const QByteArray &qByteArray)
|
BasicSmallString(const QByteArray &qByteArray)
|
||||||
: BasicSmallString(qByteArray.constData(), qByteArray.size())
|
: BasicSmallString(qByteArray.constData(), qByteArray.size())
|
||||||
{}
|
{}
|
||||||
@@ -353,16 +360,23 @@ public:
|
|||||||
return end();
|
return end();
|
||||||
}
|
}
|
||||||
|
|
||||||
static
|
static BasicSmallString fromQString(const QString &qString)
|
||||||
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
|
static BasicSmallString fromQStringView(QStringView qStringView)
|
||||||
BasicSmallString fromQByteArray(const QByteArray &utf8ByteArray)
|
{
|
||||||
|
BasicSmallString string;
|
||||||
|
string.append(qStringView);
|
||||||
|
|
||||||
|
return string;
|
||||||
|
}
|
||||||
|
|
||||||
|
static BasicSmallString fromQByteArray(const QByteArray &utf8ByteArray)
|
||||||
{
|
{
|
||||||
return BasicSmallString(utf8ByteArray.constData(), uint(utf8ByteArray.size()));
|
return BasicSmallString(utf8ByteArray.constData(), uint(utf8ByteArray.size()));
|
||||||
}
|
}
|
||||||
@@ -467,6 +481,24 @@ public:
|
|||||||
setSize(newSize);
|
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)
|
BasicSmallString &operator+=(SmallStringView string)
|
||||||
{
|
{
|
||||||
append(string);
|
append(string);
|
||||||
@@ -474,6 +506,13 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BasicSmallString &operator+=(QStringView string)
|
||||||
|
{
|
||||||
|
append(string);
|
||||||
|
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
BasicSmallString &operator+=(std::initializer_list<SmallStringView> list)
|
BasicSmallString &operator+=(std::initializer_list<SmallStringView> list)
|
||||||
{
|
{
|
||||||
appendInitializerList(list, size());
|
appendInitializerList(list, size());
|
||||||
|
@@ -825,6 +825,15 @@ TEST(SmallString, AppendNullSmallString)
|
|||||||
ASSERT_THAT(text, SmallString("text"));
|
ASSERT_THAT(text, SmallString("text"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(SmallString, AppendNullQString)
|
||||||
|
{
|
||||||
|
SmallString text("text");
|
||||||
|
|
||||||
|
text += QString();
|
||||||
|
|
||||||
|
ASSERT_THAT(text, SmallString("text"));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(SmallString, AppendEmptySmallString)
|
TEST(SmallString, AppendEmptySmallString)
|
||||||
{
|
{
|
||||||
SmallString text("text");
|
SmallString text("text");
|
||||||
@@ -834,6 +843,15 @@ TEST(SmallString, AppendEmptySmallString)
|
|||||||
ASSERT_THAT(text, SmallString("text"));
|
ASSERT_THAT(text, SmallString("text"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(SmallString, AppendEmptyQString)
|
||||||
|
{
|
||||||
|
SmallString text("text");
|
||||||
|
|
||||||
|
text += QString("");
|
||||||
|
|
||||||
|
ASSERT_THAT(text, SmallString("text"));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(SmallString, AppendShortSmallString)
|
TEST(SmallString, AppendShortSmallString)
|
||||||
{
|
{
|
||||||
SmallString text("some ");
|
SmallString text("some ");
|
||||||
@@ -843,6 +861,15 @@ TEST(SmallString, AppendShortSmallString)
|
|||||||
ASSERT_THAT(text, SmallString("some text"));
|
ASSERT_THAT(text, SmallString("some text"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(SmallString, AppendShortQString)
|
||||||
|
{
|
||||||
|
SmallString text("some ");
|
||||||
|
|
||||||
|
text += QString("text");
|
||||||
|
|
||||||
|
ASSERT_THAT(text, SmallString("some text"));
|
||||||
|
}
|
||||||
|
|
||||||
TEST(SmallString, AppendLongSmallStringToShortSmallString)
|
TEST(SmallString, AppendLongSmallStringToShortSmallString)
|
||||||
{
|
{
|
||||||
SmallString text("some ");
|
SmallString text("some ");
|
||||||
@@ -852,14 +879,36 @@ TEST(SmallString, AppendLongSmallStringToShortSmallString)
|
|||||||
ASSERT_THAT(text, SmallString("some very very very very very long string"));
|
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)
|
TEST(SmallString, AppendLongSmallString)
|
||||||
{
|
{
|
||||||
SmallString longText("some very very very very very very very very very very very long string");
|
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"));
|
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)
|
TEST(SmallString, AppendInitializerList)
|
||||||
{
|
{
|
||||||
SmallString text("some text");
|
SmallString text("some text");
|
||||||
|
Reference in New Issue
Block a user