include/katie/QtCore/Qt
include/katie/QtCore/QtAlgorithms
include/katie/QtCore/QtCleanUpFunction
-include/katie/QtCore/QtConcurrentFilter
include/katie/QtCore/QtConcurrentMap
include/katie/QtCore/QtConcurrentRun
include/katie/QtCore/QtConfig
include/katie/QtCore/qstringlist.h
include/katie/QtCore/qstringmatcher.h
include/katie/QtCore/qtconcurrentcompilertest.h
-include/katie/QtCore/qtconcurrentexception.h
-include/katie/QtCore/qtconcurrentfilter.h
-include/katie/QtCore/qtconcurrentfilterkernel.h
+include/katie/QtCore/qtconcurrentexception.
include/katie/QtCore/qtconcurrentfunctionwrappers.h
include/katie/QtCore/qtconcurrentiteratekernel.h
include/katie/QtCore/qtconcurrentmap.h
include/katie/QtCore/Qt
include/katie/QtCore/QtAlgorithms
include/katie/QtCore/QtCleanUpFunction
-include/katie/QtCore/QtConcurrentFilter
include/katie/QtCore/QtConcurrentMap
include/katie/QtCore/QtConcurrentRun
include/katie/QtCore/QtConfig
include/katie/QtCore/qstringmatcher.h
include/katie/QtCore/qtconcurrentcompilertest.h
include/katie/QtCore/qtconcurrentexception.h
-include/katie/QtCore/qtconcurrentfilter.h
-include/katie/QtCore/qtconcurrentfilterkernel.h
include/katie/QtCore/qtconcurrentfunctionwrappers.h
include/katie/QtCore/qtconcurrentiteratekernel.h
include/katie/QtCore/qtconcurrentmap.h
include/katie/QtCore/Qt
include/katie/QtCore/QtAlgorithms
include/katie/QtCore/QtCleanUpFunction
-include/katie/QtCore/QtConcurrentFilter
include/katie/QtCore/QtConcurrentMap
include/katie/QtCore/QtConcurrentRun
include/katie/QtCore/QtConfig
include/katie/QtCore/qstringmatcher.h
include/katie/QtCore/qtconcurrentcompilertest.h
include/katie/QtCore/qtconcurrentexception.h
-include/katie/QtCore/qtconcurrentfilter.h
-include/katie/QtCore/qtconcurrentfilterkernel.h
include/katie/QtCore/qtconcurrentfunctionwrappers.h
include/katie/QtCore/qtconcurrentiteratekernel.h
include/katie/QtCore/qtconcurrentmap.h
"QTabWidget",
"QtAlgorithms",
"QtCleanUpFunction",
- "QtConcurrentFilter",
"QtConcurrentMap",
"QtConcurrentRun",
"QtConfig",
QMetaType
QVariant
QFile
- QtConcurrentFilter
QCache
QAbstractEventDispatcher
QResource
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qrunnable.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentcompilertest.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentexception.h
- ${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentfilter.h
- ${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentfilterkernel.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentfunctionwrappers.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentiteratekernel.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentmap.h
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qfuturesynchronizer.cpp
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qfuturewatcher.cpp
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qrunnable.cpp
- ${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentfilter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentmap.cpp
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentresultstore.cpp
${CMAKE_CURRENT_SOURCE_DIR}/concurrent/qtconcurrentthreadengine.cpp
+++ /dev/null
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-/*!
- \headerfile <QtConcurrentFilter>
- \title Concurrent Filter and Filter-Reduce
- \ingroup thread
-
- \brief The <QtConcurrentFilter> header provides concurrent Filter and
- Filter-Reduce.
-
- These functions are a part of the \l {Concurrent Programming}{Qt Concurrent} framework.
-
- The QtConcurrent::filter(), QtConcurrent::filtered() and
- QtConcurrent::filteredReduced() functions filter items in a sequence such
- as a QList or a QVector in parallel. QtConcurrent::filter() modifies a
- sequence in-place, QtConcurrent::filtered() returns a new sequence
- containing the filtered content, and QtConcurrent::filteredReduced()
- returns a single result.
-
- Each of the above functions have a blocking variant that returns the final
- result instead of a QFuture. You use them in the same way as the
- asynchronous variants.
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 6
-
- Note that the result types above are not QFuture objects, but real result
- types (in this case, QStringList and QSet<QString>).
-
- \section1 Concurrent Filter
-
- QtConcurrent::filtered() takes an input sequence and a filter function.
- This filter function is then called for each item in the sequence, and a
- new sequence containing the filtered values is returned.
-
- The filter function must be of the form:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 0
-
- T must match the type stored in the sequence. The function returns true if
- the item should be kept, false if it should be discarded.
-
- This example shows how to keep strings that are all lower-case from a
- QStringList:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 1
-
- The results of the filter are made available through QFuture. See the
- QFuture and QFutureWatcher documentation for more information on how to
- use QFuture in your applications.
-
- If you want to modify a sequence in-place, use QtConcurrent::filter():
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 2
-
- Since the sequence is modified in place, QtConcurrent::filter() does not
- return any results via QFuture. However, you can still use QFuture and
- QFutureWatcher to monitor the status of the filter.
-
- \section1 Concurrent Filter-Reduce
-
- QtConcurrent::filteredReduced() is similar to QtConcurrent::filtered(),
- but instead of returing a sequence with the filtered results, the results
- are combined into a single value using a reduce function.
-
- The reduce function must be of the form:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 3
-
- T is the type of the final result, U is the type of items being filtered.
- Note that the return value and return type of the reduce function are not
- used.
-
- Call QtConcurrent::filteredReduced() like this:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 4
-
- The reduce function will be called once for each result kept by the filter
- function, and should merge the \e{intermediate} into the \e{result}
- variable. QtConcurrent::filteredReduced() guarantees that only one thread
- will call reduce at a time, so using a mutex to lock the result variable
- is not necessary. The QtConcurrent::ReduceOptions enum provides a way to
- control the order in which the reduction is done.
-
- \section1 Additional API Features
-
- \section2 Using Iterators instead of Sequence
-
- Each of the above functions has a variant that takes an iterator range
- instead of a sequence. You use them in the same way as the sequence
- variants:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 5
-
-
- \section2 Using Member Functions
-
- QtConcurrent::filter(), QtConcurrent::filtered(), and
- QtConcurrent::filteredReduced() accept pointers to member functions.
- The member function class type must match the type stored in the sequence:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 7
-
- Note that when using QtConcurrent::filteredReduced(), you can mix the use of
- normal and member functions freely:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 8
-
- \section2 Using Function Objects
-
- QtConcurrent::filter(), QtConcurrent::filtered(), and
- QtConcurrent::filteredReduced() accept function objects, which can be used to
- add state to a function call. The result_type typedef must define the
- result type of the function call operator:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 13
-
- \section2 Using Bound Function Arguments
-
- Note that Qt does not provide support for bound functions. This is
- provided by 3rd party libraries like
- \l{http://www.boost.org/libs/bind/bind.html}{Boost} or
- \l{http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf}
- {C++ TR1 Library Extensions}.
-
- If you want to use a filter function takes more than one argument, you can
- use boost::bind() or std::tr1::bind() to transform it onto a function that
- takes one argument.
-
- As an example, we use QString::contains():
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 9
-
- QString::contains() takes 2 arguments (including the "this" pointer) and
- can't be used with QtConcurrent::filtered() directly, because
- QtConcurrent::filtered() expects a function that takes one argument. To
- use QString::contains() with QtConcurrent::filtered() we have to provide a
- value for the \e regexp argument:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 10
-
- The return value from boost::bind() is a function object (functor) with
- the following signature:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 11
-
- This matches what QtConcurrent::filtered() expects, and the complete
- example becomes:
-
- \snippet doc/src/snippets/code/src_corelib_concurrent_qtconcurrentfilter.cpp 12
-*/
-
-/*!
- \fn QFuture<void> QtConcurrent::filter(Sequence &sequence, FilterFunction filterFunction)
- \relates <QtConcurrentFilter>
-
- Calls \a filterFunction once for each item in \a sequence. If
- \a filterFunction returns true, the item is kept in \a sequence;
- otherwise, the item is removed from \a sequence.
-*/
-
-/*!
- \fn QFuture<T> QtConcurrent::filtered(const Sequence &sequence, FilterFunction filterFunction)
- \relates <QtConcurrentFilter>
-
- Calls \a filterFunction once for each item in \a sequence and returns a
- new Sequence of kept items. If \a filterFunction returns true, a copy of
- the item is put in the new Sequence. Otherwise, the item will \e not
- appear in the new Sequence.
-*/
-
-/*!
- \fn QFuture<T> QtConcurrent::filtered(ConstIterator begin, ConstIterator end, FilterFunction filterFunction)
- \relates <QtConcurrentFilter>
-
- Calls \a filterFunction once for each item from \a begin to \a end and
- returns a new Sequence of kept items. If \a filterFunction returns true, a
- copy of the item is put in the new Sequence. Otherwise, the item will
- \e not appear in the new Sequence.
-*/
-
-/*!
- \fn QFuture<T> QtConcurrent::filteredReduced(const Sequence &sequence, FilterFunction filterFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
- \relates <QtConcurrentFilter>
-
- Calls \a filterFunction once for each item in \a sequence. If
- \a filterFunction returns true for an item, that item is then passed to
- \a reduceFunction. In other words, the return value is the result of
- \a reduceFunction for each item where \a filterFunction returns true.
-
- Note that while \a filterFunction is called concurrently, only one thread
- at a time will call \a reduceFunction. The order in which \a reduceFunction
- is called is undefined if \a reduceOptions is
- QtConcurrent::UnorderedReduce. If \a reduceOptions is
- QtConcurrent::OrderedReduce, \a reduceFunction is called in the order of
- the original sequence.
-*/
-
-/*!
- \fn QFuture<T> QtConcurrent::filteredReduced(ConstIterator begin, ConstIterator end, FilterFunction filterFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
- \relates <QtConcurrentFilter>
-
- Calls \a filterFunction once for each item from \a begin to \a end. If
- \a filterFunction returns true for an item, that item is then passed to
- \a reduceFunction. In other words, the return value is the result of
- \a reduceFunction for each item where \a filterFunction returns true.
-
- Note that while \a filterFunction is called concurrently, only one thread
- at a time will call \a reduceFunction. The order in which
- \a reduceFunction is called is undefined if \a reduceOptions is
- QtConcurrent::UnorderedReduce. If \a reduceOptions is
- QtConcurrent::OrderedReduce, the \a reduceFunction is called in the order
- of the original sequence.
-*/
-
-/*!
- \fn void QtConcurrent::blockingFilter(Sequence &sequence, FilterFunction filterFunction)
-
- Calls \a filterFunction once for each item in \a sequence. If
- \a filterFunction returns true, the item is kept in \a sequence;
- otherwise, the item is removed from \a sequence.
-
- \note This function will block until all items in the sequence have been processed.
-*/
-
-/*!
- \fn Sequence QtConcurrent::blockingFiltered(const Sequence &sequence, FilterFunction filterFunction)
-
- Calls \a filterFunction once for each item in \a sequence and returns a
- new Sequence of kept items. If \a filterFunction returns true, a copy of
- the item is put in the new Sequence. Otherwise, the item will \e not
- appear in the new Sequence.
-
- \note This function will block until all items in the sequence have been processed.
-
- \sa filtered()
-*/
-
-/*!
- \fn Sequence QtConcurrent::blockingFiltered(ConstIterator begin, ConstIterator end, FilterFunction filterFunction)
-
- Calls \a filterFunction once for each item from \a begin to \a end and
- returns a new Sequence of kept items. If \a filterFunction returns true, a
- copy of the item is put in the new Sequence. Otherwise, the item will
- \e not appear in the new Sequence.
-
- \note This function will block until the iterator reaches the end of the
- sequence being processed.
-
- \sa filtered()
-*/
-
-/*!
- \fn T QtConcurrent::blockingFilteredReduced(const Sequence &sequence, FilterFunction filterFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
-
- Calls \a filterFunction once for each item in \a sequence. If
- \a filterFunction returns true for an item, that item is then passed to
- \a reduceFunction. In other words, the return value is the result of
- \a reduceFunction for each item where \a filterFunction returns true.
-
- Note that while \a filterFunction is called concurrently, only one thread
- at a time will call \a reduceFunction. The order in which \a reduceFunction
- is called is undefined if \a reduceOptions is
- QtConcurrent::UnorderedReduce. If \a reduceOptions is
- QtConcurrent::OrderedReduce, \a reduceFunction is called in the order of
- the original sequence.
-
- \note This function will block until all items in the sequence have been processed.
-
- \sa filteredReduced()
-*/
-
-/*!
- \fn T QtConcurrent::blockingFilteredReduced(ConstIterator begin, ConstIterator end, FilterFunction filterFunction, ReduceFunction reduceFunction, QtConcurrent::ReduceOptions reduceOptions)
-
- Calls \a filterFunction once for each item from \a begin to \a end. If
- \a filterFunction returns true for an item, that item is then passed to
- \a reduceFunction. In other words, the return value is the result of
- \a reduceFunction for each item where \a filterFunction returns true.
-
- Note that while \a filterFunction is called concurrently, only one thread
- at a time will call \a reduceFunction. The order in which
- \a reduceFunction is called is undefined if \a reduceOptions is
- QtConcurrent::UnorderedReduce. If \a reduceOptions is
- QtConcurrent::OrderedReduce, the \a reduceFunction is called in the order
- of the original sequence.
-
- \note This function will block until the iterator reaches the end of the
- sequence being processed.
-
- \sa filteredReduced()
-*/
+++ /dev/null
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QTCONCURRENT_FILTER_H
-#define QTCONCURRENT_FILTER_H
-
-#include <QtCore/qglobal.h>
-
-#ifndef QT_NO_CONCURRENT
-
-#include <QtCore/qtconcurrentfilterkernel.h>
-#include <QtCore/qtconcurrentfunctionwrappers.h>
-
-QT_BEGIN_NAMESPACE
-
-
-
-namespace QtConcurrent {
-
-template <typename Sequence, typename KeepFunctor, typename ReduceFunctor>
-ThreadEngineStarter<void> filterInternal(Sequence &sequence, KeepFunctor keep, ReduceFunctor reduce)
-{
- typedef FilterKernel<Sequence, KeepFunctor, ReduceFunctor> KernelType;
- return startThreadEngine(new KernelType(sequence, keep, reduce));
-}
-
-// filter() on sequences
-template <typename Sequence, typename KeepFunctor>
-QFuture<void> filter(Sequence &sequence, KeepFunctor keep)
-{
- return filterInternal(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::PushBackWrapper());
-}
-
-// filteredReduced() on sequences
-template <typename ResultType, typename Sequence, typename KeepFunctor, typename ReduceFunctor>
-QFuture<ResultType> filteredReduced(const Sequence &sequence,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
-{
- return startFilteredReduced<ResultType>(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::createFunctionWrapper(reduce), options);
-}
-
-template <typename Sequence, typename KeepFunctor, typename ReduceFunctor>
-QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> filteredReduced(const Sequence &sequence,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
-{
- return startFilteredReduced<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
- (sequence,
- QtPrivate::createFunctionWrapper(keep),
- QtPrivate::createFunctionWrapper(reduce),
- options);
-}
-
-// filteredReduced() on iterators
-template <typename ResultType, typename Iterator, typename KeepFunctor, typename ReduceFunctor>
-QFuture<ResultType> filteredReduced(Iterator begin,
- Iterator end,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
-{
- return startFilteredReduced<ResultType>(begin, end, QtPrivate::createFunctionWrapper(keep), QtPrivate::createFunctionWrapper(reduce), options);
-}
-
-template <typename Iterator, typename KeepFunctor, typename ReduceFunctor>
-QFuture<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType> filteredReduced(Iterator begin,
- Iterator end,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
-{
- return startFilteredReduced<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
- (begin, end,
- QtPrivate::createFunctionWrapper(keep),
- QtPrivate::createFunctionWrapper(reduce),
- options);
-}
-
-// filtered() on sequences
-template <typename Sequence, typename KeepFunctor>
-QFuture<typename Sequence::value_type> filtered(const Sequence &sequence, KeepFunctor keep)
-{
- return startFiltered(sequence, QtPrivate::createFunctionWrapper(keep));
-}
-
-// filtered() on iterators
-template <typename Iterator, typename KeepFunctor>
-QFuture<typename qValueType<Iterator>::value_type> filtered(Iterator begin, Iterator end, KeepFunctor keep)
-{
- return startFiltered(begin, end, QtPrivate::createFunctionWrapper(keep));
-}
-
-// blocking filter() on sequences
-template <typename Sequence, typename KeepFunctor>
-void blockingFilter(Sequence &sequence, KeepFunctor keep)
-{
- filterInternal(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::PushBackWrapper()).startBlocking();
-}
-
-// blocking filteredReduced() on sequences
-template <typename ResultType, typename Sequence, typename KeepFunctor, typename ReduceFunctor>
-ResultType blockingFilteredReduced(const Sequence &sequence,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
-{
- return startFilteredReduced<ResultType>(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::createFunctionWrapper(reduce), options)
- .startBlocking();
-}
-
-template <typename Sequence, typename KeepFunctor, typename ReduceFunctor>
-typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingFilteredReduced(const Sequence &sequence,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
-{
- return blockingFilteredReduced<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
- (sequence,
- QtPrivate::createFunctionWrapper(keep),
- QtPrivate::createFunctionWrapper(reduce),
- options);
-}
-
-// blocking filteredReduced() on iterators
-template <typename ResultType, typename Iterator, typename KeepFunctor, typename ReduceFunctor>
-ResultType blockingFilteredReduced(Iterator begin,
- Iterator end,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
-{
- return startFilteredReduced<ResultType>
- (begin, end,
- QtPrivate::createFunctionWrapper(keep),
- QtPrivate::createFunctionWrapper(reduce),
- options)
- .startBlocking();
-}
-
-template <typename Iterator, typename KeepFunctor, typename ReduceFunctor>
-typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType blockingFilteredReduced(Iterator begin,
- Iterator end,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOptions options = ReduceOptions(UnorderedReduce | SequentialReduce))
-{
- return startFilteredReduced<typename QtPrivate::ReduceResultType<ReduceFunctor>::ResultType>
- (begin, end,
- QtPrivate::createFunctionWrapper(keep),
- QtPrivate::createFunctionWrapper(reduce),
- options)
- .startBlocking();
-}
-
-// blocking filtered() on sequences
-template <typename Sequence, typename KeepFunctor>
-Sequence blockingFiltered(const Sequence &sequence, KeepFunctor keep)
-{
- return startFilteredReduced<Sequence>(sequence, QtPrivate::createFunctionWrapper(keep), QtPrivate::PushBackWrapper(), OrderedReduce).startBlocking();
-}
-
-// blocking filtered() on iterators
-template <typename OutputSequence, typename Iterator, typename KeepFunctor>
-OutputSequence blockingFiltered(Iterator begin, Iterator end, KeepFunctor keep)
-{
- return startFilteredReduced<OutputSequence>(begin, end,
- QtPrivate::createFunctionWrapper(keep),
- QtPrivate::PushBackWrapper(),
- OrderedReduce).startBlocking();
-}
-
-} // namespace QtConcurrent
-
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_CONCURRENT
-
-#endif
+++ /dev/null
-/****************************************************************************
-**
-** Copyright (C) 2015 The Qt Company Ltd.
-** Copyright (C) 2016 Ivailo Monev
-**
-** This file is part of the QtCore module of the Katie Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-**
-** GNU Lesser General Public License Usage
-** 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.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#ifndef QTCONCURRENT_FILTERKERNEL_H
-#define QTCONCURRENT_FILTERKERNEL_H
-
-#include <QtCore/qglobal.h>
-
-#ifndef QT_NO_CONCURRENT
-
-#include <QtCore/qtconcurrentiteratekernel.h>
-#include <QtCore/qtconcurrentmapkernel.h>
-#include <QtCore/qtconcurrentreducekernel.h>
-
-QT_BEGIN_NAMESPACE
-
-
-namespace QtConcurrent {
-
-template <typename T>
-struct qValueType
-{
- typedef typename T::value_type value_type;
-};
-
-template <typename T>
-struct qValueType<const T*>
-{
- typedef T value_type;
-};
-
-template <typename T>
-struct qValueType<T*>
-{
- typedef T value_type;
-};
-
-// Implementation of filter
-template <typename Sequence, typename KeepFunctor, typename ReduceFunctor>
-class FilterKernel : public IterateKernel<typename Sequence::const_iterator, void>
-{
- typedef ReduceKernel<ReduceFunctor, Sequence, typename Sequence::value_type> Reducer;
- typedef IterateKernel<typename Sequence::const_iterator, void> IterateKernelType;
- typedef typename ReduceFunctor::result_type T;
-
- Sequence reducedResult;
- Sequence &sequence;
- KeepFunctor keep;
- ReduceFunctor reduce;
- Reducer reducer;
-
-public:
- FilterKernel(Sequence &_sequence, KeepFunctor _keep, ReduceFunctor _reduce)
- : IterateKernelType(_sequence.constBegin(), _sequence.constEnd()), reducedResult(),
- sequence(_sequence),
- keep(_keep),
- reduce(_reduce),
- reducer(OrderedReduce)
- { }
-
- bool runIteration(typename Sequence::const_iterator it, int index, T *)
- {
- IntermediateResults<typename Sequence::value_type> results;
- results.begin = index;
- results.end = index + 1;
-
- if (keep(*it))
- results.vector.append(*it);
-
- reducer.runReduce(reduce, reducedResult, results);
- return false;
- }
-
- bool runIterations(typename Sequence::const_iterator sequenceBeginIterator, int begin, int end, T *)
- {
- IntermediateResults<typename Sequence::value_type> results;
- results.begin = begin;
- results.end = end;
- results.vector.reserve(end - begin);
-
-
- typename Sequence::const_iterator it = sequenceBeginIterator;
- std::advance(it, begin);
- for (int i = begin; i < end; ++i) {
- if (keep(*it))
- results.vector.append(*it);
- std::advance(it, 1);
- }
-
- reducer.runReduce(reduce, reducedResult, results);
- return false;
- }
-
- void finish()
- {
- reducer.finish(reduce, reducedResult);
- sequence = reducedResult;
- }
-
- inline bool shouldThrottleThread()
- {
- return IterateKernelType::shouldThrottleThread() || reducer.shouldThrottle();
- }
-
- inline bool shouldStartThread()
- {
- return IterateKernelType::shouldStartThread() && reducer.shouldStartThread();
- }
-
- typedef void ReturnType;
- typedef void ResultType;
-};
-
-// Implementation of filter-reduce
-template <typename ReducedResultType,
- typename Iterator,
- typename KeepFunctor,
- typename ReduceFunctor,
- typename Reducer = ReduceKernel<ReduceFunctor,
- ReducedResultType,
- typename qValueType<Iterator>::value_type> >
-class FilteredReducedKernel : public IterateKernel<Iterator, ReducedResultType>
-{
- ReducedResultType reducedResult;
- KeepFunctor keep;
- ReduceFunctor reduce;
- Reducer reducer;
- typedef IterateKernel<Iterator, ReducedResultType> IterateKernelType;
-
-public:
- FilteredReducedKernel(Iterator begin,
- Iterator end,
- KeepFunctor _keep,
- ReduceFunctor _reduce,
- ReduceOptions reduceOption)
- : IterateKernelType(begin, end), reducedResult(), keep(_keep), reduce(_reduce), reducer(reduceOption)
- { }
-
-#if 0
- FilteredReducedKernel(ReducedResultType initialValue,
- KeepFunctor keep,
- ReduceFunctor reduce,
- ReduceOption reduceOption)
- : reducedResult(initialValue), keep(keep), reduce(reduce), reducer(reduceOption)
- { }
-#endif
-
- bool runIteration(Iterator it, int index, ReducedResultType *)
- {
- IntermediateResults<typename qValueType<Iterator>::value_type> results;
- results.begin = index;
- results.end = index + 1;
-
- if (keep(*it))
- results.vector.append(*it);
-
- reducer.runReduce(reduce, reducedResult, results);
- return false;
- }
-
- bool runIterations(Iterator sequenceBeginIterator, int begin, int end, ReducedResultType *)
- {
- IntermediateResults<typename qValueType<Iterator>::value_type> results;
- results.begin = begin;
- results.end = end;
- results.vector.reserve(end - begin);
-
- Iterator it = sequenceBeginIterator;
- std::advance(it, begin);
- for (int i = begin; i < end; ++i) {
- if (keep(*it))
- results.vector.append(*it);
- std::advance(it, 1);
- }
-
- reducer.runReduce(reduce, reducedResult, results);
- return false;
- }
-
- void finish()
- {
- reducer.finish(reduce, reducedResult);
- }
-
- inline bool shouldThrottleThread()
- {
- return IterateKernelType::shouldThrottleThread() || reducer.shouldThrottle();
- }
-
- inline bool shouldStartThread()
- {
- return IterateKernelType::shouldStartThread() && reducer.shouldStartThread();
- }
-
- typedef ReducedResultType ReturnType;
- typedef ReducedResultType ResultType;
- ReducedResultType *result()
- {
- return &reducedResult;
- }
-};
-
-// Implementation of filter that reports individual results via QFutureInterface
-template <typename Iterator, typename KeepFunctor>
-class FilteredEachKernel : public IterateKernel<Iterator, typename qValueType<Iterator>::value_type>
-{
- typedef typename qValueType<Iterator>::value_type T;
- typedef IterateKernel<Iterator, T> IterateKernelType;
-
- KeepFunctor keep;
-
-public:
- typedef T ReturnType;
- typedef T ResultType;
-
- FilteredEachKernel(Iterator begin, Iterator end, KeepFunctor _keep)
- : IterateKernelType(begin, end), keep(_keep)
- { }
-
- void start()
- {
- if (this->futureInterface)
- this->futureInterface->setFilterMode(true);
- IterateKernelType::start();
- }
-
- bool runIteration(Iterator it, int index, T *)
- {
- if (keep(*it))
- this->reportResult(&(*it), index);
- else
- this->reportResult(0, index);
- return false;
- }
-
- bool runIterations(Iterator sequenceBeginIterator, int begin, int end, T *)
- {
- const int count = end - begin;
- IntermediateResults<typename qValueType<Iterator>::value_type> results;
- results.begin = begin;
- results.end = end;
- results.vector.reserve(count);
-
- Iterator it = sequenceBeginIterator;
- std::advance(it, begin);
- for (int i = begin; i < end; ++i) {
- if (keep(*it))
- results.vector.append(*it);
- std::advance(it, 1);
- }
-
- this->reportResults(results.vector, begin, count);
- return false;
- }
-};
-
-template <typename Iterator, typename KeepFunctor>
-inline
-ThreadEngineStarter<typename qValueType<Iterator>::value_type>
-startFiltered(Iterator begin, Iterator end, KeepFunctor functor)
-{
- return startThreadEngine(new FilteredEachKernel<Iterator, KeepFunctor>(begin, end, functor));
-}
-
-template <typename Sequence, typename KeepFunctor>
-inline ThreadEngineStarter<typename Sequence::value_type>
-startFiltered(const Sequence &sequence, KeepFunctor functor)
-{
- typedef SequenceHolder1<Sequence,
- FilteredEachKernel<typename Sequence::const_iterator, KeepFunctor>,
- KeepFunctor>
- SequenceHolderType;
- return startThreadEngine(new SequenceHolderType(sequence, functor));
-}
-
-template <typename ResultType, typename Sequence, typename MapFunctor, typename ReduceFunctor>
-inline ThreadEngineStarter<ResultType> startFilteredReduced(const Sequence & sequence,
- MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
- ReduceOptions options)
-{
- typedef typename Sequence::const_iterator Iterator;
- typedef ReduceKernel<ReduceFunctor, ResultType, typename qValueType<Iterator>::value_type > Reducer;
- typedef FilteredReducedKernel<ResultType, Iterator, MapFunctor, ReduceFunctor, Reducer> FilteredReduceType;
- typedef SequenceHolder2<Sequence, FilteredReduceType, MapFunctor, ReduceFunctor> SequenceHolderType;
- return startThreadEngine(new SequenceHolderType(sequence, mapFunctor, reduceFunctor, options));
-}
-
-
-template <typename ResultType, typename Iterator, typename MapFunctor, typename ReduceFunctor>
-inline ThreadEngineStarter<ResultType> startFilteredReduced(Iterator begin, Iterator end,
- MapFunctor mapFunctor, ReduceFunctor reduceFunctor,
- ReduceOptions options)
-{
- typedef ReduceKernel<ReduceFunctor, ResultType, typename qValueType<Iterator>::value_type> Reducer;
- typedef FilteredReducedKernel<ResultType, Iterator, MapFunctor, ReduceFunctor, Reducer> FilteredReduceType;
- return startThreadEngine(new FilteredReduceType(begin, end, mapFunctor, reduceFunctor, options));
-}
-
-
-} // namespace QtConcurrent
-
-
-QT_END_NAMESPACE
-
-#endif // QT_NO_CONCURRENT
-
-#endif