5 #include <boost/lexical_cast.hpp>
6 #include <boost/algorithm/string.hpp>
15 const std::wstring& lhs;
17 explicit param_comparer(const std::wstring& p) : lhs(p) {}
18 bool operator()(const std::wstring& rhs) { return boost::iequals(lhs, rhs); }
22 bool contains_param(const std::wstring& name, C&& params)
24 return std::find_if(params.begin(), params.end(), param_comparer(name)) != params.end();
28 bool get_and_consume_flag(const std::wstring& flag_param, C& params)
30 auto flag_it = std::find_if(params.begin(), params.end(), param_comparer(flag_param));
33 if (flag_it != params.end())
36 params.erase(flag_it);
43 void replace_placeholders(const std::wstring& placeholder, const std::wstring& replacement, C&& params)
45 for (auto& param : params)
46 boost::ireplace_all(param, placeholder, replacement);
49 static std::vector<std::wstring> protocol_split(const std::wstring& s)
51 std::vector<std::wstring> result;
54 if ((pos = s.find(L"://")) != std::wstring::npos)
56 result.push_back(s.substr(0, pos));
57 result.push_back(s.substr(pos + 3));
61 result.push_back(L"");
68 template<typename T, typename C>
69 typename std::enable_if<!std::is_convertible<T, std::wstring>::value, typename std::decay<T>::type>::type get_param(const std::wstring& name, C&& params, T fail_value = T())
71 auto it = std::find_if(std::begin(params), std::end(params), param_comparer(name));
72 if(it == params.end())
77 if(++it == params.end())
78 throw std::out_of_range("");
80 return boost::lexical_cast<typename std::decay<T>::type>(*it);
84 CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Failed to parse param " + name) << nested_exception(std::current_exception()));
89 std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"")
91 auto it = std::find_if(std::begin(params), std::end(params), param_comparer(name));
92 if(it == params.end())
97 if(++it == params.end())
98 throw std::out_of_range("");
104 CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Failed to parse param " + name) << nested_exception(std::current_exception()));