Index: src/shared/Utils.h |
=================================================================== |
--- a/src/shared/Utils.h |
+++ b/src/shared/Utils.h |
@@ -23,6 +23,7 @@ |
#include <functional> |
#include <string> |
#include <vector> |
+#include <wtypes.h> |
#define WM_ALREADY_UP_TO_DATE WM_APP+1 |
#define WM_UPDATE_CHECK_ERROR WM_APP+2 |
@@ -51,6 +52,7 @@ |
bool IsWindowsVistaOrLater(); |
bool IsWindows8OrLater(); |
+std::wstring ToWstring(const BSTR b); |
std::string ToUtf8String(const std::wstring& str); |
std::wstring ToUtf16String(const std::string& str); |
std::vector<std::wstring> ToUtf16Strings(const std::vector<std::string>& value); |
@@ -67,15 +69,55 @@ |
std::wstring GetQueryString(const std::wstring& url); |
+/* |
+ * The method used below for trimming strings is taken from here: |
+ * http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring |
+ */ |
+template<class C> |
+bool isNotWhitespace(C x) |
+{ |
+ return !std::isspace(x, std::locale::classic()); |
+}; |
+ |
+template<class T> |
+void TrimStringInPlaceLeft(T& text) |
+{ |
+ text.erase(text.begin(), std::find_if(text.begin(), text.end(), isNotWhitespace<T::value_type>)); |
+} |
+ |
+template<class T> |
+void TrimStringInPlaceRight(T& text) |
+{ |
+ text.erase(std::find_if(text.rbegin(), text.rend(), isNotWhitespace<T::value_type>).base(), text.end()); |
+} |
+ |
+template<class T> |
+void TrimStringInPlace(T& text) |
+{ |
+ TrimStringInPlaceRight(text); |
+ TrimStringInPlaceLeft(text); |
+} |
+ |
+template<class T> |
+T TrimStringLeft(T text) |
+{ |
+ TrimStringInPlaceLeft(text); |
+ return text; |
+} |
+ |
+template<class T> |
+T TrimStringRight(T text) |
+{ |
+ TrimStringInPlaceRight(text); |
+ return text; |
+} |
+ |
template<class T> |
T TrimString(T text) |
{ |
- // Via http://stackoverflow.com/questions/216823/whats-the-best-way-to-trim-stdstring |
- T trimmed(text); |
- std::function<bool(T::value_type)> isspace = std::bind(&std::isspace<T::value_type>, std::placeholders::_1, std::locale::classic()); |
- trimmed.erase(trimmed.begin(), std::find_if(trimmed.begin(), trimmed.end(), std::not1(isspace))); |
- trimmed.erase(std::find_if(trimmed.rbegin(), trimmed.rend(), std::not1(isspace)).base(), trimmed.end()); |
- return trimmed; |
+ TrimStringInPlaceRight(text); |
+ TrimStringInPlaceLeft(text); |
+ return text; |
} |
#endif // UTILS_H |