diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2012-08-27 12:24:48 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-09-28 23:50:10 +0200 |
commit | 3a29976eac1ff95e663d49886dc82611a175fed9 (patch) | |
tree | 31d70d25501a0f95e17b65e4c029c5c40b75610f /src/concurrent/qtconcurrentexception.cpp | |
parent | 5414a9a03bec65fd180f3c29811397df14130881 (diff) |
Move QtConcurrent::Exception as QException back to QtCore
Leave the old name as a deprecated typedef; adapt users.
This is a prerequisite for moving QFuture back to QtCore.
Change-Id: I81dcee2c7e6eb234c16f3f42e2415ca0da3dc4f8
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/concurrent/qtconcurrentexception.cpp')
-rw-r--r-- | src/concurrent/qtconcurrentexception.cpp | 211 |
1 files changed, 0 insertions, 211 deletions
diff --git a/src/concurrent/qtconcurrentexception.cpp b/src/concurrent/qtconcurrentexception.cpp deleted file mode 100644 index 82fa5ab243..0000000000 --- a/src/concurrent/qtconcurrentexception.cpp +++ /dev/null @@ -1,211 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies). -** Contact: http://www.qt-project.org/legal -** -** 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 Digia. For licensing terms and -** conditions see http://qt.digia.com/licensing. For further information -** use the contact form at http://qt.digia.com/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 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, Digia gives you certain additional -** rights. These rights are described in the Digia 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. -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qtconcurrentexception.h" -#include "QtCore/qshareddata.h" - -#ifndef QT_NO_QFUTURE -#ifndef QT_NO_EXCEPTIONS - -QT_BEGIN_NAMESPACE - -/*! - \class QtConcurrent::Exception - \brief The Exception class provides a base class for exceptions that can transferred across threads. - \since 4.4 - - Qt Concurrent supports throwing and catching exceptions across thread - boundaries, provided that the exception inherit from QtConcurrent::Exception - and implement two helper functions: - - \snippet code/src_concurrent_qtconcurrentexception.cpp 0 - - QtConcurrent::Exception subclasses must be thrown by value and - caught by reference: - - \snippet code/src_concurrent_qtconcurrentexception.cpp 1 - - If you throw an exception that is not a subclass of QtConcurrent::Exception, - the Qt Concurrent functions will throw a QtConcurrent::UnhandledException - in the receiver thread. - - When using QFuture, transferred exceptions will be thrown when calling the following functions: - \list - \li QFuture::waitForFinished() - \li QFuture::result() - \li QFuture::resultAt() - \li QFuture::results() - \endlist -*/ - -/*! - \fn QtConcurrent::Exception::raise() const - In your QtConcurrent::Exception subclass, reimplement raise() like this: - - \snippet code/src_concurrent_qtconcurrentexception.cpp 2 -*/ - -/*! - \fn QtConcurrent::Exception::clone() const - In your QtConcurrent::Exception subclass, reimplement clone() like this: - - \snippet code/src_concurrent_qtconcurrentexception.cpp 3 -*/ - -/*! - \class QtConcurrent::UnhandledException - - \brief The UnhandledException class represents an unhandled exception in a worker thread. - \since 4.4 - - If a worker thread throws an exception that is not a subclass of QtConcurrent::Exception, - the Qt Concurrent functions will throw a QtConcurrent::UnhandledException - on the receiver thread side. - - Inheriting from this class is not supported. -*/ - -/*! - \fn QtConcurrent::UnhandledException::raise() const - \internal -*/ - -/*! - \fn QtConcurrent::UnhandledException::clone() const - \internal -*/ - -namespace QtConcurrent -{ - -void Exception::raise() const -{ - Exception e = *this; - throw e; -} - -Exception *Exception::clone() const -{ - return new Exception(*this); -} - -void UnhandledException::raise() const -{ - UnhandledException e = *this; - throw e; -} - -Exception *UnhandledException::clone() const -{ - return new UnhandledException(*this); -} - -#ifndef qdoc - -namespace internal { - -class Base : public QSharedData -{ -public: - Base(Exception *exception) - : exception(exception), hasThrown(false) { } - ~Base() { delete exception; } - - Exception *exception; - bool hasThrown; -}; - -ExceptionHolder::ExceptionHolder(Exception *exception) -: base(new Base(exception)) {} - -ExceptionHolder::ExceptionHolder(const ExceptionHolder &other) -: base(other.base) -{} - -void ExceptionHolder::operator=(const ExceptionHolder &other) -{ - base = other.base; -} - -ExceptionHolder::~ExceptionHolder() -{} - -Exception *ExceptionHolder::exception() const -{ - return base->exception; -} - -void ExceptionStore::setException(const Exception &e) -{ - if (hasException() == false) - exceptionHolder = ExceptionHolder(e.clone()); -} - -bool ExceptionStore::hasException() const -{ - return (exceptionHolder.exception() != 0); -} - -ExceptionHolder ExceptionStore::exception() -{ - return exceptionHolder; -} - -void ExceptionStore::throwPossibleException() -{ - if (hasException() ) { - exceptionHolder.base->hasThrown = true; - exceptionHolder.exception()->raise(); - } -} - -bool ExceptionStore::hasThrown() const { return exceptionHolder.base->hasThrown; } - -} // namespace internal - -#endif //qdoc - -} // namespace QtConcurrent - -QT_END_NAMESPACE - -#endif // QT_NO_EXCEPTIONS -#endif // QT_NO_CONCURRENT |