5 #include <boost/lexical_cast.hpp>
6 #include <boost/algorithm/string.hpp>
13 class param_comparer {
14 const std::wstring& lhs;
16 explicit param_comparer(const std::wstring& p) : lhs(p) {}
17 bool operator()(const std::wstring& rhs) { return boost::iequals(lhs, rhs); }
21 bool contains_param(const std::wstring& name, C&& params)
23 return std::find_if(params.begin(), params.end(), param_comparer(name)) != params.end();
26 template<typename T, typename C>
27 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())
29 auto it = std::find_if(std::begin(params), std::end(params), param_comparer(name));
30 //auto it = std::find(std::begin(params), std::end(params), name);
31 if(it == params.end())
36 if(++it == params.end())
37 throw std::out_of_range("");
39 return boost::lexical_cast<std::decay<T>::type>(*it);
43 CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception()));
48 std::wstring get_param(const std::wstring& name, C&& params, const std::wstring& fail_value = L"")
50 auto it = std::find_if(std::begin(params), std::end(params), param_comparer(name));
51 //auto it = std::find(std::begin(params), std::end(params), name);
52 if(it == params.end())
57 if(++it == params.end())
58 throw std::out_of_range("");
64 CASPAR_THROW_EXCEPTION(invalid_argument() << msg_info("Failed to parse param.") << arg_name_info(name) << nested_exception(std::current_exception()));