summaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/libs/utils/algorithm.h11
-rw-r--r--src/tools/clangrefactoringbackend/source/projectpartqueue.cpp52
-rw-r--r--src/tools/clangrefactoringbackend/source/symbolindexertaskqueue.cpp47
3 files changed, 15 insertions, 95 deletions
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 <QStringList>
#include <memory>
+#include <type_traits>
namespace Utils
{
@@ -808,7 +809,7 @@ OutputIt setUnionMerge(InputIt1 first1,
last2,
d_first,
merge,
- std::less<decltype(*first1)>{});
+ std::less<std::decay_t<decltype(*first1)>>{});
}
template<class OutputContainer,
@@ -843,9 +844,9 @@ OutputContainer setUnionMerge(InputContainer1 &&input1,
InputContainer2 &&input2,
Merge merge)
{
- return setUnionMerge(std::forward<InputContainer1>(input1),
- std::forward<InputContainer2>(input2),
- merge,
- std::less<decltype(*std::begin(input1))>{});
+ return setUnionMerge<OutputContainer>(std::forward<InputContainer1>(input1),
+ std::forward<InputContainer2>(input2),
+ merge,
+ std::less<std::decay_t<decltype(*std::begin(input1))>>{});
}
} // 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 <utils/algorithm.h>
+
#include "projectpartqueue.h"
namespace ClangBackEnd {
@@ -32,41 +34,6 @@ ProjectPartQueue::ProjectPartQueue()
}
-namespace {
-
-template<class InputIt1,
- class InputIt2,
- class OutputIt,
- class Compare,
- class Merge>
-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<V2::ProjectPartContainers>(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 <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)