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