Add some utility functions for joining strings
authorMikko Rasa <tdb@tdb.fi>
Thu, 4 Mar 2021 10:26:25 +0000 (12:26 +0200)
committerMikko Rasa <tdb@tdb.fi>
Thu, 4 Mar 2021 10:26:25 +0000 (12:26 +0200)
source/strings/utils.cpp
source/strings/utils.h

index 416188ec3d574e71caaecf2fa4353eaff8f67564..80e59f07a6cb5802eb741aa870a0498e2308fea0 100644 (file)
@@ -130,6 +130,20 @@ string strip(const string &s)
        return result;
 }
 
+string &append(string &str, const string &sep, const string &other)
+{
+       if(!str.empty() && !other.empty())
+               str += sep;
+       str += other;
+       return str;
+}
+
+string join(const string &str1, const string &sep, const string &str2)
+{
+       string result = str1;
+       return append(result, sep, str2);
+}
+
 string c_unescape(const std::string &str)
 {
        bool escape = false;
index 2040bcd36fae3fa7f947709045db9e6624afd5fe..f7e9433fd2d07a3e7496e7e7735af77d5dfff4c0 100644 (file)
@@ -56,17 +56,19 @@ std::vector<std::string> split_fields(const std::string &str, const std::string
 separators will cause an empty string to be placed in the result. */
 std::vector<std::string> split_fields(const std::string &str, char sep, int max_split = -1);
 
+/** Appends a string to another, using a separator if both are non-empty. */
+std::string &append(std::string &str, const std::string &sep, const std::string &other);
+
+/** Joins two strings, using a separator if both are non-empty. */
+std::string join(const std::string &str1, const std::string &sep, const std::string &str2);
+
 /** Concatenates strings from an iterator range. */
 template<typename Iter>
 std::string join(Iter begin, Iter end, const std::string &sep = " ")
 {
        std::string result;
        for(Iter i=begin; i!=end; ++i)
-       {
-               if(i!=begin)
-                       result += sep;
-               result += *i;
-       }
+               append(result, sep, *i);
 
        return result;
 }