4#ifndef QTAGGEDPOINTER_H
5#define QTAGGEDPOINTER_H
7#include <QtCore/qglobal.h>
8#include <QtCore/qalgorithms.h>
9#include <QtCore/qmath.h>
10#include <QtCore/qtypeinfo.h>
22 "Alignment of template parameter must be power of two");
26 "Alignment of template parameter does not allow any tags");
30 "Alignment of template parameter allows tags masking away pointer");
32 using TagType =
typename QIntegerForSize<tagSize>::Unsigned;
36template <typename T, typename Tag = typename QtPrivate::TagInfo<T>::TagType>
56 "QTaggedPointer<T, Tag>::setTag",
"Tag is larger than allowed by number of available tag bits");
70 explicit operator bool() const noexcept
83 std::enable_if_t<std::is_convertible_v<U *, T *>,
bool> =
false>
92 std::enable_if_t<std::is_null_pointer_v<U>,
bool> =
false>
109 "QTaggedPointer<T, Tag>::setTag",
110 "Tag is larger than allowed by number of available tag bits");
137 return lhs.data() == rhs.data();
142 return lhs.data() != rhs.data();
157 return !lhs.isNull();
162 return !rhs.isNull();
179template <
typename T,
typename Tag>
183template <
typename T,
typename Tag>
void swap(QPixmap &other) noexcept
QTaggedPointer & operator=(U *other) noexcept
friend void swap(QTaggedPointer &p1, QTaggedPointer &p2) noexcept
Type * operator->() const noexcept
friend bool operator==(QTaggedPointer lhs, QTaggedPointer rhs) noexcept
Q_NODISCARD_CTOR constexpr QTaggedPointer() noexcept
Q_NODISCARD_CTOR QTaggedPointer(T *pointer, Tag tag=Tag()) noexcept
friend bool operator!=(QTaggedPointer lhs, QTaggedPointer rhs) noexcept
friend bool operator!(QTaggedPointer ptr) noexcept
friend bool operator!=(std::nullptr_t, QTaggedPointer rhs) noexcept
T * data() const noexcept
static constexpr quintptr pointerMask()
Q_NODISCARD_CTOR constexpr QTaggedPointer(std::nullptr_t) noexcept
void swap(QTaggedPointer &other) noexcept
friend bool operator==(std::nullptr_t, QTaggedPointer rhs) noexcept
static constexpr quintptr tagMask()
QTaggedPointer & operator=(U) noexcept
friend bool operator==(QTaggedPointer lhs, std::nullptr_t) noexcept
bool isNull() const noexcept
static constexpr Tag maximumTag() noexcept
friend bool operator!=(QTaggedPointer lhs, std::nullptr_t) noexcept
Type & operator*() const noexcept
Combined button and popup list for selecting options.
constexpr uint qConstexprCountTrailingZeroBits(quint32 v) noexcept
constexpr quint8 nextByteSize(quint8 bits)
constexpr quint32 qConstexprNextPowerOfTwo(quint32 v)
static ControlElement< T > * ptr(QWidget *widget)
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const void * bits
GLsizei const void * pointer
static Q_CONSTINIT QBasicAtomicInteger< unsigned > seed
#define Q_ASSERT_X(cond, x, msg)
constexpr std::size_t qHash(QTaggedPointer< T, Tag > p, std::size_t seed=0) noexcept
typename QIntegerForSize< tagSize >::Unsigned TagType
static constexpr size_t tagSize
static constexpr size_t alignment
static constexpr quint8 tagBits