Forráskód Böngészése

cmStringAlgorithms: Add cmStripWhitespace

Add a utility function to strip whitespace from a `string_view`. This is
identical to the existing `cmTrimWhitespace`, but does not allocate a
new `string`, instead returning the result as another `string_view`.
Matthew Woehlke 2 hónapja
szülő
commit
1ec7201558
2 módosított fájl, 24 hozzáadás és 0 törlés
  1. 18 0
      Source/cmStringAlgorithms.cxx
  2. 6 0
      Source/cmStringAlgorithms.h

+ 18 - 0
Source/cmStringAlgorithms.cxx

@@ -38,6 +38,24 @@ std::string cmTrimWhitespace(cm::string_view str)
   return std::string(start, stop + 1);
   return std::string(start, stop + 1);
 }
 }
 
 
+cm::string_view cmStripWhitespace(cm::string_view str)
+{
+  std::string::size_type const l = str.size();
+
+  std::string::size_type s = 0;
+  while (s < l && cmIsSpace(str[s])) {
+    ++s;
+  }
+  if (s == l) {
+    return cm::string_view{};
+  }
+  std::string::size_type e = l - 1;
+  while (cmIsSpace(str[e])) {
+    --e;
+  }
+  return str.substr(s, e + 1 - s);
+}
+
 std::string cmRemoveQuotes(cm::string_view str)
 std::string cmRemoveQuotes(cm::string_view str)
 {
 {
   // We process only strings that have two quotes at least.
   // We process only strings that have two quotes at least.

+ 6 - 0
Source/cmStringAlgorithms.h

@@ -62,6 +62,12 @@ inline bool cmIsSpace(char ch)
 /** Returns a string that has whitespace removed from the start and the end. */
 /** Returns a string that has whitespace removed from the start and the end. */
 std::string cmTrimWhitespace(cm::string_view str);
 std::string cmTrimWhitespace(cm::string_view str);
 
 
+/**
+ * Returns a string view that has whitespace removed from the start and the
+ * end.
+ */
+cm::string_view cmStripWhitespace(cm::string_view str);
+
 /** Returns a string that has quotes removed from the start and the end. */
 /** Returns a string that has quotes removed from the start and the end. */
 std::string cmRemoveQuotes(cm::string_view str);
 std::string cmRemoveQuotes(cm::string_view str);