diff options
Diffstat (limited to 'src/corelib/tools/qshareddata.h')
-rw-r--r-- | src/corelib/tools/qshareddata.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h index 780f2331a8..6930cb96a5 100644 --- a/src/corelib/tools/qshareddata.h +++ b/src/corelib/tools/qshareddata.h @@ -136,6 +136,18 @@ private: T *d; }; +template <class T> inline bool operator==(std::nullptr_t p1, const QSharedDataPointer<T> &p2) +{ + Q_UNUSED(p1); + return !p2; +} + +template <class T> inline bool operator==(const QSharedDataPointer<T> &p1, std::nullptr_t p2) +{ + Q_UNUSED(p2); + return !p1; +} + template <class T> class QExplicitlySharedDataPointer { public: @@ -147,6 +159,7 @@ public: inline T *operator->() const { return d; } inline T *data() const { return d; } inline const T *constData() const { return d; } + inline T *take() { T *x = d; d = nullptr; return x; } inline void detach() { if (d && d->ref.load() != 1) detach_helper(); } @@ -271,6 +284,18 @@ Q_INLINE_TEMPLATE QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer( : d(adata) { if (d) d->ref.ref(); } +template <class T> inline bool operator==(std::nullptr_t p1, const QExplicitlySharedDataPointer<T> &p2) +{ + Q_UNUSED(p1); + return !p2; +} + +template <class T> inline bool operator==(const QExplicitlySharedDataPointer<T> &p1, std::nullptr_t p2) +{ + Q_UNUSED(p2); + return !p1; +} + template <class T> Q_INLINE_TEMPLATE void qSwap(QSharedDataPointer<T> &p1, QSharedDataPointer<T> &p2) { p1.swap(p2); } |