10#if QT_CONFIG(cborstreamreader)
14#if QT_CONFIG(cborstreamwriter)
22#include <private/qbytearray_p.h>
23#include <private/qnumeric_p.h>
24#include <private/qsimd_p.h>
766 auto &
e =
d->elements[1];
769 auto replaceByteData = [&](
const char *
buf,
qsizetype len, Element::ValueFlags
f) {
789#if QT_POINTER_SIZE == 8
794 static const qint64 Limit = std::numeric_limits<qint64>::max() / 1000;
795 ok = (
e.value > -Limit &&
e.value < Limit);
797 msecs =
e.value * 1000;
800 ok = convertDoubleTo(round(
e.fpvalue() * 1000), &msecs);
817#ifndef QT_BOOTSTRAPPED
835#if QT_CONFIG(regularexpression)
849 memcpy(
buf,
b->byte(),
qMin(
sizeof(
buf),
size_t(
b->len)));
850 replaceByteData(
buf,
sizeof(
buf), {});
861#if QT_CONFIG(cborstreamwriter)
866#ifndef QT_BOOTSTRAPPED
868 return writer.
append(std::numeric_limits<qfloat16>::quiet_NaN());
870 return writer.
append(std::numeric_limits<float>::quiet_NaN());
879 if (convertDoubleTo(
d, &
i)) {
890#ifndef QT_BOOTSTRAPPED
894 return writer.
append(f16);
909 if (
e.type >= 0x10000)
913 return comparable(e1) - comparable(e2);
916QCborContainerPrivate::~QCborContainerPrivate()
921 e.container->deref();
943 u->elements.reserve(reserved);
944 u->compact(reserved);
948 d->ref.storeRelaxed(0);
950 for (
auto &
e : std::as_const(
d->elements)) {
952 e.container->ref.ref();
960 if (!
d ||
d->ref.loadRelaxed() != 1)
961 return clone(
d, reserved);
999 d->elements.detach();
1000 d->ref.storeRelaxed(1);
1003 e.container =
value.container;
1005 e.container->ref.ref();
1016 if (
this ==
value.container)
1023 value.container->deref();
1059 container->data =
data;
1060 container->elements.
reserve(1);
1061 container->elements.append(
e);
1084 auto makeSortable = [](
qint64 v) {
1087 return quint64(std::numeric_limits<qint64>::max()) + (-u);
1103 return u1 <
u2 ? -1 : 1;
1127 auto len1 = b1 ? b1->len : 0;
1128 auto len2 = b2 ? b2->
len : 0;
1134 if (len1 == 0 || len2 == 0)
1135 return len1 < len2 ? -1 : len1 == len2 ? 0 : 1;
1156 return len1 < len2 ? -1 : 1;
1163 return memcmp(b1->byte(), b2->
byte(),
size_t(len1));
1164 return len1 < len2 ? -1 : 1;
1177 if (
s1.size() ==
s2.size())
1178 return s1.compare(
s2);
1179 return s1.size() <
s2.size() ? -1 : 1;
1184 return len1 < len2 ? -1 : 1;
1196 auto len2 =
c2 ?
c2->elements.size() : 0;
1199 return len1 < len2 ? -1 : 1;
1336#if QT_CONFIG(cborstreamwriter)
1338 QCborValue::EncodingOptions
opt)
1348 for (idx = 0; idx <
len; ++idx)
1349 encodeToCbor(writer,
d, idx,
opt);
1355 }
else if (idx < 0) {
1356 Q_ASSERT_X(
d !=
nullptr,
"QCborValue",
"Unexpected null container");
1357 if (
d->elements.size() != 2) {
1359 qWarning(
"QCborValue: invalid tag state; are you encoding something that was improperly decoded?");
1365 encodeToCbor(writer,
d, 1,
opt);
1367 Q_ASSERT_X(
d !=
nullptr,
"QCborValue",
"Unexpected null container");
1369 auto e =
d->elements.at(idx);
1383 return writer.
append(
b->asStringView());
1392 return encodeToCbor(writer,
1404 return writeDoubleToCbor(writer,
e.fpvalue(),
opt);
1419 if (
unsigned(simpleType) < 0x100)
1423 qWarning(
"QCborValue: found unknown type 0x%x",
e.type);
1428#if QT_CONFIG(cborstreamreader)
1432 if (
reader.isUnsignedInteger()) {
1453 if (
double d = integerOutOfRange(reader)) {
1490 if (!
reader.isLengthKnown())
1492 int mapShift =
reader.isMap() ? 1 : 0;
1495 return len << mapShift;
1500 if (
Q_UNLIKELY(remainingRecursionDepth == 0)) {
1510 u->elements.reserve(
len);
1516 d->elements.clear();
1521 d->decodeValueFromCbor(reader, remainingRecursionDepth - 1);
1526 d->elements.squeeze();
1533 if (
Q_UNLIKELY(remainingRecursionDepth == 0)) {
1544 d->decodeValueFromCbor(reader, remainingRecursionDepth - 1);
1578 if (
len != rawlen) {
1589 constexpr size_t EstimatedOverhead = 16;
1590 constexpr size_t MaxMemoryIncrement = 16384;
1604 if (
size_t(
len) > MaxMemoryIncrement - EstimatedOverhead) {
1607 newCapacity =
offset + MaxMemoryIncrement - EstimatedOverhead;
1613 if (newCapacity >
size_t(
data.capacity()))
1614 data.reserve(newCapacity);
1627 if (!utf8result.isValidUtf8) {
1635 rawlen =
reader.currentStringChunkSize();
1637 if (
len == rawlen) {
1649 const char *
ptr =
data.constData() +
e.value;
1651 b->
len =
data.size() -
e.value - int(
sizeof(*
b));
1670 data.truncate(
e.value);
1676void QCborContainerPrivate::decodeValueFromCbor(
QCborStreamReader &reader,
int remainingRecursionDepth)
1691 decodeStringFromCbor(reader);
1697 createContainerFromCbor(
reader, remainingRecursionDepth),
1701 return append(taggedValueFromCbor(reader, remainingRecursionDepth));
1768 :
n(-1), container(
a.
d.
data()),
t(Array)
1816 container->ref.ref();
1840#ifndef QT_BOOTSTRAPPED
1858#if QT_CONFIG(regularexpression)
1898void QCborValue::dispose()
1943 container->
valueAt(1) : defaultValue;
1958 return defaultValue;
1976 return defaultValue;
1994 return defaultValue;
1999 return defaultValue;
2006#ifndef QT_BOOTSTRAPPED
2018 return defaultValue;
2028#if QT_CONFIG(regularexpression)
2042 return defaultValue;
2060 return defaultValue;
2065 return defaultValue;
2105 return defaultValue;
2107 Q_ASSERT(
n == -1 || container ==
nullptr);
2148 return defaultValue;
2150 Q_ASSERT(
n == -1 || container ==
nullptr);
2213 constexpr qint64 LargeKey = 0x10000;
2223 return key <= currentSize;
2235 qWarning(
"Using CBOR array as map forced conversion");
2239 map->elements.resize(
size * 2);
2243 auto src =
array->elements.constBegin();
2254 dst[
i * 2 + 1].container->ref.ref();
2268 if (replace->elements.size() ==
index)
2275template <
typename KeyType>
inline QCborValueRef
2281 else if (!self.isMap())
2286 QCborValueRef
result = findOrAddMapKey<KeyType>(self.container,
key);
2291template<
typename KeyType> QCborValueRef
2294 auto &
e = self.d->elements[self.i];
2301 e.container->deref();
2302 e.container =
nullptr;
2307 QCborValueRef
result = findOrAddMapKey<KeyType>(
e.container,
key);
2375#if QT_CONFIG(cborstreamreader)
2399 auto t = reader.type();
2411 Element e = decodeBasicValueFromCbor(reader);
2427 result.container->ref.ref();
2428 result.container->decodeStringFromCbor(reader);
2492#if QT_CONFIG(cborstreamwriter)
2523 toCbor(writer,
opt);
2559 return encodeToCbor(writer, container, -
type(),
opt);
2561 return encodeToCbor(writer, container,
n,
opt);
2572 return writeDoubleToCbor(writer, fp_helper(),
opt);
2611# if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
2614 concrete().toCbor(writer,
opt);
2619void QCborValueRef::assign(QCborValueRef that,
const QCborValue &
other)
2621 that.d->replaceAt(that.i,
other);
2629void QCborValueRef::assign(QCborValueRef that,
const QCborValueRef
other)
2632 that =
other.concrete();
2639 return defaultValue;
2649 return defaultValue;
2660 return defaultValue;
2669 return defaultValue;
2670 return self.d->byteArrayAt(self.i);
2677 return defaultValue;
2678 return self.d->stringAt(self.i);
2683 return self.d->valueAt(self.i);
2688 return self.d->elements.at(self.i).type;
2709#if QT_VERSION < QT_VERSION_CHECK(7, 0, 0) && !defined(QT_BOOTSTRAPPED)
2710QCborValue QCborValueRef::concrete(QCborValueRef self)
noexcept
2712 return self.d->valueAt(self.i);
2717 return self.d->elements.at(
self.i).type;
2791QCborValueRef QCborValueRef::operator[](
const QString &
key)
2832QCborValueRef QCborValueRef::operator[](
qint64 key)
2834 auto &
e =
d->elements[
i];
2856 switch (
value.type()) {
2887#ifndef QT_BOOTSTRAPPED
2890# if QT_CONFIG(regularexpression)
2926 auto n = std::underlying_type<QCborKnownTags>::type(
tag);
2930 return "DateTimeString";
2932 return "UnixTime_t";
2934 return "PositiveBignum";
2936 return "NegativeBignum";
2942 return "COSE_Encrypt0";
2946 return "COSE_Sign1";
2948 return "ExpectedBase64url";
2950 return "ExpectedBase64";
2952 return "ExpectedBase16";
2954 return "EncodedCbor";
2962 return "RegularExpression";
2964 return "MimeMessage";
2968 return "COSE_Encrypt";
2980#if !defined(QT_NO_DEBUG_STREAM)
2985 return dbg <<
v.toInteger();
2987 return dbg <<
"QByteArray(" <<
v.toByteArray() <<
')';
2989 return dbg <<
v.toString();
2991 return dbg <<
v.toArray();
2993 return dbg <<
v.toMap();
2998 dbg.nospace() <<
"QCborKnownTags::" <<
id <<
", ";
3000 dbg.nospace() <<
"QCborTag(" <<
quint64(
tag) <<
"), ";
3001 return dbg <<
v.taggedValue();
3008 return dbg <<
false;
3010 return dbg <<
"nullptr";
3015 if (convertDoubleTo(
v.toDouble(), &
i))
3016 return dbg <<
i <<
".0";
3018 return dbg <<
v.toDouble();
3021 return dbg <<
v.toDateTime();
3022#ifndef QT_BOOTSTRAPPED
3024 return dbg <<
v.toUrl();
3025#if QT_CONFIG(regularexpression)
3027 return dbg <<
v.toRegularExpression();
3030 return dbg <<
v.toUuid();
3033 return dbg <<
"<invalid>";
3037 if (
v.isSimpleType())
3038 return dbg <<
v.toSimpleType();
3039 return dbg <<
"<unknown type 0x" <<
Qt::hex << int(
v.type()) <<
Qt::dec <<
'>';
3044 dbg.nospace() <<
"QCborValue(";
3053 return dbg.nospace() <<
"QCborSimpleType::" <<
id;
3055 return dbg.nospace() <<
"QCborSimpleType(" <<
uint(st) <<
')';
3062 dbg.nospace() <<
"QCborTag(";
3064 dbg.nospace() <<
"QCborKnownTags::" <<
id;
3076 return dbg.nospace() <<
"QCborKnownTags::" <<
id;
3078 return dbg.nospace() <<
"QCborKnownTags(" << int(
tag) <<
')';
3082#ifndef QT_NO_DATASTREAM
3083#if QT_CONFIG(cborstreamwriter)
3096 value = QCborValue::fromCbor(
buffer, &parseError);
3097 if (parseError.error)
3109#ifndef QT_NO_QOBJECT
3110#include "moc_qcborvalue.cpp"
void storeRelaxed(T newValue) noexcept
qsizetype size() const noexcept
Returns the number of bytes in this byte array.
void reserve(qsizetype size)
Attempts to allocate memory for at least size bytes.
const char * constData() const noexcept
Returns a pointer to the const data stored in the byte array.
\inmodule QtCore\reentrant
int compare(const QCborArray &other) const noexcept Q_DECL_PURE_FUNCTION
Compares this array and other, comparing each element in sequence, and returns an integer that indica...
QCborArray() noexcept
Constructs an empty QCborArray.
QString stringAt(qsizetype idx) const
QByteArray::size_type usedData
const QtCbor::ByteData * byteData(QtCbor::Element e) const
void appendByteData(const char *data, qsizetype len, QCborValue::Type type, QtCbor::Element::ValueFlags extraFlags={})
static QCborContainerPrivate * grow(QCborContainerPrivate *d, qsizetype index)
Prepare for an insertion at position index.
static QCborContainerPrivate * detach(QCborContainerPrivate *d, qsizetype reserved)
QCborValueConstRef findCborMapKey(KeyType key)
QList< QtCbor::Element > elements
void compact(qsizetype reserved)
void append(QtCbor::Undefined)
QByteArray byteArrayAt(qsizetype idx) const
static QCborValue makeValue(QCborValue::Type type, qint64 n, QCborContainerPrivate *d=nullptr, ContainerDisposition disp=CopyContainer)
static int compareElement_helper(const QCborContainerPrivate *c1, QtCbor::Element e1, const QCborContainerPrivate *c2, QtCbor::Element e2)
static QCborValueRef findOrAddMapKey(QCborContainerPrivate *container, KeyType key)
QCborValue extractAt_complex(QtCbor::Element e)
void appendAsciiString(const QString &s)
qptrdiff addByteData(const char *block, qsizetype len)
static QtCbor::Element elementFromValue(const QCborValue &value)
void replaceAt_complex(QtCbor::Element &e, const QCborValue &value, ContainerDisposition disp)
QCborValue valueAt(qsizetype idx) const
static QCborContainerPrivate * clone(QCborContainerPrivate *d, qsizetype reserved=-1)
\inmodule QtCore\reentrant
QCborMap() noexcept
Constructs an empty CBOR Map object.
int compare(const QCborMap &other) const noexcept Q_DECL_PURE_FUNCTION
Compares this map and other, comparing each element in sequence, and returns an integer that indicate...
\inmodule QtCore\reentrant
StringResultCode
This enum is returned by readString() and readByteArray() and is used to indicate what the status of ...
Type
This enumeration contains all possible CBOR types as decoded by QCborStreamReader.
\inmodule QtCore\reentrant
bool endMap()
Terminates the map started by either overload of startMap() and returns true if the correct number of...
void startMap()
Starts a CBOR Map with indeterminate length in the CBOR stream.
void appendTextString(const char *utf8, qsizetype len)
Appends len bytes of text starting from utf8 to the stream, creating a CBOR Text String value.
void appendByteString(const char *data, qsizetype len)
Appends len bytes of data starting from data to the stream, creating a CBOR Byte String value.
void startArray()
Starts a CBOR Array with indeterminate length in the CBOR stream.
void append(quint64 u)
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool endArray()
Terminates the array started by either overload of startArray() and returns true if the correct numbe...
static Q_CORE_EXPORT QString concreteString(QCborValueConstRef that, const QString &defaultValue)
static Q_CORE_EXPORT double concreteDouble(QCborValueConstRef that, double defaultValue) noexcept Q_DECL_PURE_FUNCTION
static Q_CORE_EXPORT QByteArray concreteByteArray(QCborValueConstRef that, const QByteArray &defaultValue)
static Q_CORE_EXPORT qint64 concreteIntegral(QCborValueConstRef that, qint64 defaultValue) noexcept Q_DECL_PURE_FUNCTION
static Q_CORE_EXPORT QCborValue::Type concreteType(QCborValueConstRef that) noexcept Q_DECL_PURE_FUNCTION
Q_CORE_EXPORT const QCborValue operator[](const QString &key) const
QCborContainerPrivate * d
static Q_CORE_EXPORT bool concreteBoolean(QCborValueConstRef that, bool defaultValue) noexcept Q_DECL_PURE_FUNCTION
QCborValue concrete() const noexcept
\inmodule QtCore\reentrant
const QCborValue operator[](const QString &key) const
If this QCborValue is a QCborMap, searches elements for the value whose key matches key.
bool isSimpleType() const
Returns true if this QCborValue is of one of the CBOR simple types.
bool isDateTime() const
Returns true if this QCborValue is of the date/time type.
QCborValue & operator=(const QCborValue &other) noexcept
This is an overloaded member function, provided for convenience. It differs from the above function o...
bool isString() const
Returns true if this QCborValue is of the string type.
QString toString(const QString &defaultValue={}) const
Returns the string value stored in this QCborValue, if it is of the string type.
QCborArray toArray() const
QUuid toUuid(const QUuid &defaultValue={}) const
Returns the UUID value stored in this QCborValue, if it is of the UUID extended type.
int compare(const QCborValue &other) const
Compares this value and other, and returns an integer that indicates whether this value should be sor...
bool isUrl() const
Returns true if this QCborValue is of the URL type.
bool isByteArray() const
Returns true if this QCborValue is of the byte array type.
Type
This enum represents the QCborValue type.
QUrl toUrl(const QUrl &defaultValue={}) const
Returns the URL value stored in this QCborValue, if it is of the URL extended type.
QCborValue()
Creates a QCborValue of the \l {Type}{Undefined} type.
bool isRegularExpression() const
Returns true if this QCborValue contains a regular expression's pattern.
bool isContainer() const
This convenience function returns true if the QCborValue is either an array or a map.
friend class QCborContainerPrivate
QByteArray toByteArray(const QByteArray &defaultValue={}) const
Returns the byte array value stored in this QCborValue, if it is of the byte array type.
Type type() const
Returns the type of this QCborValue.
QCborSimpleType toSimpleType(QCborSimpleType defaultValue=QCborSimpleType::Undefined) const
Returns the simple type this QCborValue is of, if it is a simple type.
bool isTag() const
Returns true if this QCborValue is of the tag type.
bool isArray() const
Returns true if this QCborValue is of the array type.
bool isUuid() const
Returns true if this QCborValue contains a UUID.
QCborTag tag(QCborTag defaultValue=QCborTag(-1)) const
Returns the tag of this extended QCborValue object, if it is of the tag type, defaultValue otherwise.
bool isMap() const
Returns true if this QCborValue is of the map type.
QDateTime toDateTime(const QDateTime &defaultValue={}) const
Returns the date/time value stored in this QCborValue, if it is of the date/time extended type.
QCborValue taggedValue(const QCborValue &defaultValue=QCborValue()) const
Returns the tagged value of this extended QCborValue object, if it is of the tag type,...
\inmodule QtCore\reentrant
\inmodule QtCore\reentrant
static QDateTime fromMSecsSinceEpoch(qint64 msecs, const QTimeZone &timeZone)
bool isValid() const
Returns true if this datetime represents a definite moment, otherwise false.
qsizetype size() const noexcept
const_reference at(qsizetype i) const noexcept
void append(parameter_type t)
\inmodule QtCore \reentrant
\macro QT_RESTRICTED_CAST_FROM_ASCII
qsizetype size() const
Returns the number of characters in this string.
bool isEmpty() const
Returns true if the string has no characters; otherwise returns false.
QByteArray toUtf8() const &
bool isValid() const
Returns true if the URL is non-empty and valid; otherwise returns false.
static QUrl fromEncoded(QByteArrayView input, ParsingMode mode=TolerantMode)
Parses input and returns the corresponding QUrl.
QString toString(FormattingOptions options=FormattingOptions(PrettyDecoded)) const
Returns a string representation of the URL.
static QUuid fromRfc4122(QByteArrayView) noexcept
Creates a QUuid object from the binary representation of the UUID, as specified by RFC 4122 section 4...
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
QHash< int, QWidget * > hash
[35multi]
QMap< QString, QString > map
[6]
Combined button and popup list for selecting options.
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION int compareStrings(QStringView lhs, QStringView rhs, Qt::CaseSensitivity cs=Qt::CaseSensitive) noexcept
Q_CORE_EXPORT Q_DECL_PURE_FUNCTION bool isAscii(QLatin1StringView s) noexcept
QTextStream & hex(QTextStream &stream)
Calls QTextStream::setIntegerBase(16) on stream and returns stream.
QTextStream & dec(QTextStream &stream)
Calls QTextStream::setIntegerBase(10) on stream and returns stream.
QImageReader reader("image.png")
[1]
constexpr qsizetype MaxStringSize
QT_BEGIN_NAMESPACE constexpr qsizetype MaxByteArraySize
QCborStreamReader::StringResultCode qt_cbor_append_string_chunk(QCborStreamReader &reader, QByteArray *data)
void qt_cbor_stream_set_error(QCborStreamReaderPrivate *d, QCborError error)
static int compareElementRecursive(const QCborContainerPrivate *c1, const Element &e1, const QCborContainerPrivate *c2, const Element &e2)
Q_CORE_EXPORT const char * qt_cbor_simpletype_id(QCborSimpleType st)
void qt_to_latin1_unchecked(uchar *dst, const char16_t *uc, qsizetype len)
static bool shouldArrayRemainArray(qint64 key, QCborValue::Type t, QCborContainerPrivate *container)
static int typeOrder(Element e1, Element e2)
QDebug operator<<(QDebug dbg, const QCborValue &v)
static QCborContainerPrivate * assignContainer(QCborContainerPrivate *&d, QCborContainerPrivate *x)
size_t qHash(const QCborValue &value, size_t seed)
static Q_DECL_UNUSED constexpr quint64 MaximumPreallocatedElementCount
static QCborValue::Type convertToExtendedType(QCborContainerPrivate *d)
Q_CORE_EXPORT const char * qt_cbor_tag_id(QCborTag tag)
static int compareElementNoData(const Element &e1, const Element &e2)
static QCborContainerPrivate * maybeGrow(QCborContainerPrivate *container, qsizetype index)
static QDebug debugContents(QDebug &dbg, const QCborValue &v)
static Q_DECL_UNUSED constexpr int MaximumRecursionDepth
static QT_BEGIN_NAMESPACE constexpr quint64 MaxAcceptableMemoryUse
QDataStream & operator>>(QDataStream &stream, QCborValue &value)
static int compareContainer(const QCborContainerPrivate *c1, const QCborContainerPrivate *c2)
static void convertArrayToMap(QCborContainerPrivate *&array)
#define QT_WARNING_DISABLE_MSVC(number)
AudioChannelLayoutTag tag
DBusConnection const char DBusError * error
EGLOutputLayerEXT EGLint EGLAttrib value
[5]
QT_BEGIN_NAMESPACE Q_ALWAYS_INLINE void qToUnaligned(const T src, void *dest)
static ControlElement< T > * ptr(QWidget *widget)
constexpr const T & qMin(const T &a, const T &b)
std::enable_if_t< std::is_unsigned_v< T >||std::is_signed_v< T >, bool > qMulOverflow(T v1, T v2, T *r)
static Q_DECL_CONST_FUNCTION bool qt_is_nan(double d)
constexpr static Q_DECL_CONST_FUNCTION double qt_qnan() noexcept
constexpr static Q_DECL_CONST_FUNCTION double qt_inf() noexcept
static Q_DECL_CONST_FUNCTION bool qt_is_inf(double d)
GLboolean GLboolean GLboolean b
GLsizei const GLfloat * v
[13]
GLint GLint GLint GLint GLint x
[0]
GLboolean GLboolean GLboolean GLboolean a
[7]
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat GLfloat s1
GLenum GLuint GLenum GLsizei const GLchar * buf
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
GLsizei const GLchar *const * string
[0]
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
#define Q_ASSERT_X(cond, x, msg)
QStringView qToStringViewIgnoringNull(const QStringLike &s) noexcept
unsigned long long quint64
QList< QPair< QString, QString > > Map
QUrl url("example.com")
[constructor-url-reference]
char * toString(const MyType &t)
[31]
\inmodule QtCore \inheaderfile QtCborCommon \reentrant
\inmodule QtCore\reentrant
static ValidUtf8Result isValidUtf8(QByteArrayView in)
QStringView asStringView() const
QLatin1StringView asLatin1() const
const char * byte() const
QByteArray::size_type len
QByteArray asByteArrayView() const
QCborContainerPrivate * container