/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the QtCore module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QSHAREDPOINTER_H #define QSHAREDPOINTER_H #include #include #include #ifndef Q_QDOC # include #else QT_BEGIN_NAMESPACE // These classes are here to fool qdoc into generating a better documentation template class QSharedPointer { public: // basic accessor functions T *data() const; bool isNull() const; operator bool() const; bool operator!() const; T &operator*() const; T *operator ->() const; // constructors QSharedPointer(); template explicit QSharedPointer(X *ptr); template QSharedPointer(X *ptr, Deleter d); QSharedPointer(std::nullptr_t); template QSharedPointer(std::nullptr_t, Deleter d); QSharedPointer(const QSharedPointer &other); QSharedPointer(const QWeakPointer &other); ~QSharedPointer() { } QSharedPointer &operator=(const QSharedPointer &other); QSharedPointer &operator=(const QWeakPointer &other); void swap(QSharedPointer &other); QWeakPointer toWeakRef() const; void clear(); void reset(); void reset(T *t); template void reset(T *t, Deleter deleter); // casts: template QSharedPointer staticCast() const; template QSharedPointer dynamicCast() const; template QSharedPointer constCast() const; template QSharedPointer objectCast() const; static inline QSharedPointer create(); static inline QSharedPointer create(...); }; template class QWeakPointer { public: // basic accessor functions bool isNull() const; operator bool() const; bool operator!() const; // constructors: QWeakPointer(); QWeakPointer(const QWeakPointer &other); QWeakPointer(const QSharedPointer &other); ~QWeakPointer(); QWeakPointer &operator=(const QWeakPointer &other); QWeakPointer &operator=(const QSharedPointer &other); QWeakPointer(const QObject *other); QWeakPointer &operator=(const QObject *other); void swap(QWeakPointer &other); T *data() const; void clear(); QSharedPointer toStrongRef() const; QSharedPointer lock() const; }; template class QEnableSharedFromThis { public: QSharedPointer sharedFromThis(); QSharedPointer sharedFromThis() const; }; template bool operator==(const QSharedPointer &ptr1, const QSharedPointer &ptr2); template bool operator!=(const QSharedPointer &ptr1, const QSharedPointer &ptr2); template bool operator==(const QSharedPointer &ptr1, const X *ptr2); template bool operator!=(const QSharedPointer &ptr1, const X *ptr2); template bool operator==(const T *ptr1, const QSharedPointer &ptr2); template bool operator!=(const T *ptr1, const QSharedPointer &ptr2); template bool operator==(const QWeakPointer &ptr1, const QSharedPointer &ptr2); template bool operator!=(const QWeakPointer &ptr1, const QSharedPointer &ptr2); template bool operator==(const QSharedPointer &ptr1, const QWeakPointer &ptr2); template bool operator!=(const QSharedPointer &ptr1, const QWeakPointer &ptr2); template bool operator==(const QSharedPointer &lhs, std::nullptr_t); template bool operator!=(const QSharedPointer &lhs, std::nullptr_t); template bool operator==(std::nullptr_t, const QSharedPointer &rhs); template bool operator!=(std::nullptr_t, const QSharedPointer &rhs); template bool operator==(const QWeakPointer &lhs, std::nullptr_t); template bool operator!=(const QWeakPointer &lhs, std::nullptr_t); template bool operator==(std::nullptr_t, const QWeakPointer &rhs); template bool operator!=(std::nullptr_t, const QWeakPointer &rhs); template QSharedPointer qSharedPointerCast(const QSharedPointer &other); template QSharedPointer qSharedPointerCast(const QWeakPointer &other); template QSharedPointer qSharedPointerDynamicCast(const QSharedPointer &src); template QSharedPointer qSharedPointerDynamicCast(const QWeakPointer &src); template QSharedPointer qSharedPointerConstCast(const QSharedPointer &src); template QSharedPointer qSharedPointerConstCast(const QWeakPointer &src); template QSharedPointer qSharedPointerObjectCast(const QSharedPointer &src); template QSharedPointer qSharedPointerObjectCast(const QWeakPointer &src); template QWeakPointer qWeakPointerCast(const QWeakPointer &src); QT_END_NAMESPACE #endif // Q_QDOC #endif // QSHAREDPOINTER_H