diff options
-rw-r--r-- | src/libs/clangsupport/generatedfiles.cpp | 25 | ||||
-rw-r--r-- | src/libs/clangsupport/generatedfiles.h | 3 |
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; |