aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/clangsupport/generatedfiles.cpp25
-rw-r--r--src/libs/clangsupport/generatedfiles.h3
2 files changed, 17 insertions, 11 deletions
diff --git a/src/libs/clangsupport/generatedfiles.cpp b/src/libs/clangsupport/generatedfiles.cpp
index 554d84d2f4..d5e36987b2 100644
--- a/src/libs/clangsupport/generatedfiles.cpp
+++ b/src/libs/clangsupport/generatedfiles.cpp
@@ -26,8 +26,8 @@
#include "generatedfiles.h"
namespace ClangBackEnd {
-template<class Type>
-void GeneratedFiles::updateInternal(Type &&fileContainers)
+
+void GeneratedFiles::update(V2::FileContainers &&fileContainers)
{
V2::FileContainers unionFileContainers;
unionFileContainers.reserve(m_fileContainers.size() + fileContainers.size());
@@ -46,14 +46,23 @@ void GeneratedFiles::updateInternal(Type &&fileContainers)
m_fileContainers = std::move(unionFileContainers);
}
-void GeneratedFiles::update(V2::FileContainers &&fileContainers)
-{
- updateInternal(std::move(fileContainers));
-}
-
void GeneratedFiles::update(const V2::FileContainers &fileContainers)
{
- updateInternal(fileContainers);
+ V2::FileContainers unionFileContainers;
+ unionFileContainers.reserve(m_fileContainers.size() + fileContainers.size());
+
+ auto compare = [] (const V2::FileContainer &first, const V2::FileContainer &second) {
+ return first.filePath < second.filePath;
+ };
+
+ std::set_union(fileContainers.begin(),
+ fileContainers.end(),
+ std::make_move_iterator(m_fileContainers.begin()),
+ std::make_move_iterator(m_fileContainers.end()),
+ std::back_inserter(unionFileContainers),
+ compare);
+
+ m_fileContainers = std::move(unionFileContainers);
}
class Compare {
diff --git a/src/libs/clangsupport/generatedfiles.h b/src/libs/clangsupport/generatedfiles.h
index 1838e7dab4..e20e0ac69c 100644
--- a/src/libs/clangsupport/generatedfiles.h
+++ b/src/libs/clangsupport/generatedfiles.h
@@ -37,9 +37,6 @@ public:
void remove(const FilePaths &filePaths);
const V2::FileContainers &fileContainers() const;
-private:
- template<class Type>
- void updateInternal(Type &&fileContainers);
private:
V2::FileContainers m_fileContainers;