+template<typename C>
+bool get_and_consume_flag(const std::wstring& flag_param, C& params)
+{
+ auto flag_it = std::find_if(params.begin(), params.end(), param_comparer(flag_param));
+ bool flag = false;
+
+ if (flag_it != params.end())
+ {
+ flag = true;
+ params.erase(flag_it);
+ }
+
+ return flag;
+}
+
+template<typename C>
+void replace_placeholders(const std::wstring& placeholder, const std::wstring& replacement, C&& params)
+{
+ for (auto& param : params)
+ boost::ireplace_all(param, placeholder, replacement);
+}
+
+static std::vector<std::wstring> protocol_split(const std::wstring& s)
+{
+ std::vector<std::wstring> result;
+ size_t pos;
+
+ if ((pos = s.find(L"://")) != std::wstring::npos)
+ {
+ result.push_back(s.substr(0, pos));
+ result.push_back(s.substr(pos + 3));
+ }
+ else
+ {
+ result.push_back(L"");
+ result.push_back(s);
+ }
+
+ return result;
+}
+