From ff0071c0c566788bd1236549780d291e6048847a Mon Sep 17 00:00:00 2001 From: Brad King <brad.king@kitware.com> Date: Thu, 17 Aug 2006 12:02:18 -0400 Subject: [PATCH] ENH: Added JoinPath overload that accepts an iterator range. --- SystemTools.cxx | 28 ++++++++++++++++++++++------ SystemTools.hxx.in | 3 +++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/SystemTools.cxx b/SystemTools.cxx index 7140d94..7903227 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -2813,20 +2813,36 @@ void SystemTools::SplitPath(const char* p, kwsys_stl::string SystemTools::JoinPath(const kwsys_stl::vector<kwsys_stl::string>& components) { + return SystemTools::JoinPath(components.begin(), components.end()); +} + +//---------------------------------------------------------------------------- +kwsys_stl::string +SystemTools +::JoinPath(kwsys_stl::vector<kwsys_stl::string>::const_iterator first, + kwsys_stl::vector<kwsys_stl::string>::const_iterator last) +{ + // Construct result in a single string. kwsys_stl::string result; - if(components.size() > 0) + + // The first two components do not add a slash. + if(first != last) { - result += components[0]; + result += *first++; } - if(components.size() > 1) + if(first != last) { - result += components[1]; + result += *first++; } - for(unsigned int i=2; i < components.size(); ++i) + + // All remaining components are always separated with a slash. + while(first != last) { result += "/"; - result += components[i]; + result += *first++; } + + // Return the concatenated result. return result; } diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in index 48a5288..cb9a518 100644 --- a/SystemTools.hxx.in +++ b/SystemTools.hxx.in @@ -364,6 +364,9 @@ public: */ static kwsys_stl::string JoinPath( const kwsys_stl::vector<kwsys_stl::string>& components); + static kwsys_stl::string JoinPath( + kwsys_stl::vector<kwsys_stl::string>::const_iterator first, + kwsys_stl::vector<kwsys_stl::string>::const_iterator last); /** * Compare a path or components of a path. -- GitLab