diff options
Diffstat (limited to 'qtinterface/qt4/Qt/qshareddata.h')
-rw-r--r-- | qtinterface/qt4/Qt/qshareddata.h | 260 |
1 files changed, 0 insertions, 260 deletions
diff --git a/qtinterface/qt4/Qt/qshareddata.h b/qtinterface/qt4/Qt/qshareddata.h deleted file mode 100644 index 5a1d522..0000000 --- a/qtinterface/qt4/Qt/qshareddata.h +++ /dev/null @@ -1,260 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation ([email protected]) -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial Usage -** Licensees holding valid Qt Commercial licenses may use this file in -** accordance with the Qt Commercial License Agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and Nokia. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you have questions regarding the use of this file, please contact -** Nokia at [email protected]. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSHAREDDATA_H -#define QSHAREDDATA_H - -#include <QtCore/qglobal.h> -#include <QtCore/qatomic.h> - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Core) - -template <class T> class QSharedDataPointer; - -class Q_CORE_EXPORT QSharedData -{ -public: - mutable QAtomicInt ref; - - inline QSharedData() : ref(0) { } - inline QSharedData(const QSharedData &) : ref(0) { } - -private: - // using the assignment operator would lead to corruption in the ref-counting - QSharedData &operator=(const QSharedData &); -}; - -template <class T> class QSharedDataPointer -{ -public: - typedef T Type; - typedef T *pointer; - - inline void detach() { if (d && d->ref != 1) detach_helper(); } - inline T &operator*() { detach(); return *d; } - inline const T &operator*() const { return *d; } - inline T *operator->() { detach(); return d; } - inline const T *operator->() const { return d; } - inline operator T *() { detach(); return d; } - inline operator const T *() const { return d; } - inline T *data() { detach(); return d; } - inline const T *data() const { return d; } - inline const T *constData() const { return d; } - - inline bool operator==(const QSharedDataPointer<T> &other) const { return d == other.d; } - inline bool operator!=(const QSharedDataPointer<T> &other) const { return d != other.d; } - - inline QSharedDataPointer() { d = 0; } - inline ~QSharedDataPointer() { if (d && !d->ref.deref()) delete d; } - - explicit QSharedDataPointer(T *data); - inline QSharedDataPointer(const QSharedDataPointer<T> &o) : d(o.d) { if (d) d->ref.ref(); } - inline QSharedDataPointer<T> & operator=(const QSharedDataPointer<T> &o) { - if (o.d != d) { - if (o.d) - o.d->ref.ref(); - if (d && !d->ref.deref()) - delete d; - d = o.d; - } - return *this; - } - inline QSharedDataPointer &operator=(T *o) { - if (o != d) { - if (o) - o->ref.ref(); - if (d && !d->ref.deref()) - delete d; - d = o; - } - return *this; - } - - inline bool operator!() const { return !d; } - - inline void swap(QSharedDataPointer &other) - { qSwap(d, other.d); } - -protected: - T *clone(); - -private: - void detach_helper(); - - T *d; -}; - -template <class T> class QExplicitlySharedDataPointer -{ -public: - typedef T Type; - typedef T *pointer; - - inline T &operator*() const { return *d; } - inline T *operator->() { return d; } - inline T *operator->() const { return d; } - inline T *data() const { return d; } - inline const T *constData() const { return d; } - - inline void detach() { if (d && d->ref != 1) detach_helper(); } - - inline void reset() - { - if(d && !d->ref.deref()) - delete d; - - d = 0; - } - - inline operator bool () const { return d != 0; } - - inline bool operator==(const QExplicitlySharedDataPointer<T> &other) const { return d == other.d; } - inline bool operator!=(const QExplicitlySharedDataPointer<T> &other) const { return d != other.d; } - inline bool operator==(const T *ptr) const { return d == ptr; } - inline bool operator!=(const T *ptr) const { return d != ptr; } - - inline QExplicitlySharedDataPointer() { d = 0; } - inline ~QExplicitlySharedDataPointer() { if (d && !d->ref.deref()) delete d; } - - explicit QExplicitlySharedDataPointer(T *data); - inline QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o) : d(o.d) { if (d) d->ref.ref(); } - -#ifndef QT_NO_MEMBER_TEMPLATES - template<class X> - inline QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<X> &o) : d(static_cast<T *>(o.data())) - { - if(d) - d->ref.ref(); - } -#endif - - inline QExplicitlySharedDataPointer<T> & operator=(const QExplicitlySharedDataPointer<T> &o) { - if (o.d != d) { - if (o.d) - o.d->ref.ref(); - if (d && !d->ref.deref()) - delete d; - d = o.d; - } - return *this; - } - inline QExplicitlySharedDataPointer &operator=(T *o) { - if (o != d) { - if (o) - o->ref.ref(); - if (d && !d->ref.deref()) - delete d; - d = o; - } - return *this; - } - - inline bool operator!() const { return !d; } - - inline void swap(QExplicitlySharedDataPointer &other) - { qSwap(d, other.d); } - -protected: - T *clone(); - -private: - void detach_helper(); - - T *d; -}; - -template <class T> -Q_INLINE_TEMPLATE QSharedDataPointer<T>::QSharedDataPointer(T *adata) : d(adata) -{ if (d) d->ref.ref(); } - -template <class T> -Q_INLINE_TEMPLATE T *QSharedDataPointer<T>::clone() -{ - return new T(*d); -} - -template <class T> -Q_OUTOFLINE_TEMPLATE void QSharedDataPointer<T>::detach_helper() -{ - T *x = clone(); - x->ref.ref(); - if (!d->ref.deref()) - delete d; - d = x; -} - -template <class T> -Q_INLINE_TEMPLATE T *QExplicitlySharedDataPointer<T>::clone() -{ - return new T(*d); -} - -template <class T> -Q_OUTOFLINE_TEMPLATE void QExplicitlySharedDataPointer<T>::detach_helper() -{ - T *x = clone(); - x->ref.ref(); - if (!d->ref.deref()) - delete d; - d = x; -} - -template <class T> -Q_INLINE_TEMPLATE QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer(T *adata) : d(adata) -{ if (d) d->ref.ref(); } - -template <class T> -Q_INLINE_TEMPLATE void qSwap(QSharedDataPointer<T> &p1, QSharedDataPointer<T> &p2) -{ p1.swap(p2); } - -template <class T> -Q_INLINE_TEMPLATE void qSwap(QExplicitlySharedDataPointer<T> &p1, QExplicitlySharedDataPointer<T> &p2) -{ p1.swap(p2); } - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QSHAREDDATA_H |