summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <lars.knoll@qt.io>2020-07-12 21:32:34 +0200
committerLars Knoll <lars.knoll@qt.io>2020-08-24 00:17:05 +0200
commitbfbac6be753c8fa01345d7f9ea2f8bffc170337b (patch)
tree2c0a8f89bf9e0b0f18fce1d7522bb6abb1a8ed28
parentd1c3f81126863791df6bad2a38aa9c322e481388 (diff)
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>
-rw-r--r--src/corelib/kernel/qvariant.cpp372
-rw-r--r--src/corelib/kernel/qvariant_p.h28
2 files changed, 187 insertions, 213 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index 975a053ba0..2a0066c9e2 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -124,9 +124,9 @@ static qlonglong qMetaTypeNumber(const QVariant::Private *d)
return qRound64(d->data.d);
#ifndef QT_BOOTSTRAPPED
case QMetaType::QJsonValue:
- return v_cast<QJsonValue>(d)->toDouble();
+ return d->get<QJsonValue>().toDouble();
case QMetaType::QCborValue:
- return v_cast<QCborValue>(d)->toInteger();
+ return d->get<QCborValue>().toInteger();
#endif
}
Q_ASSERT(false);
@@ -157,16 +157,16 @@ static qlonglong qConvertToNumber(const QVariant::Private *d, bool *ok, bool all
switch (uint(d->type().id())) {
case QMetaType::QString: {
- const QString *s = v_cast<QString>(d);
- qlonglong l = s->toLongLong(ok);
+ const QString &s = d->get<QString>();
+ qlonglong l = s.toLongLong(ok);
if (*ok)
return l;
if (allowStringToBool) {
- if (*s == QLatin1String("false") || *s == QLatin1String("0")) {
+ if (s == QLatin1String("false") || s == QLatin1String("0")) {
*ok = true;
return 0;
}
- if (*s == QLatin1String("true") || *s == QLatin1String("1")) {
+ if (s == QLatin1String("true") || s == QLatin1String("1")) {
*ok = true;
return 1;
}
@@ -174,18 +174,18 @@ static qlonglong qConvertToNumber(const QVariant::Private *d, bool *ok, bool all
return 0;
}
case QMetaType::QChar:
- return v_cast<QChar>(d)->unicode();
+ return d->get<QChar>().unicode();
case QMetaType::QByteArray:
- return v_cast<QByteArray>(d)->toLongLong(ok);
+ return d->get<QByteArray>().toLongLong(ok);
case QMetaType::Bool:
return qlonglong(d->data.b);
#ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- if (!v_cast<QCborValue>(d)->isInteger() && !v_cast<QCborValue>(d)->isDouble())
+ if (!d->get<QCborValue>().isInteger() && !d->get<QCborValue>().isDouble())
break;
return qMetaTypeNumber(d);
case QMetaType::QJsonValue:
- if (!v_cast<QJsonValue>(d)->isDouble())
+ if (!d->get<QJsonValue>().isDouble())
break;
Q_FALLTHROUGH();
#endif
@@ -231,7 +231,7 @@ static qreal qConvertToRealNumber(const QVariant::Private *d, bool *ok)
*ok = true;
switch (uint(d->type().id())) {
case QMetaType::QString:
- return v_cast<QString>(d)->toDouble(ok);
+ return d->get<QString>().toDouble(ok);
case QMetaType::Double:
return qreal(d->data.d);
case QMetaType::Float:
@@ -244,9 +244,9 @@ static qreal qConvertToRealNumber(const QVariant::Private *d, bool *ok)
return qreal(qMetaTypeUNumber(d));
#ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- return v_cast<QCborValue>(d)->toDouble();
+ return d->get<QCborValue>().toDouble();
case QMetaType::QJsonValue:
- return v_cast<QJsonValue>(d)->toDouble();
+ return d->get<QJsonValue>().toDouble();
#endif
default:
// 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())) {
case QMetaType::QString:
- return v_cast<QString>(d)->toULongLong(ok);
+ return d->get<QString>().toULongLong(ok);
case QMetaType::QChar:
- return v_cast<QChar>(d)->unicode();
+ return d->get<QChar>().unicode();
case QMetaType::QByteArray:
- return v_cast<QByteArray>(d)->toULongLong(ok);
+ return d->get<QByteArray>().toULongLong(ok);
case QMetaType::Bool:
return qulonglong(d->data.b);
#ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- if (v_cast<QCborValue>(d)->isDouble())
+ if (d->get<QCborValue>().isDouble())
return qulonglong(qConvertToRealNumber(d, ok));
- if (!v_cast<QCborValue>(d)->isInteger())
+ if (!d->get<QCborValue>().isInteger())
return false;
return qulonglong(qMetaTypeNumber(d));
case QMetaType::QJsonValue:
- if (!v_cast<QJsonValue>(d)->isDouble())
+ if (!d->get<QJsonValue>().isDouble())
break;
Q_FALLTHROUGH();
#endif
@@ -317,7 +317,7 @@ static qulonglong qConvertToUnsignedNumber(const QVariant::Private *d, bool *ok)
template<typename TInput, typename LiteralWrapper>
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"));
}
@@ -372,11 +372,11 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QUrl:
switch (d->type().id()) {
case QMetaType::QString:
- *static_cast<QUrl *>(result) = QUrl(*v_cast<QString>(d));
+ *static_cast<QUrl *>(result) = QUrl(d->get<QString>());
break;
case QMetaType::QCborValue:
- if (v_cast<QCborValue>(d)->isUrl()) {
- *static_cast<QUrl *>(result) = v_cast<QCborValue>(d)->toUrl();
+ if (d->get<QCborValue>().isUrl()) {
+ *static_cast<QUrl *>(result) = d->get<QCborValue>().toUrl();
break;
}
return false;
@@ -389,7 +389,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QModelIndex:
switch (d->type().id()) {
case QMetaType::QPersistentModelIndex:
- *static_cast<QModelIndex *>(result) = QModelIndex(*v_cast<QPersistentModelIndex>(d));
+ *static_cast<QModelIndex *>(result) = QModelIndex(d->get<QPersistentModelIndex>());
break;
default:
return false;
@@ -398,7 +398,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QPersistentModelIndex:
switch (d->type().id()) {
case QMetaType::QModelIndex:
- *static_cast<QPersistentModelIndex *>(result) = QPersistentModelIndex(*v_cast<QModelIndex>(d));
+ *static_cast<QPersistentModelIndex *>(result) = QPersistentModelIndex(d->get<QModelIndex>());
break;
default:
return false;
@@ -409,7 +409,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QString *str = static_cast<QString *>(result);
switch (d->type().id()) {
case QMetaType::QChar:
- *str = *v_cast<QChar>(d);
+ *str = d->get<QChar>();
break;
case QMetaType::Char:
case QMetaType::SChar:
@@ -436,43 +436,43 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break;
#if QT_CONFIG(datestring)
case QMetaType::QDate:
- *str = v_cast<QDate>(d)->toString(Qt::ISODate);
+ *str = d->get<QDate>().toString(Qt::ISODate);
break;
case QMetaType::QTime:
- *str = v_cast<QTime>(d)->toString(Qt::ISODateWithMs);
+ *str = d->get<QTime>().toString(Qt::ISODateWithMs);
break;
case QMetaType::QDateTime:
- *str = v_cast<QDateTime>(d)->toString(Qt::ISODateWithMs);
+ *str = d->get<QDateTime>().toString(Qt::ISODateWithMs);
break;
#endif
case QMetaType::Bool:
*str = d->data.b ? QStringLiteral("true") : QStringLiteral("false");
break;
case QMetaType::QByteArray:
- *str = QString::fromUtf8(v_cast<QByteArray>(d)->constData());
+ *str = QString::fromUtf8(d->get<QByteArray>().constData());
break;
case QMetaType::QStringList:
- if (v_cast<QStringList>(d)->count() == 1)
- *str = v_cast<QStringList>(d)->at(0);
+ if (d->get<QStringList>().count() == 1)
+ *str = d->get<QStringList>().at(0);
break;
#ifndef QT_BOOTSTRAPPED
case QMetaType::QUrl:
- *str = v_cast<QUrl>(d)->toString();
+ *str = d->get<QUrl>().toString();
break;
case QMetaType::QJsonValue:
- if (v_cast<QJsonValue>(d)->isString())
- *str = v_cast<QJsonValue>(d)->toString();
- else if (!v_cast<QJsonValue>(d)->isNull())
+ if (d->get<QJsonValue>().isString())
+ *str = d->get<QJsonValue>().toString();
+ else if (!d->get<QJsonValue>().isNull())
return false;
break;
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;
- *str = v_cast<QCborValue>(d)->toVariant().toString();
+ *str = d->get<QCborValue>().toVariant().toString();
break;
#endif
case QMetaType::QUuid:
- *str = v_cast<QUuid>(d)->toString();
+ *str = d->get<QUuid>().toString();
break;
case QMetaType::Nullptr:
*str = QString();
@@ -520,7 +520,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QSize *s = static_cast<QSize *>(result);
switch (d->type().id()) {
case QMetaType::QSizeF:
- *s = v_cast<QSizeF>(d)->toSize();
+ *s = d->get<QSizeF>().toSize();
break;
default:
return false;
@@ -532,7 +532,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QSizeF *s = static_cast<QSizeF *>(result);
switch (d->type().id()) {
case QMetaType::QSize:
- *s = QSizeF(*(v_cast<QSize>(d)));
+ *s = QSizeF(d->get<QSize>());
break;
default:
return false;
@@ -544,7 +544,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QLine *s = static_cast<QLine *>(result);
switch (d->type().id()) {
case QMetaType::QLineF:
- *s = v_cast<QLineF>(d)->toLine();
+ *s = d->get<QLineF>().toLine();
break;
default:
return false;
@@ -556,7 +556,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QLineF *s = static_cast<QLineF *>(result);
switch (d->type().id()) {
case QMetaType::QLine:
- *s = QLineF(*(v_cast<QLine>(d)));
+ *s = QLineF(d->get<QLine>());
break;
default:
return false;
@@ -567,14 +567,14 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QStringList:
if (d->type().id() == QMetaType::QVariantList) {
QStringList *slst = static_cast<QStringList *>(result);
- const QVariantList *list = v_cast<QVariantList >(d);
- const int size = list->size();
+ const QVariantList &list = d->get<QVariantList >();
+ const int size = list.size();
slst->reserve(size);
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) {
QStringList *slst = static_cast<QStringList *>(result);
- *slst = QStringList(*v_cast<QString>(d));
+ *slst = QStringList(d->get<QString>());
} else {
return false;
}
@@ -582,10 +582,10 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QDate: {
QDate *dt = static_cast<QDate *>(result);
if (d->type().id() == QMetaType::QDateTime)
- *dt = v_cast<QDateTime>(d)->date();
+ *dt = d->get<QDateTime>().date();
#if QT_CONFIG(datestring)
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
else
return false;
@@ -596,11 +596,11 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QTime *t = static_cast<QTime *>(result);
switch (d->type().id()) {
case QMetaType::QDateTime:
- *t = v_cast<QDateTime>(d)->time();
+ *t = d->get<QDateTime>().time();
break;
#if QT_CONFIG(datestring)
case QMetaType::QString:
- *t = QTime::fromString(*v_cast<QString>(d), Qt::ISODate);
+ *t = QTime::fromString(d->get<QString>(), Qt::ISODate);
break;
#endif
default:
@@ -613,19 +613,19 @@ static bool convert(const QVariant::Private *d, int t, void *result)
switch (d->type().id()) {
#if QT_CONFIG(datestring)
case QMetaType::QString:
- *dt = QDateTime::fromString(*v_cast<QString>(d), Qt::ISODate);
+ *dt = QDateTime::fromString(d->get<QString>(), Qt::ISODate);
break;
# ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- if (v_cast<QCborValue>(d)->isDateTime())
- *dt = v_cast<QCborValue>(d)->toDateTime();
+ if (d->get<QCborValue>().isDateTime())
+ *dt = d->get<QCborValue>().toDateTime();
else
return false;
break;
# endif
#endif
case QMetaType::QDate:
- *dt = v_cast<QDate>(d)->startOfDay();
+ *dt = d->get<QDate>().startOfDay();
break;
default:
return false;
@@ -636,7 +636,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QByteArray *ba = static_cast<QByteArray *>(result);
switch (d->type().id()) {
case QMetaType::QString:
- *ba = v_cast<QString>(d)->toUtf8();
+ *ba = d->get<QString>().toUtf8();
break;
case QMetaType::Double:
*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");
break;
case QMetaType::QUuid:
- *ba = v_cast<QUuid>(d)->toByteArray();
+ *ba = d->get<QUuid>().toByteArray();
break;
case QMetaType::Nullptr:
*ba = QByteArray();
break;
#ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- if (v_cast<QCborValue>(d)->isByteArray())
- *ba = v_cast<QCborValue>(d)->toByteArray();
+ if (d->get<QCborValue>().isByteArray())
+ *ba = d->get<QCborValue>().toByteArray();
else
return false;
break;
@@ -736,7 +736,7 @@ static bool convert(const QVariant::Private *d, int t, void *result)
*b = qt_convertToBool<QString, QLatin1String>(d);
break;
case QMetaType::QChar:
- *b = !v_cast<QChar>(d)->isNull();
+ *b = !d->get<QChar>().isNull();
break;
case QMetaType::Double:
case QMetaType::Int:
@@ -757,13 +757,13 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break;
#ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- *b = v_cast<QCborValue>(d)->toBool();
- if (!v_cast<QCborValue>(d)->isBool())
+ *b = d->get<QCborValue>().toBool();
+ if (!d->get<QCborValue>().isBool())
return false;
break;
case QMetaType::QJsonValue:
- *b = v_cast<QJsonValue>(d)->toBool(false);
- if (!v_cast<QJsonValue>(d)->isBool())
+ *b = d->get<QJsonValue>().toBool(false);
+ if (!d->get<QJsonValue>().isBool())
return false;
break;
#endif
@@ -777,10 +777,10 @@ static bool convert(const QVariant::Private *d, int t, void *result)
double *f = static_cast<double *>(result);
switch (d->type().id()) {
case QMetaType::QString:
- *f = v_cast<QString>(d)->toDouble(&ok);
+ *f = d->get<QString>().toDouble(&ok);
return ok;
case QMetaType::QByteArray:
- *f = v_cast<QByteArray>(d)->toDouble(&ok);
+ *f = d->get<QByteArray>().toDouble(&ok);
return ok;
case QMetaType::Bool:
*f = double(d->data.b);
@@ -805,13 +805,13 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break;
#ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- *f = v_cast<QCborValue>(d)->toDouble();
- if (!v_cast<QCborValue>(d)->isDouble())
+ *f = d->get<QCborValue>().toDouble();
+ if (!d->get<QCborValue>().isDouble())
return false;
break;
case QMetaType::QJsonValue:
- *f = v_cast<QJsonValue>(d)->toDouble(0.0);
- if (!v_cast<QJsonValue>(d)->isDouble())
+ *f = d->get<QJsonValue>().toDouble(0.0);
+ if (!d->get<QJsonValue>().isDouble())
return false;
break;
#endif
@@ -825,10 +825,10 @@ static bool convert(const QVariant::Private *d, int t, void *result)
float *f = static_cast<float *>(result);
switch (d->type().id()) {
case QMetaType::QString:
- *f = v_cast<QString>(d)->toFloat(&ok);
+ *f = d->get<QString>().toFloat(&ok);
return ok;
case QMetaType::QByteArray:
- *f = v_cast<QByteArray>(d)->toFloat(&ok);
+ *f = d->get<QByteArray>().toFloat(&ok);
return ok;
case QMetaType::Bool:
*f = float(d->data.b);
@@ -853,13 +853,13 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break;
#ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- *f = v_cast<QCborValue>(d)->toDouble();
- if (!v_cast<QCborValue>(d)->isDouble())
+ *f = d->get<QCborValue>().toDouble();
+ if (!d->get<QCborValue>().isDouble())
return false;
break;
case QMetaType::QJsonValue:
- *f = v_cast<QJsonValue>(d)->toDouble(0.0);
- if (!v_cast<QJsonValue>(d)->isDouble())
+ *f = d->get<QJsonValue>().toDouble(0.0);
+ if (!d->get<QJsonValue>().isDouble())
return false;
break;
#endif
@@ -872,24 +872,24 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QVariantList:
if (d->type().id() == QMetaType::QStringList) {
QVariantList *lst = static_cast<QVariantList *>(result);
- const QStringList *slist = v_cast<QStringList>(d);
- const int size = slist->size();
+ const QStringList &slist = d->get<QStringList>();
+ const int size = slist.size();
lst->reserve(size);
for (int i = 0; i < size; ++i)
- lst->append(QVariant(slist->at(i)));
+ lst->append(QVariant(slist.at(i)));
#ifndef QT_BOOTSTRAPPED
} else if (d->type().id() == QMetaType::QCborValue) {
- if (!v_cast<QCborValue>(d)->isArray())
+ if (!d->get<QCborValue>().isArray())
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) {
- *static_cast<QVariantList *>(result) = v_cast<QCborArray>(d)->toVariantList();
+ *static_cast<QVariantList *>(result) = d->get<QCborArray>().toVariantList();
} else if (d->type().id() == QMetaType::QJsonValue) {
- if (!v_cast<QJsonValue>(d)->isArray())
+ if (!d->get<QJsonValue>().isArray())
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) {
- *static_cast<QVariantList *>(result) = v_cast<QJsonArray>(d)->toVariantList();
+ *static_cast<QVariantList *>(result) = d->get<QJsonArray>().toVariantList();
#endif
} else {
return false;
@@ -898,23 +898,23 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QVariantMap:
if (d->type().id() == QMetaType::QVariantHash) {
QVariantMap *map = static_cast<QVariantMap *>(result);
- const QVariantHash *hash = v_cast<QVariantHash>(d);
- const auto end = hash->end();
- for (auto it = hash->begin(); it != end; ++it)
+ const QVariantHash &hash = d->get<QVariantHash>();
+ const auto end = hash.end();
+ for (auto it = hash.begin(); it != end; ++it)
map->insert(it.key(), it.value());
#ifndef QT_BOOTSTRAPPED
} else if (d->type().id() == QMetaType::QCborValue) {
- if (!v_cast<QCborValue>(d)->isMap())
+ if (!d->get<QCborValue>().isMap())
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) {
- *static_cast<QVariantMap *>(result) = v_cast<QCborMap>(d)->toVariantMap();
+ *static_cast<QVariantMap *>(result) = d->get<QCborMap>().toVariantMap();
} else if (d->type().id() == QMetaType::QJsonValue) {
- if (!v_cast<QJsonValue>(d)->isObject())
+ if (!d->get<QJsonValue>().isObject())
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) {
- *static_cast<QVariantMap *>(result) = v_cast<QJsonObject>(d)->toVariantMap();
+ *static_cast<QVariantMap *>(result) = d->get<QJsonObject>().toVariantMap();
#endif
} else {
return false;
@@ -923,23 +923,23 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QVariantHash:
if (d->type().id() == QMetaType::QVariantMap) {
QVariantHash *hash = static_cast<QVariantHash *>(result);
- const QVariantMap *map = v_cast<QVariantMap>(d);
- const auto end = map->end();
- for (auto it = map->begin(); it != end; ++it)
+ const QVariantMap &map = d->get<QVariantMap>();
+ const auto end = map.end();
+ for (auto it = map.begin(); it != end; ++it)
hash->insert(it.key(), it.value());
#ifndef QT_BOOTSTRAPPED
} else if (d->type().id() == QMetaType::QCborValue) {
- if (!v_cast<QCborValue>(d)->isMap())
+ if (!d->get<QCborValue>().isMap())
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) {
- *static_cast<QVariantHash *>(result) = v_cast<QCborMap>(d)->toVariantHash();
+ *static_cast<QVariantHash *>(result) = d->get<QCborMap>().toVariantHash();
} else if (d->type().id() == QMetaType::QJsonValue) {
- if (!v_cast<QJsonValue>(d)->isObject())
+ if (!d->get<QJsonValue>().isObject())
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) {
- *static_cast<QVariantHash *>(result) = v_cast<QJsonObject>(d)->toVariantHash();
+ *static_cast<QVariantHash *>(result) = d->get<QJsonObject>().toVariantHash();
#endif
} else {
return false;
@@ -948,25 +948,25 @@ static bool convert(const QVariant::Private *d, int t, void *result)
#ifndef QT_NO_GEOM_VARIANT
case QMetaType::QRect:
if (d->type().id() == QMetaType::QRectF)
- *static_cast<QRect *>(result) = (v_cast<QRectF>(d))->toRect();
+ *static_cast<QRect *>(result) = d->get<QRectF>().toRect();
else
return false;
break;
case QMetaType::QRectF:
if (d->type().id() == QMetaType::QRect)
- *static_cast<QRectF *>(result) = *v_cast<QRect>(d);
+ *static_cast<QRectF *>(result) = d->get<QRect>();
else
return false;
break;
case QMetaType::QPointF:
if (d->type().id() == QMetaType::QPoint)
- *static_cast<QPointF *>(result) = *v_cast<QPoint>(d);
+ *static_cast<QPointF *>(result) = d->get<QPoint>();
else
return false;
break;
case QMetaType::QPoint:
if (d->type().id() == QMetaType::QPointF)
- *static_cast<QPoint *>(result) = (v_cast<QPointF>(d))->toPoint();
+ *static_cast<QPoint *>(result) = d->get<QPointF>().toPoint();
else
return false;
break;
@@ -979,16 +979,16 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QUuid:
switch (d->type().id()) {
case QMetaType::QString:
- *static_cast<QUuid *>(result) = QUuid(*v_cast<QString>(d));
+ *static_cast<QUuid *>(result) = QUuid(d->get<QString>());
break;
case QMetaType::QByteArray:
- *static_cast<QUuid *>(result) = QUuid(*v_cast<QByteArray>(d));
+ *static_cast<QUuid *>(result) = QUuid(d->get<QByteArray>());
break;
#ifndef QT_BOOTSTRAPPED
case QMetaType::QCborValue:
- if (!v_cast<QCborValue>(d)->isUuid())
+ if (!d->get<QCborValue>().isUuid())
return false;
- *static_cast<QUuid *>(result) = v_cast<QCborValue>(d)->toUuid();
+ *static_cast<QUuid *>(result) = d->get<QCborValue>().toUuid();
break;
#endif
default:
@@ -999,11 +999,11 @@ static bool convert(const QVariant::Private *d, int t, void *result)
*static_cast<std::nullptr_t *>(result) = nullptr;
if (QMetaType::typeFlags(t) & (QMetaType::PointerToGadget | QMetaType::PointerToQObject)
|| d->type().id() == QMetaType::VoidStar) {
- if (v_cast<const void *>(d) == nullptr)
+ if (d->get<const void *>() == nullptr)
break;
}
#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;
#endif
return false;
@@ -1012,9 +1012,9 @@ static bool convert(const QVariant::Private *d, int t, void *result)
#if QT_CONFIG(regularexpression)
case QMetaType::QRegularExpression:
if (d->type().id() != QMetaType::QCborValue
- || !v_cast<QCborValue>(d)->isRegularExpression())
+ || !d->get<QCborValue>().isRegularExpression())
return false;
- *static_cast<QRegularExpression *>(result) = v_cast<QCborValue>(d)->toRegularExpression();
+ *static_cast<QRegularExpression *>(result) = d->get<QCborValue>().toRegularExpression();
break;
#endif
case QMetaType::QJsonValue:
@@ -1042,39 +1042,39 @@ static bool convert(const QVariant::Private *d, int t, void *result)
Q_ASSERT(ok);
break;
case QMetaType::QString:
- *static_cast<QJsonValue *>(result) = QJsonValue(*v_cast<QString>(d));
+ *static_cast<QJsonValue *>(result) = QJsonValue(d->get<QString>());
break;
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;
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;
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;
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;
case QMetaType::QJsonObject:
- *static_cast<QJsonValue *>(result) = *v_cast<QJsonObject>(d);
+ *static_cast<QJsonValue *>(result) = d->get<QJsonObject>();
break;
case QMetaType::QJsonArray:
- *static_cast<QJsonValue *>(result) = *v_cast<QJsonArray>(d);
+ *static_cast<QJsonValue *>(result) = d->get<QJsonArray>();
break;
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());
break;
}
case QMetaType::QCborValue:
- *static_cast<QJsonValue *>(result) = v_cast<QCborValue>(d)->toJsonValue();
+ *static_cast<QJsonValue *>(result) = d->get<QCborValue>().toJsonValue();
break;
case QMetaType::QCborMap:
- *static_cast<QJsonValue *>(result) = v_cast<QCborMap>(d)->toJsonObject();
+ *static_cast<QJsonValue *>(result) = d->get<QCborMap>().toJsonObject();
break;
case QMetaType::QCborArray:
- *static_cast<QJsonValue *>(result) = v_cast<QCborArray>(d)->toJsonArray();
+ *static_cast<QJsonValue *>(result) = d->get<QCborArray>().toJsonArray();
break;
default:
*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:
switch (d->type().id()) {
case QMetaType::QStringList:
- *static_cast<QJsonArray *>(result) = QJsonArray::fromStringList(*v_cast<QStringList>(d));
+ *static_cast<QJsonArray *>(result) = QJsonArray::fromStringList(d->get<QStringList>());
break;
case QMetaType::QVariantList:
- *static_cast<QJsonArray *>(result) = QJsonArray::fromVariantList(*v_cast<QVariantList>(d));
+ *static_cast<QJsonArray *>(result) = QJsonArray::fromVariantList(d->get<QVariantList>());
break;
case QMetaType::QJsonValue:
- if (!v_cast<QJsonValue>(d)->isArray())
+ if (!d->get<QJsonValue>().isArray())
return false;
- *static_cast<QJsonArray *>(result) = v_cast<QJsonValue>(d)->toArray();
+ *static_cast<QJsonArray *>(result) = d->get<QJsonValue>().toArray();
break;
case QMetaType::QJsonDocument:
- if (!v_cast<QJsonDocument>(d)->isArray())
+ if (!d->get<QJsonDocument>().isArray())
return false;
- *static_cast<QJsonArray *>(result) = v_cast<QJsonDocument>(d)->array();
+ *static_cast<QJsonArray *>(result) = d->get<QJsonDocument>().array();
break;
case QMetaType::QCborValue:
- if (!v_cast<QCborValue>(d)->isArray())
+ if (!d->get<QCborValue>().isArray())
return false;
- *static_cast<QJsonArray *>(result) = v_cast<QCborValue>(d)->toArray().toJsonArray();
+ *static_cast<QJsonArray *>(result) = d->get<QCborValue>().toArray().toJsonArray();
break;
case QMetaType::QCborArray:
- *static_cast<QJsonArray *>(result) = v_cast<QCborArray>(d)->toJsonArray();
+ *static_cast<QJsonArray *>(result) = d->get<QCborArray>().toJsonArray();
break;
default:
return false;
@@ -1114,36 +1114,36 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QJsonObject:
switch (d->type().id()) {
case QMetaType::QVariantMap:
- *static_cast<QJsonObject *>(result) = QJsonObject::fromVariantMap(*v_cast<QVariantMap>(d));
+ *static_cast<QJsonObject *>(result) = QJsonObject::fromVariantMap(d->get<QVariantMap>());
break;
case QMetaType::QVariantHash:
- *static_cast<QJsonObject *>(result) = QJsonObject::fromVariantHash(*v_cast<QVariantHash>(d));
+ *static_cast<QJsonObject *>(result) = QJsonObject::fromVariantHash(d->get<QVariantHash>());
break;
case QMetaType::QJsonValue:
- if (!v_cast<QJsonValue>(d)->isObject())
+ if (!d->get<QJsonValue>().isObject())
return false;
- *static_cast<QJsonObject *>(result) = v_cast<QJsonValue>(d)->toObject();
+ *static_cast<QJsonObject *>(result) = d->get<QJsonValue>().toObject();
break;
case QMetaType::QJsonDocument:
- if (v_cast<QJsonDocument>(d)->isArray())
+ if (d->get<QJsonDocument>().isArray())
return false;
- *static_cast<QJsonObject *>(result) = v_cast<QJsonDocument>(d)->object();
+ *static_cast<QJsonObject *>(result) = d->get<QJsonDocument>().object();
break;
case QMetaType::QCborValue:
- if (!v_cast<QCborValue>(d)->isMap())
+ if (!d->get<QCborValue>().isMap())
return false;
- *static_cast<QJsonObject *>(result) = v_cast<QCborValue>(d)->toMap().toJsonObject();
+ *static_cast<QJsonObject *>(result) = d->get<QCborValue>().toMap().toJsonObject();
break;
case QMetaType::QCborMap:
- *static_cast<QJsonObject *>(result) = v_cast<QCborMap>(d)->toJsonObject();
+ *static_cast<QJsonObject *>(result) = d->get<QCborMap>().toJsonObject();
break;
default:
return false;
}
break;
case QMetaType::QCborSimpleType:
- if (d->type().id() == QMetaType::QCborValue && v_cast<QCborValue>(d)->isSimpleType()) {
- *static_cast<QCborSimpleType *>(result) = v_cast<QCborValue>(d)->toSimpleType();
+ if (d->type().id() == QMetaType::QCborValue && d->get<QCborValue>().isSimpleType()) {
+ *static_cast<QCborSimpleType *>(result) = d->get<QCborValue>().toSimpleType();
break;
}
return false;
@@ -1175,51 +1175,51 @@ static bool convert(const QVariant::Private *d, int t, void *result)
Q_ASSERT(ok);
break;
case QMetaType::QString:
- *static_cast<QCborValue *>(result) = *v_cast<QString>(d);
+ *static_cast<QCborValue *>(result) = d->get<QString>();
break;
case QMetaType::QStringList:
- *static_cast<QCborValue *>(result) = QCborArray::fromStringList(*v_cast<QStringList>(d));
+ *static_cast<QCborValue *>(result) = QCborArray::fromStringList(d->get<QStringList>());
break;
case QMetaType::QByteArray:
- *static_cast<QCborValue *>(result) = *v_cast<QByteArray>(d);
+ *static_cast<QCborValue *>(result) = d->get<QByteArray>();
break;
case QMetaType::QDate:
- *static_cast<QCborValue *>(result) = QCborValue(v_cast<QDate>(d)->startOfDay());
+ *static_cast<QCborValue *>(result) = QCborValue(d->get<QDate>().startOfDay());
break;
case QMetaType::QDateTime:
- *static_cast<QCborValue *>(result) = QCborValue(*v_cast<QDateTime>(d));
+ *static_cast<QCborValue *>(result) = QCborValue(d->get<QDateTime>());
break;
case QMetaType::QUrl:
- *static_cast<QCborValue *>(result) = QCborValue(*v_cast<QUrl>(d));
+ *static_cast<QCborValue *>(result) = QCborValue(d->get<QUrl>());
break;
#if QT_CONFIG(regularexpression)
case QMetaType::QRegularExpression:
- *static_cast<QCborValue *>(result) = QCborValue(*v_cast<QRegularExpression>(d));
+ *static_cast<QCborValue *>(result) = QCborValue(d->get<QRegularExpression>());
break;
#endif
case QMetaType::QUuid:
- *static_cast<QCborValue *>(result) = QCborValue(*v_cast<QUuid>(d));
+ *static_cast<QCborValue *>(result) = QCborValue(d->get<QUuid>());
break;
case QMetaType::QVariantList:
- *static_cast<QCborValue *>(result) = QCborArray::fromVariantList(*v_cast<QVariantList>(d));
+ *static_cast<QCborValue *>(result) = QCborArray::fromVariantList(d->get<QVariantList>());
break;
case QMetaType::QVariantMap:
- *static_cast<QCborValue *>(result) = QCborMap::fromVariantMap(*v_cast<QVariantMap>(d));
+ *static_cast<QCborValue *>(result) = QCborMap::fromVariantMap(d->get<QVariantMap>());
break;
case QMetaType::QVariantHash:
- *static_cast<QCborValue *>(result) = QCborMap::fromVariantHash(*v_cast<QVariantHash>(d));
+ *static_cast<QCborValue *>(result) = QCborMap::fromVariantHash(d->get<QVariantHash>());
break;
case QMetaType::QJsonValue:
- *static_cast<QCborValue *>(result) = QCborValue::fromJsonValue(*v_cast<QJsonValue>(d));
+ *static_cast<QCborValue *>(result) = QCborValue::fromJsonValue(d->get<QJsonValue>());
break;
case QMetaType::QJsonObject:
- *static_cast<QCborValue *>(result) = QCborMap::fromJsonObject(*v_cast<QJsonObject>(d));
+ *static_cast<QCborValue *>(result) = QCborMap::fromJsonObject(d->get<QJsonObject>());
break;
case QMetaType::QJsonArray:
- *static_cast<QCborValue *>(result) = QCborArray::fromJsonArray(*v_cast<QJsonArray>(d));
+ *static_cast<QCborValue *>(result) = QCborArray::fromJsonArray(d->get<QJsonArray>());
break;
case QMetaType::QJsonDocument: {
- QJsonDocument doc = *v_cast<QJsonDocument>(d);
+ QJsonDocument doc = d->get<QJsonDocument>();
if (doc.isArray())
*static_cast<QCborValue *>(result) = QCborArray::fromJsonArray(doc.array());
else
@@ -1227,13 +1227,13 @@ static bool convert(const QVariant::Private *d, int t, void *result)
break;
}
case QMetaType::QCborSimpleType:
- *static_cast<QCborValue *>(result) = *v_cast<QCborSimpleType>(d);
+ *static_cast<QCborValue *>(result) = d->get<QCborSimpleType>();
break;
case QMetaType::QCborMap:
- *static_cast<QCborValue *>(result) = *v_cast<QCborMap>(d);
+ *static_cast<QCborValue *>(result) = d->get<QCborMap>();
break;
case QMetaType::QCborArray:
- *static_cast<QCborValue *>(result) = *v_cast<QCborArray>(d);
+ *static_cast<QCborValue *>(result) = d->get<QCborArray>();
break;
default:
*static_cast<QCborValue *>(result) = {};
@@ -1243,28 +1243,28 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QCborArray:
switch (d->type().id()) {
case QMetaType::QStringList:
- *static_cast<QCborArray *>(result) = QCborArray::fromStringList(*v_cast<QStringList>(d));
+ *static_cast<QCborArray *>(result) = QCborArray::fromStringList(d->get<QStringList>());
break;
case QMetaType::QVariantList:
- *static_cast<QCborArray *>(result) = QCborArray::fromVariantList(*v_cast<QVariantList>(d));
+ *static_cast<QCborArray *>(result) = QCborArray::fromVariantList(d->get<QVariantList>());
break;
case QMetaType::QCborValue:
- if (!v_cast<QCborValue>(d)->isArray())
+ if (!d->get<QCborValue>().isArray())
return false;
- *static_cast<QCborArray *>(result) = v_cast<QCborValue>(d)->toArray();
+ *static_cast<QCborArray *>(result) = d->get<QCborValue>().toArray();
break;
case QMetaType::QJsonDocument:
- if (!v_cast<QJsonDocument>(d)->isArray())
+ if (!d->get<QJsonDocument>().isArray())
return false;
- *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(v_cast<QJsonDocument>(d)->array());
+ *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(d->get<QJsonDocument>().array());
break;
case QMetaType::QJsonValue:
- if (!v_cast<QJsonValue>(d)->isArray())
+ if (!d->get<QJsonValue>().isArray())
return false;
- *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(v_cast<QJsonValue>(d)->toArray());
+ *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(d->get<QJsonValue>().toArray());
break;
case QMetaType::QJsonArray:
- *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(*v_cast<QJsonArray>(d));
+ *static_cast<QCborArray *>(result) = QCborArray::fromJsonArray(d->get<QJsonArray>());
break;
default:
return false;
@@ -1273,28 +1273,28 @@ static bool convert(const QVariant::Private *d, int t, void *result)
case QMetaType::QCborMap:
switch (d->type().id()) {
case QMetaType::QVariantMap:
- *static_cast<QCborMap *>(result) = QCborMap::fromVariantMap(*v_cast<QVariantMap>(d));
+ *static_cast<QCborMap *>(result) = QCborMap::fromVariantMap(d->get<QVariantMap>());
break;
case QMetaType::QVariantHash:
- *static_cast<QCborMap *>(result) = QCborMap::fromVariantHash(*v_cast<QVariantHash>(d));
+ *static_cast<QCborMap *>(result) = QCborMap::fromVariantHash(d->get<QVariantHash>());
break;
case QMetaType::QCborValue:
- if (!v_cast<QCborValue>(d)->isMap())
+ if (!d->get<QCborValue>().isMap())
return false;
- *static_cast<QCborMap *>(result) = v_cast<QCborValue>(d)->toMap();
+ *static_cast<QCborMap *>(result) = d->get<QCborValue>().toMap();
break;
case QMetaType::QJsonDocument:
- if (v_cast<QJsonDocument>(d)->isArray())
+ if (d->get<QJsonDocument>().isArray())
return false;
- *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(v_cast<QJsonDocument>(d)->object());
+ *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(d->get<QJsonDocument>().object());
break;
case QMetaType::QJsonValue:
- if (!v_cast<QJsonValue>(d)->isObject())
+ if (!d->get<QJsonValue>().isObject())
return false;
- *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(v_cast<QJsonValue>(d)->toObject());
+ *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(d->get<QJsonValue>().toObject());
break;
case QMetaType::QJsonObject:
- *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(*v_cast<QJsonObject>(d));
+ *static_cast<QCborMap *>(result) = QCborMap::fromJsonObject(d->get<QJsonObject>());
break;
default:
return false;
@@ -1308,8 +1308,8 @@ static bool convert(const QVariant::Private *d, int t, void *result)
QMetaEnum en = metaEnumFromType(QMetaType(t));
if (en.isValid()) {
QByteArray keys = (d->type().id() == QMetaType::QString)
- ? v_cast<QString>(d)->toUtf8()
- : *v_cast<QByteArray>(d);
+ ? d->get<QString>().toUtf8()
+ : d->get<QByteArray>();
int value = en.keysToValue(keys.constData(), &ok);
if (ok) {
switch (QMetaType::sizeOf(t)) {
@@ -2470,7 +2470,7 @@ inline T qVariantToHelper(const QVariant::Private &d)
{
QMetaType targetType = QMetaType::fromType<T>();
if (d.type() == targetType)
- return *v_cast<T>(&d);
+ return d.get<T>();
T ret;
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)
- return v_cast<QStringList>(&d)->count() == 1;
+ return d.get<QStringList>().count() == 1;
return currentType < qCanConvertMatrixMaximumTargetType
&& qCanConvertMatrix[targetTypeId] & (1U << currentType);
}
diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h
index f517e3b695..f0b15012ec 100644
--- a/src/corelib/kernel/qvariant_p.h
+++ b/src/corelib/kernel/qvariant_p.h
@@ -58,36 +58,10 @@
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>
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);
x->is_shared = false;
} else {