summaryrefslogtreecommitdiffstats
path: root/src/concurrent
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2012-08-27 12:24:48 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-09-28 23:50:10 +0200
commit3a29976eac1ff95e663d49886dc82611a175fed9 (patch)
tree31d70d25501a0f95e17b65e4c029c5c40b75610f /src/concurrent
parent5414a9a03bec65fd180f3c29811397df14130881 (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')
-rw-r--r--src/concurrent/concurrent.pro1
-rw-r--r--src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentexception.cpp75
-rw-r--r--src/concurrent/qfutureinterface.cpp4
-rw-r--r--src/concurrent/qfutureinterface.h6
-rw-r--r--src/concurrent/qfutureinterface_p.h2
-rw-r--r--src/concurrent/qtconcurrentexception.cpp211
-rw-r--r--src/concurrent/qtconcurrentexception.h64
-rw-r--r--src/concurrent/qtconcurrentmap.cpp8
-rw-r--r--src/concurrent/qtconcurrentrunbase.h8
-rw-r--r--src/concurrent/qtconcurrentthreadengine.cpp10
-rw-r--r--src/concurrent/qtconcurrentthreadengine.h6
11 files changed, 22 insertions, 373 deletions
diff --git a/src/concurrent/concurrent.pro b/src/concurrent/concurrent.pro
index 190da83e9c..772146f682 100644
--- a/src/concurrent/concurrent.pro
+++ b/src/concurrent/concurrent.pro
@@ -21,7 +21,6 @@ SOURCES += \
qtconcurrentresultstore.cpp \
qtconcurrentthreadengine.cpp \
qtconcurrentiteratekernel.cpp \
- qtconcurrentexception.cpp
HEADERS += \
qtconcurrent_global.h \
diff --git a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentexception.cpp b/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentexception.cpp
deleted file mode 100644
index 002d669493..0000000000
--- a/src/concurrent/doc/snippets/code/src_concurrent_qtconcurrentexception.cpp
+++ /dev/null
@@ -1,75 +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 documentation of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:BSD$
-** You may use this file under the terms of the BSD license as follows:
-**
-** "Redistribution and use in source and binary forms, with or without
-** modification, are permitted provided that the following conditions are
-** met:
-** * Redistributions of source code must retain the above copyright
-** notice, this list of conditions and the following disclaimer.
-** * Redistributions in binary form must reproduce the above copyright
-** notice, this list of conditions and the following disclaimer in
-** the documentation and/or other materials provided with the
-** distribution.
-** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
-** of its contributors may be used to endorse or promote products derived
-** from this software without specific prior written permission.
-**
-**
-** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-//! [0]
-
-class MyException : public QtConcurrent::Exception
-{
-public:
- void raise() const { throw *this; }
- Exception *clone() const { return new MyException(*this); }
-};
-
-//! [0]
-
-
-//! [1]
-
-try {
- QtConcurrent::blockingMap(list, throwFunction); // throwFunction throws MyException
-} catch (MyException &e) {
- // handle exception
-}
-
-//! [1]
-
-
-//! [2]
-
-void MyException::raise() const { throw *this; }
-
-//! [2]
-
-
-//! [3]
-
-MyException *MyException::clone() const { return new MyException(*this); }
-
-//! [3]
diff --git a/src/concurrent/qfutureinterface.cpp b/src/concurrent/qfutureinterface.cpp
index 5fc08c9366..1f675525a5 100644
--- a/src/concurrent/qfutureinterface.cpp
+++ b/src/concurrent/qfutureinterface.cpp
@@ -238,7 +238,7 @@ void QFutureInterfaceBase::reportCanceled()
}
#ifndef QT_NO_EXCEPTIONS
-void QFutureInterfaceBase::reportException(const QtConcurrent::Exception &exception)
+void QFutureInterfaceBase::reportException(const QException &exception)
{
QMutexLocker locker(&d->m_mutex);
if ((d->state & Canceled) || (d->state & Finished))
@@ -390,7 +390,7 @@ QMutex *QFutureInterfaceBase::mutex() const
return &d->m_mutex;
}
-QtConcurrent::internal::ExceptionStore &QFutureInterfaceBase::exceptionStore()
+QtPrivate::ExceptionStore &QFutureInterfaceBase::exceptionStore()
{
return d->m_exceptionStore;
}
diff --git a/src/concurrent/qfutureinterface.h b/src/concurrent/qfutureinterface.h
index 55112ab68d..615b9fbe6a 100644
--- a/src/concurrent/qfutureinterface.h
+++ b/src/concurrent/qfutureinterface.h
@@ -49,7 +49,7 @@
#ifndef QT_NO_QFUTURE
#include <QtCore/qmutex.h>
-#include <QtConcurrent/qtconcurrentexception.h>
+#include <QtCore/qexception.h>
#include <QtConcurrent/qtconcurrentresultstore.h>
QT_BEGIN_HEADER
@@ -83,7 +83,7 @@ public:
void reportFinished();
void reportCanceled();
#ifndef QT_NO_EXCEPTIONS
- void reportException(const QtConcurrent::Exception &e);
+ void reportException(const QException &e);
#endif
void reportResultsReady(int beginIndex, int endIndex);
@@ -122,7 +122,7 @@ public:
void waitForResume();
QMutex *mutex() const;
- QtConcurrent::internal::ExceptionStore &exceptionStore();
+ QtPrivate::ExceptionStore &exceptionStore();
QtConcurrent::ResultStoreBase &resultStoreBase();
const QtConcurrent::ResultStoreBase &resultStoreBase() const;
diff --git a/src/concurrent/qfutureinterface_p.h b/src/concurrent/qfutureinterface_p.h
index e4c5d369aa..734584adad 100644
--- a/src/concurrent/qfutureinterface_p.h
+++ b/src/concurrent/qfutureinterface_p.h
@@ -145,7 +145,7 @@ public:
QtConcurrent::ResultStoreBase m_results;
bool manualProgress;
int m_expectedResultCount;
- QtConcurrent::internal::ExceptionStore m_exceptionStore;
+ QtPrivate::ExceptionStore m_exceptionStore;
QString m_progressText;
QRunnable *runnable;
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
diff --git a/src/concurrent/qtconcurrentexception.h b/src/concurrent/qtconcurrentexception.h
index 0c86f08d75..373d42ee64 100644
--- a/src/concurrent/qtconcurrentexception.h
+++ b/src/concurrent/qtconcurrentexception.h
@@ -46,12 +46,7 @@
#ifndef QT_NO_QFUTURE
-#include <QtCore/qatomic.h>
-#include <QtCore/qshareddata.h>
-
-#ifndef QT_NO_EXCEPTIONS
-# include <exception>
-#endif
+#include <QtCore/qexception.h>
QT_BEGIN_HEADER
QT_BEGIN_NAMESPACE
@@ -62,59 +57,8 @@ namespace QtConcurrent
#ifndef QT_NO_EXCEPTIONS
-class Q_CONCURRENT_EXPORT Exception : public std::exception
-{
-public:
- virtual void raise() const;
- virtual Exception *clone() const;
-};
-
-class Q_CONCURRENT_EXPORT UnhandledException : public Exception
-{
-public:
- void raise() const;
- Exception *clone() const;
-};
-
-namespace internal {
-
-class Base;
-class ExceptionHolder
-{
-public:
- ExceptionHolder(Exception *exception = 0);
- ExceptionHolder(const ExceptionHolder &other);
- void operator=(const ExceptionHolder &other);
- ~ExceptionHolder();
- Exception *exception() const;
- QExplicitlySharedDataPointer<Base> base;
-};
-
-class Q_CONCURRENT_EXPORT ExceptionStore
-{
-public:
- void setException(const Exception &e);
- bool hasException() const;
- ExceptionHolder exception();
- void throwPossibleException();
- bool hasThrown() const;
- ExceptionHolder exceptionHolder;
-};
-
-} // namespace internal
-
-#else // QT_NO_EXCEPTIONS
-
-namespace internal {
-
-class Q_CONCURRENT_EXPORT ExceptionStore
-{
-public:
- ExceptionStore() { }
- inline void throwPossibleException() const {}
-};
-
-} // namespace internal
+typedef Q_DECL_DEPRECATED QException Exception;
+typedef Q_DECL_DEPRECATED QUnhandledException UnhandledException;
#endif
@@ -123,6 +67,6 @@ public:
QT_END_NAMESPACE
QT_END_HEADER
-#endif // QT_NO_CONCURRENT
+#endif // QT_NO_QFUTURE
#endif
diff --git a/src/concurrent/qtconcurrentmap.cpp b/src/concurrent/qtconcurrentmap.cpp
index b26930cf0c..f1e46177eb 100644
--- a/src/concurrent/qtconcurrentmap.cpp
+++ b/src/concurrent/qtconcurrentmap.cpp
@@ -55,14 +55,6 @@
*/
/*!
- \namespace QtConcurrent::internal
- \internal
-
- \brief The QtConcurrent::internal namespace contains QtConcurrent
- implementation details.
-*/
-
-/*!
\enum QtConcurrent::ReduceOption
This enum specifies the order of which results from the map or filter
function are passed to the reduce function.
diff --git a/src/concurrent/qtconcurrentrunbase.h b/src/concurrent/qtconcurrentrunbase.h
index 02ce30a7f5..897345f239 100644
--- a/src/concurrent/qtconcurrentrunbase.h
+++ b/src/concurrent/qtconcurrentrunbase.h
@@ -104,10 +104,10 @@ public:
#endif
this->runFunctor();
#ifndef QT_NO_EXCEPTIONS
- } catch (QtConcurrent::Exception &e) {
+ } catch (QException &e) {
QFutureInterface<T>::reportException(e);
} catch (...) {
- QFutureInterface<T>::reportException(QtConcurrent::UnhandledException());
+ QFutureInterface<T>::reportException(QUnhandledException());
}
#endif
@@ -132,10 +132,10 @@ public:
#endif
this->runFunctor();
#ifndef QT_NO_EXCEPTIONS
- } catch (QtConcurrent::Exception &e) {
+ } catch (QException &e) {
QFutureInterface<void>::reportException(e);
} catch (...) {
- QFutureInterface<void>::reportException(QtConcurrent::UnhandledException());
+ QFutureInterface<void>::reportException(QUnhandledException());
}
#endif
this->reportFinished();
diff --git a/src/concurrent/qtconcurrentthreadengine.cpp b/src/concurrent/qtconcurrentthreadengine.cpp
index 886fb09ea6..56592965fd 100644
--- a/src/concurrent/qtconcurrentthreadengine.cpp
+++ b/src/concurrent/qtconcurrentthreadengine.cpp
@@ -155,10 +155,10 @@ void ThreadEngineBase::startBlocking()
}
}
#ifndef QT_NO_EXCEPTIONS
- } catch (QtConcurrent::Exception &e) {
+ } catch (QException &e) {
handleException(e);
} catch (...) {
- handleException(QtConcurrent::UnhandledException());
+ handleException(QUnhandledException());
}
#endif
@@ -271,10 +271,10 @@ void ThreadEngineBase::run() // implements QRunnable.
}
#ifndef QT_NO_EXCEPTIONS
- } catch (QtConcurrent::Exception &e) {
+ } catch (QException &e) {
handleException(e);
} catch (...) {
- handleException(QtConcurrent::UnhandledException());
+ handleException(QUnhandledException());
}
#endif
threadExit();
@@ -282,7 +282,7 @@ void ThreadEngineBase::run() // implements QRunnable.
#ifndef QT_NO_EXCEPTIONS
-void ThreadEngineBase::handleException(const QtConcurrent::Exception &exception)
+void ThreadEngineBase::handleException(const QException &exception)
{
if (futureInterface)
futureInterface->reportException(exception);
diff --git a/src/concurrent/qtconcurrentthreadengine.h b/src/concurrent/qtconcurrentthreadengine.h
index 971348be97..2a5187502f 100644
--- a/src/concurrent/qtconcurrentthreadengine.h
+++ b/src/concurrent/qtconcurrentthreadengine.h
@@ -49,7 +49,7 @@
#include <QtCore/qthreadpool.h>
#include <QtConcurrent/qfuture.h>
#include <QtCore/qdebug.h>
-#include <QtConcurrent/qtconcurrentexception.h>
+#include <QtCore/qexception.h>
#include <QtCore/qwaitcondition.h>
#include <QtCore/qatomic.h>
#include <QtCore/qsemaphore.h>
@@ -119,13 +119,13 @@ private:
void run();
virtual void asynchronousFinish() = 0;
#ifndef QT_NO_EXCEPTIONS
- void handleException(const QtConcurrent::Exception &exception);
+ void handleException(const QException &exception);
#endif
protected:
QFutureInterfaceBase *futureInterface;
QThreadPool *threadPool;
ThreadEngineBarrier barrier;
- QtConcurrent::internal::ExceptionStore exceptionStore;
+ QtPrivate::ExceptionStore exceptionStore;
};