Get rid of the private v_cast<>() method

Replace it with QVariant::Private::get<>().

Change-Id: I801742300d9b15f748bb91fcd6cfa176d2057271
Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
This commit is contained in:
Lars Knoll 2020-07-12 21:32:34 +02:00
parent d1c3f81126
commit bfbac6be75
2 changed files with 187 additions and 213 deletions

View File

@ -124,9 +124,9 @@ static qlonglong qMetaTypeNumber(const QVariant::Private *d)
return qRound64(d->data.d); return qRound64(d->data.d);
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
return v_cast<QJsonValue>(d)->toDouble(); return d->get<QJsonValue>().toDouble();
case QMetaType::QCborValue: case QMetaType::QCborValue:
return v_cast<QCborValue>(d)->toInteger(); return d->get<QCborValue>().toInteger();
#endif #endif
} }
Q_ASSERT(false); Q_ASSERT(false);
@ -157,16 +157,16 @@ static qlonglong qConvertToNumber(const QVariant::Private *d, bool *ok, bool all
switch (uint(d->type().id())) { switch (uint(d->type().id())) {
case QMetaType::QString: { case QMetaType::QString: {
const QString *s = v_cast<QString>(d); const QString &s = d->get<QString>();
qlonglong l = s->toLongLong(ok); qlonglong l = s.toLongLong(ok);
if (*ok) if (*ok)
return l; return l;
if (allowStringToBool) { if (allowStringToBool) {
if (*s == QLatin1String("false") || *s == QLatin1String("0")) { if (s == QLatin1String("false") || s == QLatin1String("0")) {
*ok = true; *ok = true;
return 0; return 0;
} }
if (*s == QLatin1String("true") || *s == QLatin1String("1")) { if (s == QLatin1String("true") || s == QLatin1String("1")) {
*ok = true; *ok = true;
return 1; return 1;
} }
@ -174,18 +174,18 @@ static qlonglong qConvertToNumber(const QVariant::Private *d, bool *ok, bool all
return 0; return 0;
} }
case QMetaType::QChar: case QMetaType::QChar:
return v_cast<QChar>(d)->unicode(); return d->get<QChar>().unicode();
case QMetaType::QByteArray: case QMetaType::QByteArray:
return v_cast<QByteArray>(d)->toLongLong(ok); return d->get<QByteArray>().toLongLong(ok);
case QMetaType::Bool: case QMetaType::Bool:
return qlonglong(d->data.b); return qlonglong(d->data.b);
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (!v_cast<QCborValue>(d)->isInteger() && !v_cast<QCborValue>(d)->isDouble()) if (!d->get<QCborValue>().isInteger() && !d->get<QCborValue>().isDouble())
break; break;
return qMetaTypeNumber(d); return qMetaTypeNumber(d);
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
if (!v_cast<QJsonValue>(d)->isDouble()) if (!d->get<QJsonValue>().isDouble())
break; break;
Q_FALLTHROUGH(); Q_FALLTHROUGH();
#endif #endif
@ -231,7 +231,7 @@ static qreal qConvertToRealNumber(const QVariant::Private *d, bool *ok)
*ok = true; *ok = true;
switch (uint(d->type().id())) { switch (uint(d->type().id())) {
case QMetaType::QString: case QMetaType::QString:
return v_cast<QString>(d)->toDouble(ok); return d->get<QString>().toDouble(ok);
case QMetaType::Double: case QMetaType::Double:
return qreal(d->data.d); return qreal(d->data.d);
case QMetaType::Float: case QMetaType::Float:
@ -244,9 +244,9 @@ static qreal qConvertToRealNumber(const QVariant::Private *d, bool *ok)
return qreal(qMetaTypeUNumber(d)); return qreal(qMetaTypeUNumber(d));
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
return v_cast<QCborValue>(d)->toDouble(); return d->get<QCborValue>().toDouble();
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
return v_cast<QJsonValue>(d)->toDouble(); return d->get<QJsonValue>().toDouble();
#endif #endif
default: default:
// includes enum conversion as well as invalid types // includes enum conversion as well as invalid types
@ -260,22 +260,22 @@ static qulonglong qConvertToUnsignedNumber(const QVariant::Private *d, bool *ok)
switch (uint(d->type().id())) { switch (uint(d->type().id())) {
case QMetaType::QString: case QMetaType::QString:
return v_cast<QString>(d)->toULongLong(ok); return d->get<QString>().toULongLong(ok);
case QMetaType::QChar: case QMetaType::QChar:
return v_cast<QChar>(d)->unicode(); return d->get<QChar>().unicode();
case QMetaType::QByteArray: case QMetaType::QByteArray:
return v_cast<QByteArray>(d)->toULongLong(ok); return d->get<QByteArray>().toULongLong(ok);
case QMetaType::Bool: case QMetaType::Bool:
return qulonglong(d->data.b); return qulonglong(d->data.b);
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (v_cast<QCborValue>(d)->isDouble()) if (d->get<QCborValue>().isDouble())
return qulonglong(qConvertToRealNumber(d, ok)); return qulonglong(qConvertToRealNumber(d, ok));
if (!v_cast<QCborValue>(d)->isInteger()) if (!d->get<QCborValue>().isInteger())
return false; return false;
return qulonglong(qMetaTypeNumber(d)); return qulonglong(qMetaTypeNumber(d));
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
if (!v_cast<QJsonValue>(d)->isDouble()) if (!d->get<QJsonValue>().isDouble())
break; break;
Q_FALLTHROUGH(); Q_FALLTHROUGH();
#endif #endif
@ -317,7 +317,7 @@ static qulonglong qConvertToUnsignedNumber(const QVariant::Private *d, bool *ok)
template<typename TInput, typename LiteralWrapper> template<typename TInput, typename LiteralWrapper>
inline bool qt_convertToBool(const QVariant::Private *const d) inline bool qt_convertToBool(const QVariant::Private *const d)
{ {
TInput str = v_cast<TInput>(d)->toLower(); TInput str = d->get<TInput>().toLower();
return !(str.isEmpty() || str == LiteralWrapper("0") || str == LiteralWrapper("false")); return !(str.isEmpty() || str == LiteralWrapper("0") || str == LiteralWrapper("false"));
} }
@ -372,11 +372,11 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QUrl: case QMetaType::QUrl:
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QString: case QMetaType::QString:
*static_cast<QUrl *>(result) = QUrl(*v_cast<QString>(d)); *static_cast<QUrl *>(result) = QUrl(d->get<QString>());
break; break;
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (v_cast<QCborValue>(d)->isUrl()) { if (d->get<QCborValue>().isUrl()) {
*static_cast<QUrl *>(result) = v_cast<QCborValue>(d)->toUrl(); *static_cast<QUrl *>(result) = d->get<QCborValue>().toUrl();
break; break;
} }
return false; return false;
@ -389,7 +389,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QModelIndex: case QMetaType::QModelIndex:
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QPersistentModelIndex: case QMetaType::QPersistentModelIndex:
*static_cast<QModelIndex *>(result) = QModelIndex(*v_cast<QPersistentModelIndex>(d)); *static_cast<QModelIndex *>(result) = QModelIndex(d->get<QPersistentModelIndex>());
break; break;
default: default:
return false; return false;
@ -398,7 +398,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QPersistentModelIndex: case QMetaType::QPersistentModelIndex:
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QModelIndex: case QMetaType::QModelIndex:
*static_cast<QPersistentModelIndex *>(result) = QPersistentModelIndex(*v_cast<QModelIndex>(d)); *static_cast<QPersistentModelIndex *>(result) = QPersistentModelIndex(d->get<QModelIndex>());
break; break;
default: default:
return false; return false;
@ -409,7 +409,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QString *str = static_cast<QString *>(result); QString *str = static_cast<QString *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QChar: case QMetaType::QChar:
*str = *v_cast<QChar>(d); *str = d->get<QChar>();
break; break;
case QMetaType::Char: case QMetaType::Char:
case QMetaType::SChar: case QMetaType::SChar:
@ -436,43 +436,43 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break; break;
#if QT_CONFIG(datestring) #if QT_CONFIG(datestring)
case QMetaType::QDate: case QMetaType::QDate:
*str = v_cast<QDate>(d)->toString(Qt::ISODate); *str = d->get<QDate>().toString(Qt::ISODate);
break; break;
case QMetaType::QTime: case QMetaType::QTime:
*str = v_cast<QTime>(d)->toString(Qt::ISODateWithMs); *str = d->get<QTime>().toString(Qt::ISODateWithMs);
break; break;
case QMetaType::QDateTime: case QMetaType::QDateTime:
*str = v_cast<QDateTime>(d)->toString(Qt::ISODateWithMs); *str = d->get<QDateTime>().toString(Qt::ISODateWithMs);
break; break;
#endif #endif
case QMetaType::Bool: case QMetaType::Bool:
*str = d->data.b ? QStringLiteral("true") : QStringLiteral("false"); *str = d->data.b ? QStringLiteral("true") : QStringLiteral("false");
break; break;
case QMetaType::QByteArray: case QMetaType::QByteArray:
*str = QString::fromUtf8(v_cast<QByteArray>(d)->constData()); *str = QString::fromUtf8(d->get<QByteArray>().constData());
break; break;
case QMetaType::QStringList: case QMetaType::QStringList:
if (v_cast<QStringList>(d)->count() == 1) if (d->get<QStringList>().count() == 1)
*str = v_cast<QStringList>(d)->at(0); *str = d->get<QStringList>().at(0);
break; break;
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QUrl: case QMetaType::QUrl:
*str = v_cast<QUrl>(d)->toString(); *str = d->get<QUrl>().toString();
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
if (v_cast<QJsonValue>(d)->isString()) if (d->get<QJsonValue>().isString())
*str = v_cast<QJsonValue>(d)->toString(); *str = d->get<QJsonValue>().toString();
else if (!v_cast<QJsonValue>(d)->isNull()) else if (!d->get<QJsonValue>().isNull())
return false; return false;
break; break;
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (v_cast<QCborValue>(d)->isContainer() || v_cast<QCborValue>(d)->isTag()) if (d->get<QCborValue>().isContainer() || d->get<QCborValue>().isTag())
return false; return false;
*str = v_cast<QCborValue>(d)->toVariant().toString(); *str = d->get<QCborValue>().toVariant().toString();
break; break;
#endif #endif
case QMetaType::QUuid: case QMetaType::QUuid:
*str = v_cast<QUuid>(d)->toString(); *str = d->get<QUuid>().toString();
break; break;
case QMetaType::Nullptr: case QMetaType::Nullptr:
*str = QString(); *str = QString();
@ -520,7 +520,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QSize *s = static_cast<QSize *>(result); QSize *s = static_cast<QSize *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QSizeF: case QMetaType::QSizeF:
*s = v_cast<QSizeF>(d)->toSize(); *s = d->get<QSizeF>().toSize();
break; break;
default: default:
return false; return false;
@ -532,7 +532,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QSizeF *s = static_cast<QSizeF *>(result); QSizeF *s = static_cast<QSizeF *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QSize: case QMetaType::QSize:
*s = QSizeF(*(v_cast<QSize>(d))); *s = QSizeF(d->get<QSize>());
break; break;
default: default:
return false; return false;
@ -544,7 +544,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QLine *s = static_cast<QLine *>(result); QLine *s = static_cast<QLine *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QLineF: case QMetaType::QLineF:
*s = v_cast<QLineF>(d)->toLine(); *s = d->get<QLineF>().toLine();
break; break;
default: default:
return false; return false;
@ -556,7 +556,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QLineF *s = static_cast<QLineF *>(result); QLineF *s = static_cast<QLineF *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QLine: case QMetaType::QLine:
*s = QLineF(*(v_cast<QLine>(d))); *s = QLineF(d->get<QLine>());
break; break;
default: default:
return false; return false;
@ -567,14 +567,14 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QStringList: case QMetaType::QStringList:
if (d->type().id() == QMetaType::QVariantList) { if (d->type().id() == QMetaType::QVariantList) {
QStringList *slst = static_cast<QStringList *>(result); QStringList *slst = static_cast<QStringList *>(result);
const QVariantList *list = v_cast<QVariantList >(d); const QVariantList &list = d->get<QVariantList >();
const int size = list->size(); const int size = list.size();
slst->reserve(size); slst->reserve(size);
for (int i = 0; i < size; ++i) for (int i = 0; i < size; ++i)
slst->append(list->at(i).toString()); slst->append(list.at(i).toString());
} else if (d->type().id() == QMetaType::QString) { } else if (d->type().id() == QMetaType::QString) {
QStringList *slst = static_cast<QStringList *>(result); QStringList *slst = static_cast<QStringList *>(result);
*slst = QStringList(*v_cast<QString>(d)); *slst = QStringList(d->get<QString>());
} else { } else {
return false; return false;
} }
@ -582,10 +582,10 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QDate: { case QMetaType::QDate: {
QDate *dt = static_cast<QDate *>(result); QDate *dt = static_cast<QDate *>(result);
if (d->type().id() == QMetaType::QDateTime) if (d->type().id() == QMetaType::QDateTime)
*dt = v_cast<QDateTime>(d)->date(); *dt = d->get<QDateTime>().date();
#if QT_CONFIG(datestring) #if QT_CONFIG(datestring)
else if (d->type().id() == QMetaType::QString) else if (d->type().id() == QMetaType::QString)
*dt = QDate::fromString(*v_cast<QString>(d), Qt::ISODate); *dt = QDate::fromString(d->get<QString>(), Qt::ISODate);
#endif #endif
else else
return false; return false;
@ -596,11 +596,11 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QTime *t = static_cast<QTime *>(result); QTime *t = static_cast<QTime *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QDateTime: case QMetaType::QDateTime:
*t = v_cast<QDateTime>(d)->time(); *t = d->get<QDateTime>().time();
break; break;
#if QT_CONFIG(datestring) #if QT_CONFIG(datestring)
case QMetaType::QString: case QMetaType::QString:
*t = QTime::fromString(*v_cast<QString>(d), Qt::ISODate); *t = QTime::fromString(d->get<QString>(), Qt::ISODate);
break; break;
#endif #endif
default: default:
@ -613,19 +613,19 @@ static bool convert(const QVariant::Private *d, int t, void *result)
switch (d->type().id()) { switch (d->type().id()) {
#if QT_CONFIG(datestring) #if QT_CONFIG(datestring)
case QMetaType::QString: case QMetaType::QString:
*dt = QDateTime::fromString(*v_cast<QString>(d), Qt::ISODate); *dt = QDateTime::fromString(d->get<QString>(), Qt::ISODate);
break; break;
# ifndef QT_BOOTSTRAPPED # ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (v_cast<QCborValue>(d)->isDateTime()) if (d->get<QCborValue>().isDateTime())
*dt = v_cast<QCborValue>(d)->toDateTime(); *dt = d->get<QCborValue>().toDateTime();
else else
return false; return false;
break; break;
# endif # endif
#endif #endif
case QMetaType::QDate: case QMetaType::QDate:
*dt = v_cast<QDate>(d)->startOfDay(); *dt = d->get<QDate>().startOfDay();
break; break;
default: default:
return false; return false;
@ -636,7 +636,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QByteArray *ba = static_cast<QByteArray *>(result); QByteArray *ba = static_cast<QByteArray *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QString: case QMetaType::QString:
*ba = v_cast<QString>(d)->toUtf8(); *ba = d->get<QString>().toUtf8();
break; break;
case QMetaType::Double: case QMetaType::Double:
*ba = QByteArray::number(d->data.d, 'g', QLocale::FloatingPointShortest); *ba = QByteArray::number(d->data.d, 'g', QLocale::FloatingPointShortest);
@ -665,15 +665,15 @@ static bool convert(const QVariant::Private *d, int t, void *result)
*ba = QByteArray(d->data.b ? "true" : "false"); *ba = QByteArray(d->data.b ? "true" : "false");
break; break;
case QMetaType::QUuid: case QMetaType::QUuid:
*ba = v_cast<QUuid>(d)->toByteArray(); *ba = d->get<QUuid>().toByteArray();
break; break;
case QMetaType::Nullptr: case QMetaType::Nullptr:
*ba = QByteArray(); *ba = QByteArray();
break; break;
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (v_cast<QCborValue>(d)->isByteArray()) if (d->get<QCborValue>().isByteArray())
*ba = v_cast<QCborValue>(d)->toByteArray(); *ba = d->get<QCborValue>().toByteArray();
else else
return false; return false;
break; break;
@ -736,7 +736,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
*b = qt_convertToBool<QString, QLatin1String>(d); *b = qt_convertToBool<QString, QLatin1String>(d);
break; break;
case QMetaType::QChar: case QMetaType::QChar:
*b = !v_cast<QChar>(d)->isNull(); *b = !d->get<QChar>().isNull();
break; break;
case QMetaType::Double: case QMetaType::Double:
case QMetaType::Int: case QMetaType::Int:
@ -757,13 +757,13 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break; break;
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
*b = v_cast<QCborValue>(d)->toBool(); *b = d->get<QCborValue>().toBool();
if (!v_cast<QCborValue>(d)->isBool()) if (!d->get<QCborValue>().isBool())
return false; return false;
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
*b = v_cast<QJsonValue>(d)->toBool(false); *b = d->get<QJsonValue>().toBool(false);
if (!v_cast<QJsonValue>(d)->isBool()) if (!d->get<QJsonValue>().isBool())
return false; return false;
break; break;
#endif #endif
@ -777,10 +777,10 @@ static bool convert(const QVariant::Private *d, int t, void *result)
double *f = static_cast<double *>(result); double *f = static_cast<double *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QString: case QMetaType::QString:
*f = v_cast<QString>(d)->toDouble(&ok); *f = d->get<QString>().toDouble(&ok);
return ok; return ok;
case QMetaType::QByteArray: case QMetaType::QByteArray:
*f = v_cast<QByteArray>(d)->toDouble(&ok); *f = d->get<QByteArray>().toDouble(&ok);
return ok; return ok;
case QMetaType::Bool: case QMetaType::Bool:
*f = double(d->data.b); *f = double(d->data.b);
@ -805,13 +805,13 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break; break;
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
*f = v_cast<QCborValue>(d)->toDouble(); *f = d->get<QCborValue>().toDouble();
if (!v_cast<QCborValue>(d)->isDouble()) if (!d->get<QCborValue>().isDouble())
return false; return false;
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
*f = v_cast<QJsonValue>(d)->toDouble(0.0); *f = d->get<QJsonValue>().toDouble(0.0);
if (!v_cast<QJsonValue>(d)->isDouble()) if (!d->get<QJsonValue>().isDouble())
return false; return false;
break; break;
#endif #endif
@ -825,10 +825,10 @@ static bool convert(const QVariant::Private *d, int t, void *result)
float *f = static_cast<float *>(result); float *f = static_cast<float *>(result);
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QString: case QMetaType::QString:
*f = v_cast<QString>(d)->toFloat(&ok); *f = d->get<QString>().toFloat(&ok);
return ok; return ok;
case QMetaType::QByteArray: case QMetaType::QByteArray:
*f = v_cast<QByteArray>(d)->toFloat(&ok); *f = d->get<QByteArray>().toFloat(&ok);
return ok; return ok;
case QMetaType::Bool: case QMetaType::Bool:
*f = float(d->data.b); *f = float(d->data.b);
@ -853,13 +853,13 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break; break;
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
*f = v_cast<QCborValue>(d)->toDouble(); *f = d->get<QCborValue>().toDouble();
if (!v_cast<QCborValue>(d)->isDouble()) if (!d->get<QCborValue>().isDouble())
return false; return false;
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
*f = v_cast<QJsonValue>(d)->toDouble(0.0); *f = d->get<QJsonValue>().toDouble(0.0);
if (!v_cast<QJsonValue>(d)->isDouble()) if (!d->get<QJsonValue>().isDouble())
return false; return false;
break; break;
#endif #endif
@ -872,24 +872,24 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QVariantList: case QMetaType::QVariantList:
if (d->type().id() == QMetaType::QStringList) { if (d->type().id() == QMetaType::QStringList) {
QVariantList *lst = static_cast<QVariantList *>(result); QVariantList *lst = static_cast<QVariantList *>(result);
const QStringList *slist = v_cast<QStringList>(d); const QStringList &slist = d->get<QStringList>();
const int size = slist->size(); const int size = slist.size();
lst->reserve(size); lst->reserve(size);
for (int i = 0; i < size; ++i) for (int i = 0; i < size; ++i)
lst->append(QVariant(slist->at(i))); lst->append(QVariant(slist.at(i)));
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
} else if (d->type().id() == QMetaType::QCborValue) { } else if (d->type().id() == QMetaType::QCborValue) {
if (!v_cast<QCborValue>(d)->isArray()) if (!d->get<QCborValue>().isArray())
return false; return false;
*static_cast<QVariantList *>(result) = v_cast<QCborValue>(d)->toArray().toVariantList(); *static_cast<QVariantList *>(result) = d->get<QCborValue>().toArray().toVariantList();
} else if (d->type().id() == QMetaType::QCborArray) { } else if (d->type().id() == QMetaType::QCborArray) {
*static_cast<QVariantList *>(result) = v_cast<QCborArray>(d)->toVariantList(); *static_cast<QVariantList *>(result) = d->get<QCborArray>().toVariantList();
} else if (d->type().id() == QMetaType::QJsonValue) { } else if (d->type().id() == QMetaType::QJsonValue) {
if (!v_cast<QJsonValue>(d)->isArray()) if (!d->get<QJsonValue>().isArray())
return false; return false;
*static_cast<QVariantList *>(result) = v_cast<QJsonValue>(d)->toArray().toVariantList(); *static_cast<QVariantList *>(result) = d->get<QJsonValue>().toArray().toVariantList();
} else if (d->type().id() == QMetaType::QJsonArray) { } else if (d->type().id() == QMetaType::QJsonArray) {
*static_cast<QVariantList *>(result) = v_cast<QJsonArray>(d)->toVariantList(); *static_cast<QVariantList *>(result) = d->get<QJsonArray>().toVariantList();
#endif #endif
} else { } else {
return false; return false;
@ -898,23 +898,23 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QVariantMap: case QMetaType::QVariantMap:
if (d->type().id() == QMetaType::QVariantHash) { if (d->type().id() == QMetaType::QVariantHash) {
QVariantMap *map = static_cast<QVariantMap *>(result); QVariantMap *map = static_cast<QVariantMap *>(result);
const QVariantHash *hash = v_cast<QVariantHash>(d); const QVariantHash &hash = d->get<QVariantHash>();
const auto end = hash->end(); const auto end = hash.end();
for (auto it = hash->begin(); it != end; ++it) for (auto it = hash.begin(); it != end; ++it)
map->insert(it.key(), it.value()); map->insert(it.key(), it.value());
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
} else if (d->type().id() == QMetaType::QCborValue) { } else if (d->type().id() == QMetaType::QCborValue) {
if (!v_cast<QCborValue>(d)->isMap()) if (!d->get<QCborValue>().isMap())
return false; return false;
*static_cast<QVariantMap *>(result) = v_cast<QCborValue>(d)->toMap().toVariantMap(); *static_cast<QVariantMap *>(result) = d->get<QCborValue>().toMap().toVariantMap();
} else if (d->type().id() == QMetaType::QCborMap) { } else if (d->type().id() == QMetaType::QCborMap) {
*static_cast<QVariantMap *>(result) = v_cast<QCborMap>(d)->toVariantMap(); *static_cast<QVariantMap *>(result) = d->get<QCborMap>().toVariantMap();
} else if (d->type().id() == QMetaType::QJsonValue) { } else if (d->type().id() == QMetaType::QJsonValue) {
if (!v_cast<QJsonValue>(d)->isObject()) if (!d->get<QJsonValue>().isObject())
return false; return false;
*static_cast<QVariantMap *>(result) = v_cast<QJsonValue>(d)->toObject().toVariantMap(); *static_cast<QVariantMap *>(result) = d->get<QJsonValue>().toObject().toVariantMap();
} else if (d->type().id() == QMetaType::QJsonObject) { } else if (d->type().id() == QMetaType::QJsonObject) {
*static_cast<QVariantMap *>(result) = v_cast<QJsonObject>(d)->toVariantMap(); *static_cast<QVariantMap *>(result) = d->get<QJsonObject>().toVariantMap();
#endif #endif
} else { } else {
return false; return false;
@ -923,23 +923,23 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QVariantHash: case QMetaType::QVariantHash:
if (d->type().id() == QMetaType::QVariantMap) { if (d->type().id() == QMetaType::QVariantMap) {
QVariantHash *hash = static_cast<QVariantHash *>(result); QVariantHash *hash = static_cast<QVariantHash *>(result);
const QVariantMap *map = v_cast<QVariantMap>(d); const QVariantMap &map = d->get<QVariantMap>();
const auto end = map->end(); const auto end = map.end();
for (auto it = map->begin(); it != end; ++it) for (auto it = map.begin(); it != end; ++it)
hash->insert(it.key(), it.value()); hash->insert(it.key(), it.value());
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
} else if (d->type().id() == QMetaType::QCborValue) { } else if (d->type().id() == QMetaType::QCborValue) {
if (!v_cast<QCborValue>(d)->isMap()) if (!d->get<QCborValue>().isMap())
return false; return false;
*static_cast<QVariantHash *>(result) = v_cast<QCborValue>(d)->toMap().toVariantHash(); *static_cast<QVariantHash *>(result) = d->get<QCborValue>().toMap().toVariantHash();
} else if (d->type().id() == QMetaType::QCborMap) { } else if (d->type().id() == QMetaType::QCborMap) {
*static_cast<QVariantHash *>(result) = v_cast<QCborMap>(d)->toVariantHash(); *static_cast<QVariantHash *>(result) = d->get<QCborMap>().toVariantHash();
} else if (d->type().id() == QMetaType::QJsonValue) { } else if (d->type().id() == QMetaType::QJsonValue) {
if (!v_cast<QJsonValue>(d)->isObject()) if (!d->get<QJsonValue>().isObject())
return false; return false;
*static_cast<QVariantHash *>(result) = v_cast<QJsonValue>(d)->toObject().toVariantHash(); *static_cast<QVariantHash *>(result) = d->get<QJsonValue>().toObject().toVariantHash();
} else if (d->type().id() == QMetaType::QJsonObject) { } else if (d->type().id() == QMetaType::QJsonObject) {
*static_cast<QVariantHash *>(result) = v_cast<QJsonObject>(d)->toVariantHash(); *static_cast<QVariantHash *>(result) = d->get<QJsonObject>().toVariantHash();
#endif #endif
} else { } else {
return false; return false;
@ -948,25 +948,25 @@ static bool convert(const QVariant::Private *d, int t, void *result)
#ifndef QT_NO_GEOM_VARIANT #ifndef QT_NO_GEOM_VARIANT
case QMetaType::QRect: case QMetaType::QRect:
if (d->type().id() == QMetaType::QRectF) if (d->type().id() == QMetaType::QRectF)
*static_cast<QRect *>(result) = (v_cast<QRectF>(d))->toRect(); *static_cast<QRect *>(result) = d->get<QRectF>().toRect();
else else
return false; return false;
break; break;
case QMetaType::QRectF: case QMetaType::QRectF:
if (d->type().id() == QMetaType::QRect) if (d->type().id() == QMetaType::QRect)
*static_cast<QRectF *>(result) = *v_cast<QRect>(d); *static_cast<QRectF *>(result) = d->get<QRect>();
else else
return false; return false;
break; break;
case QMetaType::QPointF: case QMetaType::QPointF:
if (d->type().id() == QMetaType::QPoint) if (d->type().id() == QMetaType::QPoint)
*static_cast<QPointF *>(result) = *v_cast<QPoint>(d); *static_cast<QPointF *>(result) = d->get<QPoint>();
else else
return false; return false;
break; break;
case QMetaType::QPoint: case QMetaType::QPoint:
if (d->type().id() == QMetaType::QPointF) if (d->type().id() == QMetaType::QPointF)
*static_cast<QPoint *>(result) = (v_cast<QPointF>(d))->toPoint(); *static_cast<QPoint *>(result) = d->get<QPointF>().toPoint();
else else
return false; return false;
break; break;
@ -979,16 +979,16 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QUuid: case QMetaType::QUuid:
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QString: case QMetaType::QString:
*static_cast<QUuid *>(result) = QUuid(*v_cast<QString>(d)); *static_cast<QUuid *>(result) = QUuid(d->get<QString>());
break; break;
case QMetaType::QByteArray: case QMetaType::QByteArray:
*static_cast<QUuid *>(result) = QUuid(*v_cast<QByteArray>(d)); *static_cast<QUuid *>(result) = QUuid(d->get<QByteArray>());
break; break;
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (!v_cast<QCborValue>(d)->isUuid()) if (!d->get<QCborValue>().isUuid())
return false; return false;
*static_cast<QUuid *>(result) = v_cast<QCborValue>(d)->toUuid(); *static_cast<QUuid *>(result) = d->get<QCborValue>().toUuid();
break; break;
#endif #endif
default: default:
@ -999,11 +999,11 @@ static bool convert(const QVariant::Private *d, int t, void *result)
*static_cast<std::nullptr_t *>(result) = nullptr; *static_cast<std::nullptr_t *>(result) = nullptr;
if (QMetaType::typeFlags(t) & (QMetaType::PointerToGadget | QMetaType::PointerToQObject) if (QMetaType::typeFlags(t) & (QMetaType::PointerToGadget | QMetaType::PointerToQObject)
|| d->type().id() == QMetaType::VoidStar) { || d->type().id() == QMetaType::VoidStar) {
if (v_cast<const void *>(d) == nullptr) if (d->get<const void *>() == nullptr)
break; break;
} }
#ifndef QT_BOOTSTRAPPED #ifndef QT_BOOTSTRAPPED
if (d->type().id() == QMetaType::QCborValue && v_cast<QCborValue>(d)->isNull()) if (d->type().id() == QMetaType::QCborValue && d->get<QCborValue>().isNull())
break; break;
#endif #endif
return false; return false;
@ -1012,9 +1012,9 @@ static bool convert(const QVariant::Private *d, int t, void *result)
#if QT_CONFIG(regularexpression) #if QT_CONFIG(regularexpression)
case QMetaType::QRegularExpression: case QMetaType::QRegularExpression:
if (d->type().id() != QMetaType::QCborValue if (d->type().id() != QMetaType::QCborValue
|| !v_cast<QCborValue>(d)->isRegularExpression()) || !d->get<QCborValue>().isRegularExpression())
return false; return false;
*static_cast<QRegularExpression *>(result) = v_cast<QCborValue>(d)->toRegularExpression(); *static_cast<QRegularExpression *>(result) = d->get<QCborValue>().toRegularExpression();
break; break;
#endif #endif
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
@ -1042,39 +1042,39 @@ static bool convert(const QVariant::Private *d, int t, void *result)
Q_ASSERT(ok); Q_ASSERT(ok);
break; break;
case QMetaType::QString: case QMetaType::QString:
*static_cast<QJsonValue *>(result) = QJsonValue(*v_cast<QString>(d)); *static_cast<QJsonValue *>(result) = QJsonValue(d->get<QString>());
break; break;
case QMetaType::QStringList: case QMetaType::QStringList:
*static_cast<QJsonValue *>(result) = QJsonValue(QJsonArray::fromStringList(*v_cast<QStringList>(d))); *static_cast<QJsonValue *>(result) = QJsonValue(QJsonArray::fromStringList(d->get<QStringList>()));
break; break;
case QMetaType::QVariantList: case QMetaType::QVariantList:
*static_cast<QJsonValue *>(result) = QJsonValue(QJsonArray::fromVariantList(*v_cast<QVariantList>(d))); *static_cast<QJsonValue *>(result) = QJsonValue(QJsonArray::fromVariantList(d->get<QVariantList>()));
break; break;
case QMetaType::QVariantMap: case QMetaType::QVariantMap:
*static_cast<QJsonValue *>(result) = QJsonValue(QJsonObject::fromVariantMap(*v_cast<QVariantMap>(d))); *static_cast<QJsonValue *>(result) = QJsonValue(QJsonObject::fromVariantMap(d->get<QVariantMap>()));
break; break;
case QMetaType::QVariantHash: case QMetaType::QVariantHash:
*static_cast<QJsonValue *>(result) = QJsonValue(QJsonObject::fromVariantHash(*v_cast<QVariantHash>(d))); *static_cast<QJsonValue *>(result) = QJsonValue(QJsonObject::fromVariantHash(d->get<QVariantHash>()));
break; break;
case QMetaType::QJsonObject: case QMetaType::QJsonObject:
*static_cast<QJsonValue *>(result) = *v_cast<QJsonObject>(d); *static_cast<QJsonValue *>(result) = d->get<QJsonObject>();
break; break;
case QMetaType::QJsonArray: case QMetaType::QJsonArray:
*static_cast<QJsonValue *>(result) = *v_cast<QJsonArray>(d); *static_cast<QJsonValue *>(result) = d->get<QJsonArray>();
break; break;
case QMetaType::QJsonDocument: { case QMetaType::QJsonDocument: {
QJsonDocument doc = *v_cast<QJsonDocument>(d); QJsonDocument doc = d->get<QJsonDocument>();
*static_cast<QJsonValue *>(result) = doc.isArray() ? QJsonValue(doc.array()) : QJsonValue(doc.object()); *static_cast<QJsonValue *>(result) = doc.isArray() ? QJsonValue(doc.array()) : QJsonValue(doc.object());
break; break;
} }
case QMetaType::QCborValue: case QMetaType::QCborValue:
*static_cast<QJsonValue *>(result) = v_cast<QCborValue>(d)->toJsonValue(); *static_cast<QJsonValue *>(result) = d->get<QCborValue>().toJsonValue();
break; break;
case QMetaType::QCborMap: case QMetaType::QCborMap:
*static_cast<QJsonValue *>(result) = v_cast<QCborMap>(d)->toJsonObject(); *static_cast<QJsonValue *>(result) = d->get<QCborMap>().toJsonObject();
break; break;
case QMetaType::QCborArray: case QMetaType::QCborArray:
*static_cast<QJsonValue *>(result) = v_cast<QCborArray>(d)->toJsonArray(); *static_cast<QJsonValue *>(result) = d->get<QCborArray>().toJsonArray();
break; break;
default: default:
*static_cast<QJsonValue *>(result) = QJsonValue(QJsonValue::Undefined); *static_cast<QJsonValue *>(result) = QJsonValue(QJsonValue::Undefined);
@ -1084,28 +1084,28 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QJsonArray: case QMetaType::QJsonArray:
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QStringList: case QMetaType::QStringList:
*static_cast<QJsonArray *>(result) = QJsonArray::fromStringList(*v_cast<QStringList>(d)); *static_cast<QJsonArray *>(result) = QJsonArray::fromStringList(d->get<QStringList>());
break; break;
case QMetaType::QVariantList: case QMetaType::QVariantList:
*static_cast<QJsonArray *>(result) = QJsonArray::fromVariantList(*v_cast<QVariantList>(d)); *static_cast<QJsonArray *>(result) = QJsonArray::fromVariantList(d->get<QVariantList>());
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
if (!v_cast<QJsonValue>(d)->isArray()) if (!d->get<QJsonValue>().isArray())
return false; return false;
*static_cast<QJsonArray *>(result) = v_cast<QJsonValue>(d)->toArray(); *static_cast<QJsonArray *>(result) = d->get<QJsonValue>().toArray();
break; break;
case QMetaType::QJsonDocument: case QMetaType::QJsonDocument:
if (!v_cast<QJsonDocument>(d)->isArray()) if (!d->get<QJsonDocument>().isArray())
return false; return false;
*static_cast<QJsonArray *>(result) = v_cast<QJsonDocument>(d)->array(); *static_cast<QJsonArray *>(result) = d->get<QJsonDocument>().array();
break; break;
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (!v_cast<QCborValue>(d)->isArray()) if (!d->get<QCborValue>().isArray())
return false; return false;
*static_cast<QJsonArray *>(result) = v_cast<QCborValue>(d)->toArray().toJsonArray(); *static_cast<QJsonArray *>(result) = d->get<QCborValue>().toArray().toJsonArray();
break; break;
case QMetaType::QCborArray: case QMetaType::QCborArray:
*static_cast<QJsonArray *>(result) = v_cast<QCborArray>(d)->toJsonArray(); *static_cast<QJsonArray *>(result) = d->get<QCborArray>().toJsonArray();
break; break;
default: default:
return false; return false;
@ -1114,36 +1114,36 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QJsonObject: case QMetaType::QJsonObject:
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QVariantMap: case QMetaType::QVariantMap:
*static_cast<QJsonObject *>(result) = QJsonObject::fromVariantMap(*v_cast<QVariantMap>(d)); *static_cast<QJsonObject *>(result) = QJsonObject::fromVariantMap(d->get<QVariantMap>());
break; break;
case QMetaType::QVariantHash: case QMetaType::QVariantHash:
*static_cast<QJsonObject *>(result) = QJsonObject::fromVariantHash(*v_cast<QVariantHash>(d)); *static_cast<QJsonObject *>(result) = QJsonObject::fromVariantHash(d->get<QVariantHash>());
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
if (!v_cast<QJsonValue>(d)->isObject()) if (!d->get<QJsonValue>().isObject())
return false; return false;
*static_cast<QJsonObject *>(result) = v_cast<QJsonValue>(d)->toObject(); *static_cast<QJsonObject *>(result) = d->get<QJsonValue>().toObject();
break; break;
case QMetaType::QJsonDocument: case QMetaType::QJsonDocument:
if (v_cast<QJsonDocument>(d)->isArray()) if (d->get<QJsonDocument>().isArray())
return false; return false;
*static_cast<QJsonObject *>(result) = v_cast<QJsonDocument>(d)->object(); *static_cast<QJsonObject *>(result) = d->get<QJsonDocument>().object();
break; break;
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (!v_cast<QCborValue>(d)->isMap()) if (!d->get<QCborValue>().isMap())
return false; return false;
*static_cast<QJsonObject *>(result) = v_cast<QCborValue>(d)->toMap().toJsonObject(); *static_cast<QJsonObject *>(result) = d->get<QCborValue>().toMap().toJsonObject();
break; break;
case QMetaType::QCborMap: case QMetaType::QCborMap:
*static_cast<QJsonObject *>(result) = v_cast<QCborMap>(d)->toJsonObject(); *static_cast<QJsonObject *>(result) = d->get<QCborMap>().toJsonObject();
break; break;
default: default:
return false; return false;
} }
break; break;
case QMetaType::QCborSimpleType: case QMetaType::QCborSimpleType:
if (d->type().id() == QMetaType::QCborValue && v_cast<QCborValue>(d)->isSimpleType()) { if (d->type().id() == QMetaType::QCborValue && d->get<QCborValue>().isSimpleType()) {
*static_cast<QCborSimpleType *>(result) = v_cast<QCborValue>(d)->toSimpleType(); *static_cast<QCborSimpleType *>(result) = d->get<QCborValue>().toSimpleType();
break; break;
} }
return false; return false;
@ -1175,51 +1175,51 @@ static bool convert(const QVariant::Private *d, int t, void *result)
Q_ASSERT(ok); Q_ASSERT(ok);
break; break;
case QMetaType::QString: case QMetaType::QString:
*static_cast<QCborValue *>(result) = *v_cast<QString>(d); *static_cast<QCborValue *>(result) = d->get<QString>();
break; break;
case QMetaType::QStringList: case QMetaType::QStringList:
*static_cast<QCborValue *>(result) = QCborArray::fromStringList(*v_cast<QStringList>(d)); *static_cast<QCborValue *>(result) = QCborArray::fromStringList(d->get<QStringList>());
break; break;
case QMetaType::QByteArray: case QMetaType::QByteArray:
*static_cast<QCborValue *>(result) = *v_cast<QByteArray>(d); *static_cast<QCborValue *>(result) = d->get<QByteArray>();
break; break;
case QMetaType::QDate: case QMetaType::QDate:
*static_cast<QCborValue *>(result) = QCborValue(v_cast<QDate>(d)->startOfDay()); *static_cast<QCborValue *>(result) = QCborValue(d->get<QDate>().startOfDay());
break; break;
case QMetaType::QDateTime: case QMetaType::QDateTime:
*static_cast<QCborValue *>(result) = QCborValue(*v_cast<QDateTime>(d)); *static_cast<QCborValue *>(result) = QCborValue(d->get<QDateTime>());
break; break;
case QMetaType::QUrl: case QMetaType::QUrl:
*static_cast<QCborValue *>(result) = QCborValue(*v_cast<QUrl>(d)); *static_cast<QCborValue *>(result) = QCborValue(d->get<QUrl>());
break; break;
#if QT_CONFIG(regularexpression) #if QT_CONFIG(regularexpression)
case QMetaType::QRegularExpression: case QMetaType::QRegularExpression:
*static_cast<QCborValue *>(result) = QCborValue(*v_cast<QRegularExpression>(d)); *static_cast<QCborValue *>(result) = QCborValue(d->get<QRegularExpression>());
break; break;
#endif #endif
case QMetaType::QUuid: case QMetaType::QUuid:
*static_cast<QCborValue *>(result) = QCborValue(*v_cast<QUuid>(d)); *static_cast<QCborValue *>(result) = QCborValue(d->get<QUuid>());
break; break;
case QMetaType::QVariantList: case QMetaType::QVariantList:
*static_cast<QCborValue *>(result) = QCborArray::fromVariantList(*v_cast<QVariantList>(d)); *static_cast<QCborValue *>(result) = QCborArray::fromVariantList(d->get<QVariantList>());
break; break;
case QMetaType::QVariantMap: case QMetaType::QVariantMap:
*static_cast<QCborValue *>(result) = QCborMap::fromVariantMap(*v_cast<QVariantMap>(d)); *static_cast<QCborValue *>(result) = QCborMap::fromVariantMap(d->get<QVariantMap>());
break; break;
case QMetaType::QVariantHash: case QMetaType::QVariantHash:
*static_cast<QCborValue *>(result) = QCborMap::fromVariantHash(*v_cast<QVariantHash>(d)); *static_cast<QCborValue *>(result) = QCborMap::fromVariantHash(d->get<QVariantHash>());
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
*static_cast<QCborValue *>(result) = QCborValue::fromJsonValue(*v_cast<QJsonValue>(d)); *static_cast<QCborValue *>(result) = QCborValue::fromJsonValue(d->get<QJsonValue>());
break; break;
case QMetaType::QJsonObject: case QMetaType::QJsonObject:
*static_cast<QCborValue *>(result) = QCborMap::fromJsonObject(*v_cast<QJsonObject>(d)); *static_cast<QCborValue *>(result) = QCborMap::fromJsonObject(d->get<QJsonObject>());
break; break;
case QMetaType::QJsonArray: case QMetaType::QJsonArray:
*static_cast<QCborValue *>(result) = QCborArray::fromJsonArray(*v_cast<QJsonArray>(d)); *static_cast<QCborValue *>(result) = QCborArray::fromJsonArray(d->get<QJsonArray>());
break; break;
case QMetaType::QJsonDocument: { case QMetaType::QJsonDocument: {
QJsonDocument doc = *v_cast<QJsonDocument>(d); QJsonDocument doc = d->get<QJsonDocument>();
if (doc.isArray()) if (doc.isArray())
*static_cast<QCborValue *>(result) = QCborArray::fromJsonArray(doc.array()); *static_cast<QCborValue *>(result) = QCborArray::fromJsonArray(doc.array());
else else
@ -1227,13 +1227,13 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break; break;
} }
case QMetaType::QCborSimpleType: case QMetaType::QCborSimpleType:
*static_cast<QCborValue *>(result) = *v_cast<QCborSimpleType>(d); *static_cast<QCborValue *>(result) = d->get<QCborSimpleType>();
break; break;
case QMetaType::QCborMap: case QMetaType::QCborMap:
*static_cast<QCborValue *>(result) = *v_cast<QCborMap>(d); *static_cast<QCborValue *>(result) = d->get<QCborMap>();
break; break;
case QMetaType::QCborArray: case QMetaType::QCborArray:
*static_cast<QCborValue *>(result) = *v_cast<QCborArray>(d); *static_cast<QCborValue *>(result) = d->get<QCborArray>();
break; break;
default: default:
*static_cast<QCborValue *>(result) = {}; *static_cast<QCborValue *>(result) = {};
@ -1243,28 +1243,28 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QCborArray: case QMetaType::QCborArray:
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QStringList: case QMetaType::QStringList:
*static_cast<QCborArray *>(result) = QCborArray::fromStringList(*v_cast<QStringList>(d)); *static_cast<QCborArray *>(result) = QCborArray::fromStringList(d->get<QStringList>());
break; break;
case QMetaType::QVariantList: case QMetaType::QVariantList:
*static_cast<QCborArray *>(result) = QCborArray::fromVariantList(*v_cast<QVariantList>(d)); *static_cast<QCborArray *>(result) = QCborArray::fromVariantList(d->get<QVariantList>());
break; break;
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (!v_cast<QCborValue>(d)->isArray()) if (!d->get<QCborValue>().isArray())
return false; return false;
*static_cast<QCborArray *>(result) = v_cast<QCborValue>(d)->toArray(); *static_cast<QCborArray *>(result) = d->get<QCborValue>().toArray();
break; break;
case QMetaType::QJsonDocument: case QMetaType::QJsonDocument:
if (!v_cast<QJsonDocument>(d)->isArray()) if (!d->get<QJsonDocument>().isArray())
return false; return false;
*static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(v_cast<QJsonDocument>(d)->array()); *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(d->get<QJsonDocument>().array());
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
if (!v_cast<QJsonValue>(d)->isArray()) if (!d->get<QJsonValue>().isArray())
return false; return false;
*static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(v_cast<QJsonValue>(d)->toArray()); *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(d->get<QJsonValue>().toArray());
break; break;
case QMetaType::QJsonArray: case QMetaType::QJsonArray:
*static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(*v_cast<QJsonArray>(d)); *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(d->get<QJsonArray>());
break; break;
default: default:
return false; return false;
@ -1273,28 +1273,28 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QCborMap: case QMetaType::QCborMap:
switch (d->type().id()) { switch (d->type().id()) {
case QMetaType::QVariantMap: case QMetaType::QVariantMap:
*static_cast<QCborMap *>(result) = QCborMap::fromVariantMap(*v_cast<QVariantMap>(d)); *static_cast<QCborMap *>(result) = QCborMap::fromVariantMap(d->get<QVariantMap>());
break; break;
case QMetaType::QVariantHash: case QMetaType::QVariantHash:
*static_cast<QCborMap *>(result) = QCborMap::fromVariantHash(*v_cast<QVariantHash>(d)); *static_cast<QCborMap *>(result) = QCborMap::fromVariantHash(d->get<QVariantHash>());
break; break;
case QMetaType::QCborValue: case QMetaType::QCborValue:
if (!v_cast<QCborValue>(d)->isMap()) if (!d->get<QCborValue>().isMap())
return false; return false;
*static_cast<QCborMap *>(result) = v_cast<QCborValue>(d)->toMap(); *static_cast<QCborMap *>(result) = d->get<QCborValue>().toMap();
break; break;
case QMetaType::QJsonDocument: case QMetaType::QJsonDocument:
if (v_cast<QJsonDocument>(d)->isArray()) if (d->get<QJsonDocument>().isArray())
return false; return false;
*static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(v_cast<QJsonDocument>(d)->object()); *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(d->get<QJsonDocument>().object());
break; break;
case QMetaType::QJsonValue: case QMetaType::QJsonValue:
if (!v_cast<QJsonValue>(d)->isObject()) if (!d->get<QJsonValue>().isObject())
return false; return false;
*static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(v_cast<QJsonValue>(d)->toObject()); *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(d->get<QJsonValue>().toObject());
break; break;
case QMetaType::QJsonObject: case QMetaType::QJsonObject:
*static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(*v_cast<QJsonObject>(d)); *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(d->get<QJsonObject>());
break; break;
default: default:
return false; return false;
@ -1308,8 +1308,8 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QMetaEnum en = metaEnumFromType(QMetaType(t)); QMetaEnum en = metaEnumFromType(QMetaType(t));
if (en.isValid()) { if (en.isValid()) {
QByteArray keys = (d->type().id() == QMetaType::QString) QByteArray keys = (d->type().id() == QMetaType::QString)
? v_cast<QString>(d)->toUtf8() ? d->get<QString>().toUtf8()
: *v_cast<QByteArray>(d); : d->get<QByteArray>();
int value = en.keysToValue(keys.constData(), &ok); int value = en.keysToValue(keys.constData(), &ok);
if (ok) { if (ok) {
switch (QMetaType::sizeOf(t)) { switch (QMetaType::sizeOf(t)) {
@ -2470,7 +2470,7 @@ inline T qVariantToHelper(const QVariant::Private &d)
{ {
QMetaType targetType = QMetaType::fromType<T>(); QMetaType targetType = QMetaType::fromType<T>();
if (d.type() == targetType) if (d.type() == targetType)
return *v_cast<T>(&d); return d.get<T>();
T ret; T ret;
if (d.type().id() >= QMetaType::LastCoreType || targetType.id() >= QMetaType::LastCoreType) { if (d.type().id() >= QMetaType::LastCoreType || targetType.id() >= QMetaType::LastCoreType) {
@ -3511,7 +3511,7 @@ bool QVariant::canConvert(int targetTypeId) const
} }
if (targetTypeId == String && currentType == StringList) if (targetTypeId == String && currentType == StringList)
return v_cast<QStringList>(&d)->count() == 1; return d.get<QStringList>().count() == 1;
return currentType < qCanConvertMatrixMaximumTargetType return currentType < qCanConvertMatrixMaximumTargetType
&& qCanConvertMatrix[targetTypeId] & (1U << currentType); && qCanConvertMatrix[targetTypeId] & (1U << currentType);
} }

View File

@ -58,36 +58,10 @@
QT_BEGIN_NAMESPACE QT_BEGIN_NAMESPACE
template<typename T>
struct QVariantIntegrator
{
static constexpr bool CanUseInternalSpace = sizeof(T) <= sizeof(QVariant::Private::Data);
typedef std::integral_constant<bool, CanUseInternalSpace> CanUseInternalSpace_t;
};
static_assert(QVariantIntegrator<double>::CanUseInternalSpace);
static_assert(QVariantIntegrator<long int>::CanUseInternalSpace);
static_assert(QVariantIntegrator<qulonglong>::CanUseInternalSpace);
template <typename T>
inline const T *v_cast(const QVariant::Private *d, T * = nullptr)
{
return !QVariantIntegrator<T>::CanUseInternalSpace
? static_cast<const T *>(d->data.shared->data())
: static_cast<const T *>(static_cast<const void *>(&d->data));
}
template <typename T>
inline T *v_cast(QVariant::Private *d, T * = nullptr)
{
return !QVariantIntegrator<T>::CanUseInternalSpace
? static_cast<T *>(d->data.shared->data())
: static_cast<T *>(static_cast<void *>(&d->data));
}
template <class T> template <class T>
inline void v_construct(QVariant::Private *x, const T &t) inline void v_construct(QVariant::Private *x, const T &t)
{ {
if constexpr (QVariantIntegrator<T>::CanUseInternalSpace) { if constexpr (QVariant::Private::CanUseInternalSpace<T>) {
new (&x->data) T(t); new (&x->data) T(t);
x->is_shared = false; x->is_shared = false;
} else { } else {