QStringBuilder: add support for QStringView

[ChangeLog][QtCore][QStringBuilder] Added support for QStringView.

Change-Id: I5b6803397b107ef69d198a935b3ba4339ac95087
Reviewed-by: Anton Kudryavtsev <antkudr@mail.ru>
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
Marc Mutz 2015-10-25 20:00:42 +01:00 committed by Giuseppe D'Angelo
parent 641e010cc7
commit 9c53f4d33a
3 changed files with 29 additions and 1 deletions

View File

@ -73,7 +73,7 @@ QT_BEGIN_NAMESPACE
For building QStrings: For building QStrings:
\list \list
\li QString, QStringRef, \li QString, QStringRef, (since 5.10:) QStringView
\li QChar, QCharRef, QLatin1Char, (since 5.10:) \c char16_t, \li QChar, QCharRef, QLatin1Char, (since 5.10:) \c char16_t,
\li QLatin1String, \li QLatin1String,
\li (since 5.10:) \c{const char16_t[]} (\c{u"foo"}), \li (since 5.10:) \c{const char16_t[]} (\c{u"foo"}),

View File

@ -289,6 +289,20 @@ template <> struct QConcatenable<QStringRef> : private QAbstractConcatenable
} }
}; };
template <> struct QConcatenable<QStringView> : private QAbstractConcatenable
{
typedef QStringView type;
typedef QString ConvertTo;
enum { ExactSize = true };
static int size(QStringView a) { return a.length(); }
static inline void appendTo(QStringView a, QChar *&out)
{
const auto n = a.size();
memcpy(out, a.data(), sizeof(QChar) * n);
out += n;
}
};
template <int N> struct QConcatenable<const char[N]> : private QAbstractConcatenable template <int N> struct QConcatenable<const char[N]> : private QAbstractConcatenable
{ {
typedef const char type[N]; typedef const char type[N];

View File

@ -60,6 +60,7 @@ template <typename T> QString toQString(const T &t);
template <> QString toQString(const QString &s) { return s; } template <> QString toQString(const QString &s) { return s; }
template <> QString toQString(const QStringRef &r) { return r.toString(); } template <> QString toQString(const QStringRef &r) { return r.toString(); }
template <> QString toQString(const QStringView &v) { return v.toString(); }
template <> QString toQString(const QLatin1String &l) { return l; } template <> QString toQString(const QLatin1String &l) { return l; }
template <> QString toQString(const QLatin1Char &l) { return QChar(l); } template <> QString toQString(const QLatin1Char &l) { return QChar(l); }
template <> QString toQString(const QChar &c) { return c; } template <> QString toQString(const QChar &c) { return c; }
@ -84,6 +85,7 @@ void runScenario()
QLatin1String l1string(LITERAL); QLatin1String l1string(LITERAL);
QString string(l1string); QString string(l1string);
QStringRef stringref(&string, 2, 10); QStringRef stringref(&string, 2, 10);
QStringView stringview(stringref);
QLatin1Char lchar('c'); QLatin1Char lchar('c');
QChar qchar(lchar); QChar qchar(lchar);
QChar::SpecialCharacter special(QChar::Nbsp); QChar::SpecialCharacter special(QChar::Nbsp);
@ -108,6 +110,7 @@ void runScenario()
CHECK(P, l1string, l1string); CHECK(P, l1string, l1string);
CHECK(P, l1string, string); CHECK(P, l1string, string);
CHECK(P, l1string, stringref); CHECK(P, l1string, stringref);
CHECK(Q, l1string, stringview);
CHECK(P, l1string, lchar); CHECK(P, l1string, lchar);
CHECK(P, l1string, qchar); CHECK(P, l1string, qchar);
CHECK(P, l1string, special); CHECK(P, l1string, special);
@ -118,6 +121,7 @@ void runScenario()
CHECK(P, string, string); CHECK(P, string, string);
CHECK(P, string, stringref); CHECK(P, string, stringref);
CHECK(Q, string, stringview);
CHECK(P, string, lchar); CHECK(P, string, lchar);
CHECK(P, string, qchar); CHECK(P, string, qchar);
CHECK(P, string, special); CHECK(P, string, special);
@ -127,6 +131,7 @@ void runScenario()
CHECK(Q, string, u16charstar); CHECK(Q, string, u16charstar);
CHECK(P, stringref, stringref); CHECK(P, stringref, stringref);
CHECK(Q, stringref, stringview);
CHECK(P, stringref, lchar); CHECK(P, stringref, lchar);
CHECK(P, stringref, qchar); CHECK(P, stringref, qchar);
CHECK(P, stringref, special); CHECK(P, stringref, special);
@ -135,6 +140,15 @@ void runScenario()
CHECK(Q, stringref, u16chararray); CHECK(Q, stringref, u16chararray);
CHECK(Q, stringref, u16charstar); CHECK(Q, stringref, u16charstar);
CHECK(Q, stringview, stringview);
CHECK(Q, stringview, lchar);
CHECK(Q, stringview, qchar);
CHECK(Q, stringview, special);
CHECK(P, stringview, QStringLiteral(LITERAL));
CHECK(Q, stringview, u16char);
CHECK(Q, stringview, u16chararray);
CHECK(Q, stringview, u16charstar);
CHECK(P, lchar, lchar); CHECK(P, lchar, lchar);
CHECK(P, lchar, qchar); CHECK(P, lchar, qchar);
CHECK(P, lchar, special); CHECK(P, lchar, special);