aboutsummaryrefslogtreecommitdiff
path: root/toolsrc/src/vcpkg_Strings.cpp
diff options
context:
space:
mode:
authorThomas Fussell <thomas.fussell@gmail.com>2017-01-01 18:28:56 -0500
committerThomas Fussell <thomas.fussell@gmail.com>2017-01-01 18:28:56 -0500
commit32dd084deadecd726172b85239c30bbbf683f62b (patch)
tree492044fa3bce12e930d6c565d92095d71fac68e5 /toolsrc/src/vcpkg_Strings.cpp
parent937c246ac2aa6ec11a02d0cb36a4e50919842c8a (diff)
parentbc8cca82a297e37bf9dde387991c1d51618273b7 (diff)
downloadvcpkg-32dd084deadecd726172b85239c30bbbf683f62b.tar.gz
vcpkg-32dd084deadecd726172b85239c30bbbf683f62b.zip
Merge branch 'master' of http://github.com/Microsoft/vcpkg
Diffstat (limited to 'toolsrc/src/vcpkg_Strings.cpp')
-rw-r--r--toolsrc/src/vcpkg_Strings.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/toolsrc/src/vcpkg_Strings.cpp b/toolsrc/src/vcpkg_Strings.cpp
index 19ba8595f..46a4b1855 100644
--- a/toolsrc/src/vcpkg_Strings.cpp
+++ b/toolsrc/src/vcpkg_Strings.cpp
@@ -4,9 +4,17 @@
#include <algorithm>
#include <codecvt>
#include <iterator>
+#include <functional>
+#include <cctype>
namespace vcpkg {namespace Strings {namespace details
{
+ // To disambiguate between two overloads
+ static const auto isspace = [](const char c)
+ {
+ return std::isspace(c);
+ };
+
std::string format_internal(const char* fmtstr, ...)
{
va_list lst;
@@ -85,4 +93,30 @@ namespace vcpkg {namespace Strings
return output;
}
+
+ void trim(std::string* s)
+ {
+ s->erase(std::find_if_not(s->rbegin(), s->rend(), details::isspace).base(), s->end());
+ s->erase(s->begin(), std::find_if_not(s->begin(), s->end(), details::isspace));
+ }
+
+ std::string trimmed(const std::string& s)
+ {
+ auto whitespace_back = std::find_if_not(s.rbegin(), s.rend(), details::isspace).base();
+ auto whitespace_front = std::find_if_not(s.begin(), whitespace_back, details::isspace);
+ return std::string(whitespace_front, whitespace_back);
+ }
+
+ void trim_all_and_remove_whitespace_strings(std::vector<std::string>* strings)
+ {
+ for (std::string& s : *strings)
+ {
+ trim(&s);
+ }
+
+ strings->erase(std::remove_if(strings->begin(), strings->end(), [](const std::string& s)-> bool
+ {
+ return s == "";
+ }), strings->end());
+ }
}}