]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - src/util/string.h
Random misc. warning fixes and cleanups
[dragonfireclient.git] / src / util / string.h
index 40ef3e4d3700877df0f3d6bd9d98e0febe1e81f4..8f4ef4711ddd25e5363c11ae44521686e7798a15 100644 (file)
@@ -77,8 +77,8 @@ wchar_t *narrow_to_wide_c(const char *str);
 std::wstring narrow_to_wide(const std::string &mbs);
 std::string wide_to_narrow(const std::wstring &wcs);
 
-std::string urlencode(std::string str);
-std::string urldecode(std::string str);
+std::string urlencode(const std::string &str);
+std::string urldecode(const std::string &str);
 u32 readFlagString(std::string str, const FlagDesc *flagdesc, u32 *flagmask);
 std::string writeFlagString(u32 flags, const FlagDesc *flagdesc, u32 flagmask);
 size_t mystrlcpy(char *dst, const char *src, size_t size);
@@ -519,6 +519,38 @@ std::basic_string<T> unescape_enriched(const std::basic_string<T> &s)
        return output;
 }
 
+template <typename T>
+std::vector<std::basic_string<T> > split(const std::basic_string<T> &s, T delim)
+{
+       std::vector<std::basic_string<T> > tokens;
+
+       std::basic_string<T> current;
+       bool last_was_escape = false;
+       for (size_t i = 0; i < s.length(); i++) {
+               T si = s[i];
+               if (last_was_escape) {
+                       current += '\\';
+                       current += si;
+                       last_was_escape = false;
+               } else {
+                       if (si == delim) {
+                               tokens.push_back(current);
+                               current = std::basic_string<T>();
+                               last_was_escape = false;
+                       } else if (si == '\\') {
+                               last_was_escape = true;
+                       } else {
+                               current += si;
+                               last_was_escape = false;
+                       }
+               }
+       }
+       //push last element
+       tokens.push_back(current);
+
+       return tokens;
+}
+
 /**
  * Checks that all characters in \p to_check are a decimal digits.
  *