summaryrefslogtreecommitdiffstats
path: root/src/corelib/tools/qsharedpointer_impl.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/corelib/tools/qsharedpointer_impl.h')
-rw-r--r--src/corelib/tools/qsharedpointer_impl.h25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h
index 58010dd8d9..0688f94421 100644
--- a/src/corelib/tools/qsharedpointer_impl.h
+++ b/src/corelib/tools/qsharedpointer_impl.h
@@ -60,6 +60,7 @@ QT_END_HEADER
#include <new>
#include <QtCore/qatomic.h>
#include <QtCore/qobject.h> // for qobject_cast
+#include <QtCore/qhash.h> // for qHash
QT_BEGIN_HEADER
@@ -105,8 +106,8 @@ namespace QtSharedPointer {
template <class X, class Y> QSharedPointer<X> copyAndSetPointer(X * ptr, const QSharedPointer<Y> &src);
// used in debug mode to verify the reuse of pointers
- Q_CORE_EXPORT void internalSafetyCheckAdd2(const void *, const volatile void *);
- Q_CORE_EXPORT void internalSafetyCheckRemove2(const void *);
+ Q_CORE_EXPORT void internalSafetyCheckAdd(const void *, const volatile void *);
+ Q_CORE_EXPORT void internalSafetyCheckRemove(const void *);
template <class T, typename Klass, typename RetVal>
inline void executeDeleter(T *t, RetVal (Klass:: *memberDeleter)())
@@ -247,7 +248,7 @@ namespace QtSharedPointer {
}
static void safetyCheckDeleter(ExternalRefCountData *self)
{
- internalSafetyCheckRemove2(self);
+ internalSafetyCheckRemove(self);
deleter(self);
}
@@ -290,7 +291,7 @@ namespace QtSharedPointer {
}
static void safetyCheckDeleter(ExternalRefCountData *self)
{
- internalSafetyCheckRemove2(self);
+ internalSafetyCheckRemove(self);
deleter(self);
}
@@ -374,7 +375,7 @@ namespace QtSharedPointer {
Basic<T>::internalConstruct(ptr);
if (ptr) d->setQObjectShared(ptr, true);
#ifdef QT_SHAREDPOINTER_TRACK_POINTERS
- if (ptr) internalSafetyCheckAdd2(d, ptr);
+ if (ptr) internalSafetyCheckAdd(d, ptr);
#endif
}
@@ -510,6 +511,13 @@ public:
inline void swap(QSharedPointer &other)
{ QSharedPointer<T>::internalSwap(other); }
+ inline void reset() { clear(); }
+ inline void reset(T *t)
+ { QSharedPointer copy(t); swap(copy); }
+ template <typename Deleter>
+ inline void reset(T *t, Deleter deleter)
+ { QSharedPointer copy(t, deleter); swap(copy); }
+
template <class X>
QSharedPointer<X> staticCast() const
{
@@ -764,11 +772,10 @@ Q_INLINE_TEMPLATE bool operator<(T *ptr1, const QSharedPointer<X> &ptr2)
//
// qHash
//
-template <class T> inline uint qHash(const T *key); // defined in qhash.h
template <class T>
-Q_INLINE_TEMPLATE uint qHash(const QSharedPointer<T> &ptr)
+Q_INLINE_TEMPLATE uint qHash(const QSharedPointer<T> &ptr, uint seed = 0)
{
- return QT_PREPEND_NAMESPACE(qHash)<T>(ptr.data());
+ return QT_PREPEND_NAMESPACE(qHash)(ptr.data(), seed);
}
@@ -784,7 +791,6 @@ inline void qSwap(QSharedPointer<T> &p1, QSharedPointer<T> &p2)
p1.swap(p2);
}
-#ifndef QT_NO_STL
QT_END_NAMESPACE
namespace std {
template <class T>
@@ -792,7 +798,6 @@ namespace std {
{ p1.swap(p2); }
}
QT_BEGIN_NAMESPACE
-#endif
namespace QtSharedPointer {
// helper functions: