+void KFileItemModelSortAlgorithm::parallelSort(KFileItemModel* model,
+ QList< KFileItemModel::ItemData* >::iterator begin,
+ QList< KFileItemModel::ItemData* >::iterator end,
+ const int numberOfThreads)
+{
+ const int span = end - begin;
+
+ if (numberOfThreads > 1 && span > 100) {
+ const int newNumberOfThreads = numberOfThreads / 2;
+ const QList<KFileItemModel::ItemData*>::iterator middle = begin + span / 2;
+
+ QFuture<void> future = QtConcurrent::run(parallelSort, model, begin, middle, newNumberOfThreads);
+ parallelSort(model, middle, end, newNumberOfThreads);
+
+ future.waitForFinished();
+
+ merge(model, begin, middle, end);
+ } else {
+ sequentialSort(model, begin, end);
+ }
+}
+