diff options
author | Marco Bubke <marco.bubke@qt.io> | 2018-08-30 14:13:23 +0200 |
---|---|---|
committer | Marco Bubke <marco.bubke@qt.io> | 2018-09-03 12:14:16 +0000 |
commit | be9537667f95cf0a55e7bbf9323c30f850f8605f (patch) | |
tree | b142d7bbf3a74be4e253306fb8494e103dc7d600 /src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp | |
parent | a86867eb8a37c66f6eda36928208a82bb152b038 (diff) | |
download | qt-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.cpp | 47 |
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) |