From d2c8070f87a6b9fa8654ba4f59f224a5a314d7f0 Mon Sep 17 00:00:00 2001
From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz>
Date: Fri, 8 Dec 2017 18:08:16 +0100
Subject: [PATCH] add string trim free function

---
 alib2std/src/extensions/string.hpp | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/alib2std/src/extensions/string.hpp b/alib2std/src/extensions/string.hpp
index 445acbe051..7f10119228 100644
--- a/alib2std/src/extensions/string.hpp
+++ b/alib2std/src/extensions/string.hpp
@@ -12,6 +12,7 @@
 #include <stdexcept>
 #include "compare.hpp"
 #include "vector.hpp"
+#include <algorithm>
 
 namespace ext {
 
@@ -125,6 +126,27 @@ ext::vector < std::string > explode ( const std::string & source, const std::str
 
 std::string implode ( const std::vector < std::string > & source, const std::string & delimiter );
 
+inline bool not_isspace ( int ch ) {
+	return ! std::isspace ( ch );
+}
+
+inline void ltrim ( std::string & s ) {
+	auto end = std::find_if ( s.begin ( ), s.end ( ), not_isspace );
+	s.erase ( s.begin ( ), end );
+}
+
+// trim from end (in place)
+inline void rtrim ( std::string & s ) {
+	auto begin = std::find_if ( s.rbegin ( ), s.rend ( ), not_isspace ).base ( );
+	s.erase ( begin, s.end ( ) );
+}
+
+// trim from both ends (in place)
+inline void trim ( std::string & s ) {
+	ltrim(s);
+	rtrim(s);
+}
+
 } /* namespace ext */
 
 #endif /* __STRING_HPP_ */
-- 
GitLab