From be9537667f95cf0a55e7bbf9323c30f850f8605f Mon Sep 17 00:00:00 2001 From: Marco Bubke Date: Thu, 30 Aug 2018 14:13:23 +0200 Subject: Use Utils::setUnionMerge And fix some details of the implementations. Change-Id: I8e77fee4b95658a69ef1656bb406811de091ce16 Reviewed-by: Ivan Donchevskii --- src/libs/utils/algorithm.h | 11 ++--- .../source/projectpartqueue.cpp | 52 +++------------------- .../source/symbolindexertaskqueue.cpp | 47 ++----------------- 3 files changed, 15 insertions(+), 95 deletions(-) (limited to 'src') diff --git a/src/libs/utils/algorithm.h b/src/libs/utils/algorithm.h index 97fc1f626b..9b699fee1c 100644 --- a/src/libs/utils/algorithm.h +++ b/src/libs/utils/algorithm.h @@ -42,6 +42,7 @@ #include #include +#include namespace Utils { @@ -808,7 +809,7 @@ OutputIt setUnionMerge(InputIt1 first1, last2, d_first, merge, - std::less{}); + std::less>{}); } template(input1), - std::forward(input2), - merge, - std::less{}); + return setUnionMerge(std::forward(input1), + std::forward(input2), + merge, + std::less>{}); } } // namespace Utils diff --git a/src/tools/clangrefactoringbackend/source/projectpartqueue.cpp b/src/tools/clangrefactoringbackend/source/projectpartqueue.cpp index d1fdc5a83d..d64714310b 100644 --- a/src/tools/clangrefactoringbackend/source/projectpartqueue.cpp +++ b/src/tools/clangrefactoringbackend/source/projectpartqueue.cpp @@ -23,6 +23,8 @@ ** ****************************************************************************/ +#include + #include "projectpartqueue.h" namespace ClangBackEnd { @@ -32,41 +34,6 @@ ProjectPartQueue::ProjectPartQueue() } -namespace { - -template -OutputIt set_union_merge(InputIt1 first1, - InputIt1 last1, - InputIt2 first2, - InputIt2 last2, - OutputIt d_first, - Compare comp, - Merge merge) -{ - for (; first1 != last1; ++d_first) { - if (first2 == last2) - return std::copy(first1, last1, d_first); - if (comp(*first2, *first1)) { - *d_first = *first2++; - } else { - if (comp(*first1, *first2)) { - *d_first = *first1; - } else { - *d_first = merge(*first1, *first2); - ++first2; - } - ++first1; - } - } - return std::copy(first2, last2, d_first); -} - -} - void ProjectPartQueue::addProjectParts(V2::ProjectPartContainers &&projectParts) { auto compare = [](const V2::ProjectPartContainer &first, const V2::ProjectPartContainer &second) { @@ -98,17 +65,10 @@ void ProjectPartQueue::addProjectParts(V2::ProjectPartContainers &&projectParts) return first; }; - V2::ProjectPartContainers mergedProjectParts; - mergedProjectParts.reserve(m_projectParts.size() + projectParts.size()); - set_union_merge(std::make_move_iterator(m_projectParts.begin()), - std::make_move_iterator(m_projectParts.end()), - std::make_move_iterator(projectParts.begin()), - std::make_move_iterator(projectParts.end()), - std::back_inserter(mergedProjectParts), - compare, - merge); - - m_projectParts = std::move(mergedProjectParts); + m_projectParts = Utils::setUnionMerge(m_projectParts, + projectParts, + merge, + compare); } class CompareDifference 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 -namespace ClangBackEnd { - -namespace { - -template -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 -} +namespace ClangBackEnd { void SymbolIndexerTaskQueue::addOrUpdateTasks(std::vector &&tasks) { - std::vector 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>(tasks, m_tasks, merge); } void SymbolIndexerTaskQueue::removeTasks(const Utils::SmallStringVector &projectPartIds) -- cgit v1.2.1