26 void operator()(QVariant::PrivateShared *p)
const
27 { QVariant::PrivateShared::free(p); }
31 std::unique_ptr<QVariant::PrivateShared, Deleter> ptr;
32 ptr.reset(QVariant::PrivateShared::create(size, align));
39 auto ptr = customConstructSharedImpl(size, align);
40 construct(ptr->data());
44inline int QVariant::PrivateShared::computeOffset(PrivateShared *ps, size_t align)
46 return int(((quintptr(ps) +
sizeof(PrivateShared) + align - 1) & ~(align - 1)) - quintptr(ps));
49inline size_t QVariant::PrivateShared::computeAllocationSize(size_t size, size_t align)
51 size +=
sizeof(PrivateShared);
52 if (align >
sizeof(PrivateShared)) {
57 size += align -
sizeof(PrivateShared);
62inline QVariant::PrivateShared *QVariant::PrivateShared::create(size_t size, size_t align)
64 size = computeAllocationSize(size, align);
65 void *data = operator
new(size);
66 auto *ps =
new (data) QVariant::PrivateShared();
67 ps->offset = computeOffset(ps, align);
71inline void QVariant::PrivateShared::free(PrivateShared *p)
77inline QVariant::Private::Private(
const QtPrivate::QMetaTypeInterface *iface)
noexcept
78 : is_shared(
false), is_null(
false), packedType(quintptr(iface) >> 2)
80 Q_ASSERT((quintptr(iface) & 0x3) == 0);
83template <
typename T>
inline
84QVariant::Private::Private(std::piecewise_construct_t,
const T &t)
85 : is_shared(!CanUseInternalSpace<T>), is_null(std::is_same_v<T, std::nullptr_t>)
88 static constexpr bool isNothrowQVariantConstructible =
noexcept(QVariant(t));
89 static constexpr bool isNothrowCopyConstructible = std::is_nothrow_copy_constructible_v<T>;
90 static constexpr bool isNothrowCopyAssignable = std::is_nothrow_copy_assignable_v<T>;
92 const QtPrivate::QMetaTypeInterface *iface = QtPrivate::qMetaTypeInterfaceForType<T>();
93 Q_ASSERT((quintptr(iface) & 0x3) == 0);
94 packedType = quintptr(iface) >> 2;
96 if constexpr (CanUseInternalSpace<T>) {
97 static_assert(isNothrowQVariantConstructible == isNothrowCopyConstructible);
98 static_assert(isNothrowQVariantConstructible == isNothrowCopyAssignable);
101 static_assert(!isNothrowQVariantConstructible);
102 data.shared = customConstructShared(
sizeof(T),
alignof(T), [=](
void *where) {
QDataStream & operator>>(QDataStream &s, QVariant &p)
\keyword 16-bit Floating Point Support\inmodule QtCore \inheaderfile QFloat16
constexpr int Qt6ToQt5GuiTypeDelta
static bool qIsFloatingPoint(uint tp)
static QPartialOrdering numericCompare(const QVariant::Private *d1, const QVariant::Private *d2)
constexpr int Qt5QQuaternion
static bool qIsNumericType(uint tp)
static bool canBeNumericallyCompared(const QtPrivate::QMetaTypeInterface *iface1, const QtPrivate::QMetaTypeInterface *iface2)
constexpr int Qt5KeySequence
static QPartialOrdering integralCompare(uint promotedType, const QVariant::Private *d1, const QVariant::Private *d2)
static const ushort mapIdFromQt3ToCurrent[MapFromThreeCount]
constexpr int Qt5LastCoreType
T qNumVariantToHelper(const QVariant::Private &d, bool *ok)
constexpr int Qt5FirstGuiType
static bool qvCanConvertMetaObject(QMetaType fromType, QMetaType toType)
constexpr int Qt5LastGuiType
static int numericTypePromotion(const QtPrivate::QMetaTypeInterface *iface1, const QtPrivate::QMetaTypeInterface *iface2)
constexpr int Qt5SizePolicy
constexpr int Qt5UserType
static QPartialOrdering pointerCompare(const QVariant::Private *d1, const QVariant::Private *d2)
QT_BEGIN_NAMESPACE auto customConstructSharedImpl(size_t size, size_t align)
static QVariant::PrivateShared * customConstructShared(size_t size, size_t align, F &&construct)