X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=common%2Fparam.h;h=2a0f63224b81277d30f8ad909c8744fd76e42265;hb=726897adbf881d3b75f171fff24f2b917ba5f05a;hp=9429536cf1bf06375d38d4b01f210c775928f40d;hpb=8c61df76c4b35ab58316f35b6a09a3f977efd596;p=casparcg diff --git a/common/param.h b/common/param.h index 9429536cf..2a0f63224 100644 --- a/common/param.h +++ b/common/param.h @@ -3,16 +3,57 @@ #include "except.h" #include +#include #include #include namespace caspar { - + +class param_comparer +{ + const std::wstring& lhs; +public: + explicit param_comparer(const std::wstring& p) : lhs(p) {} + bool operator()(const std::wstring& rhs) { return boost::iequals(lhs, rhs); } +}; + +template +bool contains_param(const std::wstring& name, C&& params) +{ + return std::find_if(params.begin(), params.end(), param_comparer(name)) != params.end(); +} + +template +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 protocol_split(const std::wstring& s) +{ + std::vector 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; +} + template typename std::enable_if::value, typename std::decay::type>::type get_param(const std::wstring& name, C&& params, T fail_value = T()) { - auto it = std::find(std::begin(params), std::end(params), name); + auto it = std::find_if(std::begin(params), std::end(params), param_comparer(name)); if(it == params.end()) return fail_value; @@ -21,18 +62,18 @@ typename std::enable_if::value, typename s if(++it == params.end()) throw std::out_of_range(""); - return boost::lexical_cast::type>(*it); + return boost::lexical_cast::type>(*it); } catch(...) { - CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception())); + CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Failed to parse param " + name) << nested_exception(std::current_exception())); } } template std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"") { - auto it = std::find(std::begin(params), std::end(params), name); + auto it = std::find_if(std::begin(params), std::end(params), param_comparer(name)); if(it == params.end()) return fail_value; @@ -45,8 +86,8 @@ std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& } catch(...) { - CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception())); + CASPAR_THROW_EXCEPTION(user_error() << msg_info(L"Failed to parse param " + name) << nested_exception(std::current_exception())); } } -} \ No newline at end of file +}