summaryrefslogtreecommitdiff
path: root/src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp
diff options
context:
space:
mode:
authorMarco Bubke <marco.bubke@qt.io>2018-08-30 14:13:23 +0200
committerMarco Bubke <marco.bubke@qt.io>2018-09-03 12:14:16 +0000
commitbe9537667f95cf0a55e7bbf9323c30f850f8605f (patch)
treeb142d7bbf3a74be4e253306fb8494e103dc7d600 /src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp
parenta86867eb8a37c66f6eda36928208a82bb152b038 (diff)
downloadqt-creator-be9537667f95cf0a55e7bbf9323c30f850f8605f.tar.gz
Use Utils::setUnionMerge
And fix some details of the implementations. Change-Id: I8e77fee4b95658a69ef1656bb406811de091ce16 Reviewed-by: Ivan Donchevskii <ivan.donchevskii@qt.io>
Diffstat (limited to 'src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp')
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp47
1 files changed, 3 insertions, 44 deletions
diff --git a/src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp b/src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp
index 4bfed1fe31..3f02ca0ade 100644
--- a/src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp
+++ b/src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp
@@ -27,60 +27,19 @@
#include <symbolindexertaskschedulerinterface.h>
-namespace ClangBackEnd {
-
-namespace {
-
-template<class InputIt1,
- class InputIt2,
- class OutputIt,
- class Merge>
-OutputIt set_union_merge(InputIt1 first1,
- InputIt1 last1,
- InputIt2 first2,
- InputIt2 last2,
- OutputIt d_first,
- Merge merge)
-{
- for (; first1 != last1; ++d_first) {
- if (first2 == last2)
- return std::copy(first1, last1, d_first);
- if (*first2 < *first1) {
- *d_first = *first2++;
- } else {
- if (*first1 < *first2) {
- *d_first = *first1;
- } else {
- *d_first = merge(*first1, *first2);
- ++first2;
- }
- ++first1;
- }
- }
- return std::copy(first2, last2, d_first);
-}
+#include <utils/algorithm.h>
-}
+namespace ClangBackEnd {
void SymbolIndexerTaskQueue::addOrUpdateTasks(std::vector<SymbolIndexerTask> &&tasks)
{
- std::vector<SymbolIndexerTask> mergedTasks;
- mergedTasks.reserve(m_tasks.size() + tasks.size());
-
auto merge = [] (SymbolIndexerTask &&first, SymbolIndexerTask &&second) {
first.callable = std::move(second.callable);
return std::move(first);
};
- set_union_merge(std::make_move_iterator(tasks.begin()),
- std::make_move_iterator(tasks.end()),
- std::make_move_iterator(m_tasks.begin()),
- std::make_move_iterator(m_tasks.end()),
- std::back_inserter(mergedTasks),
- merge);
-
- m_tasks = std::move(mergedTasks);
+ m_tasks = Utils::setUnionMerge<std::vector<SymbolIndexerTask>>(tasks, m_tasks, merge);
}
void SymbolIndexerTaskQueue::removeTasks(const Utils::SmallStringVector &projectPartIds)