Cbor: Add overloads for QStringView
Change-Id: I8d22d0741c4d3852b438b12099f81ed87244871d Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
4c6e549b25
commit
c8c724a3ce
@ -915,7 +915,7 @@ void QCborContainerPrivate::replaceAt_complex(Element &e, const QCborValue &valu
|
|||||||
// in qstring.cpp
|
// in qstring.cpp
|
||||||
void qt_to_latin1_unchecked(uchar *dst, const ushort *uc, qsizetype len);
|
void qt_to_latin1_unchecked(uchar *dst, const ushort *uc, qsizetype len);
|
||||||
|
|
||||||
Q_NEVER_INLINE void QCborContainerPrivate::appendAsciiString(const QString &s)
|
Q_NEVER_INLINE void QCborContainerPrivate::appendAsciiString(QStringView s)
|
||||||
{
|
{
|
||||||
qsizetype len = s.size();
|
qsizetype len = s.size();
|
||||||
QtCbor::Element e;
|
QtCbor::Element e;
|
||||||
@ -926,7 +926,7 @@ Q_NEVER_INLINE void QCborContainerPrivate::appendAsciiString(const QString &s)
|
|||||||
|
|
||||||
char *ptr = data.data() + e.value + sizeof(ByteData);
|
char *ptr = data.data() + e.value + sizeof(ByteData);
|
||||||
uchar *l = reinterpret_cast<uchar *>(ptr);
|
uchar *l = reinterpret_cast<uchar *>(ptr);
|
||||||
const ushort *uc = (const ushort *)s.unicode();
|
const ushort *uc = (const ushort *)s.utf16();
|
||||||
qt_to_latin1_unchecked(l, uc, len);
|
qt_to_latin1_unchecked(l, uc, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1646,13 +1646,23 @@ QCborValue::QCborValue(const QByteArray &ba)
|
|||||||
container->ref.storeRelaxed(1);
|
container->ref.storeRelaxed(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if QT_STRINGVIEW_LEVEL < 2
|
||||||
/*!
|
/*!
|
||||||
Creates a QCborValue with string value \a s. The value can later be
|
Creates a QCborValue with string value \a s. The value can later be
|
||||||
retrieved using toString().
|
retrieved using toString().
|
||||||
|
|
||||||
\sa toString(), isString(), isByteArray()
|
\sa toString(), isString(), isByteArray()
|
||||||
*/
|
*/
|
||||||
QCborValue::QCborValue(const QString &s)
|
QCborValue::QCborValue(const QString &s) : QCborValue(qToStringViewIgnoringNull(s)) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
Creates a QCborValue with string value \a s. The value can later be
|
||||||
|
retrieved using toString().
|
||||||
|
|
||||||
|
\sa toString(), isString(), isByteArray()
|
||||||
|
*/
|
||||||
|
QCborValue::QCborValue(QStringView s)
|
||||||
: n(0), container(new QCborContainerPrivate), t(String)
|
: n(0), container(new QCborContainerPrivate), t(String)
|
||||||
{
|
{
|
||||||
container->append(s);
|
container->append(s);
|
||||||
|
@ -143,7 +143,10 @@ public:
|
|||||||
QCborValue(QCborSimpleType st) : t(type_helper(st)) {}
|
QCborValue(QCborSimpleType st) : t(type_helper(st)) {}
|
||||||
|
|
||||||
QCborValue(const QByteArray &ba);
|
QCborValue(const QByteArray &ba);
|
||||||
|
#if QT_STRINGVIEW_LEVEL < 2
|
||||||
QCborValue(const QString &s);
|
QCborValue(const QString &s);
|
||||||
|
#endif
|
||||||
|
QCborValue(QStringView s);
|
||||||
QCborValue(QLatin1String s);
|
QCborValue(QLatin1String s);
|
||||||
#ifndef QT_NO_CAST_FROM_ASCII
|
#ifndef QT_NO_CAST_FROM_ASCII
|
||||||
QT_ASCII_CAST_WARN QCborValue(const char *s) : QCborValue(QString::fromUtf8(s)) {}
|
QT_ASCII_CAST_WARN QCborValue(const char *s) : QCborValue(QString::fromUtf8(s)) {}
|
||||||
|
@ -245,13 +245,21 @@ public:
|
|||||||
appendByteData(s.latin1(), s.size(), QCborValue::String,
|
appendByteData(s.latin1(), s.size(), QCborValue::String,
|
||||||
QtCbor::Element::StringIsAscii);
|
QtCbor::Element::StringIsAscii);
|
||||||
}
|
}
|
||||||
void appendAsciiString(const QString &s);
|
void appendAsciiString(QStringView s);
|
||||||
|
|
||||||
|
#if QT_STRINGVIEW_LEVEL < 2
|
||||||
void append(const QString &s)
|
void append(const QString &s)
|
||||||
|
{
|
||||||
|
append(qToStringViewIgnoringNull(s));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void append(QStringView s)
|
||||||
{
|
{
|
||||||
if (QtPrivate::isAscii(s))
|
if (QtPrivate::isAscii(s))
|
||||||
appendAsciiString(s);
|
appendAsciiString(s);
|
||||||
else
|
else
|
||||||
appendByteData(reinterpret_cast<const char *>(s.constData()), s.size() * 2,
|
appendByteData(reinterpret_cast<const char *>(s.utf16()), s.size() * 2,
|
||||||
QCborValue::String, QtCbor::Element::StringIsUtf16);
|
QCborValue::String, QtCbor::Element::StringIsUtf16);
|
||||||
}
|
}
|
||||||
void append(const QCborValue &v)
|
void append(const QCborValue &v)
|
||||||
@ -345,33 +353,41 @@ public:
|
|||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool stringEqualsElement(qsizetype idx, QLatin1String s) const
|
static int compareUtf8(const QtCbor::ByteData *b, const QLatin1String &s)
|
||||||
{
|
{
|
||||||
const auto &e = elements.at(idx);
|
return QUtf8::compareUtf8(b->byte(), b->len, s);
|
||||||
if (e.type != QCborValue::String)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
const QtCbor::ByteData *b = byteData(idx);
|
|
||||||
if (!b)
|
|
||||||
return s.isEmpty();
|
|
||||||
|
|
||||||
if (e.flags & QtCbor::Element::StringIsUtf16)
|
|
||||||
return QtPrivate::compareStrings(b->asStringView(), s) == 0;
|
|
||||||
return QUtf8::compareUtf8(b->byte(), b->len, s) == 0;
|
|
||||||
}
|
}
|
||||||
bool stringEqualsElement(qsizetype idx, const QString &s) const
|
|
||||||
{
|
|
||||||
const auto &e = elements.at(idx);
|
|
||||||
if (e.type != QCborValue::String)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
const QtCbor::ByteData *b = byteData(idx);
|
static int compareUtf8(const QtCbor::ByteData *b, QStringView s)
|
||||||
|
{
|
||||||
|
return QUtf8::compareUtf8(b->byte(), b->len, s.data(), s.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename String>
|
||||||
|
int stringCompareElement(const QtCbor::Element &e, String s) const
|
||||||
|
{
|
||||||
|
if (e.type != QCborValue::String)
|
||||||
|
return int(e.type) - int(QCborValue::String);
|
||||||
|
|
||||||
|
const QtCbor::ByteData *b = byteData(e);
|
||||||
if (!b)
|
if (!b)
|
||||||
return s.isEmpty();
|
return s.isEmpty() ? 0 : -1;
|
||||||
|
|
||||||
if (e.flags & QtCbor::Element::StringIsUtf16)
|
if (e.flags & QtCbor::Element::StringIsUtf16)
|
||||||
return QtPrivate::compareStrings(b->asStringView(), s) == 0;
|
return QtPrivate::compareStrings(b->asStringView(), s);
|
||||||
return QUtf8::compareUtf8(b->byte(), b->len, s.data(), s.size()) == 0;
|
return compareUtf8(b, s);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename String>
|
||||||
|
bool stringEqualsElement(const QtCbor::Element &e, String s) const
|
||||||
|
{
|
||||||
|
return stringCompareElement(e, s) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename String>
|
||||||
|
bool stringEqualsElement(qsizetype idx, String s) const
|
||||||
|
{
|
||||||
|
return stringEqualsElement(elements.at(idx), s);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int compareElement_helper(const QCborContainerPrivate *c1, QtCbor::Element e1,
|
static int compareElement_helper(const QCborContainerPrivate *c1, QtCbor::Element e1,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user