diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2022-07-22 15:24:22 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2022-07-27 12:35:50 -0700 |
commit | 3da89227feac3ba10275da762726e371617b611f (patch) | |
tree | 69e01c7d7a8092c7d45176e64d625d89fb32f3a7 /src/corelib/kernel/qvariant.cpp | |
parent | b665ffbce2bf6af92d1189cfadc36d356e21fcfa (diff) |
QVariant: replace v_construct with a Private template constructor
It's effectively the same and no one is using v_construct().
Change-Id: I3859764fed084846bcb0fffd1704470801c9e6e7
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'src/corelib/kernel/qvariant.cpp')
-rw-r--r-- | src/corelib/kernel/qvariant.cpp | 175 |
1 files changed, 59 insertions, 116 deletions
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp index 5f0e759cf5..7310fd9be2 100644 --- a/src/corelib/kernel/qvariant.cpp +++ b/src/corelib/kernel/qvariant.cpp @@ -298,6 +298,22 @@ static QVariant::Private clonePrivate(const QVariant::Private &other) } // anonymous used to hide QVariant handlers +template <typename T> inline +QVariant::Private::Private(std::piecewise_construct_t, const T &t) + : is_shared(!CanUseInternalSpace<T>), is_null(std::is_same_v<T, std::nullptr_t>) +{ + const QtPrivate::QMetaTypeInterface *iface = QtPrivate::qMetaTypeInterfaceForType<T>(); + Q_ASSERT((quintptr(iface) & 0x3) == 0); + packedType = quintptr(iface) >> 2; + + if constexpr (CanUseInternalSpace<T>) { + new (data.data) T(t); + } else { + data.shared = QVariant::PrivateShared::create(QtPrivate::qMetaTypeInterfaceForType<T>()); + new (data.shared->data()) T(t); + } +} + /*! \class QVariant \inmodule QtCore @@ -818,133 +834,60 @@ QVariant::QVariant(QMetaType type, const void *copy) : d(type) d = {}; } -QVariant::QVariant(int val) - : d(QMetaType::fromType<int>()) -{ d.set(val); } -QVariant::QVariant(uint val) - : d(QMetaType::fromType<uint>()) -{ d.set(val); } -QVariant::QVariant(qlonglong val) - : d(QMetaType::fromType<qlonglong>()) -{ d.set(val); } -QVariant::QVariant(qulonglong val) - : d(QMetaType::fromType<qulonglong>()) -{ d.set(val); } -QVariant::QVariant(bool val) - : d(QMetaType::fromType<bool>()) -{ d.set(val); } -QVariant::QVariant(double val) - : d(QMetaType::fromType<double>()) -{ d.set(val); } -QVariant::QVariant(float val) - : d(QMetaType::fromType<float>()) -{ d.set(val); } - -QVariant::QVariant(const QByteArray &val) - : d(QMetaType::fromType<QByteArray>()) -{ v_construct<QByteArray>(&d, val); } -QVariant::QVariant(const QBitArray &val) - : d(QMetaType::fromType<QBitArray>()) -{ v_construct<QBitArray>(&d, val); } -QVariant::QVariant(const QString &val) - : d(QMetaType::fromType<QString>()) -{ v_construct<QString>(&d, val); } -QVariant::QVariant(QChar val) - : d(QMetaType::fromType<QChar>()) -{ v_construct<QChar>(&d, val); } -QVariant::QVariant(QLatin1StringView val) - : d(QMetaType::fromType<QString>()) -{ v_construct<QString>(&d, val); } -QVariant::QVariant(const QStringList &val) - : d(QMetaType::fromType<QStringList>()) -{ v_construct<QStringList>(&d, val); } - -QVariant::QVariant(QDate val) - : d(QMetaType::fromType<QDate>()) -{ v_construct<QDate>(&d, val); } -QVariant::QVariant(QTime val) - : d(QMetaType::fromType<QTime>()) -{ v_construct<QTime>(&d, val); } -QVariant::QVariant(const QDateTime &val) - : d(QMetaType::fromType<QDateTime>()) -{ v_construct<QDateTime>(&d, val); } +QVariant::QVariant(int val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(uint val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(qlonglong val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(qulonglong val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(bool val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(double val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(float val) : d(std::piecewise_construct_t{}, val) {} + +QVariant::QVariant(const QByteArray &val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(const QBitArray &val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(const QString &val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(QChar val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(const QStringList &val) : d(std::piecewise_construct_t{}, val) {} + +QVariant::QVariant(QDate val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(QTime val) : d(std::piecewise_construct_t{}, val) {} +QVariant::QVariant(const QDateTime &val) : d(std::piecewise_construct_t{}, val) {} + +QVariant::QVariant(const QList<QVariant> &list) : d(std::piecewise_construct_t{}, list) {} +QVariant::QVariant(const QMap<QString, QVariant> &map) : d(std::piecewise_construct_t{}, map) {} +QVariant::QVariant(const QHash<QString, QVariant> &hash) : d(std::piecewise_construct_t{}, hash) {} + +QVariant::QVariant(QLatin1StringView val) : QVariant(QString(val)) {} + #if QT_CONFIG(easingcurve) -QVariant::QVariant(const QEasingCurve &val) - : d(QMetaType::fromType<QEasingCurve>()) -{ v_construct<QEasingCurve>(&d, val); } +QVariant::QVariant(const QEasingCurve &val) : d(std::piecewise_construct_t{}, val) {} #endif -QVariant::QVariant(const QList<QVariant> &list) - : d(QMetaType::fromType<QList<QVariant>>()) -{ v_construct<QVariantList>(&d, list); } -QVariant::QVariant(const QMap<QString, QVariant> &map) - : d(QMetaType::fromType<QMap<QString, QVariant>>()) -{ v_construct<QVariantMap>(&d, map); } -QVariant::QVariant(const QHash<QString, QVariant> &hash) - : d(QMetaType::fromType<QHash<QString, QVariant>>()) -{ v_construct<QVariantHash>(&d, hash); } #ifndef QT_NO_GEOM_VARIANT -QVariant::QVariant(const QPoint &pt) - : d(QMetaType::fromType<QPoint>()) -{ v_construct<QPoint>(&d, pt); } -QVariant::QVariant(const QPointF &pt) - : d(QMetaType::fromType<QPointF>()) -{ v_construct<QPointF>(&d, pt); } -QVariant::QVariant(const QRectF &r) - : d(QMetaType::fromType<QRectF>()) -{ v_construct<QRectF>(&d, r); } -QVariant::QVariant(const QLineF &l) - : d(QMetaType::fromType<QLineF>()) -{ v_construct<QLineF>(&d, l); } -QVariant::QVariant(const QLine &l) - : d(QMetaType::fromType<QLine>()) -{ v_construct<QLine>(&d, l); } -QVariant::QVariant(const QRect &r) - : d(QMetaType::fromType<QRect>()) -{ v_construct<QRect>(&d, r); } -QVariant::QVariant(const QSize &s) - : d(QMetaType::fromType<QSize>()) -{ v_construct<QSize>(&d, s); } -QVariant::QVariant(const QSizeF &s) - : d(QMetaType::fromType<QSizeF>()) -{ v_construct<QSizeF>(&d, s); } +QVariant::QVariant(const QPoint &pt) : d(std::piecewise_construct_t{}, pt) {} +QVariant::QVariant(const QPointF &pt) : d(std::piecewise_construct_t{}, pt) {} +QVariant::QVariant(const QRect &r) : d(std::piecewise_construct_t{}, r) {} +QVariant::QVariant(const QRectF &r) : d(std::piecewise_construct_t{}, r) {} +QVariant::QVariant(const QLine &l) : d(std::piecewise_construct_t{}, l) {} +QVariant::QVariant(const QLineF &l) : d(std::piecewise_construct_t{}, l) {} +QVariant::QVariant(const QSize &s) : d(std::piecewise_construct_t{}, s) {} +QVariant::QVariant(const QSizeF &s) : d(std::piecewise_construct_t{}, s) {} #endif #ifndef QT_BOOTSTRAPPED -QVariant::QVariant(const QUrl &u) - : d(QMetaType::fromType<QUrl>()) -{ v_construct<QUrl>(&d, u); } +QVariant::QVariant(const QUrl &u) : d(std::piecewise_construct_t{}, u) {} #endif -QVariant::QVariant(const QLocale &l) - : d(QMetaType::fromType<QLocale>()) -{ v_construct<QLocale>(&d, l); } +QVariant::QVariant(const QLocale &l) : d(std::piecewise_construct_t{}, l) {} #if QT_CONFIG(regularexpression) -QVariant::QVariant(const QRegularExpression &re) - : d(QMetaType::fromType<QRegularExpression>()) -{ v_construct<QRegularExpression>(&d, re); } +QVariant::QVariant(const QRegularExpression &re) : d(std::piecewise_construct_t{}, re) {} #endif // QT_CONFIG(regularexpression) -QVariant::QVariant(const QUuid &uuid) - : d(QMetaType::fromType<QUuid>()) -{ v_construct<QUuid>(&d, uuid); } +QVariant::QVariant(const QUuid &uuid) : d(std::piecewise_construct_t{}, uuid) {} #ifndef QT_BOOTSTRAPPED -QVariant::QVariant(const QJsonValue &jsonValue) - : d(QMetaType::fromType<QJsonValue>()) -{ v_construct<QJsonValue>(&d, jsonValue); } -QVariant::QVariant(const QJsonObject &jsonObject) - : d(QMetaType::fromType<QJsonObject>()) -{ v_construct<QJsonObject>(&d, jsonObject); } -QVariant::QVariant(const QJsonArray &jsonArray) - : d(QMetaType::fromType<QJsonArray>()) -{ v_construct<QJsonArray>(&d, jsonArray); } -QVariant::QVariant(const QJsonDocument &jsonDocument) - : d(QMetaType::fromType<QJsonDocument>()) -{ v_construct<QJsonDocument>(&d, jsonDocument); } +QVariant::QVariant(const QJsonValue &jsonValue) : d(std::piecewise_construct_t{}, jsonValue) {} +QVariant::QVariant(const QJsonObject &jsonObject) : d(std::piecewise_construct_t{}, jsonObject) {} +QVariant::QVariant(const QJsonArray &jsonArray) : d(std::piecewise_construct_t{}, jsonArray) {} +QVariant::QVariant(const QJsonDocument &jsonDocument) : d(std::piecewise_construct_t{}, jsonDocument) {} #endif // QT_BOOTSTRAPPED #if QT_CONFIG(itemmodel) -QVariant::QVariant(const QModelIndex &modelIndex) - : d(QMetaType::fromType<QModelIndex>()) -{ v_construct<QModelIndex>(&d, modelIndex); } -QVariant::QVariant(const QPersistentModelIndex &modelIndex) - : d(QMetaType::fromType<QPersistentModelIndex>()) -{ v_construct<QPersistentModelIndex>(&d, modelIndex); } +QVariant::QVariant(const QModelIndex &modelIndex) : d(std::piecewise_construct_t{}, modelIndex) {} +QVariant::QVariant(const QPersistentModelIndex &modelIndex) : d(std::piecewise_construct_t{}, modelIndex) {} #endif /*! \fn QVariant::Type QVariant::type() const |