From 053d314140e76a632e2b8a2b134afdb8697fba56 Mon Sep 17 00:00:00 2001 From: "Alexandr (Sagrer) Gridnev" Date: Sun, 20 Aug 2017 14:27:17 +0300 Subject: CodeBlocks: Avoid listing files multiple times Fixes: #17187 --- Source/cmExtraCodeBlocksGenerator.cxx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/Source/cmExtraCodeBlocksGenerator.cxx b/Source/cmExtraCodeBlocksGenerator.cxx index 2054605..547fc99 100644 --- a/Source/cmExtraCodeBlocksGenerator.cxx +++ b/Source/cmExtraCodeBlocksGenerator.cxx @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -95,7 +96,7 @@ struct Tree { std::string path; // only one component of the path std::vector folders; - std::vector files; + std::set files; void InsertPath(const std::vector& splitted, std::vector::size_type start, const std::string& fileName); @@ -112,7 +113,7 @@ void Tree::InsertPath(const std::vector& splitted, const std::string& fileName) { if (start == splitted.size()) { - files.push_back(fileName); + files.insert(fileName); return; } for (std::vector::iterator it = folders.begin(); it != folders.end(); @@ -123,7 +124,7 @@ void Tree::InsertPath(const std::vector& splitted, return; } // last part of splitted - it->files.push_back(fileName); + it->files.insert(fileName); return; } } @@ -136,7 +137,7 @@ void Tree::InsertPath(const std::vector& splitted, return; } // last part of splitted - newFolder.files.push_back(fileName); + newFolder.files.insert(fileName); folders.push_back(newFolder); } @@ -164,7 +165,7 @@ void Tree::BuildVirtualFolderImpl(std::string& virtualFolders, void Tree::BuildUnit(cmXMLWriter& xml, const std::string& fsPath) const { - for (std::vector::const_iterator it = files.begin(); + for (std::set::const_iterator it = files.begin(); it != files.end(); ++it) { xml.StartElement("Unit"); xml.Attribute("filename", fsPath + *it); @@ -185,7 +186,7 @@ void Tree::BuildUnitImpl(cmXMLWriter& xml, const std::string& virtualFolderPath, const std::string& fsPath) const { - for (std::vector::const_iterator it = files.begin(); + for (std::set::const_iterator it = files.begin(); it != files.end(); ++it) { xml.StartElement("Unit"); xml.Attribute("filename", fsPath + path + "/" + *it); -- cgit v0.12