Browse Source

KWSys 2017-05-31 (bd0bbad7)

Code extracted from:

    https://gitlab.kitware.com/utils/kwsys.git

at commit bd0bbad7f47776565d87aeb3657250974a426190 (master).

Upstream Shortlog
-----------------

Daniel Pfeifer (1):
      0f7ec930 Pass std::string as const&

Matteo Settenvini (1):
      6173f4b3 SystemTools: Add function to remove empty path components
KWSys Upstream 8 years ago
parent
commit
50988f6d76
4 changed files with 22 additions and 4 deletions
  1. 2 1
      SystemInformation.cxx
  2. 11 0
      SystemTools.cxx
  3. 4 0
      SystemTools.hxx.in
  4. 5 3
      testSystemTools.cxx

+ 2 - 1
SystemInformation.cxx

@@ -918,7 +918,8 @@ int LoadLines(const char* fileName, std::vector<std::string>& lines)
 
 // ****************************************************************************
 template <typename T>
-int NameValue(std::vector<std::string>& lines, std::string name, T& value)
+int NameValue(std::vector<std::string> const& lines, std::string const& name,
+              T& value)
 {
   size_t nLines = lines.size();
   for (size_t i = 0; i < nLines; ++i) {

+ 11 - 0
SystemTools.cxx

@@ -22,6 +22,7 @@
 #include KWSYS_HEADER(FStream.hxx)
 #include KWSYS_HEADER(Encoding.hxx)
 
+#include <algorithm>
 #include <fstream>
 #include <iostream>
 #include <set>
@@ -3708,6 +3709,16 @@ std::string SystemTools::JoinPath(
   return result;
 }
 
+void SystemTools::RemoveEmptyPathElements(std::vector<std::string>& path)
+{
+  if (path.empty()) {
+    return;
+  }
+
+  path.erase(std::remove(path.begin() + 1, path.end(), std::string("")),
+             path.end());
+}
+
 bool SystemTools::ComparePath(const std::string& c1, const std::string& c2)
 {
 #if defined(_WIN32) || defined(__APPLE__)

+ 4 - 0
SystemTools.hxx.in

@@ -474,6 +474,10 @@ public:
   static std::string JoinPath(std::vector<std::string>::const_iterator first,
                               std::vector<std::string>::const_iterator last);
 
+  /** Removes empty components from path.
+   */
+  static void RemoveEmptyPathElements(std::vector<std::string>& path);
+
   /**
    * Compare a path or components of a path.
    */

+ 5 - 3
testSystemTools.cxx

@@ -54,7 +54,8 @@ static const char* toUnixPaths[][2] = {
   { 0, 0 }
 };
 
-static bool CheckConvertToUnixSlashes(std::string input, std::string output)
+static bool CheckConvertToUnixSlashes(std::string const& input,
+                                      std::string const& output)
 {
   std::string result = input;
   kwsys::SystemTools::ConvertToUnixSlashes(result);
@@ -71,8 +72,9 @@ static const char* checkEscapeChars[][4] = { { "1 foo 2 bar 2", "12", "\\",
                                              { " {} ", "{}", "#", " #{#} " },
                                              { 0, 0, 0, 0 } };
 
-static bool CheckEscapeChars(std::string input, const char* chars_to_escape,
-                             char escape_char, std::string output)
+static bool CheckEscapeChars(std::string const& input,
+                             const char* chars_to_escape, char escape_char,
+                             std::string const& output)
 {
   std::string result = kwsys::SystemTools::EscapeChars(
     input.c_str(), chars_to_escape, escape_char);